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