Los lenguajes de programación se pueden agrupar según la cantidad y los tipos de paradigmas que admiten.
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 concurrencia, que pueden implicar subprocesos múltiples, compatibilidad con computación distribuida, paso de mensajes, recursos compartidos (incluida memoria compartida) o futuros.
- Programación de actores : computación concurrente con actores que toman decisiones locales en respuesta al entorno (capaces de comportamiento egoísta o competitivo)
- Programación de restricciones : las relaciones entre variables se expresan como restricciones (o redes de restricciones), lo que indica las soluciones permitidas (utiliza el algoritmo de satisfacción de restricciones o 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 qué computación debe realizar, sin especificar cambios de estado detallados, como la programación imperativa (la programación funcional y lógica son subgrupos principales 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 más adelante y 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 : escribir programas que escriben o manipulan otros programas (o a sí mismos) como si fueran sus datos, o que realizan parte del trabajo en tiempo de compilación que de otro modo se haría en tiempo de ejecución.
- Metaprogramación de plantillas : métodos de metaprogramación en los que un compilador utiliza 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 se extiende a sí mismo.
- Programación orientada a objetos : utiliza estructuras de datos que consisten en 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 definiendo clases de objetos, en lugar de los objetos mismos.
- Basado en prototipos : programación orientada a objetos que evita las clases e implementa la herencia mediante la clonación de instancias
- Programación en canalización : un cambio de sintaxis simple para agregar sintaxis para anidar llamadas de función a un lenguaje originalmente diseñado sin ninguna
- Programación basada en reglas : una red de reglas generales que componen una base de conocimientos y se pueden utilizar para sistemas expertos y para la deducción y resolución de problemas.
- Programación visual : manipulación de elementos del programa gráficamente en lugar de especificarlos textualmente (por ejemplo, Simulink ); también denominada programación diagramática [1]
Descripción general del idioma
Véase también
Notas
- ^ basado en encuentros y monitores
- ^ abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai basado en clases
- ^ metaprogramación de plantillas abcde
- ^ abc usando flujo de datos TPL
- ^ solo soporte lambda (programación funcional perezosa)
- ^ abc usando extensiones reactivas (Rx)
- ^ envío múltiple, combinaciones de métodos
- ^ Programación de actores abcde
- ^ promesas, extensiones nativas
- ^ usando el módulo cluster de Node.js o el método child_process.fork, web workers en el navegador, etc.
- ^ abcd Basado en prototipos
- ^ usando extensiones reactivas (RxJS)
- ^ en Node.js a través de su módulo de eventos
- ^ en los navegadores a través de su API nativa EventTarget
- ^ abc puramente funcional
- ^ clases parametrizadas
- ^ inmutable
- ^ despacho múltiple, no único tradicional
- ^ Akka Archivado el 19 de enero de 2013 en Wayback Machine.
Citas
- ^ Bragg, SD; Driskill, CG (20-22 de septiembre de 1994). "Lenguajes de programación diagramáticos y gráficos y DoD-STD-2167A". Actas de AUTOTESTCON '94 (IEEEXplore) . Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). págs. 211-220. doi :10.1109/AUTEST.1994.381508. ISBN 978-0-7803-1910-3.S2CID62509261 .
- ^ 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 subprocesos
- ^ Soporte atómico
- ^ Modelo de memoria
- ^ Código geográfico
- ^ Sistema C
- ^ Impulsar.Iostreams
- ^ Boolinq
- ^ "AraRat" (PDF) . Archivado desde el original (PDF) el 19 de agosto de 2019. Consultado el 15 de septiembre de 2019 .
- ^ OpenMPI
- ^ Impulsar MPI
- ^ Impulso.MPL
- ^ LC++
- ^ Castor Archivado el 25 de enero de 2013 en Wayback Machine.
- ^ Biblioteca Reflect
- ^ N3534
- ^ Impulso.Espíritu
- ^ Clojure - Programación concurrente
- ^ Clojure - núcleo.async
- ^ Clojure - Programación funcional
- ^ Clojure - Macros
- ^ Clojure - núcleo.logic
- ^ Clojure - Guía de macros de subprocesamiento
- ^ "Mesa de luz". 2019-04-08.
- ^ Métodos múltiples y jerarquías
- ^ Agentes y acciones asincrónicas
- ^ "concurrencia". CLiki .
- ^ [1] Programación de restricciones dentro de CL a través de extensiones
- ^ [2] extensión del flujo de datos
- ^ [3] mediante la creación de DSL utilizando la metaprogramación incorporada; consulte también la nota sobre paradigmas funcionales, de restricción y lógicos, que son parte de la programación declarativa.
- ^ [4] MPI, etc. a través de extensiones de lenguaje
- ^ metaprogramación de plantillas utilizando macros (ver C++)
- ^ [5] [6] [7] Prolog implementado como una extensión del lenguaje
- ^ Sistema de objetos Common Lisp, consulte el artículo de Wikipedia sobre CLOS, el sistema de objetos Common Lisp.
- ^ implementado por el usuario a través de una macro corta, ejemplo de implementación
- ^ - Herramienta de programación visual basada en Common Lisp
- ^ [8] extensión de programación basada en reglas
- ^ [9] Archivado el 26 de abril de 2018 en Wayback Machine a través del Protocolo Meta Object
- ^ Tabla de características del lenguaje D
- ^ Algoritmo estándar de Phobos
- ^ Mixins de cadenas en lenguaje D
- ^ The Little JavaScripter demuestra una similitud fundamental 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.
- ^ "TNG-Hooks". GitHub . 8 de abril de 2019.
- ^ "Documentación de Lodash". 8 de abril de 2019.
- ^ "mori". 8 de abril de 2019.
- ^ "Mesa de luz". 2019-04-08.
- ^ "TNG-Hooks". GitHub . 8 de abril de 2019.
- ^ "Incrustación de Prolog". Haskell.org .
- ^ "Programación reactiva funcional". HaskellWiki .
- ^ Nube Haskell
- ^ "Plantilla Haskell". HaskellWiki .
- ^ "Logict: Una mónada de programación lógica con retroceso". Haskell.org .
- ^ Kollmansberger, Steve; Erwig, Martin (30 de mayo de 2006). "Reglas de Haskell: Incorporación de sistemas de reglas en Haskell" (PDF) . Universidad Estatal de Oregón .
- ^ 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". GitHub . 15 de enero de 2019.
- ^ "GitHub - JuliaGizmos/Reactive.jl: Primitivas de programación reactiva para Julia". GitHub . 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 PEG para Julia". GitHub . 2018-12-03.
- ^ "GitHub - gitfoxi/Parsimonious.jl: Un generador de analizador PEG para Julia". GitHub . 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 .
- ^ "Restricciones de escritura". 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 de MATLAB en texto - MATLAB eval". mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Determinar la clase de un objeto". mathworks.com . Consultado el 21 de octubre de 2016 .
- ^ "Metadatos de 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érpretes
- ^ 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 de Python . Consultado el 21 de octubre de 2016 .
- ^ "threading — Interfaz de subprocesamiento de nivel superior". docs.python.org . Consultado el 21 de octubre de 2016 .
- ^ "python-constraint". pypi.python.org . Consultado el 21 de octubre de 2016 .
- ^ "Programación distribuida". Wiki de Python . 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 envío único". python.org . Consultado el 22 de octubre de 2016 .
- ^ "PEP 484 – Sugerencias de tipos". python.org . Consultado el 22 de octubre de 2016 .
- ^ "PyDatalog" . Consultado el 22 de octubre de 2016 .
- ^ "Mesa de luz". 2019-04-08.
- ^ "Futuroverso".
- ^ "futuras herramientas de lotes".
- ^ "Magrittr: un operador de tuberías avanzado para R". cran.r-project.org\access-date=13 julio 2017 . 17 noviembre 2020.
- ^ Guía de Racket: Simultaneidad y sincronización
- ^ La guía de Rosette
- ^ FrTime: Un lenguaje para programas reactivos
- ^ Guía de raquetas: lugares distribuidos
- ^ Raqueta perezosa
- ^ Canales y otros mecanismos
- ^ "Módulo solucionador de problemas".
- ^ Operador de feed
- ^ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Módulo Cro
- ^ "Metaprogramación: qué, por qué y cómo". 14 de diciembre de 2011.
- ^ 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". Rust . Consultado el 19 de enero de 2015 .
- ^ "Guía de complementos del compilador de Rust". Rust . Consultado el 19 de enero de 2015 .
- ^ Referencia de Rust §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 del lenguaje Wolfram.
- ^ Programas externos, Documentación de Wolfram Language.
Referencias
- Jim Coplien, Diseño multiparadigma para C++ , Addison-Wesley Professional, 1998.