Los lenguajes de programación se pueden agrupar por el número y los tipos de paradigmas admitidos.
Resúmenes de paradigmas
Una referencia concisa de los paradigmas de programación enumerados en este artículo.
- Programación concurrente : tiene construcciones de lenguaje para la concurrencia, que pueden implicar subprocesos múltiples, soporte para computación distribuida, transmisión de mensajes, recursos compartidos (incluida la memoria compartida) o futuros.
- Programación de actores: cálculo concurrente con actores que toman decisiones locales en respuesta al entorno (capaces de comportamientos egoístas o competitivos)
- Programación de restricciones : las relaciones entre las variables se expresan como restricciones (o redes de restricciones), dirigiendo soluciones permitidas (utiliza satisfacción de restricciones o algoritmo simplex )
- Programación de flujo de datos : recálculo forzado de fórmulas cuando cambian los valores de los datos (por ejemplo, hojas de cálculo )
- Programación declarativa : describe lo que debe realizar un cálculo, sin especificar cambios de estado detallados de la programación imperativa (la programación funcional y lógica son subgrupos importantes de la programación declarativa)
- Programación distribuida : tiene soporte para múltiples computadoras autónomas que se comunican a través de redes de computadoras
- Programación funcional : utiliza la evaluación de funciones matemáticas y evita el estado y los datos mutables.
- Programación genérica : utiliza algoritmos escritos en términos de tipos que se especificarán posteriormente que luego se instancian según sea necesario para tipos específicos proporcionados como parámetros.
- Programación imperativa : declaraciones explícitas que cambian el estado de un programa
- Programación lógica : utiliza lógica matemática explícita para la programación.
- Metaprogramación : programas de escritura que escriben o manipulan otros programas (o ellos mismos) como sus datos, o que hacen parte del trabajo en tiempo de compilación que de otra manera se haría en tiempo de ejecución.
- Metaprogramación de plantillas : métodos de metaprogramación en los que un compilador utiliza las plantillas para generar código fuente temporal, que el compilador fusiona con el resto del código fuente y luego lo compila
- Programación reflexiva : métodos de metaprogramación en los que un programa se modifica o amplía.
- Programación orientada a objetos : utiliza estructuras de datos que constan de campos de datos y métodos junto con sus interacciones (objetos) para diseñar programas.
- Basado en clases : programación orientada a objetos en la que la herencia se logra mediante la definición de clases de objetos, frente a los propios objetos.
- Basado en prototipos : programación orientada a objetos que evita clases e implementa la herencia mediante la clonación de instancias.
- Programación de canalización : un cambio de sintaxis simple para agregar sintaxis para anidar llamadas de función al lenguaje originalmente diseñado sin ninguno
- Programación basada en reglas: una red de reglas empíricas que comprenden una base de conocimientos y se puede utilizar para sistemas expertos y para la deducción y resolución de problemas.
- Programación visual : manipular los elementos del programa gráficamente en lugar de especificarlos textualmente (por ejemplo, Simulink ); también denominada programación esquemática [1]
Descripción general del idioma
Idioma | Número de paradigmas | Concurrente | Restricciones | Flujo de datos | Declarativo | Repartido | Funcional | Metaprogramación | Genérico | Imperativo | Lógica | Reflexión | Orientado a objetos | Oleoductos | Visual | Basado en reglas | Otros paradigmas |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ada [2] [3] [4] [5] [6] | 5 | Sí [a 1] | No | No | No | sí | No | No | sí | sí | No | No | Sí [a 2] | No | No | No | No |
ALF | 2 | No | No | No | No | No | sí | No | No | No | sí | No | No | No | No | No | No |
AmigaE [ cita requerida ] | 2 | No | No | No | No | No | No | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
APL | 3 | No | No | No | No | No | sí | No | No | sí | No | No | No | No | No | No | Matriz (multidimensional) |
BETA [ cita requerida ] | 3 | No | No | No | No | No | sí | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
C ++ | 7 (15) | Sí [7] [8] [9] | Biblioteca [10] | Biblioteca [11] [12] | Biblioteca [13] [14] | Biblioteca [15] [16] | sí | Sí [17] | Sí [a 3] | sí | Biblioteca [18] [19] | Biblioteca [20] | Sí [a 2] | Sí [21] | No | Biblioteca [22] | Matriz (multidimensional; usando STL ) |
C# | 6 (7) | sí | No | Biblioteca [a 4] | No | No | Sí [a 5] | No | sí | sí | No | sí | Sí [a 2] | No | No | No | reactivo [a 6] |
ChucK [ cita requerida ] | 3 | sí | No | No | No | No | No | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
Claire | 2 | No | No | No | No | No | sí | No | No | No | No | No | Sí [a 2] | No | No | No | No |
Clojure | 5 | Sí [23] [24] | No | No | sí | No | Sí [25] | Sí [26] | No | No | Biblioteca [27] | No | No | Sí [28] | Editor [29] | No | Envío múltiple , [30] Agentes [31] |
Lisp común | 7 (14) | Biblioteca [32] | Biblioteca [33] | Biblioteca [34] | Sí [35] | Biblioteca [36] | sí | sí | Sí [37] | sí | Biblioteca [38] | sí | Sí (envío múltiple, combinaciones de métodos) [39] [a 2] | Biblioteca [40] | No | Biblioteca [41] | Despacho múltiple, sistema meta-OOP, [42] El lenguaje es extensible mediante metaprogramación. |
Rizo | 5 | No | No | No | No | No | sí | No | Sí [a 3] | sí | No | sí | Sí [a 2] | No | No | No | No |
Curry | 4 | sí | sí | No | No | No | sí | No | No | No | sí | No | No | No | No | No | No |
D (versión 2.0) [43] [44] | 6 | Sí [a 7] | No | No | No | No | sí | Sí [45] [a 3] | Sí [a 3] | sí | No | No | Sí [a 2] | No | No | No | No |
Dylan [ cita requerida ] | 3 | No | No | No | No | No | sí | No | No | No | No | sí | Sí [a 2] | No | No | No | No |
mi | 3 | sí | No | No | No | sí | No | No | No | No | No | No | Sí [a 2] | No | No | No | No |
ECMAScript [46] [47] ( ActionScript , E4X , JavaScript , JScript ) | 4 (5) | parcial (promesas, extensiones nativas) [a 8] | No | No | Biblioteca [48] [49] | No | sí | No | No | sí | No | sí | Sí [a 9] | Biblioteca [50] [51] | Editor [52] | No | reactivo, [a 10] [53] impulsado por eventos [a 11] [a 12] |
Embarcadero Delphi | 3 | No | No | No | No | No | No | No | Sí [a 3] | sí | No | No | Sí [a 2] | No | No | No | No |
Erlang | 3 | sí | No | No | sí | sí | sí | No | No | No | No | No | No | sí | No | No | No |
Elixir | 4 | sí | No | No | No | sí | sí | sí | No | No | No | No | No | sí | No | No | No |
Olmo | 6 | sí | No | sí | sí | No | sí | No | sí | No | No | No | No | sí | No | No | reactivo |
F# | 7 (8) | Sí [a 7] | No | Biblioteca [a 4] | sí | No | sí | No | sí | sí | No | sí | Sí [a 2] | No | No | No | reactivo [a 6] |
Fortran | 4 (5) | sí | No | No | No | No | Sí [a 13] | No | Sí [a 14] | No | No | No | Sí [a 2] | No | No | No | Matriz (multidimensional) |
Ir | 4 | sí | No | No | No | No | No | No | No | sí | No | sí | No | sí | No | No | No |
Haskell | 8 (15) | sí | Biblioteca [54] | Biblioteca [55] | sí | Biblioteca [56] | Si ( perezoso ) | Sí [57] | sí | sí | Biblioteca [58] | No | Inmutable | sí | sí | Biblioteca [59] | alfabetizados, reactivos, dependientes (parcial) |
Io | 4 | Sí [a 7] | No | No | No | No | sí | No | No | sí | No | No | Sí [a 9] | No | No | No | No |
J [ cita requerida ] | 3 | No | No | No | No | No | sí | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
Java | 6 | sí | Biblioteca [60] | Biblioteca [61] | No | No | sí | No | sí | sí | No | sí | Sí [a 2] | No | No | No | No |
Julia | 9 (17) | sí | Biblioteca [62] | Biblioteca [63] [64] | Biblioteca [65] | sí | Si ( ansioso ) | sí | sí | sí | Biblioteca [66] | sí | Sí (envío múltiple, no individual tradicional) | sí | No | Biblioteca [67] [68] | Envío múltiple , Array (multidimensional) ; opcionalmente perezoso [69] y reactivo (con bibliotecas) |
Kotlin | 8 | sí | No | No | No | No | sí | sí | sí | sí | No | sí | sí | sí | No | No | No |
LabVIEW | 4 | sí | No | sí | No | No | No | No | No | No | No | No | sí | No | sí | No | No |
Lava | 2 | No | No | No | No | No | No | No | No | No | No | No | Sí [a 2] | No | sí | No | No |
LispWorks (versión 6.0 con soporte para multiprocesamiento simétrico, reglas, lógica (Prolog), CORBA) | 9 | sí | No | No | No | sí | sí | sí | No | sí | sí | sí | Sí [a 2] | No | No | sí | No |
Lua [ cita requerida ] | 3 | No | No | No | No | No | sí | No | No | sí | No | No | Sí [a 9] | No | No | No | No |
MATLAB | 6 (10) | Caja de herramientas [70] | Caja de herramientas [71] | Sí [72] | No | Caja de herramientas [73] | No | Sí [74] | Sí [75] | No | No | Sí [76] | Sí [77] | No | Sí [78] | No | Matriz (multidimensional) |
Nemerle | 7 | sí | No | No | No | No | sí | sí | sí | sí | No | sí | Sí [a 2] | No | No | No | No |
Objeto Pascal | 4 | sí | No | No | No | No | sí | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
OCaml | 4 | No | No | No | No | No | sí | No | sí | sí | No | No | Sí [a 2] | No | No | No | No |
Onz | 11 | sí | sí | sí | sí | sí | sí | No | No | sí | sí | No | Sí [a 2] | sí | No | sí | No |
Perl [ cita requerida ] | 8 (9) | Sí [79] | Biblioteca [80] | Sí [81] | No | No | sí | sí | No | sí | No | Sí [a 2] | Sí [a 2] | sí | No | No | No |
PHP [82] [83] [84] | 4 | No | No | No | No | No | sí | No | No | sí | No | sí | Sí [a 2] | No | No | No | No |
Poplog | 3 | No | No | No | No | No | sí | No | No | sí | sí | No | No | No | No | No | No |
Prograph | 3 | No | No | sí | No | No | No | No | No | No | No | No | Sí [a 2] | No | sí | No | No |
Pitón | 5 (10) | Biblioteca [85] [86] | Biblioteca [87] | No | No | Biblioteca [88] | Parcial | Sí [89] [90] | Sí [91] [92] | sí | Biblioteca [93] | sí | Sí [a 2] | No | Editor [94] | No | estructurado |
R | 4 | No | No | No | No | No | sí | No | No | sí | No | sí | sí | Sí [95] | No | No | Matriz (multidimensional) |
Raqueta | 10 | Sí [96] | Sí [97] | Sí [98] | No | Sí [99] | sí | sí | No | sí | sí | sí | sí | No | No | No | Perezoso [100] |
Raku | 10 | Sí [101] | Sí [102] | Sí [103] | No | Biblioteca [104] | sí | Sí [105] | Sí [106] | sí | No | Sí [107] | Sí [108] | sí | No | No | Despacho múltiple, listas perezosas, reactivo. |
CUERDA | 3 | No | No | No | No | No | No | No | No | sí | sí | No | No | No | No | sí | No |
Rubí | 5 | No | No | No | No | No | sí | sí | No | sí | No | sí | Sí [a 2] | No | No | No | No |
Rust (versión 1.0.0-alpha) | 6 | Sí [a 7] | No | No | No | No | sí | Sí [109] [110] | Sí [111] | sí | No | No | sí | No | No | No | tipos lineales, afines y de propiedad |
Sather [ cita requerida ] | 2 | No | No | No | No | No | sí | No | No | No | No | No | Sí [a 2] | No | No | No | No |
Scala [112] [113] | 9 | Sí [a 7] | No | Sí [a 15] | sí | No | sí | sí | sí | sí | No | sí | Sí [a 2] | No | No | No | No |
Simula [ cita requerida ] | 2 | No | No | No | No | No | No | No | No | sí | No | No | Sí [a 2] | No | No | No | No |
SISAL | 3 | sí | No | sí | No | No | sí | No | No | No | No | No | No | No | No | No | No |
Hojas de cálculo | 2 | No | No | No | No | No | sí | No | No | No | No | No | No | No | sí | No | No |
Rápido | 7 | sí | No | No | No | No | sí | sí | sí | sí | No | sí | Sí [a 2] | No | No | No | estructurado en bloque |
Tcl con extensión Snit [ cita requerida ] | 3 | No | No | No | No | No | Sí [114] | No | No | sí | No | No | Sí [a 9] [115] | No | No | No | No |
Visual Basic .NET | 6 (7) | sí | No | Biblioteca [a 4] | No | No | sí | No | sí | sí | No | sí | Sí [a 2] | No | No | No | reactivo [a 6] |
Windows PowerShell | 6 | No | No | No | No | No | sí | No | sí | sí | No | sí | Sí [a 2] | sí | No | No | No |
Wolfram Language y Mathematica | 13 [116] (14) | sí | sí | sí | sí | sí | sí | sí | sí | sí | sí | sí | sí | Sí [117] | No | sí | Basado en conocimiento |
Ver también
- Paradigma de programación
- Lista categórica de lenguajes de programación
- Lenguaje de programación específico de dominio
- Multimodelado específico de dominio
Notas
- ^ encuentro y basado en monitor
- ^ a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai Basado en clases
- ^ a b c d e Metaprogramación de plantillas
- ^ a b c usando TPL Dataflow
- ^ solosoporte lambda (programación funcional perezosa)
- ^ a b c usando extensiones reactivas (Rx)
- ^ a b c d e programación de actores
- ^ usandoelmódulo de clúster de Node.js o elmétodo child_process.fork , trabajadores web en el navegador, etc.
- ^ a b c d Basado en prototipos
- ^ usando extensiones reactivas (RxJS)
- ^ en Node.js a través de sumódulo de eventos
- ^ en navegadores a través de suAPI EventTarget nativa
- ^ puramente funcional
- ^ clases parametrizadas
- ↑ Akka Archivado el 19 de enero de 2013 en la Wayback Machine.
Citas
- ^ Bragg, SD; Driskill, CG (20 a 22 de septiembre de 1994). "Lenguajes de programación diagrama-gráfica y DoD-STD-2167A". Actas de AUTOTESTCON '94 . IEEEXplore . IEEE. págs. 211–220. doi : 10.1109 / AUTEST.1994.381508 . ISBN 978-0-7803-1910-3.
- ^ Manual de referencia de Ada, ISO / IEC 8652: 2005 (E) Ed. 3 , Sección 9: Tareas y sincronización
- ^ Manual de referencia de Ada, ISO / IEC 8652: 2005 (E) Ed. 3 Anexo E: Sistemas distribuidos
- ^ 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 6: Subprogramas
- ^ Manual de referencia de Ada, ISO / IEC 8652: 2005 (E) Ed. 3 , 3.9 Tipos etiquetados y extensiones de tipo
- ^ Soporte de hilo
- ^ Soporte de Atomics
- ^ Modelo de memoria
- ^ Gecode
- ^ SystemC
- ^ Boost.Iostreams
- ^ Boolinq
- ^ AraRat
- ^ OpenMPI
- ^ Impulsar.MPI
- ^ Boost.MPL
- ^ LC ++
- ↑ Castor Archivado el 25 de enero de 2013 en la Wayback Machine.
- ^ Reflejar biblioteca
- ^ N3534
- ^ Impulso.Espíritu
- ^ Clojure - Programación concurrente
- ^ Clojure - core.async
- ^ Clojure - Programación funcional
- ^ Clojure - Macros
- ^ Clojure - core.logic
- ^ Clojure - Guía de macros de subprocesamiento
- ^ "Mesa de luz" . 2019-04-08.
- ^ Multimétodos y jerarquías
- ^ Agentes y acciones asincrónicas
- ^ [1] muchos paradigmas de concurrencia implementados como extensiones de lenguaje
- ^ [2] programación de restricciones dentro de CL a través de extensiones
- ^ [3] extensión de flujo de datos
- ^ [4] mediante la creación de DSL utilizando la metaprogramación incorporada; ver también la nota sobre paradigmas funcionales, de restricción y lógicos, que son parte de
- ^ [5] MPI, etc. a través de extensiones de idioma
- ^ plantilla de metaprogramación usando macros (ver C ++)
- ^ [6] [7] [8] Prolog implementado como una extensión de idioma
- ^ Common Lisp Object System consulte el artículo de Wikipedia sobre CLOS, el Common Lisp Object System.
- ^ implementado por el usuario a través de una pequeña macro, ejemplo de implementación: [9]
- ^ [10] extensión de programación basada en reglas
- ^ [11] a través del Protocolo de metaobjetos
- ^ D Tabla de características del idioma
- ^ Algoritmo estándar de Phobos
- ^ Mezcla de cadenas de lenguaje D
- ^ El pequeño JavaScripter demuestra elementos fundamentales en común con Scheme, un lenguaje funcional.
- ^ Programación orientada a objetos en JavaScript Archivado el 10 de febrero de 2019 en Wayback Machine ofrece una descripción general de las técnicas de programación orientada a objetos en JavaScript.
- ^ "React: una biblioteca de JavaScript para crear interfaces de usuario" . 2019-04-08.
- ^ "Ganchos TNG" . 2019-04-08.
- ^ "Documentación de Lodash" . 2019-04-08.
- ^ "mori" . 2019-04-08.
- ^ "Mesa de luz" . 2019-04-08.
- ^ "Ganchos TNG" . 2019-04-08.
- ^ Prólogo incrustado
- ^ "Programación reactiva funcional - HaskellWiki" .
- ^ Nube Haskell
- ^ "Plantilla Haskell - HaskellWiki" .
- ^ "Logict: una mónada de programación lógica de retroceso" .
- ^ [12]
- ^ https://jcp.org/en/jsr/detail?id=331 JSR 331: API de programación de restricciones
- ^ https://github.com/GoogleCloudPlatform/DataflowJavaSDK SDK de flujo de datos de Google Cloud Platform
- ^ "JuliaOpt / JuMP.jl" . GitHub . JuliaOpt. 11 de febrero de 2020 . Consultado el 12 de febrero de 2020 .
- ^ "GitHub - MikeInnes / DataFlow.jl" . 2019-01-15.
- ^ "GitHub - JuliaGizmos / Reactive.jl: primitivas de programación reactiva para Julia" . 2018-12-28.
- ^ https://github.com/davidanthoff/Query.jl Consulta casi cualquier cosa en julia
- ^ https://github.com/lilinjn/LilKanren.jl Una colección de implementaciones de Kanren en Julia
- ^ "GitHub - abeschneider / PEGParser.jl: Analizador de PEG para Julia" . 2018-12-03.
- ^ "GitHub - gitfoxi / Parsimonious.jl: un generador de analizador de PEG para Julia" . 2017-08-03.
- ^ Perezoso https://github.com/MikeInnes/Lazy.jl
- ^ "Ejecutar iteraciones de bucle en paralelo" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Escribir restricciones" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Introducción a SimEvents" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Ejecutar iteraciones de bucle en paralelo" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Ejecutar expresión MATLAB en texto - MATLAB eval" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Determinar la clase de objeto" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Metadatos de la clase" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Programación Orientada a Objetos" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Simulink" . mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ hilos basados en intérprete
- ^ Alce
- ^ Perl de orden superior
- ^ Manual de PHP , Capítulo 17. Funciones
- ^ Manual de PHP , Capítulo 19. Clases y objetos (PHP 5)
- ^ Manual de PHP , funciones anónimas
- ^ "Procesamiento paralelo y multiprocesamiento en Python" . wiki.python.org . Consultado el 21 de octubre de 2016 .
- ^ "subprocesamiento: interfaz de subprocesamiento de nivel superior" . docs.python.org . Consultado el 21 de octubre de 2016 .
- ^ "restricción de pitón" . pypi.python.org . Consultado el 21 de octubre de 2016 .
- ^ "Programación distribuida" . wiki.python.org . Consultado el 21 de octubre de 2016 .
- ^ "Capítulo 9. Metaprogramación" . chimera.labs.oreilly.com . Archivado desde el original el 23 de octubre de 2016 . Consultado el 22 de octubre de 2016 .
- ^ "Metaprogramación" . readthedocs.io . Consultado el 22 de octubre de 2016 .
- ^ "PEP 443 - Funciones genéricas de despacho único" . python.org . Consultado el 22 de octubre de 2016 .
- ^ "PEP 484 - Sugerencias de tipo" . python.org . Consultado el 22 de octubre de 2016 .
- ^ "PyDatalog" . Consultado el 22 de octubre de 2016 .
- ^ "Mesa de luz" . 2019-04-08.
- ^ "Magrittr: un operador de tubería avanzada para R" . cran.r-project.org \ accessdate = 13 de julio de 2017 .
- ^ Guía de raquetas: simultaneidad y sincronización
- ^ La guía de la roseta
- ^ FrTime: un lenguaje para programas reactivos
- ^ Guía de raquetas: lugares distribuidos
- ^ Raqueta perezosa
- ^ Canales y otros mecanismos
- ^ "Firma de la clase" .
- ^ Operador de alimentación
- ^ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Módulo Cro
- ^ "Metaprogramación: qué, por qué y cómo" . 2011-12-14.
- ^ https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Roles parametrizados
- ^ "Protocolo de metaobjetos (MOP)" .
- ^ https://docs.perl6.org/language/classtut Clases y roles
- ^ "La guía de macros de Rust" . Óxido . Consultado el 19 de enero de 2015 .
- ^ "La guía de complementos del compilador de Rust" . Óxido . Consultado el 19 de enero de 2015 .
- ^ La referencia de óxido §6.1.3.1
- ^ Una descripción general del lenguaje de programación Scala
- ^ Especificación del lenguaje Scala
- ^ "Programación Tcl / Introducción" . en.wikibooks.org . Consultado el 22 de octubre de 2016 .
- ^ "TCLLIB - Biblioteca estándar de Tcl: snitfaq" . sourceforge.net . Consultado el 22 de octubre de 2016 .
- ^ Notas para expertos en lenguajes de programación , documentación de Wolfram Language.
- ^ Programas externos , documentación de Wolfram Language.
Referencias
- Jim Coplien, Diseño multiparadigma para C ++ , Addison-Wesley Professional, 1998.