Lenguaje de programación
Sabías ...
Voluntarios SOS ayudaron a elegir artículos e hicieron otro material curricular El apadrinamiento de niños ayuda a los niños uno por uno http://www.sponsor-a-child.org.uk/ .
Un lenguaje de programación es un lengua artificial que se puede utilizar para controlar el comportamiento de una máquina, en particular un ordenador . Los lenguajes de programación se definen por sintáctica y reglas semánticas que describen su estructura y significado, respectivamente. Muchos lenguajes de programación tienen algún tipo de especificación escrita de su sintaxis y semántica; algunos están definidos por una implementación oficial (por ejemplo, una ISO estándar), mientras que otros tienen una aplicación dominante (por ejemplo, Perl ).
Los lenguajes de programación también se utilizan para facilitar la comunicación acerca de la tarea de organizar y manipular la información, y para expresar algoritmos con precisión. Algunos autores restringen el término "lenguaje de programación" a aquellas lenguas que pueden expresar todos los algoritmos posibles; a veces el término " lenguaje informático "se utiliza para las lenguas artificiales más limitados.
Lenguaje de programación listas |
---|
|
Miles de diferentes lenguajes de programación se han creado hasta ahora, y los nuevos lenguajes se crean cada año.
Definiciones
Rasgos menudo consideran importantes para la constitución de un lenguaje de programación:
- Función: Un lenguaje de programación es un lenguaje utilizado para escribir programas de ordenador, que implican un ordenador realizar algún tipo de computación o algoritmo y posiblemente controlar dispositivos externos como impresoras, robots, y así sucesivamente.
- Objetivo: Los lenguajes de programación son diferentes de lenguas naturales en que las lenguas naturales se utilizan únicamente para la interacción entre las personas, mientras que los lenguajes de programación también permiten a los seres humanos para comunicarse instrucciones a las máquinas. Algunos lenguajes de programación son utilizados por un dispositivo a controlar a otra. Por ejemplo Programas PostScript son frecuentemente creados por otro programa para controlar un impresora de ordenador o pantalla.
- Construye: Los lenguajes de programación pueden contener construcciones para definir y manipular estructuras de datos o el control de la flujo de ejecución.
- Poder expresivo: La teoría de la computación clasifica idiomas por los cálculos que son capaces de expresar. Todos Turing idiomas completos puede aplicar el mismo conjunto de algoritmos . ANSI / ISO SQL y Caridad son ejemplos de lenguajes que no son de Turing, aunque a menudo llamados lenguajes de programación completos.
Lenguas no computacionales, tales como lenguajes de marcas como HTML o gramáticas formales como BNF, son por lo general no se consideran lenguajes de programación. Un lenguaje de programación (que puede o no ser Turing completa) esté incorporado en estas (host) lenguas no computacionales.
Propósito
Un objetivo importante de los lenguajes de programación es proporcionar instrucciones a un ordenador. Como tales, los lenguajes de programación difieren de la mayoría de otras formas de expresión humana en que requieren un mayor grado de precisión e integridad. Al utilizar un lenguaje natural para comunicarse con otras personas, los autores humanos y altavoces pueden ser ambiguos y hacer pequeños errores, y aún esperan su intención de ser entendido. Sin embargo, hablando en sentido figurado, los ordenadores "hacen exactamente lo que se les dice que hacer", y no pueden "entender" lo que el código del programador intención de escribir. La combinación de la definición del lenguaje, la programa, y los insumos del programa deben especificar completamente el comportamiento externo que se produce cuando se ejecuta el programa.
Muchas lenguas se han diseñado desde cero, alterado para satisfacer las nuevas necesidades, en combinación con otros idiomas, y, finalmente caído en desuso. Aunque ha habido intentos de diseñar un lenguaje informático "universal" que sirve a todos los efectos, todos ellos han dejado de ser aceptado en este papel. La necesidad de diversos lenguajes de programación se debe a la diversidad de contextos en los que se utilizan idiomas:
- Los programas van desde pequeños guiones escritos por aficionados individuales hasta grandes sistemas escritos por cientos de programadores.
- Los programadores se extienden en la experiencia de los novatos que necesitan simplicidad por encima de todo, a expertos que puedan estar a gusto con una complejidad considerable.
- Los programas deben equilibrar la velocidad, tamaño y simplicidad en los sistemas que van desde microcontroladores a supercomputadoras.
- Los programas pueden ser escritos una vez y no cambian durante generaciones, o pueden experimentar una modificación casi constante.
- Por último, los programadores pueden simplemente difieren en sus gustos: pueden ser acostumbrados a discutir los problemas y expresarlos en un idioma determinado.
Una tendencia común en el desarrollo de los lenguajes de programación ha sido añadir más capacidad de resolver problemas mediante un mayor nivel de abstracción. Los lenguajes de programación más tempranos fueron atados muy estrechamente con el hardware subyacente de la computadora. Como los nuevos lenguajes de programación se han desarrollado, se han añadido características que permiten a los programadores expresan ideas que son más alejada de la simple traducción en instrucciones de hardware subyacentes. Debido a que los programadores no están tan ligados a la complejidad de la computadora, sus programas pueden hacer más de computación con menos esfuerzo del programador. Esto les permite escribir más funcionalidad por unidad de tiempo.
Procesadores de lenguaje natural se han propuesto como una manera de eliminar la necesidad de un lenguaje especializado para la programación. Sin embargo, este objetivo sigue siendo distante y sus beneficios están abiertos al debate. Edsger Dijkstra tomó la posición de que es esencial el uso de un lenguaje formal para evitar la introducción de construcciones sin sentido, y desestimó la programación en lenguaje natural como "tonto". Alan Perlis fue igualmente desdeñosos de la idea.
Elementos
Sintaxis
Forma de la superficie de un lenguaje de programación se conoce como su sintaxis. La mayoría de los lenguajes de programación son puramente textual; que utilizan secuencias de texto incluyendo palabras, números y puntuacion, al igual que los lenguajes naturales escritos. Por otro lado, hay algunos lenguajes de programación que son más de carácter gráfico, utilizando relaciones espaciales entre los símbolos para especificar un programa.
La sintaxis de un lenguaje describe las posibles combinaciones de símbolos que forman un programa sintácticamente correcto. El significado que se da a una combinación de símbolos es manejado por la semántica (ya sea formal o no modificable en un implementación de referencia). Como la mayoría de los idiomas son textuales, este artículo analiza la sintaxis textual.
La sintaxis del lenguaje de programación se define generalmente mediante una combinación de expresiones regulares (por estructura léxica) y Forma de Backus-Naur (por estructura gramatical). A continuación se muestra una gramática sencilla, basada en Lisp:
expression ::= atom | list
atom ::= number | symbol
number ::= [+-]?['0'-'9']+
symbol ::= ['A'-'Z''a'-'z'].*
list ::= '(' expression* ')'
Esta gramática especifica lo siguiente:
- una expresión es o bien un átomo o una lista;
- un átomo es un número o un símbolo;
- un número es una secuencia ininterrumpida de uno o más dígitos decimales, opcionalmente precedidos por un signo más o menos;
- un símbolo es una letra seguida de cero o más caracteres (excluyendo los espacios en blanco); y
- una lista es un par emparejado de paréntesis, con cero o más expresiones en su interior.
Los siguientes son ejemplos de secuencias de token bien formados en esta gramática: ' 12345
',' ()
',' (ab c232 (1))
'
No todos los programas sintácticamente correctas son semánticamente correcto. Muchos programas sintácticamente correctas, sin embargo, mal formado, según las reglas de la lengua; y puede (dependiendo de la especificación del lenguaje y la solidez de la aplicación) dan como resultado un error en la traducción o la ejecución. En algunos casos, estos programas pueden exhibir comportamiento indefinido. Incluso cuando un programa está bien definido dentro de un lenguaje, todavía puede tener un significado que no es la intención de la persona que lo escribió.
Uso lenguaje natural como un ejemplo, puede que no sea posible asignar un significado a una frase gramaticalmente correcta o la frase puede ser falso:
- " Las ideas verdes incoloras duermen furiosamente. "Es gramaticalmente bien formados, pero ha significado generalmente aceptado.
- "John es un soltero casado." es gramaticalmente bien formados pero expresa un significado que no puede ser verdad.
El siguiente fragmento de lenguaje C es sintácticamente correcta, pero realiza una operación que no se define semánticamente (porque p es un puntero nulo, las operaciones p-> real y p-> im no tienen ningún significado):
complejo * p = NULL; abs_p complejo = sqrt (p-> real * p-> real + p-> im * p-> im);
La gramática necesaria para especificar un lenguaje de programación se puede clasificar por su posición en el Jerarquía de Chomsky. La sintaxis de los lenguajes de programación se puede especificar mediante una gramática de tipo 2, es decir, son gramáticas libres de contexto.
Semántica estática
La semántica estática define restricciones sobre la estructura de los textos válidos que son difíciles o imposibles de expresar en formalismos sintácticos estándar. La más importante de estas restricciones están cubiertas por los sistemas de tipo.
Sistema Tipo
Un sistema de tipo define cómo un lenguaje de programación clasifica valores y expresiones en tipos, cómo se puede manipular esos tipos y la forma en que interactúan. Esto generalmente incluye una descripción de la estructuras de datos que se pueden construir en el idioma. El diseño y el estudio de los sistemas de tipo usando la matemática formal, que se conoce como escriba teoría.
Internamente, todo datos en las computadoras digitales modernas se almacenan simplemente como ceros o unos (o binarios ).
Mecanografiado frente idiomas sin tipo
Un idioma se escribe si la especificación de cada operación define tipos de datos a los que la operación es aplicable, con la implicación de que no es aplicable a otros tipos. Por ejemplo, " this text between the quotes
"es una cadena. En la mayoría de los lenguajes de programación, dividir un número por una cadena no tiene sentido. Por lo tanto, la mayoría de lenguajes de programación modernos rechazarán cualquier programa que pretenda llevar a cabo una operación de este tipo. En algunos idiomas, la operación de sentido se detecta cuando se compila el programa ("estática" comprobación de tipos), y rechazado por el compilador, mientras que en otros, se detecta cuando el programa se ejecuta (comprobación de tipos "dinámica"), resultando en un tiempo de ejecución excepción.
Un caso especial de lenguajes con tipos son los idiomas de un solo tipo. A menudo se trata de secuencias de comandos o lenguajes de marcado, como Rexx o SGML, y tiene sólo un tipo de datos - más comúnmente cadenas de caracteres que se utilizan tanto para datos simbólicos y numéricos.
En contraste, un lenguaje sin tipo, tales como la mayoría lenguajes ensambladores, permite a cualquier operación que se realice en cualquier dato, que se consideran generalmente como secuencias de bits de diferentes longitudes. Los lenguajes de alto nivel que son sin tipo incluyen BCPL y algunas variedades de Forth.
En la práctica, mientras que algunos idiomas se consideran escrito desde el punto de vista de escriba teoría (verificar o rechazar todas las operaciones), la mayoría de las lenguas modernas ofrecen un grado de mecanografía. Muchos lenguajes de producción proporcionan medios para eludir o subvertir el sistema de tipos.
Estático frente tipado dinámico
En tipificación estática todas las expresiones tienen sus tipos determinados antes de la que se ejecuta el programa (normalmente en tiempo de compilación). Por ejemplo, 1 y (2 + 2) son expresiones de enteros; que no pueden ser pasados a una función que espera una cadena o almacena en una variable que se define para mantener las fechas.
Lenguajes de tipo estático se pueden escribir o manifiestamente escribir-inferido. En el primer caso, el programador debe escribir explícitamente tipos en ciertas posiciones textuales (por ejemplo, en la variable de declaraciones). En el segundo caso, el compilador infiere los tipos de expresiones y declaraciones basados en el contexto. La mayoría de los principales lenguajes de tipo estático, como C ++ , C # y Java , son manifiestamente mecanografiadas. Tipo completo inferencia se ha asociado tradicionalmente con menos idiomas principales, tales como Haskell y ML. Sin embargo, muchos idiomas manifiestamente mecanografiadas apoyan la inferencia de tipos parcial; por ejemplo, Java y C # tanto inferir tipos en algunos casos limitados tipado dinámico, también llamado a escribir latente, determina el tipo de seguridad de las operaciones en tiempo de ejecución.; En otras palabras, los tipos se asocian con los valores de tiempo de ejecución en lugar de expresiones textuales. Al igual que con lenguajes de tipo inferido, lenguajes con tipos dinámicamente no requieren que el programador escriba anotaciones de tipo explícitas expresiones. Entre otras cosas, esto puede permitir que una sola variable para hacer referencia a los valores de diferentes tipos en diferentes momentos de la ejecución del programa. Sin embargo, los errores de tipo no pueden ser detectados automáticamente hasta una pieza de código se ejecuta realmente, lo que hace más difícil la depuración. Ruby, Lisp, JavaScript y Python se escriben de forma dinámica.
Tipificación débil y fuerte
Tipificación débil permite un valor de un tipo a ser tratado como otro, por ejemplo el tratamiento de una cadena como un número. Esta vez en cuando puede ser útil, pero también puede permitir que algunos tipos de defectos del programa para no se detectan en tiempo de compilación e incluso en tiempo de ejecución.
Tipado fuerte impide que el anterior. Un intento de realizar una operación en el tipo equivocado de valor genera un error. Tipo de fallos idiomas inflexible de tipos se llaman a menudo o segura.
Una definición alternativa "tipos débiles" se refiere a las lenguas, como Perl , JavaScript, y C ++ , que permiten un gran número de conversiones de tipo implícitas. En JavaScript, por ejemplo, la expresión 2 * x
convierte implícitamente x
a un número, y esta conversión tiene éxito incluso si x
es null
, undefined
, una Array
o una cadena de letras. Tales conversiones implícitas a menudo son útiles, pero pueden enmascarar errores de programación.
Fuerte y estática están ahora generalmente considerados conceptos ortogonales, pero el uso en la literatura difiere. Algunos utilizan el término de tipo fuerte en el sentido fuerte, de tipos estáticos, o, aún más confusa, para significar simplemente tipos estáticos. Así C ha llamado tanto inflexible de tipos y débilmente, tipos estáticos.
Semántica de ejecución
Una vez que se ha especificado de datos, la máquina debe ser instruido para realizar operaciones en los datos. La semántica de ejecución de un lenguaje define cómo y cuándo las diversas construcciones de un lenguaje deben producir un comportamiento del programa.
Por ejemplo, la semántica pueden definir el estrategia mediante la cual las expresiones se evalúan a los valores, o la manera en que estructuras de control ejecutan condicionalmente declaraciones.
Biblioteca Core
La mayoría de los lenguajes de programación tienen un asociado biblioteca central (a veces conocida como la "librería estándar", especialmente si se incluye como parte de la lengua estándar publicado), que se hace convencionalmente disponible por todas las implementaciones del lenguaje. Bibliotecas del núcleo típicamente incluyen las definiciones de los algoritmos utilizados, estructuras de datos y los mecanismos de entrada y salida.
Biblioteca central de un lenguaje a menudo es tratada como parte de la lengua por sus usuarios, aunque los diseñadores pueden haber tratado como una entidad separada. Muchas especificaciones del lenguaje definen un núcleo que deberá estar a disposición de todas las implementaciones, y en el caso de lenguajes estandarizados pueden requerirse esta biblioteca central. La línea entre una lengua y su biblioteca central, por tanto, difiere de un idioma a otro. De hecho, algunos idiomas están diseñados para que los significados de ciertas construcciones sintácticas ni siquiera pueden describirse sin hacer referencia a la biblioteca central. Por ejemplo, en Java , un literal de cadena se define como una instancia de la clase java.lang.String; Del mismo modo, en Smalltalk, un función anónima expresión (un "bloque") construye una instancia de la clase BlockContext de la biblioteca. Por el contrario, Esquema contiene varios subconjuntos coherentes que bastan para construir el resto de la lengua como macros de la biblioteca, por lo que los diseñadores del lenguaje ni siquiera se molestó en decir qué partes de la lengua deben ser implementados como construcciones del lenguaje, y que debe implementarse como partes de un biblioteca.
Práctica
Diseñadores y usuarios de una lengua deben construir una serie de artefactos que rigen y permiten la práctica de programación. El más importante de estos artefactos son la especificación del lenguaje y la implementación.
Especificación
La especificación de un lenguaje de programación está destinado a proporcionar una definición que el idioma los usuarios y el ejecutores pueden utilizar para determinar si el comportamiento de una programa es correcto, dada su código fuente.
Una especificación de lenguaje de programación puede tomar varias formas, incluyendo las siguientes:
- Una definición explícita de la sintaxis, semántica estática, y la semántica de ejecución de la lengua. Mientras que la sintaxis se especifica comúnmente utilizando una gramática formal, definiciones semánticas pueden ser escritos en lenguaje natural (por ejemplo, el lenguaje C ), o una semántica formal (por ejemplo, la Standard ML y Especificaciones Scheme).
- Una descripción del comportamiento de una Traductor para el idioma (por ejemplo, el C ++ y Especificaciones Fortran). La sintaxis y la semántica de la lengua tienen que deducir de esta descripción, que puede estar escrito en lenguaje formal natural o a.
- Una referencia o modelo de aplicación, a veces escritos en que se especifica el idioma (por ejemplo, Prolog o ANSI REXX). La sintaxis y la semántica de la lengua son explícitas en el comportamiento de la implementación de referencia.
Implementación
Una implementación de un lenguaje de programación proporciona una manera de ejecutar ese programa en una o más configuraciones de hardware y software. Hay, en términos generales, dos enfoques para la implementación del lenguaje de programación: recopilación y interpretación. En general, es posible implementar un idioma utilizando cualquiera de las técnicas.
La salida de una compilador puede ser ejecutada por hardware o un programa llamado un intérprete. En algunas implementaciones que hacen uso del enfoque intérprete no existe una frontera clara entre la compilación y la interpretación. Por ejemplo, algunas implementaciones del lenguaje de programación BASIC compilar y luego ejecutar la fuente de una línea a la vez.
Los programas que se ejecutan directamente en el hardware que generalmente se ejecuta en varios órdenes de magnitud más rápido que aquellos que son interpretados en el software.
Una técnica para mejorar el rendimiento de los programas interpretados es justo a tiempo de compilación. Aquí el máquina virtual, justo antes de la ejecución, traduce los bloques de bytecode que se va a utilizar a código máquina, para la ejecución directa en el hardware.
Historia
Los primeros desarrollos
Los primeros lenguajes de programación son anteriores a la computadora moderna. El siglo 19 había "programable" telares y rollos de pianola que implementaron lo que son hoy reconocidos como ejemplos de lenguajes de programación específicos de dominio. A principios del siglo XX, las tarjetas perforadas datos codificados y dirigidos procesamiento mecánico. En los años 1930 y 1940, los formalismos de Alonzo Iglesia de lambda cálculo y Alan Turing 's Máquinas de Turing siempre abstracciones matemáticas para expresar algoritmos ; el cálculo lambda sigue siendo influyente en el diseño de lenguajes.
En la década de 1940, se crearon las primeras computadoras digitales de propulsión eléctrica. La primera lenguaje de programación de alto nivel que se ha diseñado para un ordenador era Plankalkül, desarrollado para el alemán Z3 por Konrad Zuse entre 1943 y 1945.
Los ordenadores de la década de 1950, en particular el UNIVAC I y la IBM 701 usado programas en lenguaje de máquina. Programación en lenguaje de máquina de primera generación fue reemplazado rápidamente por una segunda generación de lenguajes de programación conocidos como Los lenguajes ensambladores. Más tarde, en la década de 1950, la programación en lenguaje ensamblador, que había evolucionado para incluir el uso de instrucciones de macro, fue seguido por el desarrollo de tres lenguajes de programación de alto nivel: FORTRAN, LISP, y COBOL. Las versiones actualizadas de todos los éstos están todavía en uso general, y cada uno ha influido fuertemente en el desarrollo de las lenguas posteriores. A finales de la década de 1950, el lenguaje formalizado como Algol 60 fue introducido, y lenguajes de programación más tarde son, en muchos aspectos, de los descendientes de Algol. El formato y el uso de los lenguajes de programación temprana fue fuertemente influenciado por el limitaciones de la interfaz.
Refinamiento
El período comprendido entre los años 1960 a finales de 1970 trajo el desarrollo de los principales paradigmas de idiomas que se utilizan actualmente, aunque muchos aspectos eran refinamientos de las ideas en la primera Lenguajes de programación de tercera generación:
- APL introducido programación matriz e influenciado programación funcional.
- PL / I (NPL) fue diseñado en la década de 1960 para incorporar las mejores ideas de FORTRAN y COBOL.
- En la década de 1960, Simula fue el primer lenguaje diseñado para apoyar programación orientada a objetos; a mediados de la década de 1970, Smalltalk siguió con el primer lenguaje orientado a objetos "puramente".
- C fue desarrollado entre 1969 y 1973 como lenguaje de programación de sistemas, y sigue siendo popular.
- Prolog, diseñado en 1972, fue la primera lenguaje de programación lógica.
- En 1978, ML construyó un sistema de tipo polimórfico en la parte superior de Lisp, pionero tipos estáticos lenguajes de programación funcional.
Cada una de estas lenguas engendrado una familia entera de descendientes, y la mayoría de las lenguas modernas cuentan al menos uno de ellos en su ascendencia.
Los años 1960 y 1970 también vio un considerable debate sobre los méritos de programación estructurada, y si los lenguajes de programación deben ser diseñados para apoyarlo. Edsger Dijkstra, en una famosa carta 1968 publicado en el Comunicaciones de la ACM, argumentaron que GOTO deben ser eliminados de todos los lenguajes de programación "más alto nivel".
Los años 1960 y 1970 también vio la expansión de técnicas que reducen la huella de un programa, así como la mejora de la productividad del programador y usuario. La cartas de la baraja para una temprana 4GL era mucho más pequeña para la misma funcionalidad expresada en un Cubierta 3GL.
Consolidación y crecimiento
La década de 1980 fueron años de consolidación relativa. C ++ de programación orientada a objetos y sistemas combinados. El gobierno de Estados Unidos estandarizada Ada, un lenguaje de programación de sistemas destinados a ser utilizados por los contratistas de defensa. En Japón y en otros lugares, enormes sumas se gastaron investigando la llamada lenguas "quinta generación" que incorpora construcciones de programación lógica. La comunidad de los lenguajes funcionales se trasladó a estandarizar ML y Lisp. En vez de inventar nuevos paradigmas, todos estos movimientos elaborados en las ideas inventadas en la década anterior.
Una tendencia importante en el diseño del lenguaje durante la década de 1980 fue un mayor enfoque en la programación de sistemas a gran escala a través del uso de módulos, o en gran escala las dependencias administrativas del código. Todos los sistemas de módulos notables desarrollados en la década de 1980 Modula-2, Ada y ML, aunque otros idiomas, como el PL / I, ya tenía un amplio apoyo para la programación modular. Sistemas de módulos a menudo eran casados con construcciones de programación genéricos.
El rápido crecimiento de la Internet en la década de mediados de 1990 creó oportunidades para nuevos idiomas. Perl , originalmente una herramienta de scripting de Unix lanzado por primera vez en 1987, se hizo común en dinámica Sitios Web. Java llegaron a ser utilizados para la programación del lado del servidor. Estos acontecimientos no eran fundamentalmente novela, sino que fueron el perfeccionamiento de idiomas y paradigmas existentes, y en gran parte basado en la familia C de lenguajes de programación.
La evolución del lenguaje de programación continua, tanto en la industria y la investigación. Direcciones actuales incluyen la seguridad y la verificación de la fiabilidad, nuevos tipos de modularidad ( mixins, delegados, aspectos), y la integración de bases de datos.
La 4GLs son ejemplos de lenguas que son de dominio específico, como SQL, que manipula y devoluciones conjuntos de datos en lugar de los valores escalares que son canónica a la mayoría de los lenguajes de programación. Perl , por ejemplo, con su ' aquí el documento 'puede contener múltiples programas 4GL, así como varios programas de JavaScript, en el marco de su propio código de perl y utilizar la interpolación de variables en el' aquí documento 'para apoyar la programación multi-idioma.
El uso del lenguaje de medición
Es difícil determinar cuáles son los más ampliamente utilizados lenguajes de programación, y lo que significa el uso varía según el contexto. Un idioma puede ocupar el mayor número de horas de programador, uno diferente tiene más líneas de código, y un tercer utilizar la mayor parte del tiempo de CPU. Algunas lenguas son muy populares para determinados tipos de aplicaciones. Por ejemplo, COBOL sigue siendo fuerte en el centro de datos corporativo, a menudo en gran mainframes; FORTRAN en aplicaciones de ingeniería; C en aplicaciones embebidas y sistemas operativos; y otros idiomas se utilizan regularmente para escribir muchos tipos diferentes de aplicaciones.
Varios métodos de medición de popularidad lenguaje de cada sujeto a un sesgo diferente sobre lo que se mide, se han propuesto:
- contando el número de ofertas de empleo que mencionan el idioma
- el número de libros vendidos que enseñan o describen el idioma
- las estimaciones del número de líneas existentes de código escrito en el lenguaje que puede subestimar lenguas no encuentran a menudo en las búsquedas públicas
- los recuentos de referencias de la lengua encontraron usando un motor de búsqueda web.
Las taxonomías
No hay sistema de clasificación general para los lenguajes de programación. Un lenguaje de programación determinado no suele tener una sola lengua ancestral. Idiomas comúnmente surgen al combinar los elementos de varios idiomas predecesoras con nuevas ideas en circulación en ese momento. Ideas que se originan en un idioma se difundirán a través de una familia de lenguas relacionadas, y luego saltar de repente a través de boquetes familiares a aparecer en una familia completamente diferente.
La tarea se complica aún más por el hecho de que las lenguas se pueden clasificar lo largo de múltiples ejes. Por ejemplo, Java es a la vez un lenguaje orientado a objetos (porque fomenta la organización orientada a objetos) y un lenguaje concurrente (debido a que contiene construcciones incorporadas para ejecutar múltiples hilos en paralelo). Python es una orientada a objetos lenguaje de scripting.
A grandes rasgos, los lenguajes de programación se dividen en programación paradigmas y una clasificación por dominio de uso previsto. Paradigmas incluyen programación procedimental, programación orientada a objetos, programación funcional, y programación de la lógica; algunas lenguas son híbridos de paradigmas o multi-paradigmático. Una lenguaje ensamblador no es tanto un paradigma como modelo directo de una arquitectura de la máquina subyacente. Por ello, los lenguajes de programación se pueden considerar de propósito general, los lenguajes de programación del sistema, lenguajes de script, lenguajes específicos de dominio, o lenguas concurrentes / distribuidos (o una combinación de éstos). Algunos lenguajes de propósito general fueron diseñados en gran medida con los objetivos educativos.
Un lenguaje de programación también puede clasificarse por factores no relacionados con el paradigma de programación. Por ejemplo, la mayoría de los lenguajes de programación utilizan lenguaje inglés palabras clave, mientras que una minoría no lo hacen. Otros idiomas se pueden clasificar como esotérico o no.