Unha **linguaxe de programación** é unha linguaxe informática consistente 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.

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.

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.

Concepto
--------

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.

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

Véxase tamén
------------

|  |  |
| --- | --- |
|  | Wikimedia Commons ten máis contidos multimedia na categoría:  ***Linguaxe de programación Modificar a ligazón no Wikidata*** |

### Outros artigos

* Código fonte
* Código obxecto
* Compilador
* Programación orientada a obxectos
* Linguaxe máquina
* Linguaxe orientada ao problema
* Enxeñaría de software
* Computadora
* Programación
* Linguaxe de alto nivel
* Linguaxes interpretadas

### Ligazóns externas

* Árbore cronolóxica das linguaxes de programación *(en inglés)*
* Lista de linguaxes de programación[*Ligazón morta*] *(en inglés)*
* Paradigmas das linguaxes de programación (clasificación)

| * v
* c
* e
Linguaxes de programación |
| --- |
| Baixo nivel | 

|  |  |
| --- | --- |
| Primeira xeración | Código máquina |
| Segunda xeración | Assembly |

 |
| Alto nivel | 

|  |  |
| --- | --- |
| Terceira xeración | 
* A+
* ABC
* Algol
* B
* BASIC
* C
* C++
* C#
* COBOL
* CPL
* D
* E
* Fortran
* Go
* Java
* JavaScript
* Lisp
* Objective-C
* PL/1
* Pascal
* Smalltalk
* Visual Basic .NET

 |
| Cuarta xeración | 
* Clarion
* Clipper
* Clojure
* Common Lisp
* Erlang
* GNU Octave
* Haskell
* Lisp
* Lua
* Julia
* Perl
* PHP
* Prolog
* Python
* R
* Ruby
* Rust
* S
* Scilab
* Stata
* SQL

 |
| Quinta xeración | 
* Mercury
* OPS5
* Prolog

 |

 |
| 
* Ambiente de desenvolvemento
* Metaprogramación
* Programación a nivel funcional
* Programación estruturada
* Programación non estruturada
* Programación imperativa
* Programación modular
* Programación multidimensional
* Orientación a obxectos

 |

|  |  |
| --- | --- |
| Control de autoridades | 
* Wd: Q9143
* BNCF: 5676
* BNF: 13318353n
* BRE: 4924750
* EBID: ID
* FAST: 1078704
* GND: 4047409-4
* JSTOR: programming-languages
* LCCN: sh85107313
* MAG: 199360897
* NDL: 00569224
* NKC: ph115890
* PSH: 12474
* Treccani: linguaggio-di-programmazione

 |