Порівняння мов програмування
Мови програмування використовуються для управління поведінкою машини (частіше комп'ютера). Як і людські мови, мови програмування відповідають правилам синтаксису і семантики. Зараз існують тисячі мов програмування і щороку створюються нові. З цих мов не всі стають популярними, деякі з них просто використовуються невеликою кількістю людей, але професійні програмісти можуть користуватися десятками мов у своїй кар'єрі.
Основна порівняльна таблиця
У таблиці порівнюється загальна і технічна інформація для вибору частіше використовуваних мов програмування .
Увага! У цій таблиці можуть бути відсутні деякі відомості.
Мова
Передбачуване використання
Імперативне
Об'єктно-орієнтоване
Функційне
Процедурне
Узагальнене
Рефлективне
Подійно-орієнтоване
Інші парадигми
Стандартизована ?
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
Застосунки, бізнес-логіка, загального призначення, 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, R6 RS
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
явне
номінальна
Статична
↑ Unsafe operations are well isolated by a "Unchecked_" prefix.
↑ with optional dynamic type casting (see dynamic cast )
↑ а б в г д е It is almost safe, unsafe features are not commonly used.
↑ with optional dynamic type (see dynamic member lookup [en] )
↑ Optionally, typing can be explicitly implied by the first letter of the identifier (known as implicit typing within the Fortran community).
↑ dynamic checking of type extensions i.e. inherited types
↑ explicit for static types
↑ optional for formal and virtual procedures
Відгук системи
Більшість мов програмування виводять повідомлення про помилки та/або винятки якщо операція не виконана.
Нижче наведені мови виводять ці повідомлення.
↑ gcc can warn on unchecked error status. Newer versions of Visual Studio usually throw exceptions on failed I/O when using stdio.
↑ g++ can warn on unchecked error status. Newer versions of Visual Studio usually throw exceptions on failed I/O when using stdio.
↑ Considerable error checking can be enabled optionally, but by default Perl is not failsafe.
Посилання
Примітки
↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 , Section 6: Subprograms
↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 , Section 12: Generic Units
↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 , Section 9: Tasks and Synchronization
↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
↑ Vak.ru
↑ ISO 1538:1984
↑ Vak.ru (PDF) . Архів оригіналу (PDF) за 24 березня 2017. Процитовано 25 червня 2014 .
↑ JSR 274
↑ CM.bell-labs.com . Архів оригіналу за 28 березня 2015. Процитовано 25 червня 2014 .
↑ ANSI C89, ISO/IEC 9899:1990, 1999, 2011
↑ ISO/IEC 14882:1998, 2003, 2011
↑ Codeproject.com: Functional Programming in C# 3.0 using Lambda Expression
↑ ECMA-334; ISO/IEC 23270:2006
↑ Softvelocity.com
↑ ECMA-367; ISO/IEC 25436:2006
↑ JSR 241
↑ The Haskell 2010 Language Report . Процитовано 7 грудня 2011 . Most Haskell implementations extend the Haskell 2010 standard.
↑ 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
↑ 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 .
↑ ISO/IEC 10514-1:1996
↑ ISO 7185
↑ PHP Manual , Chapter 19. Classes and Objects (PHP 5) ,
↑ PHP Manual , Chapter 17. Functions
↑ SMLNJ.org
↑ The Go Programming Language Specification
↑ Sheng Liang, Gilad Bracha. Dynamic class loading in the Java virtual machine . Volume 33, Issue 10 of ACM SIGPLAN Notices, October 1998.
↑ Developer.apple.com
↑ Scala runs on the Java Virtual Machine from which it inherits the runtime exception handling.
Див. також