stringtranslate.com

Список языков программирования по типу

Это список известных языков программирования , сгруппированных по типу.

Группы перекрываются, а не являются взаимоисключающими. Язык может быть указан в нескольких группах.

Агентно-ориентированные языки программирования

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

Массив языков

Языки программирования массивов (также называемые векторными или многомерными ) обобщают операции над скалярами для прозрачного применения к векторам , матрицам и многомерным массивам .

Аспектно-ориентированные языки программирования

Аспектно-ориентированное программирование позволяет разработчикам добавлять в код новые функции, известные как «советы», не изменяя сам код; вместо этого оно использует pointcut для внедрения советов в блоки кода.

Языки ассемблера

Языки ассемблера напрямую соответствуют машинному языку (см. ниже), поэтому инструкции машинного кода отображаются в форме, понятной человеку, хотя между отдельным оператором и отдельной инструкцией может не быть однозначного соответствия. Языки ассемблера позволяют программистам использовать символические адреса, которые ассемблер преобразует в абсолютные или перемещаемые адреса. Большинство ассемблеров также поддерживают макросы и символические константы .

Языки написания

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

Языки интерфейса командной строки

Языки интерфейса командной строки (CLI) также называются пакетными языками или языками управления заданиями. Примеры:

Компилированные языки

Это языки, которые обычно обрабатываются компиляторами , хотя теоретически любой язык может быть скомпилирован или интерпретирован.

Конкатенативные языки программирования

Конкатенативное программирование — это язык программирования без точек , в котором все выражения обозначают функции , а сопоставление выражений обозначает композицию функций . [4] Конкатенативное программирование заменяет применение функций , которое распространено в других стилях программирования, на композицию функций как способ по умолчанию для построения подпрограмм .

Параллельные языки

Языки передачи сообщений предоставляют языковые конструкции для параллелизма . Преобладающей парадигмой параллелизма в основных языках, таких как Java, является параллелизм с разделяемой памятью . Параллельные языки, которые используют передачу сообщений, обычно были вдохновлены исчислениями процессов, такими как последовательные процессы взаимодействия (CSP) или π-исчисление .

Языки программирования ограничений

Язык программирования ограничений — это декларативный язык программирования , в котором отношения между переменными выражаются как ограничения . Выполнение продолжается путем попытки найти значения для переменных, которые удовлетворяют всем объявленным ограничениям.

Языки фигурных скобок

Язык фигурных скобок или фигурных скобок имеет синтаксис, который определяет блок как операторы между фигурными скобками, также известными как фигурные скобки,{} . Этот синтаксис возник в BCPL (1966) и был популяризирован C . Многие языки фигурных скобок произошли от C или находятся под его сильным влиянием . Примеры:

Языки потоков данных

Языки программирования потоков данных опираются на (обычно визуальное) представление потока данных для задания программы. Часто используются для реагирования на дискретные события или для обработки потоков данных. Примеры языков потоков данных включают:

Языки, ориентированные на данные

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

Языки таблиц решений

Таблицы решений можно использовать в качестве вспомогательного средства для прояснения логики перед написанием программы на любом языке, но в 1960-х годах был разработан ряд языков, в которых основная логика выражается непосредственно в форме таблицы решений, в том числе:

Декларативные языки

Декларативные языки выражают логику вычисления без подробного описания его потока управления. Декларативное программирование отличается от императивного программирования через императивные языки программирования, где поток управления задается последовательными приказами (императивами). (Чистые) функциональные и логические языки программирования также являются декларативными и составляют основные подкатегории декларативной категории. В этом разделе перечислены дополнительные примеры, не входящие в эти подкатегории.

Встраиваемые языки

В исходном коде

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

Встроенные языки на стороне клиента ограничены возможностями браузера или предполагаемого клиента. Они направлены на обеспечение динамизма веб-страниц без необходимости повторного обращения к серверу.

Встроенные на стороне сервера языки гораздо более гибкие, поскольку практически любой язык может быть встроен в сервер. Целью внедрения фрагментов серверного кода в веб-страницу является динамическая генерация дополнительной разметки; сам код исчезает при обслуживании страницы, заменяясь ее выводом.

Серверная часть

Приведенные выше примеры специально предназначены для этой цели. Большое количество других языков, таких как Erlang , Scala , Perl , Ring и Ruby , могут быть адаптированы (например, путем превращения в модули Apache ).

Клиентская сторона

В объектном коде

В скомпилированный исполняемый код можно встроить широкий спектр динамических или скриптовых языков. По сути, объектный код для интерпретатора языка необходимо связать с исполняемым файлом. Затем фрагменты исходного кода для встроенного языка можно передать в функцию оценки в виде строк. Языки управления приложениями можно реализовать таким образом, если исходный код вводится пользователем. Предпочтительны языки с небольшими интерпретаторами.

Образовательные языки программирования

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

Эзотерические языки

Эзотерический язык программирования — это язык программирования, разработанный как проверка границ возможностей дизайна языков программирования, как доказательство концепции или как шутка.

Языки расширения

Языки программирования расширений — это языки, встроенные в другую программу и используемые для использования ее возможностей в сценариях расширений.

Языки четвертого поколения

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

Функциональные языки

Функциональные языки программирования определяют программы и подпрограммы как математические функции и рассматривают их как первоклассные. Многие так называемые функциональные языки являются «нечистыми», содержащими императивные функции. Многие функциональные языки привязаны к математическим вычислительным инструментам. Функциональные языки включают:

Чистый

Нечистый

Языки описания оборудования

В электронике язык описания оборудования (HDL) — это специализированный компьютерный язык, используемый для описания структуры, дизайна и работы электронных схем, и чаще всего цифровых логических схем. Две наиболее широко используемые и хорошо поддерживаемые разновидности HDL, используемые в промышленности, — это Verilog и VHDL . Языки описания оборудования включают:

HDL для проектирования аналоговых схем

HDL для проектирования цифровых схем

Императивные языки

Императивные языки программирования могут быть многопарадигмальными и появляться в других классификациях. Вот список языков программирования, которые следуют императивной парадигме :

Языки интерактивного режима

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

Интерпретируемые языки

Интерпретируемые языки — это языки программирования, в которых программы могут быть выполнены из исходного кода интерпретатором. Теоретически любой язык может быть скомпилирован или интерпретирован, поэтому термин интерпретируемый язык обычно относится к языкам, которые обычно интерпретируются, а не компилируются.

Итеративные языки

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

Языки по типу управления памятью

Языки, собираемые мусором

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

Языки с ручным управлением памятью

Языки с возможностью ручного управления памятью

Языки с детерминированным управлением памятью

Языки с автоматическим подсчетом ссылок (ARC)

Языки на основе списков – LISP

Списковые языки — это тип языка структурированных данных, основанный на списочной структуре данных.

Маленькие языки

Малые языки [26] обслуживают специализированную проблемную область.

Логические языки

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

Известные языки, следующие этой парадигме программирования :

Машинные языки

Машинные языки напрямую исполняются центральным процессором компьютера. Обычно они формулируются как битовые шаблоны, обычно представленные в восьмеричном или шестнадцатеричном формате . Каждый битовый шаблон заставляет схемы в центральном процессоре выполнять одну из основных операций оборудования. Активация определенных электрических входов (например, выводы корпуса центрального процессора для микропроцессоров) и логические настройки для значений состояния центрального процессора управляют вычислениями процессора. Отдельные машинные языки специфичны для семейства процессоров; машинный код для одного семейства процессоров не может работать напрямую на процессорах другого семейства, если только процессоры не имеют дополнительного оборудования для его поддержки (например, процессоры DEC VAX включали режим совместимости с PDP-11). Они (по сути) всегда определяются разработчиком центрального процессора, а не третьими лицами. [b] Символическая версия, язык ассемблера процессора , также определяется разработчиком в большинстве случаев. Некоторые часто используемые наборы инструкций машинного кода :

Макроязыки

Текстовые языки макросов подстановки

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

Макроязыки могут быть ограничены действием на специально помеченных областях кода (с префиксом a #в случае препроцессора C). В качестве альтернативы они могут и не быть таковыми, но в этом случае все равно часто нежелательно (например) расширять макрос, встроенный в строковый литерал , поэтому им все равно нужно элементарное понимание синтаксиса. В таком случае они часто все еще применимы к более чем одному языку. Сравните с встраиваемыми в исходный код языками, такими как PHP , которые полностью функциональны.

Языки макросов приложений

Языки сценариев, такие как Tcl и ECMAScript ( ActionScript , ECMAScript для XML , JavaScript , JScript ) были встроены в приложения. Иногда их называют «макроязыками», хотя в несколько ином смысле, чем макросы текстовой подстановки, такие как m4 .

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

Метапрограммирование — это написание программ, которые пишут или манипулируют другими программами, включая себя, как своими данными или которые выполняют часть работы, которая в противном случае выполняется во время выполнения во время компиляции . Во многих случаях это позволяет программистам сделать больше за то же время, которое им потребовалось бы для написания всего кода вручную.

Мультипарадигмальные языки

Многопарадигмальные языки поддерживают более одной парадигмы программирования . Они позволяют программе использовать более одного стиля программирования . Цель состоит в том, чтобы позволить программистам использовать лучший инструмент для работы, признавая, что ни одна парадигма не решает все проблемы самым простым или эффективным способом.

Численный анализ

Несколько языков программирования общего назначения, такие как C и Python , также используются для технических вычислений; в этом списке основное внимание уделяется языкам, которые используются почти исключительно для технических вычислений.

Языки, не основанные на английском

Объектно-ориентированные языки, основанные на классах

Объектно-ориентированные языки программирования на основе классов поддерживают объекты, определенные их классом. Определения классов включают данные членов. Передача сообщений является ключевой концепцией, если не главной концепцией, в объектно-ориентированных языках.

Полиморфные функции, параметризованные классом некоторых из их аргументов, обычно называются методами . В языках с одиночной диспетчеризацией классы обычно также включают определения методов. В языках с множественной диспетчеризацией методы определяются универсальными функциями . Существуют исключения, когда методы одиночной диспетчеризации являются универсальными функциями (например, система объектов Bigloo ).

Многократная отправка

Единая отправка

Объектно-ориентированные прототипные языки

Языки, основанные на прототипах, — это объектно-ориентированные языки, в которых устранено различие между классами и экземплярами:

Языки правил офсайда

Языки правил офсайда обозначают блоки кода по их отступам .

Процедурные языки

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

Языки запросов

Рефлексивные языки

Рефлексивные языки программирования позволяют программам проверять и, возможно, изменять свою высокоуровневую структуру во время выполнения или компиляции. Это наиболее распространено в высокоуровневых языках программирования виртуальных машин, таких как Smalltalk , и менее распространено в низкоуровневых языках программирования, таких как C. Языки и платформы, поддерживающие рефлексию:

Языки, основанные на правилах

Языки, основанные на правилах, создают экземпляры правил при активации условиями в наборе данных. Из всех возможных активаций выбирается некоторый набор, и выполняются операторы, принадлежащие этим правилам. Языки, основанные на правилах, включают: [ необходима цитата ]

Скриптовые языки

Стековые языки

Стековые языки — это тип языка структурированных данных, основанный на стековой структуре данных.

Синхронные языки

Синхронные языки программирования оптимизированы для программирования реактивных систем, систем, которые часто прерываются и должны быстро реагировать. Многие такие системы также называются системами реального времени и часто используются во встроенных системах .

Примеры:

Языки затенения

Язык шейдеров — это язык графического программирования, адаптированный для программирования эффектов шейдеров. Такие языковые формы обычно состоят из специальных типов данных, таких как «цвет» и «нормальный». Из-за разнообразия целевых рынков для 3D-компьютерной графики.

Рендеринг в реальном времени

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

Оффлайн рендеринг

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

Языки обработки синтаксиса

Эти языки помогают создавать лексические анализаторы и парсеры для контекстно-свободных грамматик .

Системные языки

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

Системное программное обеспечение — это компьютерное программное обеспечение, предназначенное для управления и контроля компьютерного оборудования, а также для предоставления платформы для запуска прикладного программного обеспечения. Системное программное обеспечение включает такие категории программного обеспечения, как операционные системы, служебное программное обеспечение, драйверы устройств, компиляторы и компоновщики. Примеры системных языков включают:

Языки трансформации

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

Визуальные языки

Визуальные языки программирования позволяют пользователям определять программы в двух-(или более)мерном виде, а не как одномерные текстовые строки, с помощью графических макетов различных типов. Некоторые языки программирования потоков данных также являются визуальными языками.

Языки Вирта

Ученый-компьютерщик Никлаус Вирт разработал и реализовал несколько влиятельных языков.

Языки на основе XML

Это языки, основанные на XML или работающие на нем .

Смотрите также

Примечания

  1. ^ Объектами SQL являются коллекции записей базы данных , называемые таблицами. Полный язык программирования может определять алгоритмы , независимо от времени выполнения . Таким образом, можно считать, что алгоритм генерирует пригодные для использования результаты. Напротив, SQL может выбирать только записи, которые ограничены текущей коллекцией, данными, имеющимися в системе, а не выдавать утверждение о правильности результата.
  2. ^ Заметным исключением является советский/российский процессор серии 1801 , который изначально использовал собственную отечественную ISA, но позже был переработан для совместимости с PDP-11 в рамках политического решения.
  3. ^ ab Подмодели не указаны, указаны только базовые модели.
  4. ^ Концепция объекта с традиционной ОО-семантикой одиночной диспетчеризации отсутствует в Julia, вместо этого используется более общая множественная диспетчеризация различных типов во время выполнения.
  5. ^ Swift использует автоматический подсчет ссылок .

Ссылки

  1. ^ "Операторы" . Получено 2024-05-13 .
  2. ^ "обернуть".
  3. ^ ""Аспекты в Раку"".
  4. ^ "Кристофер Диггинс: Что такое конкатенативный язык". Drdobbs.com. 2008-12-31 . Получено 2013-07-01 .
  5. ^ "Оператор подачи".
  6. ^ Документация » Стандартная библиотека Python » Параллельное выполнение
  7. ^ «Каналы и другие механизмы».
  8. ^ "Решатель проблем".
  9. ^ ab «Синтаксис, основанный на отступах · rsdn/nemerle Wiki». Гитхаб . Проверено 18 марта 2022 г.
  10. ^ "Solidity: Документация Solidity 0.8.11".
  11. ^ «Итератор».
  12. ^ "Управление памятью · BlitzMax" . Получено 2023-07-14 .
  13. ^ "Указатели · BlitzMax" . Получено 2023-07-14 .
  14. ^ "BRL.Blitz · BlitzMax" . Получено 2023-07-14 .
  15. ^ "Использование указателей в программе ILE COBOL - Документация IBM". IBM . Получено 2023-07-14 .
  16. ^ "HEAP - IBM Documentation". IBM . Получено 2023-07-14 .
  17. ^ "Элементы языка OO COBOL на основе SOM, которые были изменены - Документация IBM". IBM . Получено 2023-07-14 .
  18. ^ "Выделение памяти — документация Cython 3.0.0.dev0" . Получено 14 июля 2023 г. .
  19. ^ "Сборка мусора". Язык программирования D. Получено 2022-03-18 .
  20. ^ "Управление памятью Нима" . Получено 2022-03-18 .
  21. Adobe (февраль 1999 г.). Справочник по языку PostScript, третье издание (PDF) . Addison-Wesley Publishing Company. С. 56–65.
  22. ^ "Взаимодействие с собственным кодом – документация Scala Native 0.4.14" . Получено 05.07.2023 .
  23. ^ "Projects/Vala/ReferenceHandling - GNOME Wiki!". Архивировано из оригинала 2024-01-21 . Получено 2022-03-21 .
  24. ^ «Понимание права собственности — язык программирования Rust». doc.rust-lang.org .
  25. ^ «Умные указатели — язык программирования Rust». doc.rust-lang.org .
  26. Джон Бентли (AT&T) август 1986 г. CACM 29 (8) «Little Languages», стр. 711–721 из его колонки Programming Pearls
  27. ^ "Метапрограммирование: что, почему и как". 2011-12-14.
  28. ^ «Процедурные макросы для генерации кода из атрибутов». doc.rust-lang.org .
  29. ^ «Классы и роли».
  30. ^ «Метаобъектный протокол (MOP)».
  31. ^ Скабиа, Марко. «Что такое AGAL». Adobe Developer Connection . Adobe . Получено 8 мая 2018 г.
  32. ^ «Грамматики».
  33. ^ 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. 
  34. ^ «Приложения C++».
  35. ^ "Организации, использующие язык D". Язык программирования D.
  36. ^ "Mozilla Research". 1 января 2014 г.