Comparación de linguaxes de programación

As linguaxes de programación utilízanse para controlar o comportamento dunha máquina (a miúdo un ordenador). Do mesmo xeito que as linguas naturais, as linguaxes de programación seguen regras de sintaxe e semántica.

Existen miles de linguaxes de programación e créanse novas cada ano. Poucas linguaxes se fan o suficientemente populares como para ser usadas por máis dunhas poucas persoas, pero os programadores profesionais poden usar ducias de linguaxes nunha carreira.

A maioría das linguaxes de programación non están estandarizadas por un estándar internacional (ou nacional), mesmo as máis utilizadas, como Perl ou Standard ML (a pesar do nome). Entre as linguaxes de programación estandarizadas máis destacadas inclúense ALGOL, C, C++, JavaScript (co nome ECMAScript), Smalltalk, Prolog, Common Lisp, Scheme (estándar IEEE), ISLISP, Ada, Fortran, COBOL, SQL, e XQuery.

 Comparación xeral 
A seguinte táboa compara información xeral e técnica para unha selección de linguaxes de programación de uso común. Consulta os artigos das linguaxes individuais para obter máis información.
Linguaxe de programaciónPropósito orixinalImperativoOrientado a obxectosFuncionalProcedimentalXenéricoReflexivoOutros paradigmasEstandarizado1C:Enterprise programming languageAplicacións, RAD, negocios, xeral, web, móbilSiNonSiSiSiSiBaseado en obxectos, programación baseada en prototiposNonActionScriptAplicación, lado do cliente, webSiSiSiSiNonNonBaseado en prototiposSi 
1999-2003, ActionScript 1.0 con ES3, ActionScript 2.0 con ES3 e borrador parcial de ES4, ActionScript 3.0 con borrador de ES4, ActionScript 3.0 con E4X
(ECMAScript)AdaAplicación, embebidos, tempo real, sistemaSiSiNonSiSiNonConcorrente, distribuídaSi
1983, 2005, 2012, ANSI, ISO, GOST 27831-88AldorComputación simbólica altamente específica de dominioSiSiSiNonNonNonNonALGOL 58AplicaciónSiNonNonNonNonNonNonALGOL 60AplicaciónSiNonNonSiSiNonSi
1960, IFIP WG 2.1, ISOALGOL 68AplicaciónSiNonSiSiSiNonConcorrenteSi
1968, IFIP WG 2.1, GOST 27974-88, Ateji PXAplicación paralelaNonSiNonNonNonNonCálculo piNonAPLAplicación, procesamento de datosSiSiSiSiSiSiOrientado a matrices, tácitoSi 
1989, ISOLinguaxe ensambladorXeralSiNonNonNonNonNonCalquera, a sintaxe adoita ser moi específica, relacionada co procesador de destinoSi
1985 IEEE 694-1985AutoHotkeyAutomatización da GUI (macros), moi específica do dominioSiSiNonSiNonNonNonAutoItAutomatización da GUI (macros), moi específica do dominioSiNonNonSiNonNonNonBallerinaIntegración, áxil, lado do servidor, xeralSiSiSiSiNonNonConcorrente, transaccional, tipado forte e estático, diagramático-visualEstándar de facto a través da especificación da linguaxe BallerinaBashShell, scriptingSiNonNonSiNonNonOpcionalmente POSIX.2BASICAplicación, educaciónSiNonNonSiNonNonSi
1984, ANSI, ISO, ECMABeanShellAplicación, scriptingSiSiSiNonNonSiNon
En progreso, JCPBLISSSistemaNonNonNonSiNonNonNonBlitzMaxAplicación, xogoSiSiNonSiNonSiNonBooAplicación, scripting de xogosNonSiNonNonNonNonNonCAplicación, sistema, propósito xeral, operacións de baixo nivelSiNonNonSiNonNonSi
1989, ANSI C89, ISO/IEC C90, ISO/IEC C95, ISO/IEC C99, ISO/IEC C11, ISO/IEC C17, ISO/IEC C2xC++Aplicación, sistemaSiSiSiSiSiSiConcorrenteSi
1998, ISO/IEC C++98, ISO/IEC C++03, ISO/IEC C++11, ISO/IEC C++14, ISO/IEC C++17, ISO/IEC C++20, ISO/IEC C++23, ISO/IEC C++26C#Aplicación, RAD, negocio, lado do cliente, xeral, lado do servidor, web, programación de xogosSiSiSiSiSiSiConcorrente, estructuradoSi
2000, ECMA, ISOECMA-334; ISO/IEC 23270:2006ClarionXeral, negocios, webSiSiSiNonNonNonDescoñecidoCleanXeralNonNonSiNonSiNonNonClojureXeralNonNonSiNonNonNonConcorrenteNonCLUXeralSiSiNonSiSiNonNonCOBOLAplicación, negociosSiSiNonSiNonNonSi
1968 ANSI X3.23, 1974, 1985; ISO/IEC 1989:1985, 2002, 2014, 2023CobraAplicación, negocios, xeral, webSiSiSiNonSiSiNonColdFusion (CFML)WebNonSiNonSiNonNonNonCommon LispXeralSiSiSiSiSiSiSintaxe extensible, orientada a matrices, macros sintácticas, envío múltiple, concorrenteSi
1994, ANSICOMAL 80EducaciónSiNonNonSiNonNonNonCrystalPropósito xeralSiSiSiSiSiNonConcorrenteNonCurryAplicaciónNonNonSiNonSiNonavaliación preguiceira, non determinismoEstándar de facto a través do Informe de Linguaxe CurryCythonAplicación, xeral, computación numéricaSiSiSiNonNonSiOrientado a aspectosNonDAplicación, sistemaSiSiSiSiSiSiXerativo, ConcorrenteNonDartAplicación, web, lado do servidor, móbil, IoTSiSiSiSiSiNonEstruturadoSi
ECMA-408 standartDelphi, Object PascalPropósito xeralSISiSiSiSiSiDescoñecidoDylanAplicaciónNonSiSiNonNonNonNonEiffelXeral, aplicación, negocio, lado do cliente, lado do servidor, web (EWF)SiSiSiNonSiSiSCOOP distribuído, seguro contra voidSi
2005, ECMA, ISOECMA-367; ISO/IEC 25436:2006ELANEducaciónSiNonNonSiNonNonEstruturado, refinamento paso a pasoNonElixirAplicación, distribuídaNonNonSiNonNonSiConcorrente, distribuídoNonErlangAplicación, distribuídaNonNonSiNonNonSiConcorrente, distribuídoNonEuphoriaAplicaciónNonNonNonSiNonSiNonFactorXeralSiNonPode verse asíNonSiSiOrientado á pilaNonFPNonNonSiNonNonNonNonF#AplicaciónSiSiSiSiSiSiNonForthXeralSiNonNonSiNonSiOrientado á pilaSi
1994, ANSIFortranAplicación, computación numéricaSiSiSiSiSiNonParalelismo de memoria distribuída/compartida nativa, vectorizado, simultáneo e baseado en matricesSi
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)FreeBASICAplicación, computación numéricaSiSiNonSiSiNonNonGambasAplicaciónSiSiNonNonNonNonNonGameMakerAplicación, programación de xogosSiSiNonNonNonNonNonGLBasicAplicación, xogosSiSiNonSiNonNonSinxelo orientado a obxectosNonGoAplicación, web, lado do servidorSiPode verse asíPode verse asíSiSiSiConcorrenteEstándar de facto a través da especificación da linguaxe GoGosuAplicación, xeral, scripting, webSiSiNonNonSiSiNonGraphTalkAplicaciónNonSiNonNonNonNonLóxicaNonGroovyAplicación, xeral, scripting, webSiSiSiSiSiSiMeta-programaciónNo
En progreso, JCPHarbourAplicación, negocio, procesamento de datos, xeral, webSiSiSiSiSiSiDeclarativoNonHaskellAplicaciónNonNonSiNonSiNonAvaliación preguiceiraSi
2010, Haskell 2010HaxeAplicación, xeral, webSiSiSiNonSiSiNonHyperTalkAplicación, RAD, xeralSiNonNonSiNonSi Tipado débilDescoñecidoIoAplicación, scripts dirixidos por hostSiSiNonNonNonNonNonIPLXeralNonNonSiNonNonNonDescoñecidoISLISPXeralSiSiSiNonSiNonSi
1997, 2007, ISOJAplicación, procesamento de datosSiSiSiSiSiSiOrientado a matrices, a nivel de función, tácito, concorrenteNonJADEAplicación, distribuídaSiSiNonNonNonNonNonJavaAplicación, negocio, lado do cliente, xeral, desenvolvemento móbil, lado do servidor, webSiSiSiSiSiSiConcorrenteEstándar de facto a través da especificación da linguaxe JavaJavaScriptLado do cliente, lado do servidor, webSiSiSiSiNonSiBaseado en prototiposSi
Estándar ECMA-262JoyInvestigaciónNonNonSiNonNonNonOrientado a pilaNonjq"awk para JSON"NonNonSiNonNonNonTácito, Backtracking, Streaming, PEGNonJuliaXeral, computación técnicaSiPode verse asíSiSiSiSiDespacho múltiple, meta, escalar e orientado a matrices, paralelo, simultáneo, distribuído ("nube")Estándar de facto a través de Julia DocumentationKProcesamento de datos, negocioNonNonNonNonNonNonOrientado a matrices, tácitoDescoñecidoKotlinAplicación, xeral, desenvolvemento móbil, lado do servidor, lado do cliente, web, scripting, específico do dominioSiSiSiSiSiSiConcurrenteEstándar de facto a través da especificación da linguaxe KotlinKshShell, scriptingSiSiNonSiNonNonVarias variante, programable a medida, módulos cargables dinámicosOpcionalmente POSIX.2LabVIEW (G)Aplicación, instrumentación industrial-automatizaciónSiSiSiNonNonNonFluxo de datos, visualNonLispXeralNonNonSiNonNonNonDescoñecidoLiveCodeAplicación, RAD, xeralSiSiNonSiNonSiTipado débilNonLogtalkIntelixencia artificial, aplicaciónNonSiNonNonNonSiLóxicaNonLinden Scripting Language (LSL)Scripting e animación de contidos para mundos virtuaisSiNonNonSiNonNonExisten scripts en obxectos do mundo internoDe facto, a referencia é a implementación de LSL en Second Life.Halcyon (Inworldz) e Open Sims propoñen implementacións compatibles con funcións adicionais.LuaAplicación, scripts integradosSiSiLua non ten un tipo "obxecto" explícito (para a definición de obxectos úsase un tipo máis xeral de "táboa"), pero si ten unha sintaxe explícita para a chamada a métodos de obxecto.SiSiNonSiOrientado a aspectos, baseado en prototiposNonAs versións publicadas van acompañadas dun Manual de referencia de Lua definitivo que mostra a sintaxe e a semántica completas, unha implementación de referencia e un conxunto de probas. Estes úsanse para xerar outras implementacións de máquinas virtuais Lua e compiladores como Kahlua e LLVM-Lua.MapleComputación simbólica, computación numéricaSiSiSiSiNonNonDistribuídoNonMathematicaLinguaxe simbólicaSiSiSiSiSiSiLóxica, distribuídoNonMATLABComputación numérica altamente específica de dominioSiSiNonSiNonNonNonModula-2Aplicación, sistemaSiNonNonNonSiNonSi
1996, ISOISO/IEC 10514-1:1996Modula-3AplicaciónSiSiNonNonSiNonNonMUMPS (M)Xeral, aplicación, bases de datosSiAprobado para o seguinte estándarNonSiParcialmente a través da indirectación e execuciónSiConcorrente, multiusuario, NoSQL, procesamento de transacciónsSi
1977 ANSI, 1995 ISO 2020NimAplicación, xeral, web, scripting, sistemaSiSiSiSiSiSiEnvío múltiple, simultáneo, metaNonOberonAplicación, sistemaSiSiNonNonNonNonNonObject PascalAplicación, xeral, aplicacións móbiles, webSiSiNonSiSiSiEstruturadoNonObjective-CAplicación, xeralSiSiNonSiNonSiConcorrenteNonOCamlAplicación, xeralSiSiSiSiSiNonNonOccamXeralSiNonNonSiNonNonConcorrente, orientado a procesosNonOpaAplicacións webSiNonSiNonSiNonDistribuídoNonOpenLispXeral, motor Lisp integradoSiSiSiNonSiNonOpcionalmente ISLISPOxygeneAplicaciónSiSiNonNonSiNonNonOz-MozartAplicación, distribución, educaciónSiSiSiNonNonNonConcorrente, lóxicoNonPascalAplicación, educaciónSiNonNonSiNonNonSi
1983, ISOISO 7185PerlAplicación, scripting, procesamento de texto, webSiSiSiSiSiSiNonPHPLado do servidor, aplicación web, webSiSiSiSiNonSiEstándar de facto a través da especificación da linguaxe e das solicitudes de comentarios (RFC)PL/IAplicaciónSiSiNonSiNonNonSi
1969, ECMA-50 (1976)PlusAplicación, desenvolvemento de sistemasSiNonNonSiNonNonNonPostScriptGráficos, descrición da páxinaSiNonNonSiNonNonConcatenativo, orientado a pilaEstándar de facto a través do Manual de referencia de PostScriptPowerShellAdministración, aplicación, xeral, scriptingSiSiSiSiNonSiPipelineNonPrologAplicación, intelixencia artificialNonNonSiSiNonSiLóxica, declarativoSi
1995, ISO/IEC 13211-1:1995, TC1 2007, TC2 2012, TC3 2017PureBasicAplicaciónSiNonNonSiNonNonNonPythonAplicación, xeral, web, scripting, intelixencia artificial, computación científicaSiSiSiSiSiSiOrientado a aspectosEstándar de facto a través das propostas de mellora de Python (PEP)RAplicación, estadísticasSiSiSiSiNonSiNonRacketEducación, xeral, scriptingSiSiSiSiNonSiModular, lóxica, metaNonRakuScripting, procesamento de texto, pegamentoSiSiSiSiSiSiOrientado a aspectos, matrices, avaliación preguiceira, envío múltiple, metaprogramaciónNonREALbasicAplicaciónNonNonNonSiNonNonDescoñecidoRebolDistribuídoSiSiSiSiNonSiDialectadoNonREXXScriptingSiSi (dialectos de NetRexx e Object REXX)NonSiNonNonSi
1996 (ANSI X3.274-1996)RPGAplicación, sistemaSiNonNonSiNonNonNonRingAplicaciónSiSiSiSiSiSimetaprogramación, declarativo, linguaxe naturalNonRubyAplicación, scripting, webSiSiSiNonNonSiOrientado a aspectosSi
2011(JIS X 3017), 2012(ISO/IEC 30170)RustAplicación, lado do servidor, sistema, webSiPode verse asíSiSiSiNonConcurrenteEstándar de facto polas versións oficiais de RustSAplicación, estadísticasSiSiSiSiNonNonNonS-LangAplicación, numérica, creación de scriptsSiNonNonSiNonNonNonScalaAplicación, xeral, paralela, distribuída, webSiSiSiNonSiSiProgramación orientada a datos, metaprogramaciónEstándar de facto a través da especificación da linguaxe Scala (SLS)SchemeEducación, xeralSiNonSiNonNonNonMeta, sintaxe extensibleDe facto
1975-2013, R0RS, R1RS, R2RS, R3RS, R4RS, R5RS, R6RS, R7RS Small EditionSeed7Aplicación, xeral, scripting, webSiSiNonNonSiSiMultiparadigma, extensible, estruturadoNonSimulaEducación, xeralSiSiNonNonNonNonsimulación de eventos discretos, execución de programas multifío (cuasiparalelos)Si
1968Small BasicAplicación, educación, xogosSiNonNonNonNonNonOrientado a compoñentesNonSmalltalkAplicación, xeral, negocios, intelixencia artificial, educación, webSiSiSiSiNonSiConcurrente, declarativoYes
1998, ANSISNonBOLProcesamento de textoNonNonNonNonNonNonDescoñecidoStandard MLAplicaciónSiNonSiNonSiNonSi
1997, SML '97SwiftAplicación, xeralSiSiSiSiSiSiConcurrente, declarativo, orientado a protocoloNoTclAplicación, scripting, webSiSiSiSiNonSiNonV (Vlang)Aplicación, xeral, sistema, xogos, web, lado do servidorSiPode verse asíPode verse asíSiSiSiConcurrenteNoVisual BasicAplicación, RAD, educación, negocios, xeral (inclúe VBA), automatización de oficinaSiSiNonSiSiNonOrientado a compoñentesNonVisual Basic .NETAplicación, RAD, educación, web, negocios, xeralSiSiSiSiSiSiEstruturado, concorrenteNonVisual FoxProAplicaciónSiSiNonSiNonNonCentrado nos datos, lóxicoNonVisual PrologAplicaciónSiSiSiNonNonNonDeclarativo, lóxicoNonWolfram LanguageLinguaxe simbólicoSiNonSiSiSiSiLóxico, distribuídoNonXLSiSiNonNonNonNonProgramación conceptualNonXojoAplicación, RAD, xeral, webSiSiNonSiNonSiNonXPath/XQueryBases de datos, procesamento de datos, scriptingNonNonSiNonNonNonOrientado á árboresSi
1999 W3C XPath 1, 2010 W3C XQuery 1, 2014 W3C XPath/XQuery 3.0ZeekAplicación específica do dominioSiNonNonNonNonNonNonZigAplicación, xeral, sistemaSiNonSiSiSiSiConcorrenteNonZshShell, scriptingSiNonNonSiNonNonMódulos cargablesOpcionalmente POSIX.2
 E/S e chamadas de sistema a proba de fallos 
A maioría de linguas de programación imprimirán unha mensaxe de erro ou lanzan unha excepción se falla unha operación de entrada/saída ou outra chamada ao sistema (por exemplo, chmod, kill) a menos que o programador teña disposto explicitamente unha xestión diferente destes eventos. Polo tanto, estas linguaxes fallan sen incidentes neste aspecto.

Algunhas linguaxes (na súa maioría antigas) requiren que os programadores engadan explicitamente comprobacións para este tipo de erros. Psicoloxicamente, diferentes sesgos cognitivos (por exemplo, sesgos de optimismo) poden afectar tanto a principiantes como a expertos e levalos a omitir estas comprobacións. Isto pode levar a un comportamento erróneo.

A E/S a proba de fallos é unha característica de 1C:Enterprise, Ada (excepcións), ALGOL (excepcións ou valor de retorno dependendo da función), Ballerina, C#, Common Lisp (sistema "condicións e reinicios"), Curry, D (lanzamento en caso de fallo), Erlang, Fortran, Go (a non ser que o resultado se ignore explicitamente), Gosu, Harbour, Haskell, ISLISP, Java, Julia, Kotlin, LabVIEW, Mathematica, Objective-C (excepcións), OCaml (excepcións), OpenLisp, PHP, Python, Raku, Rebol, Rexx (con manexo opcional de trampas signal on...), Ring, Ruby, Rust (a non ser que o resultado se ignore explicitamente), Scala,Scala execútase na máquina virtual Java, da que herda a xestión de excepcións en tempo de execución. Smalltalk, Standart ML, Swift ≥ 2.0 (excepcións), Tcl, Visual Basic, Visual Basic .NET, Visual Prolog, Wolfram Language, Xojo, XPath/XQuery (excepcións), e Zeek. 

Sen E/S a proba de fallos: AutoHotkey (o nivel de erro global debe comprobarse explicitamente), Cgcc pode avisar se se produce un erro (errno.h) non comprobado. As versións máis recentes de Visual Studio adoitan lanzar excepcións en caso de erros de E/S ao usar stdio., COBOL, Eiffel (en realidade depende da biblioteca e non está definido pola linguaxe), GLBasic (xeralmente provocará que o programa se peche), RPG, Lua (algúns funciona non advirte ou botar excepcións), e Perl.Opcionalmente, pódese activar unha comprobación de erros considerable, pero por defecto Perl non é a proba de fallos.

Algunhas comprobacións de E/S están integradas en C++ (as transmisións de STL producen erros, pero as API de C como stdio ou POSIX  non) e Object Pascal, en Bashset -e activa a terminación se algún estado de saída non marcado é distinto de cero. é opcional.

 Expresividade 
LinguaxeProporción de instruciónsData from  A columna Proporción de instrucións "mostra as proporcións típicas das instrucións fonte en varias linguaxes de alto nivel co código equivalente en C. Unha proporción máis alta significa que cada liña de código na linguaxe listada consegue máis que cada liña de código en C.Proporción de liñasA proporción de probas de reconto de liñas gañadas por cada linguaxe co número gañado por C ao usar a funcionalidade Comparar con en  C gcc usouse para C, C++ g++ usouse para C++, FORTRAN G95 usouse para FORTRAN, Java JDK Server usouse para Java e Smalltalk GST usouse para Smalltalk.C11C++2.51Fortran20.8Java2.51.5Perl66Smalltalk66.25Python66.5
A literatura sobre linguaxes de programación contén unha abundancia de afirmacións informais sobre o seu poder expresivo relativo, pero Nonn existe un marco para formalizar tales afirmacións nin para derivar consecuencias interesantes.[58] Esta táboa proporciona dúas medidas de expresividade de dúas fontes diferentes. Unha medida adicional de expresividade, en bytes GZip, pódese atopar Non xogo Computer Language Benchmarks.

 Benchmarks 
miniatura|Diagrama de barras do tempo logarítmico para producir un Mandelbrot de 1600² como se informa en The Benchmarks Game|esquerda
Os benchmarks están deseñados para imitar un tipo particular de carga de traballo nun compoñente ou sistema. Os programas informáticos empregados para compilar algúns dos datos do benchmark desta sección poden non estar totalmente optimizados, e a relevancia dos datos é controvertida. Os benchmarks máis precisos son aqueles que se adaptan á túa situación particular. Os datos de benchmarks doutras persoas poden ter algún valor para outras, pero a interpretación axeitada supón moitos desafíos. O sitio web Computer Language Benchmarks Game advirte contra a sobrexeneralización a partir de datos de benchmarks, pero contén un gran número de micro-benchmarks de fragmentos de código achegados polos lectores, cunha interface que xera varios gráficos e táboas que comparan linguaxes de programación e tipos de probas específicos.

 Cronoloxía de comparacións de linguaxes específicas 

 1974 – Notas comparativas sobre Algol 68 e PL/I: S. H. Valentine, novembro de 1974
 1976 –  Avaliación de ALGOL 68, JOVIAL J3B, Pascal, Simula 67, e TACPOL fronte a TINMAN: Requisitos para unha linguaxe de programación común de orde superior.
 1977 – Unha comparación de PASCAL e ALGOL 68:  Andrew S. Tanenbaum, xuño 1977.
 1993 – Cinco pequenas linguaxes e como creceron: BLISS, Pascal, ALGOL 68, BCPL & C: Dennis M. Ritchie, abril de 1993. 
 2009 – En Go: oh, adiante: Que tal se resistirá o Go de Google á linguaxe de programación da marca X?: David Given, novembro de 2009.

 Notas 

 Véxase tamén 
 Bibliografía 


Categoría:Programación
Categoría:Informática