Порівняння мов програмування

Мови програмування  використовуються для управління поведінкою машини (частіше комп'ютера). Як і людські мови, мови програмування відповідають правилам синтаксису і семантики. Зараз існують тисячі мов програмування і щороку створюються нові. З цих мов не всі стають популярними, деякі з них просто використовуються невеликою кількістю людей, але професійні програмісти можуть користуватися десятками мов у своїй кар'єрі.

Основна порівняльна таблиця[ред. | ред. код]

У таблиці порівнюється загальна і технічна інформація для вибору частіше використовуваних мов програмування. Увага! У цій таблиці можуть бути відсутні деякі відомості.

Мова Передбачуване використання Імперативне Об'єктно-орієнтоване Функційне Процедурне Узагальнене Рефлективне Подійно-орієнтоване Інші парадигми Стандартизована?
ActionScript 3.0 Застосунки, клієнт-сервер, веб X X X 1996, ECMA
Ada Застосунки, вбудовані системи, системи реального часу, системне програмування X X X[1] X[2] паралельні,[3] розподілені[4] обчислення 1983, 2005, 2012, ANSI, ISO, ГОСТ 27831-88[5]
Aldor[en] Предметно-орієнтована, символьні обчислення X X X Ні
ALGOL 58[en] Застосунки X Ні
ALGOL 60[en] Застосунки X 1960, IFIP WG 2.1, ISO[6]
ALGOL 68[en] Застосунки X паралельні обчислення 1968, IFIP WG 2.1, GOST 27974-88,[7]
Ateji PX[en] Паралельні застосунки X пі-числення Ні
APL Застосунки, обробка даних масиво-орієнтоване, «мовчазне» програмування 1989, ISO
Мова асемблера Загального призначення X Будь-яке, синтаксис зазвичай дуже специфічний, пов'язаний з цільовим процесором Ні
AutoHotkey Автоматизація графічного інтерфейса, дуже специфічна для предметної області X Ні
AutoIt Автоматизація графічного інтерфейса, дуже специфічна для предметної області X X X Ні
BASIC Застосунки, навчання X X 1983, ANSI, ISO
BeanShell Застосунки, написання скриптів X X X X In progress, JCP[8]
BLISS[en] Системне програмування X Ні
BlitzMax[en] Застосунки, ігри X X X Ні
Boo Застосунки Ні
Bro Специфічна для предметної області, застосунки X X Ні
C Застосунки, системне програмування,[9] загального призначення, низькорівневі операції X X 1989, ANSI C89, ISO C90, ISO C99, ISO C11[10]
C++ Застосунки, системне програмування X X X X X 1998, ISO/IEC 1998, ISO/IEC 2003, ISO/IEC 2011[11]
C# Застосунки, RAD, бізнес-логіка, клієнтська сторона, загального призначення, серверна сторона, Web, роботи X X X[12] X X X структурне, конкурентне 2000, ECMA, ISO[13]
Clarion[en] Загального призначення, бізнес-логіка, Web X X X[14] Невідомий
Clean[en] Загального призначення X X Ні
Clojure Загального призначення X конкурентне Ні
CLU Загального призначення X X X X Ні
COBOL Застосунки, бізнес-логіка X X X ANSI X3.23 1968, 1974, 1985; ISO/IEC 1989:1985, 2002, 2014
Cobra[en] Застосунки, бізнес-логіка, загального призначення, Web X X X X X Ні
ColdFusion[en] (CFML) Web X X Ні
Common Lisp Загального призначення X X X X X 1994, ANSI
Мова Intended use Імперативне Об'єктно-орієнтоване Функційне Процедурне Узагальнене Рефлективне Подійно-орієнтоване Інші парадигми Стандартизована?
COMAL 80 Навчання X X Ні
Crystal 1.0.0 Навчання X X X Ні
Cython Застосунки, загального призначення, обчислення X X X X Аспектно-орієнтоване Ні
D Застосунки, системне програмування X X X X генеративне, конкурентне Ні
Dart Застосунки, Web X X структурне Ні
Dylan Застосунки X X Ні
Eiffel Застосунки X X X 2005, ECMA, ISO[15]
Erlang Застосунки, розподілене, телеком X конкурентне, розподілене Ні
Euphoria[en] Застосунки. Оскільки інтерпретатор є спільним для коду системи та програми, система не є цільовим використанням, оскільки збої програми вплинуть на всю систему. X X Ні
Factor[en] стекова Ні
FP[en] X Ні
F# Застосунки X X X X Ні
Forth Загального призначення X стекове 1994, ANSI
Fortran Застосунки, обчислення X X X X 1966, ANSI 66, ANSI 77, MIL-STD-1753, ISO 90, ISO 95, ISO 2003, ISO/IEC 1539-1:2010 (2008)
FreeBASIC Застосунки, обчислення X X X X Ні
G2 Застосунки, висновування, експертні системи X X X загальне графічне середовище розробки та виконання Ні
Gambas Застосунки X X X Ні
Game Maker Language Застосунки, ігри X X X Ні
GLBasic[en] Застосунки, ігри X X X просте об'єктно-орієнтоване Ні
Go Застосунки, системне програмування X конкурентне Ні
Gosu[en] Застосунки, загального призначення, написання скриптів, Web X X X X Ні
GraphTalk Застосунки X логічне Ні
Groovy Застосунки, загального призначення, написання скриптів, Web X X X Аспектно-орієнтоване In progress, JCP[16]
Harbour[en] Застосунки, бізнес-логіка, обробка даних, загального призначення, Web X X X X X X декларативне Ні
Haskell Застосунки X X ліниві обчислення 2010, Haskell 2010[17]
Haxe Застосунки, загального призначення, Web X X X X X Ні
HyperTalk[en] Застосунки, RAD, загального призначення X X слабко типізована Невідомо
Io[en] Застосунки, host-driven scripting X X Ні
Мова Intended use Імперативне Об'єктно-орієнтоване Функційне Процедурне Узагальнене Рефлективне Подійно-орієнтоване Інші парадигми Стандартизована?
ISLISP[en] Загального призначення X X X X 1997, ISO
J Обробка даних масиво-орієнтоване, комбінаторне, безточкове Ні
JADE Застосунки, розподілене X X Ні
Java Застосунки, бізнес-логіка, клієнтська сторона, загального призначення, серверна сторона, Web X X X X конкурентне De facto стандарт за Java Language Specification
JavaScript Клієнтська сторона, серверна сторона, Web X X X X Прототипне 1997, ECMA
Joy[en] Дослідження X стекова Ні
K Обробка даних, бізнес-логіка масиво-орієнтоване, безточкове Невідомо
Kotlin Застосунки, мобільні застосунки, серверна сторона, клієнтська сторона, Web (JavaScript, HTML, CSS) X X X X
LabVIEW (G) Застосунки, промислове моделювання і автоматизація програмування потоків даних, візуальне Ні
Lisp Загального призначення X Невідомо
Livecode[en] Застосунки, RAD, загального призначення X X слабко типізована Ні
Logtalk[en] Штучний інтелект, застосунки X X X логічне Ні
Lua Застосунки, embedded scripting X X[18] X X X Аспектно-орієнтоване Ні[19]
Maple Символьні обчислення, обчислення X X X X розподілене Ні
Mathematica Символьні обчислення X X X X логічне, розподілене Ні
MATLAB Дуже специфічна для предметної області, обчислення X X X Ні
Modula-2[en] Застосунки, системне програмування X X 1996, ISO[20]
Modula-3[en] Застосунки X X X Ні
Oberon Застосунки, системне програмування X X Ні
Object Pascal (Delphi) Застосунки, загального призначення, мобільні застосунки, Web X X X X X X структурне Ні
Objective-C Застосунки, загального призначення X X X конкурентне Ні
Occam Загального призначення X X конкурентне, process-oriented[en] Ні
Opa Веб-застосунки X X X розподілене Ні
Oxygene Застосунки X X X Ні
Oz[en] Застосунки, розподілені обчислення, навчання X X X конкурентне, логічне Ні
Pascal Застосунки, навчання X X 1983, ISO[21]
Perl Застосунки, написання скриптів, обробка текстів, Web X X X X X X Ні
PHP Серверна сторона, веб-застосунки, Web X X[22] X[23] X Ні
PL/I Застосунки X X X 1969
Мова Intended use Імперативне Об'єктно-орієнтоване Функційне Процедурне Узагальнене [[[Рефлексія (програмування)|Рефлективне]] Подійно-орієнтоване Інші парадигми Стандартизована?
Plus[en] Застосунки, розробка систем X X Ні
Prolog Застосунки, штучний інтелект логічне 1995, ISO
PureBasic[en] Застосунки X Ні
Python Застосунки, загального призначення, Web, написання скриптів, ШІ, наукові обчислення X X X X Аспектно-орієнтоване Ні
Racket Навчання, загального призначення, написання скриптів X X X X модульне, логічне, метапрограмування Ні
REALbasic[en] Застосунки X Невідомо
REBOL розподілене X X X dialected[en] Ні
IBM RPG Застосунки, системне програмування X X Ні
Ruby Застосунки, написання скриптів, Web X X X X Аспектно-орієнтоване 2011(JIS X 3017), 2012(ISO/IEC 30170)
Rust Застосунки, системне програмування X X X X X конкурентне Ні
S Застосунки, статистика X X X X Ні
S-Lang[en] Застосунки, обчислення, написання скриптів X X Ні
Scala Застосунки, розподілене, Web X X X X X X De facto стандарт via Scala Language Specification (SLS)
Scheme Навчання, загального призначення X 1998, R6RS
Seed7[en] Застосунки, загального призначення, написання скриптів, Web X X X X багатопарадигмальне, розширюване, структурне Ні
Simula Навчання, загального призначення X X X Дискретно-подійне моделювання, багатопоточне (квазіпаралельне) виконання програм 1968
Small Basic Застосунки, навчання, ігри X X компонентно-орієнтоване Ні
Smalltalk Застосунки, навчання X X X конкурентне, декларативне 1998, ANSI
SNOBOL Обробка текстів Невідомо
Standard ML Застосунки X X X 1997, SML '97[24]
Swift Застосунки, загального призначення X X X X конкурентне Ні
Tcl Застосунки, написання скриптів, Web X X X X Ні
Visual Basic Застосунки, RAD, навчання, бізнес-логіка, загального призначення, (включно з VBA), автоматизація офісних застосунків X X X компонентно-орієнтоване Ні
Visual Basic .NET Застосунки, RAD, навчання, Web, бізнес-логіка, загального призначення X X X X X Ні
Visual FoxPro[en] Застосунки X дата-центричне, логічне Ні
Visual Prolog[en] Застосунки X X X X декларативне, логічне Ні
Windows PowerShell Системне адміністрування, скрипти X X X X конвеєрне Ні
XL[en] X X concept programming[en] Ні
Xojo[en] Застосунки, RAD, загального призначення, Web X X X X X Ні
Мова Intended use Імперативне Об'єктно-орієнтоване Функційне Процедурне Узагальнене Рефлективне Подійно-орієнтоване Інші парадигми Стандартизована?

Типи систем[ред. | ред. код]

Короткі визначення[ред. | ред. код]

Номінальна система типів означає, що сумісність типізації та/або еквівалентність вирішується на основі очевидних оголошень та імен.

Структурна система типів оначає, що сумісність типізації та/або еквівалентність вирішується на основі визначення і характеристики типів.

Перевірка типів визначає, чи будуть перевіряються типи, як і коли.

Статична перевірка означає, що помилки типу повідомляються на основі тексту програми (вихідного коду). Динамічна перевірка означає, що помилки типу повідомляються на основі динаміки чи іншій програмі (під час виконання) поведінки.

Мова Типобезпечність Приведення типів Сумісність та еквівалентність типів Перевірка типів
ActionScript 3.0 safe неявне з можливим явним Статична
Ada safe[TS 1] явне номінальна Статична
Aldor[en] unsafe неявне Статична
ALGOL 58[en] safe явне Статична
ALGOL 60[en] safe явне Статична
ALGOL 68[en] safe явне структурна Статична & tagged unions[en]
APL safe Динамічна
AutoHotkey безтипова n/a n/a n/a
Ateji PX[en] safe явне номінальна Статична
BASIC safe явне номінальна Статична
BLISS[en] typeless n/a n/a n/a
BeanShell safe номінальна Динамічна
Boo safe неявне з можливим явним Статична з опціональною динамічною
Bro safe неявне з можливим явним номінальна Статична
C unsafe явне номінальна Статична
C++ (ISO/IEC 14882) unsafe явне номінальна Статична[TS 2]
C# unsafe[TS 3] неявне з можливим явним номінальна Статична[TS 4]
Clean[en] safe неявне Статична
Clojure safe неявне з можливим явним Динамічна
COBOL safe явне номінальна Статична
ColdFusion (CFML) safe неявне Динамічна
Common Lisp safe неявне з можливим явним Динамічна
Curl[en] safe номінальна
Cython safe неявне з можливим явним номінальна (розширені типи) і структурна (Python) Динамічна з опціональною статичною
D unsafe[TS 3] явне номінальна Статична
Dylan safe Динамічна
Dynace safe неявне Динамічна
Eiffel safe номінальна Статична
Erlang safe неявне Динамічна
Euphoria[en] safe явне, з неявним для об'єктів номінальна Статична, динамічна для об'єктів
F# safe неявне номінальна Статична
Falcon safe неявне структурна Динамічна
Forth typeless n/a n/a n/a
Fortran safe явне[TS 5] номінальна Статична
Gambas safe явне номінальна
GLBasic[en] safe явне. Неявні оголошення можливі у налаштуваннях проєкта номінальна Статична
Go[25] safe неявне з можливим явним структурна Статична
Gosu[en] safe частково неявне (локальне приведення типів) номінальна (subclassing) і структурна (структурна) Статична
Groovy safe неявне з можливим явним Динамічна з опціональною статичною
Harbour[en] safe неявне з можливим явним Динамічна
Haskell safe неявне з можливим явним структурна Статична
Haxe safe неявне з можливим явним номінальна (subclassing) і структурна (структурна) Статична з опціональною динамічною
Io[en] safe неявне Динамічна
ISLISP[en] safe Динамічна
J safe Динамічна
Java safe[26] явне номінальна Статична
JavaScript safe неявне структурна Динамічна
Joy[en] safe Динамічна
Kotlin safe частково неявне (локальне приведення типів) номінальна Статична
LabVIEW safe
Lua safe неявне Динамічна
Maple safe Динамічна
Mathematica safe Динамічна
MATLAB M-code safe Динамічна
Modula-2[en] unsafe[TS 3] явне номінальна Статична
Modula-3[en] unsafe[TS 3] явне структурна Статична
Oberon safe явне номінальна Статична і частково динамічна[TS 6]
Objective-C safe явне номінальна Динамічна з опціональною статичною[27]
OCaml safe неявне з можливим явним структурна Статична
Object Pascal (Delphi) safe явне номінальна Статична
Opa safe неявне з можливим явним структурна Статична
Oxygene unsafe неявне Статична
Oz[en] safe неявне структурна Динамічна
Pascal unsafe[TS 3] явне номінальна Статична
Perl 5 неявне Динамічна
Perl 6 частково неявне[TS 7] Динамічна з опціональною статичною
PHP неявне Динамічна
Plus[en] safe явне структурна Статична, динамічна (опціонально)
Prolog Динамічна
Pure[en] Динамічна
Python safe неявне структурна Динамічна
REBOL safe неявне Динамічна
IBM RPG unsafe Статична
Ruby safe неявне структурна Динамічна
Rust safe неявне з можливим явним Статична з опціональною динамічною
S Динамічна
S-Lang[en] safe неявне Динамічна
Scala safe частково неявне (локальне приведення типів) номінальна (subclassing) і структурна (структурна) Статична
Scheme safe неявне Динамічна (прихована)
Seed7[en] safe явне номінальна Статична
Simula safe Статична[TS 8]
Smalltalk safe неявне Динамічна
Stіard ML safe неявне з можливим явним структурна Статична
Tcl Динамічна
Visual Basic safe неявне з можливим явним номінальна Статична
Visual Basic .NET unsafe[TS 3] явне Статична
Visual Prolog[en] safe частково неявне номінальна Статична
Windows PowerShell safe неявне Динамічна
XL[en] safe номінальна Статична
Xojo[en] safe явне номінальна Статична
  1. Unsafe operations are well isolated by a "Unchecked_" prefix.
  2. with optional dynamic type casting (see dynamic cast)
  3. а б в г д е It is almost safe, unsafe features are not commonly used.
  4. with optional dynamic type (see dynamic member lookup[en])
  5. Optionally, typing can be explicitly implied by the first letter of the identifier (known as implicit typing within the Fortran community).
  6. dynamic checking of type extensions i.e. inherited types
  7. explicit for static types
  8. optional for formal and virtual procedures

Відгук системи[ред. | ред. код]

Більшість мов програмування виводять повідомлення про помилки та/або винятки якщо операція не виконана. Нижче наведені мови виводять ці повідомлення.

Мова Failsafe I/O
Ada Так (винятки)
ALGOL Так (винятки або повернуті значення залежно від функції)
AutoHotkey Ні (має бути явно перевірена глобальна змінна ErrorLevel)
Bro Так
C Ні[FSIO 1]
C++ Ні[FSIO 2]
C# Так
COBOL Ні
Common Lisp Так
D Так[джерело?]
Eiffel Ні – залежить від бібліотеки і не визначено самою мовою
Erlang Так
Falcon Так
Fortran Так
GLBasic[en] Ні – у загальному випадку програма аварійно завершується
Go Ні
Gosu[en] Так
Harbour[en] Так
Haskell Так
ISLISP[en] Так
Java Так
Kotlin Так
LabVIEW Так
Lua Ні (деякі функції не повертають попереджень чи винятків)
Mathematica Так
Object Pascal (Delphi) Деякі
Objective-C Так (exceptions)
OCaml Так (exceptions)
Perl Ні[FSIO 3]
PHP Так
Python Так
REBOL Так
Ruby Так
Rust Так
S Невідомий
Scala Так[28]
Standard ML Так[джерело?]
Tcl Так
Visual Basic Так
Visual Prolog[en] Так
Xojo[en] Так
Language Failsafe I/O
  1. gcc can warn on unchecked error status. Newer versions of Visual Studio usually throw exceptions on failed I/O when using stdio.
  2. g++ can warn on unchecked error status. Newer versions of Visual Studio usually throw exceptions on failed I/O when using stdio.
  3. Considerable error checking can be enabled optionally, but by default Perl is not failsafe.

Посилання[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
  2. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
  3. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
  4. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
  5. Vak.ru
  6. ISO 1538:1984
  7. Vak.ru
  8. JSR 274
  9. CM.bell-labs.com. Архів оригіналу за 28 березня 2015. Процитовано 25 червня 2014.
  10. ANSI C89, ISO/IEC 9899:1990, 1999, 2011
  11. ISO/IEC 14882:1998, 2003, 2011
  12. Codeproject.com: Functional Programming in C# 3.0 using Lambda Expression
  13. ECMA-334; ISO/IEC 23270:2006
  14. Softvelocity.com
  15. ECMA-367; ISO/IEC 25436:2006
  16. JSR 241
  17. The Haskell 2010 Language Report. Процитовано 7 грудня 2011. Most Haskell implementations extend the Haskell 2010 standard.
  18. Lua doesn't have explicit "object" type (more general type of "table" is used for object definition), but does have explicit syntax for object method calling
  19. Version releases are accompanied with a definitive Lua Reference Manual showing full syntax and semantics; a reference implementation, and a test suite. These are used to generate other Lua VM implementations and compilers such as Kahlua and LLVM-Lua.
  20. ISO/IEC 10514-1:1996
  21. ISO 7185
  22. PHP Manual, Chapter 19. Classes and Objects (PHP 5),
  23. PHP Manual, Chapter 17. Functions
  24. SMLNJ.org
  25. The Go Programming Language Specification
  26. Sheng Liang, Gilad Bracha. Dynamic class loading in the Java virtual machine. Volume 33, Issue 10 of ACM SIGPLAN Notices, October 1998.
  27. Developer.apple.com
  28. Scala runs on the Java Virtual Machine from which it inherits the runtime exception handling.

Див. також[ред. | ред. код]