Язык программирования общего назначения это

Предметно-ориентированный язык (англ. domain-specific language , DSL — «язык, специфический для предметной области») — язык программирования [ источник не указан 1327 дней ] , специализированный для конкретной области применения (в противоположность языку общего назначения [en] , применимому к широкому спектру областей и не учитывающему особенности конкретных сфер знаний). Построение такого языка и/или его структура данных отражают специфику решаемых с его помощью задач [1] . Является ключевым понятием языково-ориентированного программирования.

Строго говоря, деление языков программирования на языки общего назначения и предметно-ориентированные весьма условно, особенно, если учесть, что формально любой протокол или формат файлов является языком. Существует масса языков общего назначения, применяемых в качестве предметно-ориентированных для определённых задач, и наоборот, предметно-ориентированных языков, применяемых в качестве языков общего назначения. Так, язык ML, породивший целое семейство языков общего назначения (включая Haskell), — изначально разрабатывался в качестве DSL для системы автоматического доказательства теорем LCF [en] . Примером, показывающим условность классификации, служит язык БНФ (и компилятор с него Lex/Yacc): с одной стороны, это яркий пример метаязыка, с другой — он предназначен для одной конкретной задачи.

Содержание

Терминология [ править | править код ]

Простейшие предметно-ориентированные языки, используемые в одном конкретном приложении, часто называют «мини-языками» [2] .

Мартин Уорд (англ. Martin Ward ) [3] в работе «Language Oriented Programming» [4] (которая считается отправной точкой развития ЯОП), использовал термины « problem oriented » и « domain oriented », но в англоязычном научном сообществе прижился термин « domain-specific », причём именно « domain-specific language », а не « domain-specific programming language ». В русскоязычной литературе по программированию встречаются варианты «доменно-специфичный», «проблемно-ориентированный», «предметно-ориентированный».

Фаулер [5] и Дмитриев [6] определяют понятие DSL как «урезанный язык программирования (в большинстве случаев неполный по Тьюрингу)».

Примеры [ править | править код ]

Ведущие исследователи языково-ориентированного программирования (Мартин Уорд, Пол Хьюдак [en] , Валид Таха и другие) приводят следующие примеры предметно-специфичных языков в качестве классических [4] [7] [8] :

  • TeX/LaTeX для подготовки (компьютерной вёрстки) текстовых документов;
  • Perl для манипулирования текстами;
  • SQL для СУБД;
  • Tcl/Tk для графического интерфейса пользователя;
  • HTML и SGML для разметки документов;
  • Verilog и VHDL для описания аппаратного обеспечения;
  • Mathematica и Maple для символьных вычислений;
  • AutoLisp для компьютерного моделирования (САПР);
  • Prolog для задач, сформулированных в терминах исчисления предикатов;
  • ML и Haskell для задач, сформулированных в терминах функций (Haskell временами определяется как DSL для денотационной семантики[en] ).

По мнению Валида Тахи, с позиции ЯОП Microsoft Excel оказывается едва ли не наиболее широко применяемым в мире языком программирования [8] .

Другими примерами предметно-ориентированных языков служат языки управления базами данных (помимо SQL здесь, к примеру, можно назвать язык FoxPro), командные языки операционных систем (языки интерактивной командной оболочки, прежде всего Unix Shell, языки пакетных заданий, такие как язык JCL и др.) [9] , неполные по Тьюрингу языки структурирования данных (XML, .ini, .conf), язык вики-разметки, языки моделирования (UML, GPSS), Erlang для многопользовательских серверов, функционирующих в бесперебойном режиме.

Существуют языки программирования, встроенные в систему управления ресурсами предприятия (язык ABAP в SAP/R3, языки систем Галактика, Парус, 1С, Инфо-Бухгалтер) [ источник не указан 1441 день ] и применяемые для их дополнения специфичными для конкретной организации модулями. Использование встроенного языка упрощает программирование специфичных задач, поскольку в языке изначально присутствуют понятия предметной области. Некоторые [ какие? ] геоинформационные системы и САПР также имеют встроенные языки программирования.

Встраиваемые языки [ править | править код ]

Временами компьютерные языки реализуются зависимым образом, то есть «внутри» транслируемого языка, без которого эти языки не только не способны исполняться, но и зачастую не образуют целостную символьную систему и не обладают Тьюринг-полнотой. Такие языки называются «встраиваемыми предметно-специфичными языками» (англ. embedded DSL , EDSL ; иногда DSEL ) или просто «встраиваемыми языками» ( embedded language ) [7] [10] , а также «языками, реализованными поверх или на основе данного языка».

Текстовые языки [ править | править код ]

В дополнение к традиционному делению языков на интерпретируемые и компилируемые, встраиваемые языки вводят ещё несколько видов реализации языка:

  • чистое встраивание [7] ;
  • использование макросредств языка (и нередко отождествление их с термином «метапрограммирование»), которое, в свою очередь, подразделяется на [11] :
  • многостадийные вычисления (англ. multistage computations );
  • квазицитирование (известное из языка Lisp);
  • использование шаблонов.

С другой стороны, можно рассматривать реализацию встраиваемого языка как «реализацию без трансляции», подразумевая, что DSL будет являться синтаксическим и семантическим подмножеством языка, в который он встраивается [11] .

Язык, используемый в качестве базового для реализации другого, часто называют метаязыком.

Основных причин для разработки встраиваемых текстовых языков три:

  • ввод в исходный язык дополнительных возможностей, расширяющих спектр эффективно решаемых задач или синтаксически упрощающих решение часто встречаемых задач;
  • интенсивное повторное использование компонентов транслятора базового языка: парсера, механизма типизации, реализации тривиальных вещей (таких как арифметика чисел), оптимизатора и др. Это обеспечивает кратное снижение трудоёмкости реализации придуманного языка, а также высокий уровень качества реализации при использовании безопасного языка в качестве базового;
  • получение возможности эффективно смешивать свойства разных самостоятельных языков в единых фрагментах кода, формируя мультипарадигменный язык широкого профиля, исключая необходимость межъязыкового взаимодействия[en] и расширяя возможности оптимизации.
Читайте также:  Как настроить четкость на телевизоре самсунг

Наиболее частыми примерами языков первой группы могут служить реализации объектно-ориентированных возможностей в функциональных [12] или процедурных [13] языках, и классическим примером служит язык CLOS. Следует отметить, что термин «язык» здесь используется не всегда — временами говорят просто о «реализации в языке новых возможностей» или о «расширении языка подсистемой, нацеленной на решение определённых задач», и нет строго деления на «библиотеки» и «встраиваемые языки», так как формально любой API, протокол или структура данных может рассматриваться в качестве языка [14] . Так, например, неотъемлемой частью языка Lisp является встроенный не полный по Тьюрингу язык S-выражений.

Вторая группа встраиваемых языков наиболее полно представлена в сообществе языка Haskell, и потому сам Haskell временами определяют как «DSL для денотационной семантики» [7] . Примерами могут служить Elm и другие языки, представляющие функциональную реактивную парадигму, а также язык Curry. Временами также встречается похожее выражение в отношении Лиспа: «Lisp — это не язык, а среда для разработки языков». Примером языка, реализованного поверх Лиспа, может служить Qi [en] . Масса встраиваемых мини-языков реализована в языке OCaml посредством модуля CamlpX [en] компилятора. Язык Rebol также проектировался для программирования посредством интенсивной реализации встраиваемых мини-языков. В диалекте Лиспа Scheme посредством языка S-выражений реализован не полный по Тьюрингу язык SXML [en] , воплощающий протокол XML встраиваемым образом.

Встраиваемый язык может иметь самодостаточную полную по Тьюрингу семантику, но тем не менее вместо независимой реализации повторно использовать компоненты базового языка (третья группа, смешение первых двух). Ярким примером является язык Schelog [15] , реализующий семантику Пролога внутри диалекта Лиспа Scheme посредством продолжений, и превращающий Пролог из «самостоятельного» языка во встраиваемый. Традиционной учебной или «спортивной» задачей для многих функциональных языков служит реализация поверх рассматриваемого языка какого-либо другого, чаще всего языка логики предикатов первого порядка [16] .

В контексте метаязыков самостоятельные языки временами называют «языками первого класса» (по аналогии с сущностями первого класса в языках), а встраиваемые — «объектными языками».

В подавляющем большинстве случаев встраиваемые языки имеют лишь одну поддерживаемую реализацию, и различия в результирующем машинном представлении кода на них зависят лишь от используемого транслятора базового языка. Однако, бывают и исключения — например, язык Concurrent ML (CML), расширяющий Standard ML конструкциями для явного параллелизма, имеет две принципиально различные реализации.

Визуальные языки [ править | править код ]

Один из языков (базовый или встраиваемый) может быть визуальным, что нередко применяется в пользовательском программировании [en] (англ. end-user development ). Типичными примерами таких пар могут служить AutoLisp — AutoCAD и VBA — Microsoft Excel. Подобные пары образуют целостную интерактивную систему, и с точки зрения пользователя невозможно (и не нужно) определить, являются ли визуальные инструменты надстройкой, имитирующей команды встроенного текстового языка, или же текстовый язык управляет визуальными инструментами. Действительные взаимоотношения в этих парах определяются разработчиком.

В паре Emacs — Emacs Lisp отношения более определённые. Лисп традиционно относится к метаязыкам, и в данном случае текстовый редактор надстраивается над ним как визуальный DSL, что и делает последний изменяемым и расширяемым.

В случае, когда оба языка являются визуальными, встраиваемые языки обычно называют иными терминами — плагинами, фильтрами и др., и не используют терминологию языково-ориентированного программирования. Формально же можно говорить, например, что для визуального мета-языка обработки графики Adobe Photoshop есть множество встраиваемых визуальных мини-языков (см. Photoshop plugin [en] ).

Функциональные и логические языки программирования выглядят неестественно в визуальном окружении, так как функциональное программирование и логическое программирование в чистом виде запрещают побочные эффекты, и для взаимодействия с GUI; их концептуальную целостность приходится нарушать. С педагогической точки зрения считается желательным преподавание программирования с использованием консольных средств, чтобы сосредоточить внимание студентов на основах алгоритмизации, а не эргономики и тем более не процедурных навыков использования тех или иных >[17] .

Преимущества и недостатки [ править | править код ]

Преимущества и недостатки использования в конкретной задаче конкретного DSL вместо языка общего назначения определяются гораздо явственнее, чем преимущества и недостатки использования одного языка общего назначения вместо другого: в большинстве случаев уже разработанный DSL оказывается концептуально неприменим к одним задачам и даёт бесспорный выигрыш по большинству показателей качества в других, а некоторые подзадачи вообще остаются нерешёнными до разработки DSL [4] .

Таким образом, вопрос о преимуществах и недостатках корректнее ставить в свете применения языково-ориентированной методологии вместо какой-либо другой при изначальном отсутствии готового DSL, сопоставляя потенциальный выигрыш от его использования с затратами на его разработку и сопровождение.

Джава и питон интерпретируемые, кроссплатформенные, выполняющие JIT-компиляцию, работающие на Виртуальной машине, нет прямого доступа к железу, и по сути от того и медленный.
Питон перегоняет написаный скрипт в байт-код Ява.
Они в 3 раза медленнее чем С++. Имеют кучу финтифлюшек разных.

Читайте также:  Как перепрошить вай фай роутер ростелеком

Просто оч прогать, Если пофиг на производительность, и надо быстро сваранить фигнюшку, которая без проблем везде будит работать, то эт Ява или питон.

Если нада оптимизацию большую, сложные и хитрые операции с железом, быструю работу, то это С/С++

А теперь про языки:

C++ низкоуровневые программы, для критичных по скорости участков программы
Используется от программ для показа изображений до ОС

Python скриптовый язык, используется для написания прототипов или легких скриптов. Или для встраивания

Java код компилируется в байт-код, то есть промежуточный код, между программой и компьютером. Чтобы работала программа, нужна другая программа (интерпретатор), которая читает этот код и выполняет все действия.
Это интерпретируемые языки.

Представьте, вы читаете зарубежную литературу.
Читаете в оригинале — C/C++
Читаете перевод — Java, C#, Flash, Python

C++ программа зависима от той архитектуры компьютера и ОС для которой она создавалась. По этому если программа создана в Windows то она будет работать только в Windows. Это системный язык.

Интерпретируемые языки дают возможность писать программы для множеств устройств, ОС.
Главное чтобы программа-интерпретатор (как бы переводчик с языка байт-кода в язык машины) была на этом устройстве. Это главное преимущество языков — переносимость программы.

Так как у программы на C++ нет преграды в виде дополнительного кода, ибо компьютер выполняет программу сразу, то и соответственно программа работает очень быстро.
А у программы на Java например есть эта преграда, прежде чем выполнить задачу, нужно чтобы компьютер перевел её на свой язык.

Ещё лучшая аналогия для скорости
переговоры с иностранцами.
говоришь на их родном языке это C++
говоришь с переводчиков — Java и прочие.

Язык программирования — это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Языки программирования являются искусственными языками. От естественных языков они отличаются ограниченным числом “слов” и очень строгими правилами записи команд (операторов). Поэтому при применении их по назначению они не допускают свободного толкования выражений, характерного для естественного языка.

Basic. Он был разработан в 1963 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени. Язык предназначался для обучения программированию и получил широкое распространение в виде различных диалектов, прежде всего как язык для домашних компьютеров. При проектировании языка использовались следующие восемь принципов: 1.Быть простым в использовании для начинающих 2.Быть языком программирования общего назначения 3.Предоставлять возможность расширения функциональности, доступную опытным программистам 4.Быть интерактивным 5.Предоставлять ясные сообщения об ошибках 6.Быстро работать на небольших программах 7.Не требовать понимания работы аппаратного обеспечения 8.Защищать пользователя от операционной системы. Язык был основан частично на Фортран II и частично на Алгол-60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Синтаксис языка напоминает Fortran, и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования, ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. Объявление переменных не требует специальной секции (в отличие, например, от Паскаля). Объявление переменной — это первое её использование.

C Sharp — C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft.NET Framework. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Java, Delphi. С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от C++).

Язык программирования C++ —компилируемый статически типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования, но, в сравнении с его предшественником — языком Си, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «Си++» происходит от Си, в котором унарный оператор ++ обозначает инкремент переменной.В 1990-х годах язык стал одним из наиболее широко применяемых языков программирования общего назначения. При создании Си++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором Си++. Си++ имеет синтаксис, основанный на синтаксисе Си.

ДостоинстваC++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности: Высокая совместимость с языком С, позволяющая использовать весь существующий С-код (код С может быть с минимальными переделками скомпилирован компилятором С++; библиотеки, написанные на С, обычно могут быть вызваны из С++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на С, вызывать код, написанный на С++). Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщенное программирование, метапрограммирование (шаблоны, макросы). Имеется возможность работы на низком уровне с памятью, адресами, портами. Возможность создания обобщённых контейнеров и алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны. Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем. Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. НедостаткиОтчасти недостатки C++ унаследованы от языка-предка — Си, — и вызваны изначально заданным требованием возможно большей совместимости с Си. Это такие недостатки, как: Синтаксис, провоцирующий ошибки: Препроцессор, унаследованный от С, очень примитивен. Плохая поддержка модульности (по сути, в классическом Си модульность на уровне языка отсутствует, её обеспечение переложено на компоновщик). Подключение интерфейса внешнего модуля через препроцессорную вставку заголовочного файла (#include) серьёзно замедляет компиляцию при подключении большого количества модулей (потому что результирующий файл, который обрабатывается компилятором, оказывается очень велик).

Читайте также:  Установить алису на телефон windows phone

Паскаль. Появившийся в 1972 году язык Паскаль был назван так в честь великого французского математика XVII века, изобретателя первой в мире арифметической машины Блеза Паскаля. Этот язык был создан швейцарским учёным, специалистом в области информатики Никлаусом Виртом как язык для обучения методам программирования. Паскаль – это язык программирования общего назначения. Особенностями языка являются строгая типизация и наличие средств структурного(процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис интуитивно понятен даже при первом знакомстве с языком. Язык Паскаль учит не только тому, как правильно написать программу, но и тому, как правильно разработать метод решения задачи, подобрать способы представления и организации данных, используемых в задаче. С 1983 года языкПаскаль введён в учебные курсы информатики средних школ США.

Язык программирования Delphi (Дельфи) — среда разработки, использует язык программирования Delphi (начиная с 7 версии язык в среде именуется Delphi, ранее — Object Pascal), разработанный фирмой Borland и изначально реализованный в её пакете Borland Delphi, от которого и получил в 2003 году своё нынешнее название. Object Pascal — по сути является наследником языка Pascal с объектно-ориентированными расширениями. Delphi обеспечивает визуальное проектирование пользовательского интерфейса, имеет развитый объектно-ориентированный язык Object Pascal (позже переименованный в Delphi) и уникальные по своей простоте и мощи средства доступа к базам данных. Язык Delphi по возможностям значительно превзошел язык Basic и даже в чем-то язык C++, но при этом он оказался весьма надежным и легким в изучении (особенно в сравнении с языком C++). В результате, среда Delphi позволила программистам легко создавать собственные компоненты и строить из них профессиональные программы.

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems — 23 мая 1995 года. Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор. Достоинство подобного способа выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. В последнее время был внесен ряд усовершенствований, которые несколько увеличили скорость выполнения программ на Java: применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде, широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках, аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Основные возможности:автоматическое управление памятью; расширенные возможности обработки исключительных ситуаций; богатый набор средств фильтрации ввода/вывода; набор стандартных коллекций, таких как массив, список, стек и т. п.; наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI); встроенные в язык средства создания многопоточных приложений; параллельное выполнение программ.

Таким образом, в наше время существует множество языков, и у каждого из них свои особенности.

Не нашли то, что искали? Воспользуйтесь поиском:

Оцените статью
Добавить комментарий

Adblock
detector