Linguaxe de programación

Unha linguaxe de programación é un sistema de notación para escribir programas informáticos. que consiste nun conxunto de instrucións nun código concreto que ten como obxectivo facilitar a comunicación entre o programador e o sistema informático, permitindo que os primeiros poidan comunicarse cos segundos que empregan o código máquina (unha combinación de 0 e 1) mediante un sistema semellante á linguaxe humana.

As linguaxes de programación descríbense en termos da súa sintaxe (forma) e semántica (significado), normalmente definidos por un linguaxe formal. As linguaxes adoitan proporcionar características como un sistema de tipos, variables, e mecanismos para manexo de erros. Para executar programas requírese unha implementación dunha linguaxe de programación, a saber, un intérprete ou un compilador. Un intérprete executa directamente o código fonte, mentres que un compilador produce un programa executable.

A arquitectura de computadores influíu moito no deseño das linguaxes de programación, e o tipo máis común (linguaxes imperativas-que implementan operacións nunha orde especificada) desenvolveuse para funcionar ben na popular arquitectura de Von Neumann. Mentres que as primeiras linguaxes de programación estaban estreitamente ligados ao hardware, co tempo desenvolveron máis abstracción para ocultar os detalles de implementación para unha maior simplicidade.

Miles de linguaxes de programación -a miúdo clasificados como imperativos, funcional, lóxica, ou orientada a obxectos- desenvolvéronse para unha ampla variedade de usos. Moitos aspectos do deseño de linguaxes de programación implican concesións; por exemplo, o manexo de excepcións simplifica a xestión de erros, pero a costa do rendemento. 

Deste xeito, posibilítase que os humanos poidan expresar dunha forma precisa algoritmos para estes seren executados polos ordenadores, sen ter que compor manualmente as instrucións de baixo nivel nunha linguaxe de máquina.

Estas linguaxes artificiais non permiten unha liberdade de expresión tan ampla como as naturais. A súa sintaxe e semántica están definidas previamente. Pódese distinguir entre a linguaxe da máquina e a orientada ó problema. A primeira non é transferible a outro ordenador, pero posúe a vantaxe da abreviación considerable de tempo ó realizar as operacións. Se se emprega unha linguaxe orientada ó problema, pode resolverse en calquera ordenador compatible, directamente ou tras lixeiras adaptacións, e non é preciso un coñecemento detallado do ordenador; non obstante, ten como inconvenientes o prolongado tempo requirido e a dificultade de enumerar unha serie de problemas non numéricos.

A teoría das linguaxes de programación é o subcampo da Informática que estuda o deseño, a implementación, a análise, a caracterización e a clasificación das linguaxes de programación.

Definicións
As linguaxes de programación diferéncianse das linguaxes naturais en que as primeiras utilízanse para a interacción entre persoas, mentres que as segundas están deseñados para que os humanos poidan comunicar instrucións ás máquinas.

O termo linguaxe informática ás veces utilízase indistintamente con «linguaxe de programación».Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91 Con todo, o uso destes termos varía segundo os autores.

Nun caso, as linguaxes de programación descríbense como un subconxunto das linguaxes informáticas.Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs , ICSOFT 2007 , pp. 163–170 Do mesmo xeito, o termo «linguaxe informática» pode utilizarse en contraposición ao termo «linguaxe de programación» para describir linguaxes utilizadas en informática pero que non se consideran linguaxes de programación. – por exemplo, linguaxes de marcado.XML in 10 points  W3C, 1999, "XML is not a programming language." Algúns autores restrinxen o termo «linguaxe de programación» ás linguaxes Turing completo.En termos matemáticos, isto significa que a linguaxe de programación é Turing completo.  A maioría das linguaxes de programación prácticas son Turing completos, e, como talles, son equivalentes en canto aos programas que poden calcular.

Outro uso considera as linguaxes de programación como construcións teóricas para programar máquinas abstractas e as linguaxes informáticas como o subconjunto destas que se executa en computadores físicos, que dispoñen de recursos de hardware finitos.R. Narasimhan, Programming Languages and Computers: A Unified Metatheory, pp. 189—247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, , p.215: "[...]o modelo [...] para as linguaxes informáticas difire do [...] para as linguaxes de programación só en dous aspectos. Nunha linguaxe informática, só hai un número finito de nomes -ou rexistros- que poden asumir só un número finito de valores -ou estados- e estes estados non se distinguen en termos de ningún outro atributo. [Isto pode parecer unha perogrullada, pero as súas implicacións son de gran alcance. Por exemplo, implicaría que calquera modelo para linguaxes de programación, fixando algúns dos seus parámetros ou características, debería ser reducible de forma natural a un modelo para linguaxes informáticas.»John C. Reynolds subliña que as linguaxes de especificación formal son tan linguaxes de programación como as linguaxes destinadas á execución. Tamén argumenta que os formatos de entrada textuais e mesmo gráficos que afectan o comportamento dun computador son linguaxes de programación, a pesar do feito de que normalmente non son Turing-completos, e sinala que a ignorancia dos conceptos de linguaxe de programación é a razón de moitos fallos nos formatos de entrada.John C. Reynolds, "Some thoughts on teaching programming and programming languages", SIGPLAN Notices, Volume 43, Issue 11 de novembro de 2008, p.109

 Concepto 
miniatura|Varios libros sobre diversas linguaxes de programación.
Unha linguaxe de programación é unha linguaxe que pode ser utilizado para controlar o comportamento dunha máquina, particularmente unha computadora. Consiste nun conxunto de símbolos e regras sintácticas e semánticas que definen a súa estrutura e o significado dos seus elementos e expresións.

Aínda que moitas veces úsase linguaxe de programación e linguaxe informática coma se fosen sinónimos, non ten por que ser así, xa que as linguaxes informáticas engloban ás linguaxes de programación e a outros máis, como, por exemplo, o HTML (linguaxe para o marcado de páxinas web).

Unha linguaxe de programación permite a un ou máis programadores especificar de xeito preciso: sobre que datos unha computadora debe operar, como deben ser estes almacenados e transmitidos e que accións debe tomar baixo unha variada gama de circunstancias. Todo isto, a través dunha linguaxe que intenta estar relativamente próximo á linguaxe humana ou natural, tal como sucede coa linguaxe Lexico. Unha característica relevante das linguaxes de programación é precisamente que máis dun programador poidan ter un conxunto común de instrucións que poidan ser comprendidas entre eles para realizar a construción do programa de forma colaborativa.

Os procesadores usados nas computadoras son capaces de entender e actuar segundo indícano programas escritos nunha linguaxe fixa chamado linguaxe de máquina. Todo programa escrito noutra linguaxe pode ser executado de dous xeitos:

 Mediante un programa que vai adaptando as instrucións conforme son atopadas. A este proceso chámallo interpretar e aos programas que o fan coñécellos como intérpretes.
 Traducindo este programa ao programa equivalente escrito en linguaxe de máquina. A ese proceso chámallo compilar e ao tradutor coñécello como compilador.
 Orixe 
Coa chegada das computadoras aparecen as secuencias de posicións de chaves eléctricas que debían conectarse para obter unha acción determinada, unha chave conectada era un 1 e unha chave desconectada era un 0. Unha sucesión de chaves en calquera das súas dúas posicións definía unha secuencia de ceros e uns (por exemplo: 0100011010011101...) que viña representar unha instrución ou un conxunto de instrucións (Programa informático) para o computador (ou computador) no que se estaba traballando. A esta primeira forma de especificar programas para unha computadora denomínalla linguaxe máquina ou código máquina.

A necesidade de recordar secuencias de programación para as accións usuais levou a denominalas con nomes fáciles de memorizar e asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (executar subrutina) etc. A esta secuencia de posicións denominóuselle "instrucións", e a este conxunto de instrucións chamóuselle linguaxe ensambladora.

Posteriormente apareceron diferentes linguaxes de programación, os cales reciben a súa denominación porque teñen unha estrutura sintáctica similar ás linguaxes escritas polos humanos.
Historia
Desenvolvementos iniciais
Os primeiros computadores programables inventáronse a finais dos anos 40, e con eles, as primeiras linguaxes de programación. Os primeiros computadores programábanse en linguaxes de programación de primeira xeración (1GL), linguaxe máquina (instrucións sinxelas que o procesador podía executar directamente). Este código era moi difícil de depurar e non era portable entre distintos sistemas informáticos. Co fin de mellorar a facilidade de programación, inventáronse as linguaxes ensambladoras (ou linguaxes de programación de segunda xeracións-2GLs), que diverxían da linguaxe máquina para facer os programas máis fáciles de entender para os humanos, aínda que non aumentaban a portabilidade.
miniatura|Un home e unha muller traballando coa máquina de procesamento de datos IBM 704, utilizada para facer cálculos na área a investigación aeronáutica. A IBM 704 foi a primeira computadora producida en masa con hardware baseado na chamada aritmética de coma flotante (ou aritmética de punto flotante), e introducida por IBM en abril de 1954 Fortran deseñouse para esta máquina.
Ao principio, os recursos de hardware eran escasos e caros, mentres que os recursos humanos eran máis baratos. Por tanto, favorecéronse as linguaxes complexas que consumían moito tempo de uso, pero que estaban máis preto do hardware para unha maior eficiencia. A introdución de linguaxes de programación de alto nivel (linguaxes de programación de terceira xeracións-3GLs)-revolucionou a programación. Estas linguaxes abstraían os detalles do hardware e deseñáronse para expresar algoritmos máis comprensibles para o ser humano. Por exemplo, as expresións aritméticas podían escribirse agora en notación simbólica e traducirse posteriormente a código máquina que o hardware puidese executar. En 1957, inventouse Fortran (Formula translation). A miúdo considerado como a primeira linguaxe compilada de programación de alto nivel, Fortran seguiuse utilizando no século XXI. 

Décadas de 1960 e 1970
Ao redor de 1960 desenvolvéronse as primeiras unidades centrais (en inglés mainframes) -ordenadores de propósito xeral-, aínda que só podían ser manexados por profesionais e o seu custo era extremo. Os datos e as instrucións introducíanse mediante cartóns perforados, o que significaba que non se podía engadir ningunha entrada mentres se executaba o programa. Por tanto, as linguaxes desenvolvidas nesta época están deseñadas para unha interacción mínima. Tras a invención do microprocesador, na década de 1970 os computadores abaratáronse drasticamente. Os novos computadores tamén permitiron unha maior interacción co usuario, que se viu favorecida polas novas linguaxes de programación.

Lisp, implementado en 1958, foi a primeira linguaxe de programación funcional. Lisp a diferenza de Fortran, admite recursión e expresión condicional, e tamén introduciu a xestión dinámica de memoria nun heap e a recolección de lixo automática.. Durante as seguintes décadas, Lisp dominou as aplicacións de intelixencia artificial. En 1978, outra linguaxe funcional, ML, introduciu tipos inferidos e parámetros polimórficos.

Tras o lanzamento de ALGOL (ALGOrithmic Language  (linguaxe algorítmico)) en 1958 e 1960, converteuse no estándar da literatura informática para describir algoritmos. Aínda que o seu éxito comercial foi limitado, a maioría das linguaxes imperativas máis populares -incluíndo C, Pascal, Ada, C++, Java, e C#- descenden directa ou indirectamente de ALGOL 60.  Entre as súas innovacións, adoptadas por linguaxes de programación posteriores, figuraban unha maior portabilidade e o primeiro uso da gramática libre de contexto (context-free), gramática BNF. Simula, a primeira linguaxe que soporta programación orientada a obxectos (incluíndo subtipos, envío dinámico, e herdanza), tamén descende de ALGOL e alcanzou o éxito comercial. C, outro descendente de ALGOL, mantivo a súa popularidade no século XXI. C permite acceder a operacións de máquina de baixo nivel máis que outras linguaxes contemporáneas. A súa potencia e eficiencia, xerada en parte con operacións flexibles de punteiro, ten o custo de facer máis difícil escribir código correcto.

Prolog, deseñado en 1972, foi a primeira linguaxe de programación lóxica, que se comunicaba cun computador utilizando notación lóxica formal. Coa programación lóxica, o programador especifica un resultado desexado e permite que o intérprete decida como conseguilo.
Décadas de 1980 a 2000
miniatura|Unha pequena selección de libros de texto sobre linguaxes de programación

Durante a década de 1980, a invención do ordenador persoal transformou as funcións para as que se utilizaban as linguaxes de programación. Entre as novas linguaxes introducidas na década de 1980 atópase C++, un superconxunto de C que pode compilar programas en C pero que tamén admite clases e herdanza. Ada e outras novas linguaxes introduciron soporte para a simultaneidade.. O goberno xaponés investiu moito nos chamados linguaxes de quinta xeración que engadían soporte para a concorrencia ás construcións de programación lóxica, pero estas linguaxes foron superadas por outras linguaxes que soportaban a concorrencia.

Debido ao rápido crecemento de Internet e da World Wide Web na década de 1990, introducíronse novas linguaxes de programación para soportar páxinas web e redes. Java, baseado en C++ e deseñado para aumentar a portabilidade entre sistemas e a seguridade, gozou dun éxito a gran escala porque estas características son esenciais para moitas aplicacións de Internet. Outro desenvolvemento foi o de linguaxes de script de tipo dinámico-Python, JavaScript, PHP, e Ruby-deseñados para producir rapidamente pequenos programas que coordinan aplicacións existentes. Grazas á súa integración con HTML, tamén se utilizaron para construír páxinas web aloxadas en servidores.
Da década de 2000 á actualidade
Durante a década de 2000, produciuse unha retardación no desenvolvemento de novas linguaxes de programación que alcanzaron gran popularidade. Unha innovación foi a programación orientada a servizos, deseñada para explotar sistemas distribuídos cuxos compoñentes están conectados por unha rede. Os servizos son similares aos obxectos da programación orientada a obxectos, pero executanse nun proceso independente. C# e F# cruzaron ideas entre a programación imperativa e a funcional. Despois de 2010, varias linguaxes novas -Rust, Go, Swift, Zig e Carbon - competiron polo software de rendemento crítico para o que historicamente se utilizou C. A maioría das novas linguaxes de programación utilizan a dixitación estática mentres que unhas poucas linguaxes novas utilizan dixitación dinámica como Ring e Julia.Bezanson, J., Karpinski, S., Shah, V.B. and Edelman, A., 2012. Julia: A fast dynamic language for technical computing. arXiv preprint arXiv:1209.5145.Ayouni, M. and Ayouni, M., 2020. Data Types in Ring. Beginning Ring Programming: From Novice to Professional, pp.51-98.

Algúns das novas linguaxes de programación clasifícanse como linguaxes de programación visual como Scratch, LabVIEW e PWCT. Ademais, algunhas destas linguaxes mesturan o uso de programación textual e visual como Ballerina.Sáez-López, J.M., Román-González, M. and Vázquez-Cano, E., 2016. Visual programming languages integrated across the curriculum in elementary school: A two year case study using “Scratch” in five schools. Computers & Education, 97, pp.129-141.Fayed, M.S., Al-Qurishi, M., Alamri, A. and Al-Daraiseh, A.A., 2017, March. PWCT: visual language for IoT and cloud computing applications and systems. In Proceedings of the Second International Conference on Internet of things, Data and Cloud Computing (pp. 1-5).Kodosky, J., 2020. LabVIEW. Proceedings of the ACM on Programming Languages, 4(HOPL), pp.1-54.Fernando, A. and Warusawithana, L., 2020. Beginning Ballerina Programming: From Novice to Professional. Apress. Ademais, esta tendencia levou ao desenvolvemento de proxectos que axudan a desenvolver novas linguaxes de programación visual, como Blockly de Google.Baluprithviraj, K.N., Bharathi, K.R., Chendhuran, S. and Lokeshwaran, P., 2021, March. Artificial intelligence based smart door with face mask detection. In 2021 International Conference on Artificial Intelligence and Smart Systems (ICAIS) (pp. 543-548). IEEE. Moitos motores de xogos como Unreal e Unity engadiron soporte para scripts visuais tamén.Sewell, B., 2015. Blueprints visual scripting for unreal engine. Packt Publishing Ltd.Bertolini, L., 2018. Hands-On Game Development without Coding: Create 2D and 3D games with Visual Scripting in Unity. Packt Publishing Ltd.
Elementos
Todo linguaxe de programación inclúe elementos fundamentais para describir datos e as operacións ou transformacións que se lles aplican, como sumar dous números ou seleccionar un elemento dunha colección. Estes elementos réxense por regras sintácticas e semánticas que definen a súa estrutura e significado, respectivamente.
Sintaxe
miniatura|300px|Árbore de análise sintáctica de Código Python con tokenización de inserción
miniatura|upright|O Resaltado de sintaxe utilízase a miúdo para axudar aos programadores a recoñecer elementos do código fonte. A linguaxe de arriba é Python.
A forma superficial dunha linguaxe de programación coñécese como intaxe. A maioría das linguaxes de programación son puramente textuais; utilizan secuencias de texto que inclúen palabras, números e signos de puntuación, de forma moi parecida ás linguaxes naturais escritas. Doutra banda, algunhas linguaxes de programación son gráficos, e utilizan relacións visuais entre símbolos para especificar un programa.

A sintaxe dunha linguaxe describe as posibles combinacións de símbolos que forman un programa sintácticamente correcto. O significado dado a unha combinación de símbolos é manexado pola semántica (xa sexa formal ou codificada nunha implementación de referencia). Dado que a maioría das linguaxes son textuais, este artigo trata da sintaxe textual.

A sintaxe da linguaxe de programación adoita definirse mediante unha combinación de expresións regulares (para a estrutura léxica) e Backus-Naur Form (para a estrutura gramatical). A continuación móstrase unha gramática simple, baseada en Lisp:
expresión ::= átomo | lista
átomo ::= número | símbolo
número ::= [+-]?['0'-'9']+
símbolo ::= ['A'-'Z''a'-'z'].*
lista ::= '(' expresión* ')'

Esta gramática especifica o seguinte:
 Unha expresi'on é un atomo ou unha lista;
 Un atomo é un n ou un símbolo;
 Un nmero é unha secuencia ininterrompida dun ou mms dgitos decimais, opcionalmente precedidos por un signo mms ou menos;
 un símbolo é unha letra seguida de cero ou máis caracteres alfabéticos (excluídos os espazos en branco); e
 unha lista é un par de parénteses emparelladas, con cero ou máis expresións no seu interior.

Os seguintes son exemplos de secuencias de tokens ben formadas nesta gramática: 12345, () and (a b c232 (1)).

Non todos os programas sintácticamente correctos son semánticamente correctos. Moitos programas sintácticamente correctos están, con todo, mal formados, segundo as regras da linguaxe; e poden (dependendo da especificación da linguaxe e a solidez da implementación) dar lugar a un erro na tradución ou execución. Nalgúns casos, estes programas poden mostrar comportamento indefinido. Mesmo cando un programa está ben definido dentro dunha linguaxe, pode ter un significado non previsto pola persoa que o escribiu.

Usando a linguaxe natural como exemplo, pode non ser posible asignar un significado a unha frase gramaticalmente correcta ou a frase pode ser falsa:
 "Colorless green ideas sleep furiously" ("As ideas verdes incoloras dormen furiosamente"). está gramaticalmente ben formada pero non ten un significado xeralmente aceptado.
 «Xoán é un solteiro casado.» está gramaticalmente ben formada pero expresa un significado que non pode ser verdadeiro.

O seguinte fragmento de linguaxe C é sintácticamente correcto, pero realiza operacións que non están semánticamente definidas (a operación p >> 4 non ten significado para un valor que ten un tipo complexo e p->im non está definida porque o valor de p é unha referencia nula):

complex *p = NULL;
complex abs_p = sqrt(*p >> 4 + p->im);

Se se omitira a declaración de tipo da primeira liña, o programa provocaría un erro na variable indefinida p durante a compilación. Con todo, o programa seguiría sendo sintácticamente correcto, xa que as declaracións de tipo só proporcionan información semántica.

A gramática necesaria para especificar unha linguaxe de programación pode clasificarse pola súa posición na xerarquía de Chomsky. A sintaxe da maioría das linguaxes de programación pode especificarse mediante unha gramática de tipo 2, é dicir, son gramáticas libres de contexto. Sección  2.2: Pushdown Automata, pp.101–114. Algunhas linguaxes, incluíndo Perl e Lisp, conteñen construcións que permiten a execución durante a fase de análise sintáctica. As linguaxes que teñen construcións que permiten ao programador alterar o comportamento do analizador sintáctico fan da análise sintáctica un problema indecidible, e xeralmente desdebuxan a distinción entre análise sintáctica e execución.Jeffrey Kegler, "Perl and Undecidability ", The Perl Review. Os artigos 2 e 3 demostran, utilizando respectivamente o teorema de Rice e a redución directa ao problema de detención, que a análise sintáctica de programas Perl é en xeral indecidible. En contraste co sistema de macros de Lisp e os bloques de Perl BEGIN, que poden conter cálculos xerais, as macros de C son meras substitucións de cadeas e non requiren a execución de código.Marty Hall, 1995, Notas de lectura: Macros , PostScript version 
Semántica

O termo semántica refírese ao significado das linguaxes, en contraposición á súa forma (sintaxe).
Semántica estática
A semántica estática define restricións sobre a estrutura dos textos válidos que son difíciles ou imposibles de expresar en formalismos sintácticos estándar. Para as linguaxes compiladas, a semántica estática inclúe esencialmente aquelas regras semánticas que poden comprobarse en tempo de compilación. Algúns exemplos son a comprobación de que cada identificador declárase antes de ser utilizado (en linguaxes que requiren tales declaracións) ou que as etiquetas dos brazos dunha declaración de interruptor (Switch case) son distintas.Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, , p. 18–19 Moitas restricións importantes deste tipo, como comprobar que os identificadores se usan no contexto apropiado (por exemplo, non engadir un enteiro ao nome dunha función), ou que as chamadas a subrutina teñen o número e tipo de argumentos apropiados, poden facerse cumprir definíndoas como regras nunha lóxica chamada sistema de tipos. Outras formas de análises estáticas como o análise de fluxo de datos tamén poden formar parte da semántica estática. Linguaxes de programación como Xava e C# teñen análise de asignación definida, unha forma de análise de fluxo de datos, como parte das súas respectivas semánticas estáticas.
Semántica dinámica
Unha vez especificados os datos, débese indicar á máquina que realice operacións con eles. Por exemplo, a semántica pode definir a estratexia mediante a cal se avalían as expresións para obter valores, ou a forma en que as estruturas de control executan condicionalmente as instrucións. A "semántica dinámica" (tamén coñecida como "semántica de execución") dunha linguaxe define como e cando as diversas construcións dunha linguaxe deben producir un comportamento do programa. Hai moitas formas de definir a semántica de execución. A miúdo utilízase a linguaxe natural para especificar a semántica de execución das linguaxes que se utilizan habitualmente na práctica. Unha parte importante da investigación académica céntrase na semántica formal das linguaxes de programación, que permite especificar a semántica de execución de maneira formal. Os resultados deste campo de investigación tiveron unha aplicación limitada no deseño e a implementación de linguaxes de programación fóra do ámbito académico.

 Clasificación das linguaxes de programación 
As linguaxes de programación determínanse segundo o nivel de abstracción, a forma de execución e o paradigma de programación que posúen cada un deles, os cales poden ser:
 Segundo o seu nivel de abstracción 
 Linguaxes de baixo nivel 
As linguaxes de baixo nivel son linguaxes de programación que se achegan ao funcionamento dunha computadora. A linguaxe de máis baixa nivel é, por excelencia, o código máquina. A este séguelle a linguaxe ensambladora, xa que ao programar en ensamblador trabállanse cos rexistros de memoria do computador de forma directa.

 Linguaxes de medio nivel 
Hai linguaxes de programación consideradas por algúns expertos como linguaxes de medio nivel (como é o caso da linguaxe C) ao ter certas características que as achegan ás linguaxes de baixo nivel mais tendo, ao mesmo tempo, certas cualidades que a fan unha linguaxe máis próxima ao humano e, xa que logo, de alto nivel.

 Linguaxes de alto nivel 
As linguaxes de alto nivel son normalmente doadas de aprender ao estaren formadas por elementos de linguaxes naturais, como o inglés. En BASIC, unha das linguaxes de alto nivel máis coñecida, os comandos como "IF CONTADOR = 10 THEN STOP" poden utilizarse para pedir á computadora que pare se CONTADOR é igual a 10. Por desgraza para moitas persoas esta forma de traballar é un pouco frustrante, dado que a pesar de que as computadoras parecen comprender unha linguaxe natural, fano en realidade dunha forma ríxida e sistemática.

 Segundo a forma de execución 
 Linguaxes compiladas 

Naturalmente, un programa que se escribe nunha linguaxe de alto nivel tamén ten que traducirse a un código que poida utilizar a máquina. Os programas tradutores que poden realizar esta operación chámanse compiladores. Estes, así como os programas ensambladores avanzados, poden xerar moitas liñas de código de máquina por cada proposición do programa fonte. Requírese unha execución de compilación antes de executar o programa.

Os compiladores son aqueles coa función de traducir un programa escrito nunha determinada linguaxe a un idioma que a computadora entenda (linguaxe máquina con código binario).

Ao usar unha linguaxe compilada, o programa desenvolvido nunca se executa mentres teña erros na compilación.

 Linguaxes interpretadas 

Pódese tamén utilizar unha alternativa diferente dos compiladores para traducir linguaxes de alto nivel. No canto de traducir o programa fonte e gravar en forma permanente o código obxecto que se produce durante a compilación para posteriormente executar o programa resultante, o programador só carga o programa fonte na computadora xunto cos datos que se van a procesar. A continuación, un programa intérprete, ben sendo parte do sistema operativo, ou incluído de xeito permanente dentro da máquina, converte cada proposición do programa fonte en linguaxe de máquina conforme vaia sendo necesario durante a execución do programa. Non se grava o código obxecto para utilizalo posteriormente.

A seguinte vez que se utilice unha instrución, débese interpretar outra vez e traducir a linguaxe máquina. Por exemplo, durante o procesamento repetitivo dos pasos dun ciclo, cada instrución do ciclo terá que volver ser interpretada cada vez que se execute o ciclo, o cal fai que o programa sexa máis lento en tempo de execución (porque se vai revisando o código en tempo de execución) pero máis rápido en tempo de produción (porque non se ten que estar compilando a cada momento o código completo). O intérprete elimina a necesidade de realizar unha compilación logo de cada modificación do programa cando se quere agregar funcións ou corrixir erros; pero é obvio que un programa obxecto compilado con antelación executarase con moita maior rapidez que un que se debe interpretar a cada paso durante a execución.

 Segundo o paradigma de programación 
Un paradigma de programación representa un enfoque particular ou filosofía para a construción do software. Non é mellor un que outro senón que cada un ten vantaxes e desvantaxes. Tamén hai situacións onde un paradigma resulta máis axeitado que outro.

Atendendo ao paradigma de programación, as linguaxes pódense clasificar en:

 Linguaxes imperativas 
 BASIC
 C
 C++
 Java
 C#
 Perl

 Linguaxes funcionais 
Puras:
 Haskell
 Miranda

Híbridas:
 Lisp
 Scheme
 Ocaml
 Standard ML
 ML

 Linguaxes lóxicas 
 Prolog

 Linguaxes orientadas a obxectos 
 Action Script
 Ada
 C
 C++
 C#
 VB.NET
 Visual FoxPro
 Clarion
 Delphi
 Harbour
 Eiffel
 Java
 JavaScript
 Lexico (en castelán)
 Objective-C
 Ocaml
 Oz
 Perl (soporta herdanza múltiple)
 PHP (na súa versión 5)
 PowerBuilder
 Python
 Ruby
 Smalltalk
 Magik (SmallWorld)

 Algunhas linguaxes de programación 
 ABAP
 ABC
 ActionScript
 Ada
 Afnix
 ALGOL
 APL
 ASP
 ASP.NET
 AWK
 B
 BASIC
 BCPL
 Befunge Boo
 C
 C++
 C#
 Caml
 Clipper
 CLIPS
 CLU
 COBOL
 CORAL
 D
 Delphi
 DIV
 Dylan Eiffel
 Erlang
 Ensambladora
 Extended ML
 Euphoria
 Fénix
 Flow-Matic
 Forth
 FORTRAN
 FP
 Gambas
 GML
 GRAFCET
 Haskell Icon
 Inform
 INTERCAL
 ISWIM
 J
 Java
 JavaScript
 Joy
 KWC
 LADDER
 Letra
 Lexico
 Lingo
 Lisp Logo
 Lua
 MAGIC
 Mainsail
 Mesa
 Miranda
 ML
 Modula
 Modula-2
 Modula-3
 Natural
 NetREXX
 Oberon
 Object REXX Objective-C
 Ocaml
 Occam
 Oz
 Pascal
 Parlog
 Perl
 PHP
 PL/1
 Plankalkül
 PostScript
 PowerBuilder
 Prolog
 Python R
 Rapid
 REXX
 RPN
 RPG
 Ruby
 Sail
 Sather
 Scheme
 Scriptol
 Seed7
 Self
 Sh
 Simula Smalltalk
 Snobol
 SPARK
 Squeak
 SR
 Standard ML
 TI-Basic
 TCL
 VBA
 Visual Basic
 Visual C 
 Visual DialogScript
 Visual Foxpro
 XBase++ Yurix
 ZPL

 Ambientes de desenvolvemento 

 Anjuta DevStudio
 Borland C++ Builder
 Borland Delphi
 Eclipse
 KDevelop
 Kylix
 Microsoft Visual Basic
 Microsoft Visual C++
 Microsoft Visual C#
 MonoDevelop
 Netbeans

 Notas 

 Véxase tamén 

Bibliografía


 Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
 Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, The MIT Press 2001.
 David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
 Ellis Horowitz (ed.): Programming Languages, a Grand Tour (3rd ed.), 1987.
 Ellis Horowitz: Fundamentals of Programming Languages, 1989.
 Shriram Krishnamurthi: Programming Languages: Application and Interpretation, online publication .

 Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
 John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.

 Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
 Terrence W. Pratt and Marvin Victor Zelkowitz: Programming Languages: Design and Implementation (4th ed.), Prentice Hall 2000.
 Peter H. Salus. Handbook of Programming Languages (4 vols.). Macmillan 1998.
 Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
 Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.

 Franklyn Turbak and David Gifford with Mark Sheldon: Design Concepts in Programming Languages, The MIT Press 2009.
 Peter Van Roy and Seif Haridi. Concepts, Techniques, and Models of Computer Programming, The MIT Press 2004.
 David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
 David A. Watt and Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
 David A. Watt. Programming Language Processors. Prentice Hall 1993.
 David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.


 Outros artigos 
 Código fonte
 Código obxecto
 Compilador
 Programación orientada a obxectos
 Linguaxe máquina
 Enxeñaría de software
 Computadora
 Programación
 Linguaxe de alto nivel

 Ligazóns externas 
 Árbore cronolóxica das linguaxes de programación 
 Paradigmas das linguaxes de programación (clasificación)

Categoría:Linguaxes de programación
Categoría:Artigos que toda Wikipedia debería ter (Tecnoloxía)