Los lenguajes de programación se utilizan para controlar el comportamiento de una máquina (generalmente una computadora ). Al igual que los lenguajes naturales , los lenguajes de programación siguen reglas de sintaxis y semántica .
Existen miles de lenguajes de programación [ 1 ] y cada año se crean nuevos. Pocos lenguajes llegan a ser lo suficientemente populares como para ser utilizados por más de unas pocas personas, pero los programadores profesionales pueden utilizar docenas de lenguajes a lo largo de su carrera.
La mayoría de los lenguajes de programación no están estandarizados por un estándar internacional (o nacional), incluso los más utilizados, como Perl o Standard ML (a pesar de su nombre). Entre los lenguajes de programación estandarizados más destacados se encuentran ALGOL , C , C++ , JavaScript (bajo el nombre de ECMAScript ), Smalltalk , Prolog , Common Lisp , Scheme ( estándar IEEE ), ISLISP , Ada , Fortran , COBOL , SQL y XQuery .
Comparación general
La siguiente tabla compara información general y técnica sobre una selección de lenguajes de programación de uso común . Consulte los artículos de cada lenguaje para obtener más información.
Sistemas de tipos
E/S a prueba de fallos y llamadas al sistema
La mayoría de los lenguajes de programación imprimen un mensaje de error o lanzan una excepción si falla una operación de entrada/salida u otra llamada al sistema (por ejemplo, `chmod` , `kill` ), a menos que el programador haya previsto explícitamente un manejo diferente para estos eventos. Por lo tanto, estos lenguajes gestionan los fallos de forma segura en este sentido.
Algunos lenguajes (sobre todo los más antiguos) requieren que los programadores añadan explícitamente comprobaciones para este tipo de errores. Desde el punto de vista psicológico, diferentes sesgos cognitivos (por ejemplo, el sesgo de optimismo ) pueden afectar tanto a principiantes como a expertos y llevarlos a omitir estas comprobaciones. Esto puede derivar en un comportamiento erróneo .
La E/S a prueba de fallos es una característica de 1C:Enterprise , Ada (excepciones), ALGOL (excepciones o valor de retorno dependiendo de la función), Ballerina , C# , Common Lisp (sistema de "condiciones y reinicios"), Curry , D (lanzamiento en caso de fallo), [ 51 ] Erlang , Fortran , Go (a menos que el resultado se ignore explícitamente), Gosu , Harbour , Haskell , ISLISP , Java , Julia , Kotlin , LabVIEW , Mathematica , Objective-C (excepciones), OCaml (excepciones), OpenLisp , PHP , Python , Raku , Rebol , Rexx (con manejo de trampas de señal opcional en ...), Ruby , Rust (a menos que el resultado se ignore explícitamente), Scala , [ 52 ] Smalltalk , Standard ML , Swift ≥ 2.0 (excepciones), Tcl , Visual Basic , Visual Basic (.NET) , Visual Prolog , Wolfram Language , Xojo , XPath / XQuery (excepciones) y Zeek .
Sin E/S a prueba de fallos : AutoHotkey (el ErrorLevel global debe comprobarse explícitamente), C , [ 53 ] COBOL , Eiffel (en realidad depende de la biblioteca y no está definido por el lenguaje), GLBasic (generalmente provocará que el programa falle), RPG , Lua (algunas funciones no advierten ni lanzan excepciones) y Perl . [ 54 ]
Algunas comprobaciones de E/S están integradas en C++ ( los iostreams de STL generan errores, pero las API de C como stdio o POSIX no) [ 53 ] y Object Pascal ; en Bash [ 55 ] es opcional.
Expresividad
La literatura sobre lenguajes de programación contiene abundantes afirmaciones informales sobre su poder expresivo relativo , pero no existe un marco para formalizar dichas afirmaciones ni para derivar consecuencias interesantes. [ 58 ] Esta tabla proporciona dos medidas de expresividad de dos fuentes diferentes. Una medida adicional de expresividad, en bytes GZip, se puede encontrar en el Computer Language Benchmarks Game. [ 59 ]
Puntos de referencia

Los benchmarks están diseñados para simular un tipo específico de carga de trabajo en un componente o sistema. Es posible que los programas informáticos utilizados para compilar algunos de los datos de benchmark en esta sección no estén completamente optimizados, y la relevancia de los datos es cuestionable. Los benchmarks más precisos son aquellos que se adaptan a su situación particular. Los datos de benchmark de otras personas pueden tener cierto valor para otros, pero su correcta interpretación presenta numerosos desafíos . El sitio web Computer Language Benchmarks Game advierte contra la generalización excesiva a partir de los datos de benchmark, pero contiene una gran cantidad de microbenchmarks de fragmentos de código aportados por los lectores, con una interfaz que genera diversos gráficos y tablas que comparan lenguajes de programación específicos y tipos de pruebas. [ 62 ]
Cronología de comparaciones lingüísticas específicas
- 1974 – Notas comparativas sobre Algol 68 y PL/I [ 63 ] – SH Valentine – Noviembre de 1974
- 1976 – Evaluación de ALGOL 68 , JOVIAL J3B, Pascal , Simula 67 y TACPOL frente a TINMAN: Requisitos para un lenguaje de programación común de alto orden.
- 1977 – Una comparación de PASCAL y ALGOL 68 [ 64 ] – Andrew S. Tanenbaum – Junio de 1977.
- 1993 – Cinco pequeños lenguajes y cómo crecieron – BLISS , Pascal , ALGOL 68 , BCPL & C – Dennis M. Ritchie – Abril de 1993.
- 2009 – Sobre Go – ¡vamos! – ¿Qué tan bien se defenderá Go de Google frente al lenguaje de programación de la marca X? – David Given – Noviembre de 2009
Véase también
Referencias
- ↑ A mayo de 2006, la Enciclopedia de lenguajes informáticos de Diarmuid Pigott, archivada el 20 de febrero de 2011 en la Wayback Machine alojada en la Universidad Murdoch , Australia , enumera 8512 lenguajes informáticos.
- ↑ Manual de referencia de Ada, ISO/IEC 8652:2005(E) Ed. 3 , 3.9 Tipos etiquetados y extensiones de tipo
- ↑ Manual de referencia de Ada, ISO/IEC 8652:2005(E) Ed. 3 , Sección 6: Subprogramas
- ↑ Manual de referencia de Ada, ISO/IEC 8652:2005(E) Ed. 3 , Sección 12: Unidades genéricas
- ↑ Manual de referencia de Ada, ISO/IEC 8652:2005(E) Ed. 3 , Sección 9: Tareas y sincronización
- ↑ "Sistemas distribuidos" . www.adaic.org .
- ↑ "Vak.ru" (PDF) . Archivado del original (PDF) el 30-03-2017 . Consultado el 09-08-2008 .
- ↑ «ISO/IEC JTC1/SC22/WG6 - Algol» . www.open-std.org .
- ↑ "Vak.ru" (PDF) . Archivado del original (PDF) el 24-03-2017 . Consultado el 09-08-2008 .
- ↑ "Asociación de Estándares IEEE" . Asociación de Estándares IEEE .
- ↑ "Objetos - Definición y uso" .
- ↑ "Especificación del lenguaje Ballerina" (PDF) . WSO2. 1 de mayo de 2018. Archivado del original (PDF) el 4 de mayo de 2018. Consultado el 3 de mayo de 2018 .
- 1 2 3 POSIX.2 , Shell y utilidades, intérprete de comandos (IEEE Std 1003.2-1992.)
- ↑ "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 274" . jcp.org .
- ↑ «Chistoria» . www.bell-labs.com .
- ↑ "ISO/IEC JTC1/SC22/WG14 - C" . www.open-std.org .
- ↑ "ISO/IEC JTC1/SC22/WG21 - El Comité de Estándares de C++ - ISOCPP" . www.open-std.org .
- ↑ "Codeproject.com: Programación funcional en C# 3.0 usando expresiones lambda" .
- ↑ ECMA-334; ISO/IEC 23270:2006
- ↑ " Clarion - Inicio" . www.softvelocity.com
- ↑ "Crystal" . GitHub . 2 de noviembre de 2021.
- ↑ "Genéricos de Crystal" . crystal-lang.org . 13 de abril de 2024.
- ↑ "Concurrencia - Crystal" . crystal-lang.org . Consultado el 2 de abril de 2024 .
- ↑ " Bertrand Meyer: Mecanismos básicos del lenguaje Eiffel" . se.inf.ethz.ch.
- ↑ Cierre (programación informática)
- ↑ ECMA-367; ISO/IEC 25436:2006
- ↑ "Preguntas frecuentes (FAQ) - El lenguaje de programación Go" . go.dev .
- ↑ "Codewalk: Funciones de primera clase en Go" .
Go admite funciones de primera clase, funciones de orden superior, tipos de funciones definidos por el usuario, literales de función, cierres y múltiples valores de retorno. Este amplio conjunto de características permite un estilo de programación funcional en un lenguaje fuertemente tipado.
- ↑ "El programa Java Community Process(SM) - JSRs: Java Specification Requests - detalle JSR# 241" . jcp.org .
- ↑ "The Haskell 2010 Language Report" . Consultado el 7 de diciembre de 2011 .La mayoría de las implementaciones de Haskell extienden el estándar Haskell 2010.
- ↑ "Programación orientada a objetos en Julia" . 4 de junio de 2023.
En Julia, la programación orientada a objetos no es el enfoque principal, sino que se hace hincapié en los despachos múltiples, un concepto más general. A pesar de esto, la POO aún se puede lograr en Julia mediante el uso de tipos y métodos compuestos.
- ↑ "Programación orientada a objetos en Julia" . 29 de mayo de 2021.
Julia solo ofrece soporte parcial para la programación orientada a objetos (POO).
- ↑ "Documentación de Julia · El lenguaje Julia" . docs.julialang.org .
- ↑ "kotlin-script-examples/jvm/main-kts/MainKts.md en master · Kotlin/kotlin-script-examples" . GitHub .
- ↑ "Constructores con tipado seguro" . Ayuda de Kotlin .
- ↑ "¡M8 ya está disponible!" 2 de julio de 2014.
Como primer vistazo a las futuras capacidades reflexivas de Kotlin, ahora puedes acceder a las propiedades como objetos de primera clase en Kotlin.
- ↑ "Coroutines" . Ayuda de Kotlin .
- ↑ Halcyon (Inworldz) y Open Sims proponen implementaciones compatibles con funciones adicionales.
- ↑ Lua no tiene un tipo "objeto" explícito (se utiliza el tipo más general "tabla" para la definición de objetos), pero sí tiene una sintaxis explícita para la llamada a métodos de objetos.
- ↑ Las versiones se publican junto con un manual de referencia de Lua que muestra la sintaxis y la semántica completas, una implementación de referencia y un conjunto de pruebas. Estos se utilizan para generar otras implementaciones de máquinas virtuales Lua y compiladores como Kahlua y LLVM-Lua.
- ↑ ISO/IEC 10514-1:1996
- ↑ ISO 7185
- ↑ Manual de PHP , Capítulo 19. Clases y objetos (PHP 5) ,
- ↑ Manual de PHP , Capítulo 17. Funciones
- ↑ "Manual de referencia del lenguaje PostScript" (PDF) . Archivado del original (PDF) el 18 de febrero de 2017. Consultado el 18 de febrero de 2017 .
- ↑ "Características de la programación orientada a objetos" . doc.rust-lang.org .
- ↑ Klabnik, Steve; Nichols, Carol. "Macros" . El lenguaje de programación Rust .
- ↑ "Estándares del esquema" . standards.scheme.org .
- ↑ "Estándares del esquema" . standards.scheme.org .
- ↑ "SML '97" . www.smlnj.org .
- ↑ "std.stdio - Lenguaje de programación D" . dlang.org .
- ↑ Scala se ejecuta en la Máquina Virtual de Java, de la cual hereda el manejo de excepciones en tiempo de ejecución.
- 1 2 gcc puede advertir sobre errno no verificado . Las versiones más recientes de Visual Studio suelen generar excepciones en caso de E/S fallida al usar stdio .
- ↑ Se puede habilitar opcionalmente una comprobación de errores considerable, pero por defecto Perl no es a prueba de fallos.
- ↑
set -epermite la terminación si algún estado de salida no verificado es distinto de cero. - ↑ Datos de McConnell, Steve (30 de noviembre de 2009). Code Complete . Microsoft Press. pág. 100. ISBN 9780735636972.La columna " Relación de sentencias " muestra las relaciones típicas entre las sentencias fuente en varios lenguajes de alto nivel y el código equivalente en C. Una relación más alta significa que cada línea de código en el lenguaje indicado realiza más funciones que cada línea de código en C.
- ↑ La proporción de pruebas de recuento de líneas ganadas por cada lenguaje con respecto al número ganado por C al usar la función Comparar con en McLoone, Jon (14 de noviembre de 2012). "Longitud del código medida en 14 lenguajes" . Archivado del original el 19 de noviembre de 2012.Se utilizó C gcc para C, C++ g++ para C++, FORTRAN G95 para FORTRAN, Java JDK Server para Java y Smalltalk GST para Smalltalk.
- ↑ Felleisen, Matthias. Sobre el poder expresivo de los lenguajes de programación . ESOP '90 3er Simposio Europeo sobre Programación. CiteSeerX 10.1.1.51.4656 .
- ↑ "Cómo se miden los programas" . Juego de evaluación comparativa de lenguajes informáticos . Consultado el 29 de mayo de 2018 .
- ↑ Mandelbrot, Benoit B. (1982). La geometría fractal de la naturaleza ( Edición revisada). San Francisco. ISBN 0-7167-1186-9OCLC 7876824
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ "Mandelbrot" . Juego de evaluación comparativa de lenguajes informáticos . Consultado el 9 de julio de 2021 .
- ↑ "The Ultimate Benchmark" . The Computer Language Benchmarks Game . Consultado el 29 de mayo de 2018 .
- ↑ Valentine, SH (noviembre de 1974). "Notas comparativas sobre Algol 68 y PL/I" . The Computer Journal . 17 (4): 325– 331. doi : 10.1093/comjnl/17.4.325 .
- ^ "Vrije Universiteit Ámsterdam" (PDF) .
Lecturas adicionales
- Cezzar, Ruknet (1995). Guía de lenguajes de programación: descripción general y comparación . Artech House. ISBN 978-0-89006-812-0.
- Comparación de lenguajes de programación