Языки программирования можно сгруппировать по количеству и типам поддерживаемых парадигм .
Краткое изложение парадигмы
Краткий справочник по парадигмам программирования, перечисленным в этой статье.
- Параллельное программирование – имеет языковые конструкции для параллелизма, которые могут включать многопоточность, поддержку распределенных вычислений, передачу сообщений, общие ресурсы (включая общую память) или фьючерсы.
- Программирование акторов – параллельные вычисления с акторами , которые принимают локальные решения в ответ на окружающую среду (способны к эгоистичному или конкурентному поведению)
- Программирование ограничений – отношения между переменными выражаются в виде ограничений (или сетей ограничений), определяющих допустимые решения (использует алгоритм удовлетворения ограничений или симплексный алгоритм )
- Программирование потока данных – принудительный пересчет формул при изменении значений данных (например, электронные таблицы )
- Декларативное программирование – описывает, что должно выполнять вычисление, не указывая подробных изменений состояний по сравнению с императивным программированием (функциональное и логическое программирование являются основными подгруппами декларативного программирования)
- Распределенное программирование – поддержка нескольких автономных компьютеров, взаимодействующих через компьютерные сети.
- Функциональное программирование – использует оценку математических функций и избегает состояния и изменяемых данных.
- Обобщенное программирование – использует алгоритмы, написанные в терминах типов, которые будут определены позже, и которые затем создаются по мере необходимости для конкретных типов, предоставленных в качестве параметров.
- Императивное программирование – явные операторы, которые изменяют состояние программы
- Логическое программирование – использует явную математическую логику для программирования.
- Метапрограммирование — написание программ, которые записывают или манипулируют другими программами (или собой) в качестве своих данных, или которые выполняют часть работы во время компиляции, которая в противном случае была бы сделана во время выполнения.
- Шаблонное метапрограммирование – методы метапрограммирования, в которых компилятор использует шаблоны для генерации временного исходного кода, который компилятор объединяет с остальной частью исходного кода, а затем компилирует.
- Рефлексивное программирование – методы метапрограммирования, в которых программа изменяет или расширяет себя.
- Объектно-ориентированное программирование – использует структуры данных, состоящие из полей данных и методов вместе с их взаимодействиями (объектами) для проектирования программ.
- Основанное на классах – объектно-ориентированное программирование, в котором наследование достигается путем определения классов объектов, а не самих объектов.
- Основанное на прототипах – объектно-ориентированное программирование, которое избегает классов и реализует наследование посредством клонирования экземпляров.
- Конвейерное программирование — простое изменение синтаксиса для добавления синтаксиса для вложенных вызовов функций в язык, изначально разработанный без них.
- Программирование на основе правил — сеть практических правил, которые составляют базу знаний и могут использоваться для экспертных систем, а также для вывода и решения проблем.
- Визуальное программирование – графическое манипулирование элементами программы, а не указание их текстом (например, Simulink ); также называется диаграммным программированием [1]
Обзор языка
Смотрите также
Примечания
- ^ рандеву и основанный на мониторе
- ^ abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai на основе классов
- ^ метапрограммирование шаблонов abcde
- ^ abc с использованием TPL Dataflow
- ^ только поддержка лямбда (ленивое функциональное программирование)
- ^ abc с использованием реактивных расширений (Rx)
- ^ множественная отправка, комбинации методов
- ^ abcde актерское программирование
- ^ обещания, собственные расширения
- ^ с использованием кластерного модуля Node.js или метода child_process.fork, веб-воркеров в браузере и т. д.
- ^ abcd На основе прототипа
- ^ с использованием реактивных расширений (RxJS)
- ^ в Node.js через их модуль событий
- ^ в браузерах через их собственный API EventTarget
- ^ abc чисто функциональный
- ^ параметризованные классы
- ^ неизменный
- ^ множественная отправка, а не традиционная одиночная
- ^ Акка Архивировано 2013-01-19 в Wayback Machine
Цитаты
- ^ Брэгг, SD; Дрискилл, CG (20–22 сентября 1994 г.). «Диаграммно-графические языки программирования и DoD-STD-2167A». Труды AUTOTESTCON '94 (IEEEXplore) . Институт инженеров по электротехнике и электронике (IEEE). стр. 211–220. doi :10.1109/AUTEST.1994.381508. ISBN 978-0-7803-1910-3. S2CID 62509261.
- ^ Справочное руководство по языку программирования Ada, ISO/IEC 8652:2005(E) Ред. 3, Раздел 9: Задачи и синхронизация
- ^ Справочное руководство по языку программирования Ada, ISO/IEC 8652:2005(E) Ред. 3 Приложение E: Распределенные системы
- ^ Справочное руководство по языку программирования Ada, ISO/IEC 8652:2005(E) Ред. 3, Раздел 12: Общие единицы измерения
- ^ Справочное руководство по языку программирования Ada, ISO/IEC 8652:2005(E) Ред. 3, Раздел 6: Подпрограммы
- ^ Справочное руководство по языку программирования Ada, ISO/IEC 8652:2005(E) Ред. 3, 3.9 Тегированные типы и расширения типов
- ^ Поддержка темы
- ^ Поддержка атомов
- ^ Модель памяти
- ^ Гекод
- ^ СистемаC
- ^ Boost.Iostreams
- ^ Булинк
- ^ "AraRat" (PDF) . Архивировано из оригинала (PDF) 2019-08-19 . Получено 2019-09-15 .
- ^ OpenMPI
- ^ Повышение.MPI
- ^ Повышение.MPL
- ^ ЛК++
- ^ Кастор Архивировано 25.01.2013 на Wayback Machine
- ^ Библиотека Reflect
- ^ N3534
- ^ Boost.Spirit
- ^ Clojure — Параллельное программирование
- ^ Clojure - ядро.асинхронный
- ^ Clojure — Функциональное программирование
- ^ Clojure - Макросы
- ^ Clojure - core.logic
- ^ Clojure - Руководство по потоковой обработке макросов
- ^ "Световой стол". 2019-04-08.
- ^ Мультиметоды и иерархии
- ^ Агенты и асинхронные действия
- ^ "параллелизм". CLiki .
- ^ [1] программирование ограничений внутри CL через расширения
- ^ [2] расширение потока данных
- ^ [3] путем создания DSL с использованием встроенного метапрограммирования; также см. примечание о функциональных, ограничительных и логических парадигмах, которые являются частью декларативного
- ^ [4] MPI и т.д. через расширения языка
- ^ метапрограммирование шаблонов с использованием макросов (см. C++)
- ^ [5] [6] [7] Пролог реализован как расширение языка
- ^ Common Lisp Object System см. статью Википедии о CLOS, Common Lisp Object System.
- ^ реализовано пользователем с помощью короткого макроса, пример реализации
- ^ - Визуальный инструмент программирования на основе Common Lisp
- ^ [8] расширение программирования на основе правил
- ^ [9] Архивировано 26.04.2018 на Wayback Machine через протокол метаобъектов.
- ^ Таблица особенностей языка D
- ^ Фобос стандартный алгоритм
- ^ Миксины строк языка D
- ^ Little JavaScripter демонстрирует фундаментальную общность с Scheme, функциональным языком.
- ^ Объектно-ориентированное программирование в JavaScript. Архивировано 10 февраля 2019 г. на Wayback Machine. В статье дается обзор методов объектно-ориентированного программирования в JavaScript.
- ^ "React – библиотека JavaScript для создания пользовательских интерфейсов". 2019-04-08.
- ^ "TNG-Hooks". GitHub . 2019-04-08.
- ^ "Документация Lodash". 2019-04-08.
- ^ "мори". 2019-04-08.
- ^ "Световой стол". 2019-04-08.
- ^ "TNG-Hooks". GitHub . 2019-04-08.
- ^ "Встраивание Пролога". Haskell.org .
- ^ "Функциональное реактивное программирование". HaskellWiki .
- ^ Облако Хаскелл
- ^ "Шаблон Haskell". HaskellWiki .
- ^ "Logict: Монада логического программирования с возвратом". Haskell.org .
- ^ Коллмансбергер, Стив; Эрвиг, Мартин (30 мая 2006 г.). «Правила Haskell: встраивание систем правил в Haskell» (PDF) . Университет штата Орегон .
- ^ https://jcp.org/en/jsr/detail?id=331 JSR 331: API программирования ограничений
- ^ https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
- ^ "JuliaOpt/JuMP.jl". GitHub . JuliaOpt. 11 февраля 2020 г. . Получено 12 февраля 2020 г. .
- ^ "GitHub - MikeInnes/DataFlow.jl". GitHub . 2019-01-15.
- ^ "GitHub - JuliaGizmos/Reactive.jl: Примитивы реактивного программирования для Julia". GitHub . 2018-12-28.
- ^ https://github.com/davidanthoff/Query.jl Запрос почти всего в julia
- ^ https://github.com/lilinjn/LilKanren.jl Коллекция реализаций Kanren в Julia
- ^ "GitHub - abeschneider/PEGParser.jl: PEG-парсер для Julia". GitHub . 2018-12-03.
- ^ "GitHub - gitfoxi/Parsimonious.jl: Генератор парсеров PEG для Julia". GitHub . 2017-08-03.
- ^ Ленивый https://github.com/MikeInnes/Lazy.jl
- ^ "Выполнять итерации цикла параллельно". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Write Constraints". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Начало работы с SimEvents". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Выполнять итерации цикла параллельно". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Выполнить выражение MATLAB в тексте - MATLAB eval". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Определить класс объекта". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Метаданные класса". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Объектно-ориентированное программирование". mathworks.com . Получено 21 октября 2016 г. .
- ^ "Simulink". mathworks.com . Получено 21 октября 2016 г. .
- ^ потоки на основе интерпретатора
- ^ Perl высшего порядка
- ^ Руководство по PHP, Глава 17. Функции
- ^ Руководство по PHP, Глава 19. Классы и объекты (PHP 5)
- ^ Руководство по PHP, Анонимные функции
- ^ "Параллельная обработка и многопроцессорная обработка в Python". Python Wiki . Получено 21 октября 2016 г.
- ^ "threading — Интерфейс потоков более высокого уровня". docs.python.org . Получено 21 октября 2016 г. .
- ^ "python-constraint". pypi.python.org . Получено 21 октября 2016 г. .
- ^ "DistributedProgramming". Python Wiki . Получено 21 октября 2016 г.
- ^ "Глава 9. Метапрограммирование". chimera.labs.oreilly.com . Архивировано из оригинала 23 октября 2016 . Получено 22 октября 2016 .
- ^ "Метапрограммирование". readthedocs.io . Получено 22 октября 2016 г. .
- ^ "PEP 443 – Single-dispatch generic functions". python.org . Получено 22 октября 2016 г. .
- ^ "PEP 484 – Type Hints". python.org . Получено 22 октября 2016 г. .
- ^ "PyDatalog" . Получено 22 октября 2016 г. .
- ^ "Световой стол". 2019-04-08.
- ^ «Futureverse».
- ^ "будущие пакетные инструменты".
- ^ «Magrittr: Прямой оператор трубопровода для R». cran.r-project.org\access-date=13 июля 2017 г. 17 ноября 2020 г.
- ^ Руководство по Racket: Параллелизм и синхронизация
- ^ Руководство по розетке
- ^ FrTime: Язык для реактивных программ
- ^ Руководство по ракетке: Распределенные места
- ^ Ленивая ракетка
- ^ Каналы и другие механизмы
- ^ "Модуль решения проблем".
- ^ Оператор подачи
- ^ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Модуль Cro
- ^ "Метапрограммирование: что, почему и как". 2011-12-14.
- ^ https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Параметризованные роли
- ^ «Метаобъектный протокол (MOP)».
- ^ https://docs.perl6.org/language/classtut Классы и роли
- ^ "Руководство по макросам Rust". Rust . Получено 19 января 2015 г. .
- ^ "Руководство по плагинам компилятора Rust". Rust . Получено 19 января 2015 г. .
- ^ Ссылка на Rust §6.1.3.1
- ^ Обзор языка программирования Scala
- ^ Спецификация языка Scala
- ^ "Tcl Programming/Introduction". en.wikibooks.org . Получено 22 октября 2016 г. .
- ^ "TCLLIB - Стандартная библиотека Tcl: snitfaq". sourceforge.net . Получено 22 октября 2016 г. .
- ^ Заметки для экспертов по языкам программирования, Документация по языку Wolfram.
- ^ Внешние программы, Документация по языку Wolfram Language.
Ссылки
- Джим Коплиен, Мультипарадигмальное проектирование для C++ , Addison-Wesley Professional, 1998.