Это список известных языков программирования , сгруппированных по типу.
Группы перекрываются, а не являются взаимоисключающими. Язык может быть указан в нескольких группах.
Агентно-ориентированные языки программирования
Агентно-ориентированное программирование позволяет разработчику создавать, расширять и использовать программные агенты , которые представляют собой абстракции объектов, способные обмениваться сообщениями с другими агентами.
Массив языков
Языки программирования массивов (также называемые векторными или многомерными ) обобщают операции над скалярами для прозрачного применения к векторам , матрицам и многомерным массивам .
Аспектно-ориентированные языки программирования
Аспектно-ориентированное программирование позволяет разработчикам добавлять в код новые функции, известные как «советы», не изменяя сам код; вместо этого оно использует pointcut для внедрения советов в блоки кода.
Языки ассемблера
Языки ассемблера напрямую соответствуют машинному языку (см. ниже), поэтому инструкции машинного кода отображаются в форме, понятной человеку, хотя между отдельным оператором и отдельной инструкцией может не быть однозначного соответствия. Языки ассемблера позволяют программистам использовать символические адреса, которые ассемблер преобразует в абсолютные или перемещаемые адреса. Большинство ассемблеров также поддерживают макросы и символические константы .
Языки написания
Язык программирования — это язык программирования, разработанный для использования неспециалистами в области компьютеров с целью легкого создания учебных пособий, веб-сайтов и других интерактивных компьютерных программ.
Языки интерфейса командной строки
Языки интерфейса командной строки (CLI) также называются пакетными языками или языками управления заданиями. Примеры:
Компилированные языки
Это языки, которые обычно обрабатываются компиляторами , хотя теоретически любой язык может быть скомпилирован или интерпретирован.
Конкатенативные языки программирования
Конкатенативное программирование — это язык программирования без точек , в котором все выражения обозначают функции , а сопоставление выражений обозначает композицию функций . [4] Конкатенативное программирование заменяет применение функций , которое распространено в других стилях программирования, на композицию функций как способ по умолчанию для построения подпрограмм .
Параллельные языки
Языки передачи сообщений предоставляют языковые конструкции для параллелизма . Преобладающей парадигмой параллелизма в основных языках, таких как Java, является параллелизм с разделяемой памятью . Параллельные языки, которые используют передачу сообщений, обычно были вдохновлены исчислениями процессов, такими как последовательные процессы взаимодействия (CSP) или π-исчисление .
- Ада – многоцелевой язык
- Alef – параллельный язык с потоками и передачей сообщений, использовался для системного программирования в ранних версиях Plan 9 от Bell Labs
- Ateji PX – расширение языка Java для параллелизма
- Ballerina – язык, разработанный для внедрения и оркестровки микросервисов. Предоставляет основанную на сообщениях модель параллельного параллелизма.
- ChucK – специализированный язык программирования для аудио, точный контроль над параллелизмом и синхронизацией
- Cilk – одновременный C
- Cω – C Omega, исследовательский язык, расширяющий C#, использует асинхронную связь
- Clojure – диалект Lisp для виртуальной машины Java
- Часовня
- Co-массив Fortran
- Конкурентный Паскаль (автор Brinch-Hansen)
- Карри
- E – использует обещания, гарантирует отсутствие взаимоблокировок
- Eiffel (через механизм SCOOP , простые параллельные объектно-ориентированные вычисления)
- Elixir (работает на Erlang VM)
- Emerald – использует потоки и мониторы
- Erlang – использует асинхронную передачу сообщений без общего доступа
- Схема Gambit – с использованием библиотеки Termite
- Gleam (работает на виртуальной машине Erlang)
- Го (Голанг)
- Haskell — поддерживает одновременное, распределенное и параллельное программирование на нескольких машинах.
- Ява
- Джулия
- Joule – язык потоков данных, общение посредством передачи сообщений
- LabVIEW
- Limbo – родственник Alef , используется для системного программирования в Inferno (операционная система)
- MultiLisp – вариант Scheme, расширенный для поддержки параллелизма
- OCaml
- Оккам – на него сильно повлияли Коммуникационные Последовательные Процессы (CSP)
- орк
- Oz – многопарадигменный язык, поддерживает параллелизм с разделяемым состоянием и передачей сообщений, а также фьючерсы и кроссплатформенную систему программирования Mozart Oz
- П
- Pict – по сути исполняемая реализация π-исчисления Мильнера
- Python – использует параллелизм на основе потоков и параллелизм на основе процессов [6]
- Раку [7]
- Ржавчина
- Scala – реализует акторы в стиле Erlang на JVM
- SequenceL – чисто функциональный, автоматически распараллеливающийся и не содержащий гонок
- SR – исследовательский язык
- V (Вланг)
- Унифицированный параллельный C
- XProc – язык обработки XML, обеспечивающий параллелизм
Языки программирования ограничений
Язык программирования ограничений — это декларативный язык программирования , в котором отношения между переменными выражаются как ограничения . Выполнение продолжается путем попытки найти значения для переменных, которые удовлетворяют всем объявленным ограничениям.
Языки фигурных скобок
Язык фигурных скобок или фигурных скобок имеет синтаксис, который определяет блок как операторы между фигурными скобками, также известными как фигурные скобки,{}
. Этот синтаксис возник в BCPL (1966) и был популяризирован C . Многие языки фигурных скобок произошли от C или находятся под его сильным влиянием . Примеры:
Языки потоков данных
Языки программирования потоков данных опираются на (обычно визуальное) представление потока данных для задания программы. Часто используются для реагирования на дискретные события или для обработки потоков данных. Примеры языков потоков данных включают:
Языки, ориентированные на данные
Языки, ориентированные на данные, предоставляют мощные способы поиска и управления отношениями, которые были описаны как таблицы отношений сущностей, которые отображают один набор вещей в другие наборы. [ необходима ссылка ] Примеры языков, ориентированных на данные, включают:
Языки таблиц решений
Таблицы решений можно использовать в качестве вспомогательного средства для прояснения логики перед написанием программы на любом языке, но в 1960-х годах был разработан ряд языков, в которых основная логика выражается непосредственно в форме таблицы решений, в том числе:
Декларативные языки
Декларативные языки выражают логику вычисления без подробного описания его потока управления. Декларативное программирование отличается от императивного программирования через императивные языки программирования, где поток управления задается последовательными приказами (императивами). (Чистые) функциональные и логические языки программирования также являются декларативными и составляют основные подкатегории декларативной категории. В этом разделе перечислены дополнительные примеры, не входящие в эти подкатегории.
Встраиваемые языки
В исходном коде
Встраиваемые языки исходного кода встраивают небольшие фрагменты исполняемого кода в фрагмент текста свободной формы, часто в веб-страницу.
Встроенные языки на стороне клиента ограничены возможностями браузера или предполагаемого клиента. Они направлены на обеспечение динамизма веб-страниц без необходимости повторного обращения к серверу.
Встроенные на стороне сервера языки гораздо более гибкие, поскольку практически любой язык может быть встроен в сервер. Целью внедрения фрагментов серверного кода в веб-страницу является динамическая генерация дополнительной разметки; сам код исчезает при обслуживании страницы, заменяясь ее выводом.
Серверная часть
- PHP
- VBScript
- Tcl – серверная часть в NaviServer и важный компонент в системах электронной промышленности
- WebDNA – посвящен веб-сайтам, работающим на основе баз данных
Приведенные выше примеры специально предназначены для этой цели. Большое количество других языков, таких как Erlang , Scala , Perl , Ring и Ruby , могут быть адаптированы (например, путем превращения в модули Apache ).
Клиентская сторона
В объектном коде
В скомпилированный исполняемый код можно встроить широкий спектр динамических или скриптовых языков. По сути, объектный код для интерпретатора языка необходимо связать с исполняемым файлом. Затем фрагменты исходного кода для встроенного языка можно передать в функцию оценки в виде строк. Языки управления приложениями можно реализовать таким образом, если исходный код вводится пользователем. Предпочтительны языки с небольшими интерпретаторами.
Образовательные языки программирования
Языки, разработанные в первую очередь для целей преподавания и изучения программирования.
Эзотерические языки
Эзотерический язык программирования — это язык программирования, разработанный как проверка границ возможностей дизайна языков программирования, как доказательство концепции или как шутка.
Языки расширения
Языки программирования расширений — это языки, встроенные в другую программу и используемые для использования ее возможностей в сценариях расширений.
Языки четвертого поколения
Языки программирования четвертого поколения — это языки высокого уровня, построенные вокруг систем баз данных. Они обычно используются в коммерческих средах.
Функциональные языки
Функциональные языки программирования определяют программы и подпрограммы как математические функции и рассматривают их как первоклассные. Многие так называемые функциональные языки являются «нечистыми», содержащими императивные функции. Многие функциональные языки привязаны к математическим вычислительным инструментам. Функциональные языки включают:
Чистый
Нечистый
Языки описания оборудования
В электронике язык описания оборудования (HDL) — это специализированный компьютерный язык, используемый для описания структуры, дизайна и работы электронных схем, и чаще всего цифровых логических схем. Две наиболее широко используемые и хорошо поддерживаемые разновидности HDL, используемые в промышленности, — это Verilog и VHDL . Языки описания оборудования включают:
HDL для проектирования аналоговых схем
- Verilog-AMS (Verilog для аналоговых и смешанных сигналов)
- VHDL-AMS (VHDL с расширением аналогового/смешанного сигнала)
HDL для проектирования цифровых схем
Императивные языки
Императивные языки программирования могут быть многопарадигмальными и появляться в других классификациях. Вот список языков программирования, которые следуют императивной парадигме :
Языки интерактивного режима
Языки интерактивного режима, известные как REPL , действуют как своего рода оболочка: выражения или операторы можно вводить по одному, а результат их оценки можно видеть немедленно.
Интерпретируемые языки
Интерпретируемые языки — это языки программирования, в которых программы могут быть выполнены из исходного кода интерпретатором. Теоретически любой язык может быть скомпилирован или интерпретирован, поэтому термин интерпретируемый язык обычно относится к языкам, которые обычно интерпретируются, а не компилируются.
Итеративные языки
Итеративные языки построены вокруг генераторов или предлагают их .
Языки по типу управления памятью
Языки, собираемые мусором
Сборка мусора (GC) — это форма автоматического управления памятью. Сборщик мусора пытается освободить память, которая была выделена программой, но больше не используется.
Языки с ручным управлением памятью
Языки с возможностью ручного управления памятью
- Реализации Ada не обязаны предлагать сборку мусора, но семантика языка поддерживает ее, и многие реализации ее включают.
- Blitz BASIC (также известный как BlitzMax) обычно использует подсчет ссылок, [12] а также поддерживает сборщик мусора. Однако он также поставляется с дополнительными утилитами для использования указателей [13] и для прямого выделения и освобождения памяти. [14]
- COBOL поддерживает указатели [15] и выделение кучи [16] с COBOL 2002, а также сборщик мусора. [17]
- Cython обеспечивает опциональное ручное управление памятью, позволяя пользователю импортировать
malloc
, realloc
, и free
из C, которые затем можно использовать в коде Python. [18] - D предоставляет программистам полный контроль над собственным сборщиком мусора, включая возможность его полного отключения. [19]
- По умолчанию Nim обычно использует сборку мусора или подсчет ссылок, в зависимости от его конфигурации, но программист может использовать переключатель,
--mm:none
чтобы вручную освободить память. [20] - Objective-C и Objective-C++ поддерживают опциональный подсчет ссылок и сборку мусора в качестве альтернатив ручному управлению памятью (Apple прекратила поддержку сборщика мусора).
- PostScript изначально требовал от разработчиков вручную освобождать память с помощью операторов
save
и restore
. PostScript уровня 2 представил сборщик мусора, но его использование необязательно. [21] - Rust поддерживает необязательный подсчет ссылок, но предпочтительнее ручное управление памятью.
- Scala обычно автоматически управляет памятью в своих целевых JVM и JavaScript. Однако компилятор Scala Native на основе LLVM поддерживает использование указателей, а также выделение кучи в стиле C (например
malloc
, realloc
, , free
) и выделение стека ( stackalloc
). [22] - Swift обычно использует подсчет ссылок, но также позволяет пользователю вручную управлять памятью с помощью
malloc
и free
. На платформах Apple эти функции импортируются из стандартной библиотеки C (которая импортируется из Foundation
, AppKit
или UIKit
); на Linux разработчику необходимо импортировать Glibc
, а ucrt
на Windows. - V (Vlang) использует GC по умолчанию для удобства пользователя, который можно отключить (-gc none). Пользователи могут управлять памятью вручную. Также можно использовать autofree (-autofree) или arena allocate (-prealloc).
- Vala использует подсчет ссылок по умолчанию, но пользователь может управлять памятью вручную, если пожелает. [23]
Языки с детерминированным управлением памятью
Языки с автоматическим подсчетом ссылок (ARC)
Языки на основе списков – LISP
Списковые языки — это тип языка структурированных данных, основанный на списочной структуре данных.
Маленькие языки
Малые языки [26] обслуживают специализированную проблемную область.
- awk – используется для работы с текстовыми файлами.
- sed – анализирует и преобразует текст
- SQL – содержит только несколько ключевых слов и не все конструкции, необходимые для полноценного языка программирования [a] – многие системы управления базами данных расширяют SQL дополнительными конструкциями в качестве языка хранимых процедур
Логические языки
Логические языки определяют набор атрибутов, которыми должно обладать решение, а не набор шагов для получения решения.
Известные языки, следующие этой парадигме программирования :
- АЛЬФ
- Альма-0
- Карри
- Журнал данных
- Фрил
- Flix (функциональный язык программирования с первоклассными ограничениями Datalog)
- Янус
- λProlog (язык логического программирования с полиморфной типизацией, модульным программированием и программированием высшего порядка)
- Oz и Mozart Programming System кроссплатформенная Oz
- Пролог (формулирует данные и механизм оценки программы как особую форму математической логики, называемую логикой Хорна , и общий механизм доказательства, называемый логической резолюцией )
- РУОП
- Суфле
Машинные языки
Машинные языки напрямую исполняются центральным процессором компьютера. Обычно они формулируются как битовые шаблоны, обычно представленные в восьмеричном или шестнадцатеричном формате . Каждый битовый шаблон заставляет схемы в центральном процессоре выполнять одну из основных операций оборудования. Активация определенных электрических входов (например, выводы корпуса ЦП для микропроцессоров) и логические настройки для значений состояния ЦП управляют вычислениями процессора. Отдельные машинные языки специфичны для семейства процессоров; машинный код для одного семейства процессоров не может работать напрямую на процессорах другого семейства, если только процессоры не имеют дополнительного оборудования для его поддержки (например, процессоры DEC VAX включали режим совместимости с PDP-11). Они (по сути) всегда определяются разработчиком ЦП, а не третьими лицами. [b] Символическая версия, язык ассемблера процессора , также определяется разработчиком в большинстве случаев. Некоторые часто используемые наборы инструкций машинного кода :
Макроязыки
Текстовые языки макросов подстановки
Макроязыки преобразуют один файл исходного кода в другой. Макрос — это по сути короткий фрагмент текста, который расширяется в более длинный (не путать с гигиеническими макросами ), возможно, с подстановкой параметров. Они часто используются для предварительной обработки исходного кода. Препроцессоры также могут предоставлять такие возможности, как включение файлов .
Макроязыки могут быть ограничены действием на специально помеченных областях кода (с префиксом a #
в случае препроцессора C). В качестве альтернативы они могут и не быть таковыми, но в этом случае все равно часто нежелательно (например) расширять макрос, встроенный в строковый литерал , поэтому им все равно нужно элементарное понимание синтаксиса. В таком случае они часто все еще применимы к более чем одному языку. Сравните с встраиваемыми в исходный код языками, такими как PHP , которые полностью функциональны.
- cpp (препроцессор C)
- m4 (первоначально от AT&T, входил в комплект Unix)
- ML/I (макропроцессор общего назначения)
- TTM (разработано в Калифорнийском технологическом институте)
Языки макросов приложений
Языки сценариев, такие как Tcl и ECMAScript ( ActionScript , ECMAScript для XML , JavaScript , JScript ) были встроены в приложения. Иногда их называют «макроязыками», хотя в несколько ином смысле, чем макросы текстовой подстановки, такие как m4 .
Языки метапрограммирования
Метапрограммирование — это написание программ, которые пишут или манипулируют другими программами, включая себя, как своими данными или которые выполняют часть работы, которая в противном случае выполняется во время выполнения во время компиляции . Во многих случаях это позволяет программистам сделать больше за то же время, которое им потребовалось бы для написания всего кода вручную.
Мультипарадигмальные языки
Многопарадигмальные языки поддерживают более одной парадигмы программирования . Они позволяют программе использовать более одного стиля программирования . Цель состоит в том, чтобы позволить программистам использовать лучший инструмент для работы, признавая, что ни одна парадигма не решает все проблемы самым простым или эффективным способом.
- Язык программирования 1С:Предприятие (универсальный, императивный, объектно-ориентированный, прототипный, функциональный)
- Ada ( конкурентный , распределенный , универсальный ( шаблонное метапрограммирование ), императивный , объектно-ориентированный ( основанный на классах ))
- ALF ( функциональный , логический )
- Альма-0 (ограничение, императив, логика)
- APL (функциональный, императивный, объектно-ориентированный (на основе классов))
- BETA (функциональная, императивная, объектно-ориентированная (на основе классов))
- C++ (универсальный, императивный, объектно-ориентированный (на основе классов), функциональный, метапрограммирование)
- C# (универсальный, императивный, объектно-ориентированный (на основе классов), функциональный, декларативный)
- Ceylon (общий, императивный, объектно-ориентированный (на основе классов), функциональный, декларативный)
- ChucK (императивный, объектно-ориентированный, основанный на времени, параллельный, «на лету»)
- Cobra (универсальный, императивный, объектно-ориентированный (на основе классов), функциональный, договорной)
- Common Lisp (функциональный, императивный, объектно-ориентированный (основанный на классах), аспектно-ориентированный (пользователь может добавлять дополнительные парадигмы, например, логику))
- Curl (функциональное, императивное, объектно-ориентированное (на основе классов), метапрограммирование)
- Карри (параллельный, функциональный, логический)
- D (универсальный, императивный, функциональный, объектно-ориентированный (на основе классов), метапрограммирование)
- Dart (универсальный, императивный, функциональный, объектно-ориентированный (на основе классов))
- Delphi Object Pascal (универсальный, императивный, объектно-ориентированный (на основе классов), метапрограммирование)
- Дилан (функциональный, объектно-ориентированный (на основе классов))
- ECMAScript (функциональный, императивный, объектно-ориентированный (на основе прототипов))
- Eiffel (императивный, объектно-ориентированный (на основе классов), универсальный, функциональный (агенты), параллельный (SCOOP))
- F# (функциональный, универсальный, объектно-ориентированный (на основе классов), ориентированный на язык)
- Fantom (функциональный, объектно-ориентированный (на основе классов))
- Go , Golang (императивный, процедурный),
- Groovy (функциональный, объектно-ориентированный (на основе классов), императивный, процедурный)
- Гавань
- Прыгать
- J (функциональный, императивный, объектно-ориентированный (на основе классов))
- Julia (императивный, множественная диспетчеризация («объектно-ориентированный»), функциональный, метапрограммирование)
- LabVIEW ( визуальный , поток данных , параллельный, модульный, функциональный, объектно-ориентированный, скриптовый)
- Lua (функциональный, императивный, объектно-ориентированный ( основанный на прототипах ))
- Mercury (функциональный, логический, объектно-ориентированный)
- Метаобъектные протоколы (объектно-ориентированные (основанные на классах, основанные на прототипах))
- Nemerle (функциональный, объектно-ориентированный (на основе классов), императивный, метапрограммирование)
- Objective-C (императивный, объектно-ориентированный (на основе классов), рефлексивный)
- OCaml (функциональный, императивный, объектно-ориентированный (на основе классов), модульный)
- Oz (функциональный (оценка: нетерпеливый , ленивый ), логический, ограниченный , императивный, объектно-ориентированный (на основе классов), параллельный, распределенный) и кроссплатформенная система программирования Mozart Oz
- Object Pascal (императивный, объектно-ориентированный (основанный на классах))
- Perl (императивный, функциональный (не может быть чисто функциональным), объектно-ориентированный, классово-ориентированный, аспектно-ориентированный (через модули))
- PHP (императивный, объектно-ориентированный, функциональный (не может быть чисто функциональным))
- Pike (интерпретируемый, универсальный, высокоуровневый, кроссплатформенный, динамический язык программирования)
- Prograph (поток данных, объектно-ориентированный (на основе классов), визуальный)
- Python (функциональный, компилируемый, интерпретируемый, объектно-ориентированный (на основе классов), императивный, метапрограммирование, расширение, нечистый, интерактивный режим, итеративный, рефлексивный, скриптовый)
- R (массив, интерпретируемый, нечистый, интерактивный режим, основанный на списках, объектно-ориентированный, основанный на прототипах, скриптовый)
- Racket (функциональный, императивный, объектно-ориентированный (основанный на классах) и может быть расширен пользователем)
- Raku (параллельный, конкатенативный, функциональный, метапрограммирование, обобщенное, императивный, рефлексивный, объектно-ориентированный, конвейерный, реактивный и через ограничения библиотек, распределенный)
- Rebol (функциональный, императивный, объектно-ориентированный (основанный на прототипах), метапрограммирование (диалектный))
- Красный (функциональный, императивный, объектно-ориентированный (основанный на прототипах), метапрограммирование (диалектный))
- ROOP (императивный, логический, объектно-ориентированный (на основе классов), основанный на правилах)
- Кольцо (императивное, функциональное, объектно-ориентированное (на основе классов), метапрограммирование, декларативное, естественное)
- Ruby (императивный, функциональный, объектно-ориентированный (на основе классов), метапрограммирование)
- Rust (конкурентный, функциональный, императивный, объектно-ориентированный, универсальный, метапрограммирование, компилируемый)
- Scala (функциональный, объектно-ориентированный)
- Seed7 (императивный, объектно-ориентированный, универсальный)
- SISAL (параллельный, поток данных, функциональный)
- Электронные таблицы (функциональные, визуальные)
- Swift (протокольно-ориентированный, объектно-ориентированный, функциональный, императивный, блочно-структурированный)
- Tcl (функциональный, императивный, объектно-ориентированный (на основе классов))
- Чай (функциональный, императивный, объектно-ориентированный (на основе классов))
- V (Vlang) (функциональный, императивный, процедурный, структурированный, параллельный)
- Windows PowerShell (функциональный, императивный, конвейерный, объектно-ориентированный (на основе классов))
- Wolfram Mathematica ( язык Вольфрама )
Численный анализ
Несколько языков программирования общего назначения, такие как C и Python , также используются для технических вычислений; в этом списке основное внимание уделяется языкам, которые используются почти исключительно для технических вычислений.
Языки, не основанные на английском
Объектно-ориентированные языки, основанные на классах
Объектно-ориентированные языки программирования на основе классов поддерживают объекты, определенные их классом. Определения классов включают данные членов. Передача сообщений является ключевой концепцией, если не главной концепцией, в объектно-ориентированных языках.
Полиморфные функции, параметризованные классом некоторых из их аргументов, обычно называются методами . В языках с одиночной диспетчеризацией классы обычно также включают определения методов. В языках с множественной диспетчеризацией методы определяются универсальными функциями . Существуют исключения, когда методы одиночной диспетчеризации являются универсальными функциями (например, система объектов Bigloo ).
Многократная отправка
Единая отправка
- ActionScript 3.0
- Актер
- Ada 95 и Ada 2005 (многоцелевой язык)
- АПЛ
- БЕТА
- С++
- С#
- Цейлон
- Дарт
- Oxygene (ранее назывался Chrome)
- ЧакК
- Кобра
- Холодный фьюжн
- Завиток
- Д
- Язык спецификации распределенных приложений (DASL)
- Delphi Объектный Паскаль
- Э
- GNU E
- Эйфелева
- Фортран 2003
- Крепость
- Гамбас
- Язык Game Maker
- Гавань
- Дж.
- Ява
- LabVIEW
- Луа
- Modula-2 (абстракция данных, сокрытие информации, строгая типизация, полная модульность)
- Modula-3 (добавлено больше объектно-ориентированных функций в Modula-2)
- Немерле
- NetRexx
- Оберон-2 (полная объектно-ориентированная эквивалентность в оригинальной, строго типизированной, виртианской манере)
- Объектный Паскаль
- Объект REXX
- Objective-C (надмножество C, добавляющее производную от Smalltalk объектную модель и синтаксис передачи сообщений)
- OCaml
- Расширенный бизнес-язык OpenEdge (ABL)
- Система программирования Oz, Mozart
- Перл 5
- PHP
- Щука
- Програф
- Python (интерпретативный язык, опционально объектно-ориентированный)
- Революция (программист не может выбирать объекты)
- Кольцо
- Рубин
- Скала
- Спикизи
- Simula (первый объектно-ориентированный язык, разработанный Оле-Йоханом Далем и Кристен Нюгор )
- Smalltalk (чистая объектно-ориентированная разработка, разработанная в Xerox PARC )
- ВРАЩАТЬСЯ
- СуперКоллайдер
- VBScript (язык макроскриптов Microsoft Office)
- Визуальный DataFlex
- Визуальный FoxPro
- Визуальный Пролог
- Х++
- Ксоджо
- XOTcl
Объектно-ориентированные прототипные языки
Языки, основанные на прототипах, — это объектно-ориентированные языки, в которых устранено различие между классами и экземплярами:
Языки правил офсайда
Языки правил офсайда обозначают блоки кода по их отступам .
Процедурные языки
Процедурные языки программирования основаны на концепции единицы и области действия (диапазона просмотра данных) исполняемого оператора кода. Процедурная программа состоит из одной или нескольких единиц или модулей, либо закодированных пользователем, либо предоставленных в библиотеке кода; каждый модуль состоит из одной или нескольких процедур, также называемых функцией, процедурой, подпрограммой или методом, в зависимости от языка. Примеры процедурных языков включают:
Языки запросов
Рефлексивные языки
Рефлексивные языки программирования позволяют программам проверять и, возможно, изменять свою высокоуровневую структуру во время выполнения или компиляции. Это наиболее распространено в высокоуровневых языках программирования виртуальных машин, таких как Smalltalk , и менее распространено в низкоуровневых языках программирования, таких как C. Языки и платформы, поддерживающие рефлексию:
Языки, основанные на правилах
Языки, основанные на правилах, создают правила, когда активируются условиями в наборе данных. Из всех возможных активаций выбирается некоторый набор, и выполняются операторы, принадлежащие этим правилам. Языки, основанные на правилах, включают: [ необходима цитата ]
Скриптовые языки
Стековые языки
Стековые языки — это тип языка структурированных данных, основанный на стековой структуре данных.
Синхронные языки
Синхронные языки программирования оптимизированы для программирования реактивных систем, систем, которые часто прерываются и должны быстро реагировать. Многие такие системы также называются системами реального времени и часто используются во встроенных системах .
Примеры:
Языки затенения
Язык шейдеров — это язык графического программирования, адаптированный для программирования эффектов шейдеров. Такие языковые формы обычно состоят из специальных типов данных, таких как «цвет» и «нормальный». Из-за разнообразия целевых рынков для 3D-компьютерной графики.
Рендеринг в реальном времени
Они обеспечивают как более высокую аппаратную абстракцию, так и более гибкую модель программирования, чем предыдущие парадигмы, которые жестко кодировали уравнения преобразования и затенения. Это дает программисту больший контроль над процессом рендеринга и обеспечивает более богатый контент при меньших накладных расходах.
Оффлайн рендеринг
Языки шейдеров, используемые в офлайн-рендеринге, обеспечивают максимальное качество изображения. Обработка таких шейдеров занимает много времени. Требуемая вычислительная мощность может быть дорогой из-за их способности производить фотореалистичные результаты.
Языки обработки синтаксиса
Эти языки помогают создавать лексические анализаторы и парсеры для контекстно-свободных грамматик .
Системные языки
Языки системного программирования предназначены для низкоуровневых задач, таких как управление памятью или управление задачами. Язык системного программирования обычно относится к языку программирования, используемому для системного программирования; такие языки предназначены для написания системного программного обеспечения, которое обычно требует иных подходов к разработке по сравнению с прикладным программным обеспечением.
Системное программное обеспечение — это компьютерное программное обеспечение, предназначенное для управления и контроля компьютерного оборудования, а также для предоставления платформы для запуска прикладного программного обеспечения. Системное программное обеспечение включает такие категории программного обеспечения, как операционные системы, служебное программное обеспечение, драйверы устройств, компиляторы и компоновщики. Примеры системных языков включают:
Языки трансформации
Языки преобразования служат для преобразования (трансляции) исходного кода, указанного на определенном формальном языке, в определенный форматный код назначения. Чаще всего он используется в промежуточных компонентах более сложных суперсистем для принятия внутренних результатов для ввода в последующую процедуру обработки.
Визуальные языки
Визуальные языки программирования позволяют пользователям определять программы в двух-(или более)мерном виде, а не как одномерные текстовые строки, с помощью графических макетов различных типов. Некоторые языки программирования потоков данных также являются визуальными языками.
Языки Вирта
Ученый-компьютерщик Никлаус Вирт разработал и реализовал несколько влиятельных языков.
Языки на основе XML
Это языки, основанные на XML или работающие на нем .
Смотрите также
Примечания
- ^ Объектами SQL являются коллекции записей базы данных , называемые таблицами. Полный язык программирования может определять алгоритмы , независимо от времени выполнения . Таким образом, можно считать, что алгоритм генерирует пригодные для использования результаты. Напротив, SQL может выбирать только записи, которые ограничены текущей коллекцией, данными, имеющимися в системе, а не выдавать утверждение о правильности результата.
- ^ Заметным исключением является советский/российский процессор серии 1801 , который изначально использовал собственную отечественную ISA, но позже был переработан для совместимости с PDP-11 в рамках политического решения.
- ^ ab Подмодели не указаны, указаны только базовые модели.
- ^ Концепция объекта с традиционной ОО-семантикой одиночной диспетчеризации отсутствует в Julia, вместо этого используется более общая множественная диспетчеризация различных типов во время выполнения.
- ^ Swift использует автоматический подсчет ссылок .
Ссылки
- ^ "Операторы" . Получено 2024-05-13 .
- ^ "обернуть".
- ^ ""Аспекты в Раку"".
- ^ "Кристофер Диггинс: Что такое конкатенативный язык". Drdobbs.com. 2008-12-31 . Получено 2013-07-01 .
- ^ "Оператор подачи".
- ^ Документация » Стандартная библиотека Python » Параллельное выполнение
- ^ «Каналы и другие механизмы».
- ^ "Решатель проблем".
- ^ ab «Синтаксис, основанный на отступах · rsdn/nemerle Wiki». Гитхаб . Проверено 18 марта 2022 г.
- ^ "Solidity: Документация Solidity 0.8.11".
- ^ «Итератор».
- ^ "Управление памятью · BlitzMax" . Получено 2023-07-14 .
- ^ "Указатели · BlitzMax" . Получено 2023-07-14 .
- ^ "BRL.Blitz · BlitzMax" . Получено 2023-07-14 .
- ^ "Использование указателей в программе ILE COBOL - Документация IBM". IBM . Получено 2023-07-14 .
- ^ "HEAP - IBM Documentation". IBM . Получено 2023-07-14 .
- ^ "Элементы языка OO COBOL на основе SOM, которые были изменены - Документация IBM". IBM . Получено 2023-07-14 .
- ^ "Выделение памяти — документация Cython 3.0.0.dev0" . Получено 14 июля 2023 г. .
- ^ "Сборка мусора". Язык программирования D. Получено 2022-03-18 .
- ^ "Управление памятью Нима" . Получено 2022-03-18 .
- ↑ Adobe (февраль 1999 г.). Справочник по языку PostScript, третье издание (PDF) . Addison-Wesley Publishing Company. С. 56–65.
- ^ "Взаимодействие с собственным кодом – документация Scala Native 0.4.14" . Получено 05.07.2023 .
- ^ "Projects/Vala/ReferenceHandling - GNOME Wiki!". Архивировано из оригинала 2024-01-21 . Получено 2022-03-21 .
- ^ «Понимание права собственности — язык программирования Rust». doc.rust-lang.org .
- ^ «Умные указатели — язык программирования Rust». doc.rust-lang.org .
- ↑ Джон Бентли (AT&T) август 1986 г. CACM 29 (8) «Little Languages», стр. 711–721 из его колонки Programming Pearls
- ^ "Метапрограммирование: что, почему и как". 2011-12-14.
- ^ «Процедурные макросы для генерации кода из атрибутов». doc.rust-lang.org .
- ^ «Классы и роли».
- ^ «Метаобъектный протокол (MOP)».
- ^ Скабиа, Марко. «Что такое AGAL». Adobe Developer Connection . Adobe . Получено 8 мая 2018 г.
- ^ «Грамматики».
- ^ Wulf, WA; Russell, DB; Haberman, AN (декабрь 1971 г.). «BLISS: язык для системного программирования». Communications of the ACM . 14 (12): 780–790. CiteSeerX 10.1.1.691.9765 . doi :10.1145/362919.362936. S2CID 9564255.
- ^ «Приложения C++».
- ^ "Организации, использующие язык D". Язык программирования D.
- ^ "Mozilla Research". 1 января 2014 г.