Porównanie języków programowania - Comparison of programming languages

Języki programowania służą do kontrolowania zachowania maszyny (często komputera ). Podobnie jak języki naturalne, języki programowania przestrzegają zasad składni i semantyki .

Istnieją tysiące języków programowania i każdego roku powstają nowe. Niewiele języków kiedykolwiek stało się na tyle popularne, aby używało ich więcej niż kilka osób, ale profesjonalni programiści mogą używać dziesiątek języków w swojej karierze.

Większość języków programowania nie jest ustandaryzowana przez międzynarodowy (lub krajowy) standard, nawet powszechnie używane, takie jak Perl czy Standard ML (mimo nazwy). Godne uwagi standaryzowane języki programowania obejmują ALGOL , C , C++ , JavaScript ( pod nazwą ECMAScript ), Smalltalk , Prolog , Common Lisp , Scheme ( standard IEEE ), ISLISP , Ada , Fortran , COBOL , SQL i XQuery .

Ogólne porównanie

W poniższej tabeli porównano informacje ogólne i techniczne dotyczące wybranych powszechnie używanych języków programowania . Więcej informacji można znaleźć w artykułach dotyczących poszczególnych języków.

Język Przeznaczenie Tryb rozkazujący Zorientowany obiektowo Funkcjonalny Proceduralny Rodzajowy Odblaskowy Oparte na wydarzeniach Inny paradygmat (y) Standaryzowane ?
1C: język programowania dla przedsiębiorstw Aplikacja , RAD , biznes, ogólne , web , mobile TAk TAk TAk TAk TAk TAk Obiektowe ,

Programowanie oparte na prototypach

Nie
ActionScript 3.0 Aplikacja, po stronie klienta , web TAk TAk TAk TAk 1996, ECMA
Ada Aplikacja, osadzona , w czasie rzeczywistym , system TAk TAk TAk TAk współbieżne , rozproszone , 1983, 2005, 2012, ANSI, ISO, GOST 27831-88
Aldor Wysoce specyficzne dla domeny , symboliczne przetwarzanie TAk TAk TAk Nie
ALGOL 58 Podanie TAk Nie
ALGOL 60 Podanie TAk TAk TAk 1960, IFIP WG 2.1 , ISO
ALGOL 68 Podanie TAk TAk TAk TAk równoległy 1968, IFIP WG 2.1 , GOST 27974-88 ,
Ateji PX Aplikacja równoległa TAk rachunek pi Nie
APL Wniosek, przetwarzanie danych TAk TAk TAk TAk TAk TAk TAk zorientowany na tablicę , milczący 1989, ISO
język programowania Ogólny TAk dowolna, składnia jest zwykle bardzo specyficzna, powiązana z docelowym procesorem IEEE 694-1985
Automatyczny klawisz skrótu Automatyzacja GUI ( makra ), wysoce specyficzne dla domeny TAk TAk TAk TAk Nie
AutoIt Automatyzacja GUI (makra), wysoce specyficzne dla domeny TAk TAk TAk Nie
Balerina Integracja, agile, po stronie serwera , ogólne TAk TAk TAk TAk TAk programowanie współbieżne, transakcyjne, statyczne i silnie typizowane, programowanie schematyczne/wizualne 2018 De facto standard za pośrednictwem specyfikacji językowej Ballerina
Grzmotnąć Powłoka , skrypty TAk TAk Nie, ale opcjonalnie POSIX.2
PODSTAWOWY Aplikacja, edukacja TAk TAk 1983, ANSI, ISO, ECMA
Powłoka fasoli Aplikacja, skrypty TAk TAk TAk TAk W toku, JCP
ROZKOSZ System TAk Nie
BlitzMax Aplikacja, gra TAk TAk TAk TAk Nie
Gwizd Aplikacja, skrypty do gier TAk Nie
brachu specyficzne dla domeny, aplikacja TAk TAk Nie
C Aplikacja, system, ogólne przeznaczenie, operacje niskiego poziomu TAk TAk 1989, ANSI C89, ISO C90, ISO C99, ISO C11, ISO C18
C++ Aplikacja systemowa TAk TAk TAk TAk TAk 1998. ISO/IEC 2003, ISO/IEC 2011, ISO/IEC 2014, ISO/IEC 2017
C# Aplikacja, RAD, biznes, po stronie klienta, ogólne, po stronie serwera, sieć TAk TAk TAk TAk TAk TAk TAk zorganizowany, współbieżny 2000, ECMA, ISO
Ostry Ogólne, biznesowe, internetowe TAk TAk TAk Nieznany
Czysty Ogólny TAk TAk Nie
Clojure Ogólny TAk równoległy Nie
CLU Ogólny TAk TAk TAk TAk Nie
COBOL Aplikacja, biznes TAk TAk TAk ANSI X3.23 1968, 1974, 1985; ISO/IEC 1989:1985, 2002, 2014
Kobra Aplikacja, biznes, ogólne, web TAk TAk TAk TAk TAk Nie
ColdFusion (CFML) Sieć TAk TAk Nie
Wspólne seplenienie Ogólny TAk TAk TAk TAk TAk TAk TAk rozszerzalna składnia , zorientowany na tablice , makra składniowe , wielokrotne wysyłanie , współbieżne 1994, ANSI
COMAL 80 Edukacja TAk TAk Nie
Kryształ Ogólny cel TAk TAk TAk TAk faza alfa Nie
Curry Podanie TAk TAk leniwa ocena , niedeterminizm De facto standardowo przez Curry Language Report
Cytona Zastosowanie, ogólne, obliczenia numeryczne TAk TAk TAk TAk zorientowany aspektowo Nie
D Aplikacja systemowa TAk TAk TAk TAk TAk TAk generatywna, współbieżna Nie
Strzałka Aplikacja, sieć, po stronie serwera, urządzenia mobilne, IoT TAk TAk TAk TAk TAk TAk zbudowany Standard Ecma-408
Dylan Podanie TAk TAk Nie
Eiffla Ogólne, aplikacyjne, biznesowe, po stronie klienta, po stronie serwera, WWW (EWF) TAk TAk TAk TAk Tak Erl-G Tak Agenci rozproszony SCOOP , bezpieczny w pustce 2005, ECMA, ISO
ROZMACH Edukacja TAk TAk uporządkowane , stopniowe udoskonalanie Nie
Eliksir Aplikacja, dystrybuowana TAk TAk TAk współbieżne, rozproszone Nie
Erlang Aplikacja, dystrybuowana TAk TAk TAk współbieżne, rozproszone Nie
Euforia Podanie TAk TAk Nie
Czynnik Ogólny TAk może być oglądany jako TAk TAk zorientowany na stos Nie
FP TAk Nie
F# Podanie TAk TAk TAk TAk TAk TAk TAk Nie
Naprzód Ogólny TAk może być oglądany jako zorientowany na stos 1994, ANSI
Fortran Zastosowanie, obliczenia numeryczne TAk TAk TAk TAk TAk oparty na tablicach, wektorowy, współbieżny, natywny równoległość pamięci rozproszonej/współdzielonej 1966, ANSI 66, ANSI 77, MIL-STD-1753, ISO 90, ISO 95, ISO 2003, ISO/IEC 1539-1:2010 (2008), ISO/IEC JTC1/SC22/WG5 N2145 (2018)
FreeBASIC Zastosowanie, obliczenia numeryczne TAk TAk TAk TAk Nie
Gambas Podanie TAk TAk TAk Nie
Język Kreatora Gier Aplikacja, gry TAk TAk TAk Nie
GLBasic Aplikacja, gry TAk TAk TAk proste zorientowane obiektowo Nie
Udać się Aplikacja, sieć, po stronie serwera TAk TAk TAk TAk równoległy De facto standard w specyfikacji języka Go
Gosu Aplikacje, ogólne, skrypty, web TAk TAk TAk TAk Nie
GraphTalk Podanie TAk logika Nie
Groovy Aplikacje, ogólne, skrypty, web TAk TAk TAk TAk TAk TAk TAk metaprogramowanie W toku, JCP
Port Aplikacja, biznes, przetwarzanie danych, ogólne, web TAk TAk TAk TAk TAk TAk deklaracyjny Nie
Haskell Podanie TAk TAk leniwa ocena 2010, Haskell 2010
Haxe Aplikacja, ogólna, internetowa TAk TAk TAk TAk TAk Nie
HyperNext Aplikacja, edukacja TAk TAk słabo napisane Nie
Hiperrozmowa Aplikacja, RAD, ogólne TAk TAk słabo napisane Nieznany
Io Aplikacje, skrypty sterowane przez hosta TAk TAk Nie
IPL Ogólny TAk Nieznany
ISLISP Ogólny TAk TAk TAk TAk 1997, 2007, ISO
J Przetwarzanie danych zorientowany na tablicę, na poziomie funkcji , milczący Nie
JADEIT Aplikacja, dystrybuowana TAk TAk Nie
Jawa Aplikacje, biznes, po stronie klienta, ogólne, programowanie mobilne, po stronie serwera, web TAk TAk TAk TAk TAk TAk TAk równoległy De facto standard za pośrednictwem specyfikacji języka Java
JavaScript Po stronie klienta, po stronie serwera, WWW TAk TAk TAk TAk TAk TAk oparty na prototypie 1997, ECMA
Radość Badania TAk zorientowany na stos Nie
Julia Ogólne, obliczenia techniczne TAk TAk TAk TAk TAk TAk wielokrotna wysyłka , meta, skalarna i tablicowa , równoległa, współbieżna, rozproszona ("chmura") Nie
K Przetwarzanie danych, biznes zorientowany na tablicę, milczący Nieznany
Kotlin Aplikacje, rozwój mobilny, po stronie serwera, po stronie klienta, web TAk TAk TAk TAk TAk TAk TAk Nie
Ksh Powłoka, skrypty TAk TAk TAk kilka wariantów, niestandardowe programowalne, dynamicznie ładowalne moduły 1992, POSIX.2
LabVIEW (G) Zastosowanie, oprzyrządowanie przemysłowe-automatyka TAk TAk TAk TAk przepływ danych , wizualny Nie
Seplenienie Ogólny TAk Nieznany
Kod na żywo Aplikacja, RAD, ogólne TAk TAk słabo napisane Nie
Logtalk Sztuczna inteligencja, zastosowanie TAk TAk TAk logika Nie
Linden Scripting Language (LSL) Tworzenie skryptów i animacji w wirtualnych światach TAk TAk TAk Skrypty istnieją w obiektach w świecie Być może
Lua Aplikacja, wbudowane skrypty TAk TAk TAk TAk TAk zorientowany aspektowo, oparty na prototypach Nie
Klon Obliczenia symboliczne, obliczenia numeryczne TAk TAk TAk TAk Rozpowszechniane Nie
Matematyka Język symboliczny TAk TAk TAk TAk TAk TAk TAk logika, rozproszona Nie
MATLAB Wysoce specyficzne dla dziedziny obliczenia numeryczne TAk TAk TAk Nie
Moduł-2 Aplikacja systemowa TAk TAk 1996, ISO
Moduł-3 Podanie TAk TAk TAk Nie
ŚWINKA (M) ogólne , aplikacja , bazy danych Tak
(wysoce imperatyw
ma tylko polecenia)
Zatwierdzony do następnego standardu Tylko wyrażenia
Brak wyrażeń lambda
TAk Częściowo przez pośredni
i Xecute
TAk Zatwierdzony do następnego standardu współbieżne , wieloużytkownikowe , NoSQL , przetwarzanie transakcyjne pierwszy-ANSI był 1977, najnowsza-ANSI 1995, najnowsza-ISO 2020, ANSI,ISO
Nimi Aplikacja, ogólne, webowe, skryptowe, systemowe TAk TAk TAk TAk TAk TAk wielokrotna wysyłka , współbieżna, meta Nie
Oberon Aplikacja systemowa TAk TAk Nie
Obiekt Pascal Aplikacja, ogólne, aplikacja mobilna, web TAk TAk TAk TAk TAk TAk zbudowany Nie
Cel C Zastosowanie ogólne TAk TAk TAk TAk równoległy Nie
OCaml Zastosowanie ogólne TAk TAk TAk TAk TAk Nie
Occam Ogólny TAk TAk współbieżny, zorientowany na proces Nie
Opa Aplikacje internetowe TAk TAk TAk Rozpowszechniane Nie
OpenLisp Ogólne, wbudowany silnik Lisp TAk TAk TAk TAk Zastępuje ISLISP , ISO
Tlen Podanie TAk TAk TAk Nie
Oz-Mozart Aplikacja, dystrybucja, edukacja TAk TAk TAk współbieżny, logiczny Nie
Pascal Aplikacja, edukacja TAk TAk 1983, ISO
Perl Aplikacje, skrypty, przetwarzanie tekstu, Web TAk TAk TAk TAk TAk TAk Nie
PHP Po stronie serwera, aplikacja internetowa, web TAk TAk TAk TAk TAk Standard „de facto” poprzez specyfikację językową i wnioski o komentarze (RFC)
PL/I Podanie TAk TAk TAk 1969, ECMA-50 (1976)
Plus Aplikacja, rozwój systemu TAk TAk Nie
Postscriptum Grafika, opis strony TAk TAk

konkatenatywny , zorientowany na stos

Tak, zgodnie z instrukcją obsługi PostScript
PowerShell Administracja, aplikacja, ogólne, skrypty TAk TAk TAk TAk TAk rurociąg Nie
Prolog Aplikacja, sztuczna inteligencja TAk TAk TAk logika, deklaratywna 1995, ISO/IEC 13211-1:1995, TC1 2007, TC2 2012, TC3 2017
PureBasic Podanie TAk Nie
Pyton Aplikacje, ogólne, internetowe, skrypty, sztuczna inteligencja, obliczenia naukowe TAk TAk TAk TAk TAk TAk TAk zorientowany aspektowo Standard „de facto” za pośrednictwem propozycji ulepszeń Pythona (PEP)
r Aplikacja, statystyki TAk TAk TAk TAk TAk Nie
Rakieta Edukacja, ogólne, skrypty TAk TAk TAk TAk modułowe, logiczne, meta Nie
Raku Skrypty, obróbka tekstu, klej TAk TAk TAk TAk TAk TAk zorientowana aspektowo, tablica, leniwa ocena, wielokrotna wysyłka, metaprogramowanie TAk
REALbasic Podanie TAk Nieznany
Rebol Rozpowszechniane TAk TAk TAk TAk TAk TAk dialektowany Nie
REXX Skrypty TAk Tak ( dialekty NetRexx i Object REXX ) Nie TAk Nie Nie 1996 (ANSI X3.274-1996)
RPG Aplikacja systemowa TAk TAk Nie
Rubin Aplikacja, skrypty, web TAk TAk TAk TAk zorientowany aspektowo 2011 (JIS X 3017), 2012 (ISO/IEC 30170)
Rdza Aplikacja, po stronie serwera, system, sieć TAk TAk TAk TAk TAk Nie TAk równoległy Nie
S Aplikacja, statystyki TAk TAk TAk TAk Nie
Gwara Aplikacja, numeryczna, skryptowa TAk TAk Nie
Scala Aplikacja, dystrybuowana, web TAk TAk TAk TAk TAk TAk De facto standard za pośrednictwem specyfikacji języka Scala (SLS)
Schemat Edukacja, ogólne TAk rozszerzalna składnia 1998, R 6 RS
Nasiona7 Aplikacje, ogólne, skrypty, web TAk TAk TAk TAk wieloparadygmat, rozszerzalny, ustrukturyzowany Nie
Symulacja Edukacja, ogólne TAk TAk TAk symulacja zdarzeń dyskretnych , wykonywanie programu wielowątkowego (quasi-równoległego) 1968
Mały podstawowy Aplikacja, edukacja, gry TAk TAk zorientowany na komponenty Nie
Pogawędka Aplikacje, ogólne, biznesowe, sztuczna inteligencja, edukacja, web TAk TAk TAk TAk TAk TAk współbieżny, deklaratywny 1998, ANSI
SNOBOL Przetwarzanie tekstu Nieznany
Standardowy ML Podanie TAk TAk TAk 1997, SML '97
Szybki Zastosowanie ogólne TAk TAk TAk TAk TAk TAk TAk współbieżny, deklaratywny, zorientowany na protokół Nie
Tcl Aplikacja, skrypty, web TAk TAk TAk TAk TAk TAk Nie
Visual Basic Aplikacje, RAD, edukacja, biznes, ogólne (w tym VBA), automatyka biurowa TAk TAk TAk TAk zorientowany na komponenty Nie
Visual Basic .NET Aplikacje, RAD, edukacja, internet, biznes, ogólne TAk TAk TAk TAk TAk TAk TAk zorganizowany, współbieżny Nie
Visual FoxPro Podanie TAk zorientowana na dane, logika Nie
Prolog wizualny Podanie TAk TAk TAk TAk deklaratywny, logiczny Nie
Język Wolfram Język symboliczny TAk TAk TAk TAk TAk TAk TAk logika, rozproszona Nie
XL TAk TAk programowanie koncepcji Nie
Xojo Aplikacja, RAD, ogólna, internetowa TAk TAk TAk TAk TAk Nie
XPath / XQuery Bazy danych, przetwarzanie danych, skrypty TAk zorientowany na drzewo W3C 1999 XPath 1, 2010 XQuery 1, 2014 XPath/XQuery 3.0
Zsh Powłoka , skrypty TAk TAk ładowalne moduły Nie

Systemy typu

Failsafe I/O i wywołania systemowe

Większość języków programowania wyświetla komunikat o błędzie lub zgłasza wyjątek, jeśli operacja wejścia/wyjścia lub inne wywołanie systemowe (np. chmod , kill ) nie powiedzie się, chyba że programista wyraźnie zaaranżował inną obsługę tych zdarzeń. W ten sposób języki te zawodzą pod tym względem bezpiecznie .

Niektóre (głównie starsze) języki wymagają, aby programista jawnie dodał testy tego rodzaju błędów. Z psychologicznego punktu widzenia różne błędy poznawcze (np. błąd optymizmu ) mogą wpływać zarówno na nowicjuszy, jak i ekspertów, a te pominięcia mogą prowadzić do błędnych zachowań .

Język Bezpieczne wejścia/wyjścia
1C: Przedsiębiorstwo TAk
Ada Tak (wyjątki)
ALGOL Tak (wyjątki lub zwracana wartość w zależności od funkcji)
Automatyczny klawisz skrótu Nie (globalny poziom błędu musi być wyraźnie zaznaczony)
Grzmotnąć Opcjonalny
Balerina TAk
brachu TAk
C Nie
C++ Niektóre ( strumienie STL iostream zgłaszają błąd, ale API C, takie jak stdio lub POSIX , nie)
C# TAk
COBOL Nie
Wspólne seplenienie Tak (system „warunki i restarty”)
Curry TAk
D Tak (rzucanie na awarię)
Eiffla Nie – to faktycznie zależy od biblioteki i nie jest zdefiniowane przez język
Erlang TAk
Fortran TAk
GLBasic Nie – generalnie spowoduje awarię programu
Udać się Tak (chyba że wynik został wyraźnie zignorowany)
Gosu TAk
Port TAk
Haskell TAk
ISLISP TAk
Jawa TAk
Julia TAk
Kotlin TAk
LabVIEW TAk
Lua Nie (niektóre funkcje nie ostrzegają ani nie zgłaszają wyjątków)
Matematyka TAk
Obiekt Pascal Trochę
Cel C Tak (wyjątki)
OCaml Tak (wyjątki)
OpenLisp TAk
Perl Nie
PHP TAk
Pyton TAk
Raku TAk
Rebol TAk
Rexx Tak (z opcjonalnym sygnałem na ... obsługa pułapki)
RPG Nie
Rubin TAk
Rdza Tak (chyba że wynik został wyraźnie zignorowany)
S Nieznany
Pogawędka TAk
Scala TAk
Standardowy ML TAk
Szybki ≥ 2,0 Tak (wyjątki)
Tcl TAk
Visual Basic TAk
Visual Basic .NET TAk
Prolog wizualny TAk
Język Wolfram TAk
Xojo TAk
XPath / XQuery Tak (wyjątki)
Język Bezpieczne wejścia/wyjścia

Wyrazistość

Język Stosunek oświadczeń Stosunek linii
C 1 1
C++ 2,5 1
Fortran 2 0,8
Jawa 2,5 1,5
Perl 6 6
Pogawędka 6 6.25
Pyton 6 6,5

Literatura na temat języków programowania zawiera mnóstwo nieformalnych twierdzeń o ich względnej sile ekspresji , ale nie ma ram dla formalizowania takich stwierdzeń ani wyprowadzania interesujących konsekwencji. Ta tabela zawiera dwie miary ekspresji z dwóch różnych źródeł. Dodatkową miarę wyrazistości, w bajtach GZip, można znaleźć w grze Computer Language Benchmarks.

Benchmarki

Wykres czasu kłody do wyprodukowania Mandelbrota o powierzchni 1600², jak zgłoszono w The Benchmarks Game

Testy porównawcze są zaprojektowane tak, aby naśladować określony typ obciążenia w komponencie lub systemie. Programy komputerowe używane do kompilacji niektórych danych porównawczych w tej sekcji mogły nie zostać w pełni zoptymalizowane, a adekwatność danych jest kwestionowana. Najdokładniejsze testy porównawcze to te, które są dostosowane do konkretnej sytuacji. Dane porównawcze innych osób mogą mieć pewną wartość dla innych, ale właściwa interpretacja niesie ze sobą wiele wyzwań . Witryna Computer Language Benchmarks Game ostrzega przed nadmiernym uogólnianiem danych porównawczych, ale zawiera dużą liczbę mikrobenchmarków fragmentów kodu nadesłanych przez czytelnika, z interfejsem, który generuje różne wykresy i tabele porównujące określone języki programowania i rodzaje testów.

Kalendarium konkretnych porównań językowych

  • 1974 – Noty porównawcze dotyczące Algolu 68 i PL/I – SH Valentine – listopad 1974
  • 1976 – Ocena ALGOL 68 , JOVIAL J3B, Pascal , Simula 67 i TACPOL Versus TINMAN – Wymagania dotyczące wspólnego języka programowania wysokiego rzędu.
  • 1977 – Porównanie PASCAL i ALGOL 68 – Andrew S. Tanenbaum – czerwiec 1977.
  • 1993 – Five Little Languages ​​and How They Grow – BLISS , Pascal , ALGOL 68 , BCPL & CDennis M. Ritchie – kwiecień 1993.
  • 2009 – On Go – och, kontynuuj – Jak dobrze Google Go sprosta językowi programowania Brand X? – David Given – listopad 2009

Zobacz też

Aby wyświetlić wszystkie strony, podkategorie i obrazy, kliknij „►”:

Bibliografia

Dalsza lektura