stringtranslate.com

Lista de lenguajes de programación por tipo

Esta es una lista de lenguajes de programación notables , agrupados por tipo.

Las agrupaciones se superponen, no son mutuamente excluyentes. Un idioma puede aparecer en varias agrupaciones.

Lenguajes de programación orientados a agentes

La programación orientada a agentes permite al desarrollador crear, ampliar y utilizar agentes de software , que son abstracciones de objetos que pueden enviar mensajes a otros agentes.

Lenguajes de matriz

Los lenguajes de programación matricial (también denominados vectoriales o multidimensionales ) generalizan operaciones en escalares para aplicarlas de forma transparente a vectores , matrices y matrices de dimensiones superiores .

Lenguajes de programación orientados a aspectos

La programación orientada a aspectos permite a los desarrolladores agregar nueva funcionalidad al código, conocida como "consejo", sin modificar el código en sí; en cambio, utiliza un punto de corte para implementar el consejo en bloques de código.

Lenguajes ensambladores

Los lenguajes ensambladores corresponden directamente a un lenguaje de máquina (ver más abajo), por lo que las instrucciones de código de máquina aparecen en una forma comprensible para los humanos, aunque puede que no haya una correspondencia uno a uno entre una declaración individual y una instrucción individual. Los lenguajes ensambladores permiten a los programadores utilizar direcciones simbólicas, que el ensamblador convierte en direcciones absolutas o reubicables . La mayoría de los ensambladores también admiten macros y constantes simbólicas .

Lenguajes de creación

Un lenguaje de creación es un lenguaje de programación diseñado para que lo utilice un usuario no experto en informática para crear fácilmente tutoriales, sitios web y otros programas informáticos interactivos.

Lenguajes de interfaz de línea de comandos

Los lenguajes de interfaz de línea de comandos (CLI) también se denominan lenguajes de procesamiento por lotes o lenguajes de control de trabajos. Ejemplos:

Lenguajes compilados

Se trata de lenguajes que normalmente son procesados ​​por compiladores , aunque teóricamente cualquier lenguaje puede ser compilado o interpretado.

Lenguajes de programación concatenativo

Un lenguaje de programación concatenativo es un lenguaje de programación informática sin puntos en el que todas las expresiones denotan funciones y la yuxtaposición de expresiones denota composición de funciones . [4] La programación concatenativa reemplaza la aplicación de funciones , que es común en otros estilos de programación, con la composición de funciones como la forma predeterminada de construir subrutinas .

Idiomas concurrentes

Los lenguajes de paso de mensajes proporcionan estructuras lingüísticas para la concurrencia . El paradigma predominante para la concurrencia en lenguajes convencionales como Java es la concurrencia de memoria compartida . Los lenguajes concurrentes que hacen uso del paso de mensajes generalmente se han inspirado en cálculos de procesos como los procesos secuenciales de comunicación (CSP) o el cálculo π .

Lenguajes de programación con restricciones

Un lenguaje de programación con restricciones es un lenguaje de programación declarativo en el que las relaciones entre variables se expresan como restricciones . La ejecución se lleva a cabo intentando encontrar valores para las variables que satisfacen todas las restricciones declaradas.

Lenguajes entre llaves

Un lenguaje de llaves tiene una sintaxis que define un bloque como las declaraciones entre llaves, también conocidas como llaves . Esta sintaxis se originó con BCPL (1966) y fue popularizada por C. Muchos lenguajes de llaves descienden de C o están fuertemente influenciados por él . Ejemplos: {}

Lenguajes de flujo de datos

Los lenguajes de programación de flujo de datos se basan en una representación (normalmente visual) del flujo de datos para especificar el programa. Se utilizan con frecuencia para reaccionar ante eventos discretos o para procesar flujos de datos. Algunos ejemplos de lenguajes de flujo de datos son:

Lenguajes orientados a datos

Los lenguajes orientados a datos proporcionan formas poderosas de buscar y manipular las relaciones que se han descrito como tablas de relación de entidades que asignan un conjunto de cosas a otros conjuntos. [ cita requerida ] Algunos ejemplos de lenguajes orientados a datos incluyen:

Lenguajes de tablas de decisión

Las tablas de decisión se pueden utilizar como ayuda para aclarar la lógica antes de escribir un programa en cualquier lenguaje, pero en la década de 1960 se desarrollaron varios lenguajes donde la lógica principal se expresa directamente en forma de tabla de decisión, entre ellos:

Lenguajes declarativos

Los lenguajes declarativos expresan la lógica de un cálculo sin describir en detalle su flujo de control. La programación declarativa contrasta con la programación imperativa a través de los lenguajes de programación imperativos, donde el flujo de control se especifica mediante órdenes en serie (imperativos). Los lenguajes de programación (puros) funcionales y basados ​​en la lógica también son declarativos y constituyen las principales subcategorías de la categoría declarativa. En esta sección se enumeran ejemplos adicionales que no se encuentran en esas subcategorías.

Idiomas integrables

En código fuente

Los lenguajes integrables en código fuente incorporan pequeños fragmentos de código ejecutable dentro de un fragmento de texto de formato libre, generalmente una página web.

Los lenguajes integrados del lado del cliente están limitados por las capacidades del navegador o del cliente de destino. Su objetivo es aportar dinamismo a las páginas web sin necesidad de volver a contactar con el servidor.

Los lenguajes integrados en el servidor son mucho más flexibles, ya que casi cualquier lenguaje puede integrarse en un servidor. El objetivo de tener fragmentos de código del servidor integrados en una página web es generar marcado adicional de forma dinámica; el código en sí desaparece cuando se muestra la página y es reemplazado por su salida.

Lado del servidor

Los ejemplos anteriores están especialmente dedicados a este propósito. Se pueden adaptar una gran cantidad de otros lenguajes, como Erlang , Scala , Perl , Ring y Ruby (por ejemplo, convirtiéndolos en módulos de Apache ).

Lado del cliente

En código objeto

Se puede incorporar una amplia variedad de lenguajes dinámicos o de scripting en el código ejecutable compilado. Básicamente, el código objeto para el intérprete del lenguaje debe vincularse al ejecutable. Los fragmentos de código fuente para el lenguaje incorporado se pueden pasar a una función de evaluación como cadenas. Los lenguajes de control de aplicaciones se pueden implementar de esta manera, si el código fuente lo ingresa el usuario. Se prefieren los lenguajes con intérpretes pequeños.

Lenguajes de programación educativa

Lenguajes desarrollados principalmente con el propósito de enseñar y aprender programación.

Lenguajes esotéricos

Un lenguaje de programación esotérico es un lenguaje de programación diseñado como una prueba de los límites del diseño del lenguaje de programación informática, como una prueba de concepto o como una broma.

Lenguajes de extensión

Los lenguajes de programación de extensión son lenguajes integrados en otro programa y utilizados para aprovechar sus características en scripts de extensión.

Lenguas de cuarta generación

Los lenguajes de programación de cuarta generación son lenguajes de alto nivel creados en torno a sistemas de bases de datos. Se utilizan generalmente en entornos comerciales.

Lenguajes funcionales

Los lenguajes de programación funcional definen los programas y subrutinas como funciones matemáticas y los tratan como de primera clase. Muchos de los denominados lenguajes funcionales son "impuros" y contienen características imperativas. Muchos lenguajes funcionales están vinculados a herramientas de cálculo matemático. Entre los lenguajes funcionales se incluyen:

Puro

Impuro

Lenguajes de descripción de hardware

En electrónica, un lenguaje de descripción de hardware (HDL) es un lenguaje informático especializado que se utiliza para describir la estructura, el diseño y el funcionamiento de circuitos electrónicos y, más comúnmente, circuitos lógicos digitales. Las dos variedades de HDL más utilizadas y con mayor respaldo en la industria son Verilog y VHDL . Los lenguajes de descripción de hardware incluyen:

HDL para el diseño de circuitos analógicos

HDL para el diseño de circuitos digitales

Lenguas imperativas

Los lenguajes de programación imperativos pueden ser multiparadigmáticos y aparecer en otras clasificaciones. A continuación, se incluye una lista de lenguajes de programación que siguen el paradigma imperativo :

Idiomas del modo interactivo

Conocidos como REPL , los lenguajes de modo interactivo actúan como una especie de shell: se pueden ingresar expresiones o declaraciones de a una por vez y el resultado de su evaluación se puede ver inmediatamente.

Idiomas interpretados

Los lenguajes interpretados son lenguajes de programación en los que un intérprete puede ejecutar programas desde el código fuente. En teoría, cualquier lenguaje puede ser compilado o interpretado, por lo que el término lenguaje interpretado generalmente se refiere a lenguajes que normalmente se interpretan en lugar de compilarse.

Lenguajes iterativos

Los lenguajes iterativos se construyen alrededor de generadores que los ofrecen .

Idiomas por tipo de gestión de memoria

Idiomas recolectados como basura

La recolección de basura (GC) es una forma de administración automática de la memoria. El recolector de basura intenta recuperar la memoria que el programa asignó pero que ya no se utiliza.

Idiomas con gestión manual de memoria

Idiomas con gestión de memoria manual opcional

Lenguajes con gestión de memoria determinista

Idiomas con recuento automático de referencias (ARC)

Lenguajes basados ​​en listas – LISP

Los lenguajes basados ​​en listas son un tipo de lenguaje estructurado de datos que se basa en la estructura de datos de lista .

Pequeños idiomas

Los lenguajes pequeños [26] atienden a un dominio de problemas especializado.

Lenguajes basados ​​en lógica

Los lenguajes basados ​​en la lógica especifican un conjunto de atributos que debe tener una solución, en lugar de un conjunto de pasos para obtener una solución.

Los lenguajes notables que siguen este paradigma de programación incluyen:

Lenguajes de máquina

Los lenguajes de máquina son ejecutables directamente por la CPU de una computadora. Por lo general, se formulan como patrones de bits, generalmente representados en octal o hexadecimal . Cada patrón de bits hace que los circuitos de la CPU ejecuten una de las operaciones fundamentales del hardware. La activación de entradas eléctricas específicas (por ejemplo, pines del paquete de CPU para microprocesadores) y configuraciones lógicas para los valores de estado de la CPU controlan el cómputo del procesador. Los lenguajes de máquina individuales son específicos de una familia de procesadores; el código de lenguaje de máquina para una familia de procesadores no puede ejecutarse directamente en procesadores de otra familia a menos que los procesadores en cuestión tengan hardware adicional para soportarlo (por ejemplo, los procesadores DEC VAX incluyeron un modo de compatibilidad PDP-11). Son (esencialmente) siempre definidos por el desarrollador de la CPU, no por terceros. [b] La versión simbólica, el lenguaje ensamblador del procesador , también es definido por el desarrollador, en la mayoría de los casos. Algunos conjuntos de instrucciones de código de máquina comúnmente utilizados son:

Lenguajes macro

Lenguajes con macrosustitución textual

Los lenguajes macro transforman un archivo de código fuente en otro. Una "macro" es esencialmente un fragmento de texto corto que se expande en uno más largo (no debe confundirse con las macros higiénicas ), posiblemente con sustitución de parámetros. Se utilizan a menudo para preprocesar el código fuente. Los preprocesadores también pueden proporcionar funciones como la inclusión de archivos .

Los lenguajes macro pueden estar restringidos a actuar sobre regiones de código especialmente etiquetadas (prefijadas con un #en el caso del preprocesador de C). Alternativamente, pueden no hacerlo, pero en este caso a menudo sigue siendo indeseable (por ejemplo) expandir una macro incrustada en un literal de cadena , por lo que aún necesitan un conocimiento rudimentario de la sintaxis. Siendo ese el caso, a menudo todavía son aplicables a más de un lenguaje. Contraste con los lenguajes que se pueden incrustar en el código fuente como PHP , que tienen todas las funciones.

Lenguajes de macros de aplicación

Se han incorporado a las aplicaciones lenguajes de programación como Tcl y ECMAScript ( ActionScript , ECMAScript para XML , JavaScript , JScript ). A veces se los denomina "lenguajes de macros", aunque en un sentido algo diferente al de las macros de sustitución de texto como m4 .

Lenguajes de metaprogramación

La metaprogramación es la escritura de programas que escriben o manipulan otros programas, incluidos ellos mismos, como sus datos o que realizan parte del trabajo que de otro modo se realizaría en tiempo de ejecución durante el tiempo de compilación . En muchos casos, esto permite a los programadores hacer más en la misma cantidad de tiempo que les llevaría escribir todo el código manualmente.

Lenguajes multiparadigma

Los lenguajes multiparadigma admiten más de un paradigma de programación . Permiten que un programa utilice más de un estilo de programación . El objetivo es permitir que los programadores utilicen la mejor herramienta para un trabajo, admitiendo que ningún paradigma resuelve todos los problemas de la manera más fácil o eficiente.

Análisis numérico

Varios lenguajes de programación de propósito general, como C y Python , también se utilizan para la computación técnica; esta lista se centra en lenguajes utilizados casi exclusivamente para la computación técnica.

Idiomas distintos del inglés

Lenguajes basados ​​en clases y orientados a objetos

Los lenguajes de programación orientados a objetos basados ​​en clases admiten objetos definidos por su clase. Las definiciones de clase incluyen datos de los miembros. El paso de mensajes es un concepto clave, si no el principal, en los lenguajes orientados a objetos.

Las funciones polimórficas parametrizadas por la clase de algunos de sus argumentos se denominan normalmente métodos . En lenguajes con un único envío , las clases normalmente también incluyen definiciones de métodos. En lenguajes con varios envíos , los métodos se definen mediante funciones genéricas . Hay excepciones en las que los métodos de un único envío son funciones genéricas (por ejemplo, el sistema de objetos de Bigloo ).

Despacho múltiple

Despacho único

Lenguajes basados ​​en prototipos orientados a objetos

Los lenguajes basados ​​en prototipos son lenguajes orientados a objetos donde se ha eliminado la distinción entre clases e instancias:

Reglas del fuera de juego en distintos idiomas

Los lenguajes de reglas fuera de juego denotan bloques de código por su sangría .

Lenguajes procedimentales

Los lenguajes de programación procedimental se basan en el concepto de unidad y alcance (el rango de visualización de datos) de una sentencia de código ejecutable. Un programa procedimental se compone de una o más unidades o módulos, ya sea codificados por el usuario o proporcionados en una biblioteca de códigos; cada módulo se compone de uno o más procedimientos, también llamados función, rutina, subrutina o método, según el lenguaje. Algunos ejemplos de lenguajes procedimentales son:

Lenguajes de consulta

Lenguajes reflexivos

Los lenguajes de programación reflexivos permiten que los programas examinen y posiblemente modifiquen su estructura de alto nivel en tiempo de ejecución o de compilación. Esto es más común en lenguajes de programación de máquinas virtuales de alto nivel como Smalltalk y menos común en lenguajes de programación de nivel inferior como C. Lenguajes y plataformas que admiten la reflexión:

Lenguajes basados ​​en reglas

Los lenguajes basados ​​en reglas crean instancias de reglas cuando se activan por condiciones en un conjunto de datos. De todas las activaciones posibles, se selecciona algún conjunto y se ejecutan las instrucciones que pertenecen a esas reglas. Los lenguajes basados ​​en reglas incluyen: [ cita requerida ]

Lenguajes de script

Lenguajes basados ​​en pila

Los lenguajes basados ​​en pila son un tipo de lenguaje estructurado de datos que se basa en la estructura de datos de pila .

Lenguajes sincrónicos

Los lenguajes de programación síncrona están optimizados para la programación de sistemas reactivos, sistemas que se interrumpen con frecuencia y deben responder rápidamente. Muchos de estos sistemas también se denominan sistemas en tiempo real y se utilizan a menudo en sistemas integrados .

Ejemplos:

Lenguajes de sombreado

Un lenguaje de sombreado es un lenguaje de programación de gráficos adaptado a la programación de efectos de sombreado. Estas formas de lenguaje suelen constar de tipos de datos especiales, como "color" y "normal". Debido a la variedad de mercados de destino de los gráficos informáticos en 3D.

Representación en tiempo real

Proporcionan una mayor abstracción de hardware y un modelo de programación más flexible que los paradigmas anteriores que codificaban ecuaciones de transformación y sombreado. Esto le da al programador un mayor control sobre el proceso de renderizado y ofrece un contenido más completo con menos gastos generales.

Representación sin conexión

Los lenguajes de sombreado que se utilizan en la renderización sin conexión producen una calidad de imagen máxima. El procesamiento de estos sombreadores requiere mucho tiempo y la potencia computacional necesaria puede ser costosa debido a su capacidad para producir resultados fotorrealistas.

Lenguajes que manejan sintaxis

Estos lenguajes ayudan a generar analizadores léxicos y analizadores sintácticos para gramáticas libres de contexto .

Idiomas del sistema

Los lenguajes de programación de sistemas se utilizan para tareas de bajo nivel, como la gestión de memoria o la gestión de tareas. Un lenguaje de programación de sistemas suele hacer referencia a un lenguaje de programación utilizado para la programación de sistemas; dichos lenguajes están diseñados para escribir software de sistemas, lo que normalmente requiere enfoques de desarrollo diferentes en comparación con el software de aplicación.

El software de sistema es un software informático diseñado para operar y controlar el hardware de la computadora y para proporcionar una plataforma para ejecutar software de aplicación. El software de sistema incluye categorías de software como sistemas operativos, software de utilidades, controladores de dispositivos, compiladores y enlazadores. Algunos ejemplos de lenguajes de sistema son:

Lenguajes de transformación

Los lenguajes de transformación sirven para transformar (traducir) el código fuente especificado en un lenguaje formal determinado en un código de formato de destino definido. Se utilizan con mayor frecuencia en componentes intermedios de supersistemas más complejos para adoptar resultados internos como entrada en una rutina de procesamiento posterior.

Lenguajes visuales

Los lenguajes de programación visual permiten a los usuarios especificar programas de forma bidimensional (o más), en lugar de hacerlo como cadenas de texto unidimensionales, mediante diseños gráficos de varios tipos. Algunos lenguajes de programación de flujo de datos también son lenguajes visuales.

Idiomas Wirth

El científico informático Niklaus Wirth diseñó e implementó varios lenguajes influyentes.

Lenguajes basados ​​en XML

Se trata de lenguajes basados ​​o que operan sobre XML .

Véase también

Notas

  1. ^ Los objetos de SQL son colecciones de registros de bases de datos , llamadas tablas. Un lenguaje de programación completo puede especificar algoritmos , independientemente del tiempo de ejecución . Por lo tanto, se puede considerar que un algoritmo genera resultados utilizables. Por el contrario, SQL solo puede seleccionar registros que se limitan a la colección actual, los datos disponibles en el sistema, en lugar de producir una declaración sobre la exactitud del resultado.
  2. ^ Una notable excepción sería la CPU de la serie soviética/rusa 1801 , que originalmente usaba su propia ISA doméstica, pero que luego fue rediseñada para ser compatible con PDP-11 como una decisión política.
  3. ^ ab No se enumeran los submodelos, solo los modelos base.
  4. ^ El concepto de objeto con la semántica OO tradicional de despacho único no está presente en Julia, sino con el despacho múltiple más general en diferentes tipos en tiempo de ejecución.
  5. ^ Swift utiliza el conteo automático de referencias .

Referencias

  1. ^ "Operadores" . Consultado el 13 de mayo de 2024 .
  2. ^ "envolver".
  3. ^ ""Aspectos en Raku"".
  4. ^ "Christopher Diggins: ¿Qué es un lenguaje concatenativo?". Drdobbs.com. 2008-12-31 . Consultado el 2013-07-01 .
  5. ^ "Operador de feed".
  6. ^ Documentación » La biblioteca estándar de Python » Ejecución concurrente
  7. ^ "Canales y otros mecanismos".
  8. ^ "Solucionador de problemas".
  9. ^ ab "Sintaxis basada en sangría · rsdn/nemerle Wiki". GitHub . Consultado el 18 de marzo de 2022 .
  10. ^ "Solidez: documentación de Solidity 0.8.11".
  11. ^ "Iterador".
  12. ^ "Gestión de memoria · BlitzMax" . Consultado el 14 de julio de 2023 .
  13. ^ "Pointers · BlitzMax" . Consultado el 14 de julio de 2023 .
  14. ^ "BRL.Blitz · BlitzMax" . Consultado el 14 de julio de 2023 .
  15. ^ "Uso de punteros en un programa ILE COBOL - Documentación de IBM". IBM . Consultado el 14 de julio de 2023 .
  16. ^ "HEAP - Documentación de IBM". IBM . Consultado el 14 de julio de 2023 .
  17. ^ "Elementos del lenguaje OO COBOL basados ​​en SOM que se modifican - Documentación de IBM". IBM . Consultado el 14 de julio de 2023 .
  18. ^ "Asignación de memoria: documentación de Cython 3.0.0.dev0" . Consultado el 14 de julio de 2023 .
  19. ^ "Recolección de basura". Lenguaje de programación D . Consultado el 18 de marzo de 2022 .
  20. ^ "Gestión de la memoria de Nim" . Consultado el 18 de marzo de 2022 .
  21. ^ Adobe (febrero de 1999). PostScript Language Reference, tercera edición (PDF) . Addison-Wesley Publishing Company. págs. 56–65.
  22. ^ "Interoperabilidad de código nativo: documentación de Scala Native 0.4.14" . Consultado el 5 de julio de 2023 .
  23. ^ "Proyectos/Vala/Manejo de referencias - Wiki de GNOME!". Archivado desde el original el 21 de enero de 2024. Consultado el 21 de marzo de 2022 .
  24. ^ "Entendiendo la propiedad - El lenguaje de programación Rust". doc.rust-lang.org .
  25. ^ "Punteros inteligentes: el lenguaje de programación Rust". doc.rust-lang.org .
  26. ^ Jon Bentley (AT&T) Agosto de 1986 CACM 29 (8) "Little Languages", pp 711-721 de su columna Programming Pearls
  27. ^ "Metaprogramación: qué, por qué y cómo". 14 de diciembre de 2011.
  28. ^ "Macros de procedimiento para generar código a partir de atributos". doc.rust-lang.org .
  29. ^ "Clases y roles".
  30. ^ "Protocolo de metaobjetos (MOP)".
  31. ^ Scabia, Marco. «¿Qué es AGAL?». Adobe Developer Connection . Adobe . Consultado el 8 de mayo de 2018 .
  32. ^ "Gramáticas".
  33. ^ Wulf, WA; Russell, DB; Haberman, AN (diciembre de 1971). "BLISS: Un lenguaje para la programación de sistemas". Comunicaciones de la ACM . 14 (12): 780–790. CiteSeerX 10.1.1.691.9765 . doi :10.1145/362919.362936. S2CID  9564255. 
  34. ^ "Aplicaciones C++".
  35. ^ "Organizaciones que utilizan el lenguaje D". Lenguaje de programación D .
  36. ^ "Investigación de Mozilla". 1 de enero de 2014.