Мови програмування можна згрупувати за кількістю та типами підтримуваних парадигм.

Підсумки парадигм Коротке посилання на парадигми програмування, перелічені в цій статті.

Одночасне програмування – наявність мовних конструкцій для паралелізму, це може включати багатопотоковість, підтримку розподілених обчислень, передачу повідомлень, спільні ресурси (включаючи спільну пам’ять) або обіцянки Програмування акторів – одночасне обчислення з акторами, які ухвалюють локальні рішення у відповідь на середовище (здатні до егоїстичної або конкурентної поведінки) Програмування в обмеженнях – зв’язки між змінними виражаються як обмеження (або мережі обмежень), що спрямовує допустимі рішення (використовує задоволення обмежень або симплексний алгоритм) Програмування потоку даних – примусовий перерахунок формул при зміні значень даних (наприклад, електронні таблиці) Декларативне програмування – описує, що має виконувати обчислення, без вказівки детальних змін стану порівняно з імперативним програмуванням (функціональне та логічне програмування є основними підгрупами декларативного програмування) Розподілене програмування – підтримка кількох автономних комп’ютерів, які спілкуються через комп’ютерні мережі Функціональне програмування – використовує оцінку математичних функцій і уникає стану та змінних даних Узагальнене програмування – використовує алгоритми, написані в термінах типів, які будуть визначені пізніше, які потім створюються за потреби для конкретних типів, наданих як параметри Імперативне програмування – явні оператори, які змінюють стан програми Логічне програмування – використовує явну математичну логіку для програмування Метапрограмування – написання програм, які пишуть або маніпулюють іншими програмами (або собою) як їхніми даними, або виконують частину роботи під час компіляції, яка інакше була б виконана під час виконання Шаблонне метапрограмування – методи метапрограмування, у яких шаблони використовуються компілятором для створення тимчасового вихідного коду, який компілятор об’єднує з рештою вихідного коду, а потім компілює Рефлексивне програмування – методи метапрограмування, за яких програма змінює або розширює саму себе Об’єктно-орієнтоване програмування – використовує структури даних, що складаються з полів даних і методів разом з їх взаємодією (об’єктами) для розробки програм На основі класів – об’єктно-орієнтоване програмування, у якому успадкування досягається шляхом визначення класів об’єктів, а не самих об’єктів. На основі прототипу – об’єктно-орієнтоване програмування, яке уникає класів і реалізує успадкування через клонування екземплярів Конвеєрне програмування – проста зміна синтаксису для додавання синтаксису до викликів вкладених функцій до мови, спочатку розробленої без жодного Програмування на основі правил – мережа емпіричних правил, які містять базу знань і можуть бути використані для експертних систем, дедукції та вирішення проблем Візуальне програмування – маніпулювання елементами програми графічно, а не вказуючи їх текстово (наприклад, Simulink); також називається діаграмним програмуванням.

Огляд мови + Список мультипарадигмальних мов програмування Мова Кількість парадигм Одночасна Обмеження Потік даних Декларативна Розподілена Функціональна Метапрограмування Універсальна Імперативна Логічна Рефлексія Об'єктно­орієнтована Конвеєрна Візуальна На основі правил Інші парадигми AdaAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and SynchronizationAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed SystemsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic UnitsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: SubprogramsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions 5 rendezvous and monitor-like based ALF 2 AmigaE 2 APL 3 Array (multi-dimensional) BETA 3 C++ 7 (15) Thread supportAtomics supportMemory model Gecode Boost.Iostreams Boolinq OpenMPIBoost.MPI Boost.MPL Template metaprogramming LC++Castor Reflect Library N3534 Boost.Spirit Array (multi-dimensional; using STL) C# 6 (7) using TPL Dataflow only lambda support (lazy functional programming) reactiveusing Reactive Extensions (Rx) ChucK 3 Claire 2 Clojure 5 Clojure - Concurrent ProgrammingClojure - core.async Clojure - Functional Programming Clojure - Macros Clojure - core.logic Clojure - Threading Macros Guide Multiple dispatch,Multimethods and Hierarchies AgentsAgents and Asynchronous Actions Common Lisp 7 (14) many concurrency paradigms implemented as language extensions constraint programming inside CL through extensions dataflow extension by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative MPI, etc via language extensions template metaprogramming using macros (see C++) Prolog implemented as a language extension (multiple dispatch, method combinations)Common Lisp Object System see Wikipedia article on CLOS, the Common Lisp Object System. implemented by the user via a short macro, example of implementation rule-based programming extension Multiple dispatch, meta-OOP system, through the Meta Object Protocol Language is extensible via metaprogramming. Curl 5 Curry 4 D (версія 2.0)D Language Feature TablePhobos std.algorithm 6 D language String Mixins Delphi 3 Dylan 3 Class-based E 3 ECMAScriptThe Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.Object Oriented Programming in JavaScript gives an overview of object-oriented programming techniques in JavaScript. (ActionScript, E4X, JavaScript, JScript) 4 (5) using Node.js' cluster module or child_process.fork method, web workers in the browser, etc. Prototype-based reactive,using Reactive Extensions (RxJS) event drivenin Node.js via their events modulein browsers via their native EventTarget API Erlang 3 Elixir 4 Elm 6 reactive F# 7 (8) actor programming reactive Fortran 4 (5) purely functional parameterized classes Array (multi-dimensional)Go 4 Haskell 8 (15) Prolog embedding Cloud Haskell (lazy) https://web.engr.oregonstate.edu/~erwig/HaskellRules/HaskellRules_June06.pdf Io 4 J 3 Java 6 https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK Julia 9 (17) https://github.com/davidanthoff/Query.jl Query almost anything in julia (eager) https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia (multiple dispatch, not traditional single) Multiple dispatch, Array (multi-dimensional); optionally lazyLazy https://github.com/MikeInnes/Lazy.jl and reactive (with libraries)Kotlin 8 LabVIEW 4 Lava 2 LispWorks (версія 6.0 з підтримкою семантичної багатопроцесорної обробки, правил, логіки (Prolog), CORBA) 9 Lua 3 MATLAB 6 (10) Array (multi-dimensional) Nemerle 7 Object Pascal 4 OCaml 4 Oz 11 Perl 8 (9) interpreter based threads Moose Higher Order Perl PHPPHP Manual, Chapter 17. FunctionsPHP Manual, Chapter 19. Classes and Objects (PHP 5)PHP Manual, Anonymous functions 4 Poplog 3 Prograph 3 Python 5 (10) structured R 4 (6) Array (multi-dimensional) Racket 10 Racket Guide: Concurrency and Synchronization The Rosette Guide FrTime: A Language for Reactive Programs Racket Guide: Distributed Places LazyLazy Racket Raku 10 https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles https://docs.perl6.org/language/classtut Classes and Roles Multiple dispatch, lazy lists, reactive. ROOP 3 Ruby 5 Rust (версія 1.0.0-alpha) 6 linear, affline, and ownership types Sather 2 ScalaAn Overview of the Scala Programming LanguageScala Language Specification 9 actor programming Akka Simula 2 SISAL 3 Spreadsheet 2 Swift 7 block-structured Tcl with Snit extension 3 Visual Basic .NET 6 (7) reactive Windows PowerShell 6 Wolfram Language & Mathematica 13Notes for Programming Language Experts, Wolfram Language Documentation. (14) External Programs, Wolfram Language Documentation. Knowledge Based

Дивіться також

Парадигма програмування Категоріальний список мов програмування Предметно-орієнтована мова програмування Предметно-орієнтоване мультимоделювання

Список літератури

Джим Коплієн, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.

Коментарі

Примітки