Списки языков программирования |
---|
|
Это список известных языков программирования , сгруппированных по типу.
Группы перекрываются, а не являются взаимоисключающими. Язык может быть указан в нескольких группах.
Агентно-ориентированное программирование позволяет разработчику создавать, расширять и использовать программные агенты , которые представляют собой абстракции объектов, способные обмениваться сообщениями с другими агентами.
Языки программирования массивов (также называемые векторными или многомерными ) обобщают операции над скалярами для прозрачного применения к векторам , матрицам и многомерным массивам .
Аспектно-ориентированное программирование позволяет разработчикам добавлять в код новые функции, известные как «советы», не изменяя сам код; вместо этого оно использует pointcut для внедрения советов в блоки кода.
Языки ассемблера напрямую соответствуют машинному языку (см. ниже), поэтому инструкции машинного кода отображаются в форме, понятной человеку, хотя между отдельным оператором и отдельной инструкцией может не быть однозначного соответствия. Языки ассемблера позволяют программистам использовать символические адреса, которые ассемблер преобразует в абсолютные или перемещаемые адреса. Большинство ассемблеров также поддерживают макросы и символические константы .
Язык программирования — это язык программирования, разработанный для использования неспециалистами в области компьютеров с целью легкого создания учебных пособий, веб-сайтов и других интерактивных компьютерных программ.
Языки интерфейса командной строки (CLI) также называются пакетными языками или языками управления заданиями. Примеры:
Это языки, которые обычно обрабатываются компиляторами , хотя теоретически любой язык может быть скомпилирован или интерпретирован.
Конкатенативное программирование — это язык программирования без точек , в котором все выражения обозначают функции , а сопоставление выражений обозначает композицию функций . [4] Конкатенативное программирование заменяет применение функций , которое распространено в других стилях программирования, на композицию функций как способ по умолчанию для построения подпрограмм .
Языки передачи сообщений предоставляют языковые конструкции для параллелизма . Преобладающей парадигмой параллелизма в основных языках, таких как Java, является параллелизм с разделяемой памятью . Параллельные языки, которые используют передачу сообщений, обычно были вдохновлены исчислениями процессов, такими как последовательные процессы взаимодействия (CSP) или π-исчисление .
Язык программирования ограничений — это декларативный язык программирования , в котором отношения между переменными выражаются как ограничения . Выполнение продолжается путем попытки найти значения для переменных, которые удовлетворяют всем объявленным ограничениям.
Язык фигурных скобок или фигурных скобок имеет синтаксис, который определяет блок как операторы между фигурными скобками, также известными как фигурные скобки,{}
. Этот синтаксис возник в BCPL (1966) и был популяризирован C . Многие языки фигурных скобок произошли от C или находятся под его сильным влиянием . Примеры:
Языки программирования потоков данных опираются на (обычно визуальное) представление потока данных для задания программы. Часто используются для реагирования на дискретные события или для обработки потоков данных. Примеры языков потоков данных включают:
Языки, ориентированные на данные, предоставляют мощные способы поиска и управления отношениями, которые были описаны как таблицы отношений сущностей, которые отображают один набор вещей в другие наборы. [ необходима ссылка ] Примеры языков, ориентированных на данные, включают:
Таблицы решений можно использовать в качестве вспомогательного средства для прояснения логики перед написанием программы на любом языке, но в 1960-х годах был разработан ряд языков, в которых основная логика выражается непосредственно в форме таблицы решений, в том числе:
Декларативные языки выражают логику вычисления без подробного описания его потока управления. Декларативное программирование отличается от императивного программирования через императивные языки программирования, где поток управления задается последовательными приказами (императивами). (Чистые) функциональные и логические языки программирования также являются декларативными и составляют основные подкатегории декларативной категории. В этом разделе перечислены дополнительные примеры, не входящие в эти подкатегории.
Встраиваемые языки исходного кода встраивают небольшие фрагменты исполняемого кода в фрагмент текста свободной формы, часто в веб-страницу.
Встроенные языки на стороне клиента ограничены возможностями браузера или предполагаемого клиента. Они направлены на обеспечение динамизма веб-страниц без необходимости повторного обращения к серверу.
Встроенные на стороне сервера языки гораздо более гибкие, поскольку практически любой язык может быть встроен в сервер. Целью внедрения фрагментов серверного кода в веб-страницу является динамическая генерация дополнительной разметки; сам код исчезает при обслуживании страницы, заменяясь ее выводом.
Приведенные выше примеры специально предназначены для этой цели. Большое количество других языков, таких как Erlang , Scala , Perl , Ring и Ruby , могут быть адаптированы (например, путем превращения в модули Apache ).
В скомпилированный исполняемый код можно встроить широкий спектр динамических или скриптовых языков. По сути, объектный код для интерпретатора языка необходимо связать с исполняемым файлом. Затем фрагменты исходного кода для встроенного языка можно передать в функцию оценки в виде строк. Языки управления приложениями можно реализовать таким образом, если исходный код вводится пользователем. Предпочтительны языки с небольшими интерпретаторами.
Языки, разработанные в первую очередь для целей преподавания и изучения программирования.
Эзотерический язык программирования — это язык программирования, разработанный как проверка границ возможностей дизайна языков программирования, как доказательство концепции или как шутка.
Языки программирования расширений — это языки, встроенные в другую программу и используемые для использования ее возможностей в сценариях расширений.
Языки программирования четвертого поколения — это языки высокого уровня, построенные вокруг систем баз данных. Они обычно используются в коммерческих средах.
Функциональные языки программирования определяют программы и подпрограммы как математические функции и рассматривают их как первоклассные. Многие так называемые функциональные языки являются «нечистыми», содержащими императивные функции. Многие функциональные языки привязаны к математическим вычислительным инструментам. Функциональные языки включают:
В электронике язык описания оборудования (HDL) — это специализированный компьютерный язык, используемый для описания структуры, дизайна и работы электронных схем, и чаще всего цифровых логических схем. Две наиболее широко используемые и хорошо поддерживаемые разновидности HDL, используемые в промышленности, — это Verilog и VHDL . Языки описания оборудования включают:
Императивные языки программирования могут быть многопарадигмальными и появляться в других классификациях. Вот список языков программирования, которые следуют императивной парадигме :
Языки интерактивного режима, известные как REPL , действуют как своего рода оболочка: выражения или операторы можно вводить по одному, а результат их оценки можно видеть немедленно.
Интерпретируемые языки — это языки программирования, в которых программы могут быть выполнены из исходного кода интерпретатором. Теоретически любой язык может быть скомпилирован или интерпретирован, поэтому термин интерпретируемый язык обычно относится к языкам, которые обычно интерпретируются, а не компилируются.
Итеративные языки построены вокруг генераторов или предлагают их .
Сборка мусора (GC) — это форма автоматического управления памятью. Сборщик мусора пытается освободить память, которая была выделена программой, но больше не используется.
Этот раздел нуждается в расширении . Вы можете помочь, дополнив его. ( Ноябрь 2016 ) |
malloc
, realloc
, и free
из C, которые затем можно использовать в коде Python. [19]--mm:none
чтобы вручную освободить память. [21]save
и restore
. PostScript уровня 2 представил сборщик мусора, но его использование необязательно. [22]malloc
, realloc
, , free
) и выделение стека ( stackalloc
). [23]malloc
и free
. На платформах Apple эти функции импортируются из стандартной библиотеки C (которая импортируется из Foundation
, AppKit
или UIKit
); на Linux разработчику необходимо импортировать Glibc
, а ucrt
на Windows.Этот раздел нуждается в расширении . Вы можете помочь, дополнив его. ( Апрель 2018 ) |
Этот раздел нуждается в расширении . Вы можете помочь, дополнив его. ( Сентябрь 2018 ) |
Списковые языки — это тип языка структурированных данных, основанный на списочной структуре данных.
Малые языки [27] обслуживают специализированную проблемную область.
Логические языки определяют набор атрибутов, которыми должно обладать решение, а не набор шагов для получения решения.
Известные языки, следующие этой парадигме программирования :
Машинные языки напрямую исполняются центральным процессором компьютера. Обычно они формулируются как битовые шаблоны, обычно представленные в восьмеричном или шестнадцатеричном формате . Каждый битовый шаблон заставляет схемы в центральном процессоре выполнять одну из основных операций оборудования. Активация определенных электрических входов (например, выводы корпуса ЦП для микропроцессоров) и логические настройки для значений состояния ЦП управляют вычислениями процессора. Отдельные машинные языки специфичны для семейства процессоров; машинный код для одного семейства процессоров не может работать напрямую на процессорах другого семейства, если только процессоры не имеют дополнительного оборудования для его поддержки (например, процессоры DEC VAX включали режим совместимости с PDP-11). Они (по сути) всегда определяются разработчиком ЦП, а не третьими лицами. [b] Символическая версия, язык ассемблера процессора , также определяется разработчиком в большинстве случаев. Некоторые часто используемые наборы инструкций машинного кода :
Макроязыки преобразуют один файл исходного кода в другой. Макрос — это по сути короткий фрагмент текста, который расширяется в более длинный (не путать с гигиеническими макросами ), возможно, с подстановкой параметров. Они часто используются для предварительной обработки исходного кода. Препроцессоры также могут предоставлять такие возможности, как включение файлов .
Макроязыки могут быть ограничены действием на специально помеченных областях кода (с префиксом a #
в случае препроцессора C). В качестве альтернативы они могут и не быть таковыми, но в этом случае все равно часто нежелательно (например) расширять макрос, встроенный в строковый литерал , поэтому им все равно нужно элементарное понимание синтаксиса. В таком случае они часто все еще применимы к более чем одному языку. Сравните с встраиваемыми в исходный код языками, такими как PHP , которые полностью функциональны.
Языки сценариев, такие как Tcl и ECMAScript ( ActionScript , ECMAScript для XML , JavaScript , JScript ) были встроены в приложения. Иногда их называют «макроязыками», хотя в несколько ином смысле, чем макросы текстовой подстановки, такие как m4 .
Метапрограммирование — это написание программ, которые пишут или манипулируют другими программами, включая себя, как своими данными или которые выполняют часть работы, которая в противном случае выполняется во время выполнения во время компиляции . Во многих случаях это позволяет программистам сделать больше за то же время, которое им потребовалось бы для написания всего кода вручную.
Многопарадигмальные языки поддерживают более одной парадигмы программирования . Они позволяют программе использовать более одного стиля программирования . Цель состоит в том, чтобы позволить программистам использовать лучший инструмент для работы, признавая, что ни одна парадигма не решает все проблемы самым простым или эффективным способом.
Несколько языков программирования общего назначения, такие как C и Python , также используются для технических вычислений; в этом списке основное внимание уделяется языкам, которые используются почти исключительно для технических вычислений.
Объектно-ориентированные языки программирования на основе классов поддерживают объекты, определенные их классом. Определения классов включают данные членов. Передача сообщений является ключевой концепцией, если не главной концепцией, в объектно-ориентированных языках.
Полиморфные функции, параметризованные классом некоторых из их аргументов, обычно называются методами . В языках с одиночной диспетчеризацией классы обычно также включают определения методов. В языках с множественной диспетчеризацией методы определяются универсальными функциями . Существуют исключения, когда методы одиночной диспетчеризации являются универсальными функциями (например, система объектов Bigloo ).
Языки, основанные на прототипах, — это объектно-ориентированные языки, в которых устранено различие между классами и экземплярами:
Языки правил офсайда обозначают блоки кода по их отступам .
Процедурные языки программирования основаны на концепции единицы и области действия (диапазона просмотра данных) исполняемого оператора кода. Процедурная программа состоит из одной или нескольких единиц или модулей, либо закодированных пользователем, либо предоставленных в библиотеке кода; каждый модуль состоит из одной или нескольких процедур, также называемых функцией, процедурой, подпрограммой или методом, в зависимости от языка. Примеры процедурных языков включают:
Рефлексивные языки программирования позволяют программам проверять и, возможно, изменять свою высокоуровневую структуру во время выполнения или компиляции. Это наиболее распространено в высокоуровневых языках программирования виртуальных машин, таких как Smalltalk , и менее распространено в низкоуровневых языках программирования, таких как C. Языки и платформы, поддерживающие рефлексию:
Языки, основанные на правилах, создают правила, когда активируются условиями в наборе данных. Из всех возможных активаций выбирается некоторый набор, и выполняются операторы, принадлежащие этим правилам. Языки, основанные на правилах, включают: [ необходима цитата ]
Стековые языки — это тип языка структурированных данных, основанный на стековой структуре данных.
Синхронные языки программирования оптимизированы для программирования реактивных систем, систем, которые часто прерываются и должны быстро реагировать. Многие такие системы также называются системами реального времени и часто используются во встроенных системах .
Примеры:
Язык шейдеров — это язык графического программирования, адаптированный для программирования эффектов шейдеров. Такие языковые формы обычно состоят из специальных типов данных, таких как «цвет» и «нормальный». Из-за разнообразия целевых рынков для 3D-компьютерной графики.
Они обеспечивают как более высокую аппаратную абстракцию, так и более гибкую модель программирования, чем предыдущие парадигмы, которые жестко кодировали уравнения преобразования и затенения. Это дает программисту больший контроль над процессом рендеринга и обеспечивает более богатый контент при меньших накладных расходах.
Языки шейдеров, используемые в офлайн-рендеринге, обеспечивают максимальное качество изображения. Обработка таких шейдеров занимает много времени. Требуемая вычислительная мощность может быть дорогой из-за их способности производить фотореалистичные результаты.
Эти языки помогают создавать лексические анализаторы и парсеры для контекстно-свободных грамматик .
Языки системного программирования предназначены для низкоуровневых задач, таких как управление памятью или управление задачами. Язык системного программирования обычно относится к языку программирования, используемому для системного программирования; такие языки предназначены для написания системного программного обеспечения, которое обычно требует иных подходов к разработке по сравнению с прикладным программным обеспечением.
Системное программное обеспечение — это компьютерное программное обеспечение, предназначенное для управления и контроля компьютерного оборудования, а также для предоставления платформы для запуска прикладного программного обеспечения. Системное программное обеспечение включает такие категории программного обеспечения, как операционные системы, служебное программное обеспечение, драйверы устройств, компиляторы и компоновщики. Примеры системных языков включают:
Язык | Создатель | Впервые появился | Под влиянием | Используется для |
---|---|---|---|---|
ЕСПОЛ | Корпорация Берроуз | 1961 | АЛГОЛ 60 | МКП |
ПЛ/И | IBM , ДЕЛИТЬСЯ | 1964 | АЛГОЛ 60, ФОРТРАН, немного КОБОЛ | Мультикс |
ПЛ360 | Никлаус Вирт | 1968 | АЛГОЛ 60 | АЛГОЛ В |
С | Деннис Ритчи | 1969 | БЦПЛ | Большинство ядер операционных систем , включая Windows NT и большинство Unix-подобных систем |
ПЛ/С | ИБМ | 196x | ПЛ/И | ОС/360 |
БЛАЖЕНСТВО | Университет Карнеги-Меллона | 1970 | АЛГОЛ-ПЛ/I [34] | ВМС (порции) |
ПЛ/8 | ИБМ | 197x | ПЛ/И | ЭКС |
ПЛ/МП и ПЛ/МИ | ИБМ | 197x | ПЛ/И | ЦПФ , ОС/400 |
ПЛ-6 | Honeywell, Inc. | 197x | ПЛ/И | КП-6 |
SYMPL | CDC | 197x | ВЕСЕЛЫЙ | Подсистемы NOS , большинство компиляторов, редактор FSE |
С++ | Бьярне Страуструп | 1979 | C , Симула | См. Приложения C++ [35] |
Ада | Джин Ичбиа , С. Такер Тафт | 1983 | Алгол 68 , Паскаль , C++ , Java , Эйфель | Встроенные системы, ядра ОС, компиляторы, игры, симуляции, CubeSat , управление воздушным движением и авионика |
Д | Цифровой Марс | 2001 | С++ | Несколько доменов [36] |
Ним | Андреас Румпф | 2008 | Ada , Modula-3 , Lisp , C++ , Object Pascal , Python , Oberon | Ядра ОС, компиляторы, игры |
Ржавчина | Исследования Mozilla [37] | 2010 | C++ , Хаскель , Эрланг , Руби | Двигатель сервопривода , ОС Redox |
Быстрый | Apple Inc. | 2014 | C , Objective-C , Rust | macOS , разработка приложений iOS [e] |
Зиг | Эндрю Келли | 2016 | C , C++ , LLVM IR , Go , Rust , JavaScript | В качестве замены для C |
V (Вланг) | Александр Медведников | 2019 | C , Go , Оберон-2 , Rust , Swift , Kotlin | Vinix OS, ядра ОС, компиляторы, игры |
Языки преобразования служат для преобразования (трансляции) исходного кода, указанного на определенном формальном языке, в определенный форматный код назначения. Чаще всего он используется в промежуточных компонентах более сложных суперсистем для принятия внутренних результатов для ввода в последующую процедуру обработки.
Визуальные языки программирования позволяют пользователям определять программы в двух-(или более)мерном виде, а не как одномерные текстовые строки, с помощью графических макетов различных типов. Некоторые языки программирования потоков данных также являются визуальными языками.
Ученый-компьютерщик Никлаус Вирт разработал и реализовал несколько влиятельных языков.
Это языки, основанные на XML или работающие на нем .