Lenguaige de porgramaçon

Ua **lenguaige de porgramaçon** ye un método padronizado para quemunicar anstruçones para un cumputador. Ye un cunjunto de regras sintáticas i semánticas ousadas para defenir un porgrama de cumputador. Permite qu'un porgramador specifique percisamente subre quales dados un cumputador bai atuar, cumo estes dados seran armazenados ó trasmitidos i quales açones dében ser tomadas sob bárias circunstáncias. Lenguaiges de porgramaçon puoden ser ousadas para spressar algoritmos cun percison.

L cunjunto de palabras (*leisemas* classeficados an *tokenes*), cumpuostos d'acuordo cun essas regras, custituen l código fuonte dun software. Esse código fuonte ye depuis traduzido para código de máquina, que ye eisecutado pul processador.

Ua de las percipales metas de las lenguaiges de porgramaçon ye permitir que porgramadores téngan ua maior pordutebidade, permitindo spressar sues antençones mais facilmente de l que quando cumparado cula lenguaige qu'un cumputador antende natibamente (código de máquina). Assi, lenguaiges de porgramaçon son porjetadas para adotar ua sintaxe de nible mais alto, que puode ser mais facilmente antendida por porgramadores houmanos. Lenguaiges de porgramaçon son ferramientas amportantes para que porgramadores i angenheiros de software puodan screbir porgramas mais ourganizados i cun maior rapideç.

Lenguaiges de porgramaçon tamien tornan ls porgramas menos dependentes de cumputadores ó ambientes cumputacionales specíficos (propiadade chamada de portabelidade). Esto acuntece porque porgramas scritos an lenguaiges de porgramaçon son traduzidos pa l código de máquina de l cumputador ne l qual será eisecutado an beç de ser diretamente eisecutado. Ua meta ambiciosa de l Fortran, ua de las purmeiras lenguaiges de porgramaçon, era esta andependéncia de la máquina adonde serie eisecutada.

## Stória

L purmeiro trabalho de lenguaige de porgramaçon fui criado por Ada Lobelace, grande amiga de Charles Babbage. L porjeto de la purmeira calculadora macánica porgramable fui eidealizado por Charles Babbage que, passado gastar fertunas i un longo tiempo, nun cunseguiu cuncretizar l porjeto. La lenguaige de porgramaçon ADA fui batizada an houmenaige l'esta purmeira porgramadora.

Ua de las purmeiras lenguaiges de porgramaçon para cumputadores fui probabelmente Plankalkul, criada por Konrad Zuse na Almanha Nazista, mas que tubo pouco ó nanhun ampato ne l feturo de las lenguaiges de porgramaçon.

L purmeiro cumpilador fui scrito por Grace Hopper, an 1952, pa la lenguaige de porgramaçon La-0. La purmeira lenguaige de porgramaçon d'alto nible amplamente ousada fui Fortran, criada an 1954. An 1957 fui criada B-0, sucessora de la La-0, que darie ourige la Flow-Matic (1958), antecessor eimediato de COBOL, de 1959. L COBOL fui ua lenguaige d'ampla aceitaçon para uso comercial. La lenguaige ALGOL fui criada an 1958-1960 L ALGOL-60 tubo grande anfluéncia ne l porjeto de muitas lenguaiges posteriores.

La lenguaige Lisp fui criada an 1958 i se tornou amplamente outelizada na pesquisa na ária de ciéncia de la cumputaçon mais proeminentemente na ária de Anteligéncia Artificial. Outra lenguaige relacionada al campo de la IA que surge an 1972 ye la lenguaige Prolog, ua lenguaige de l paradigma lógico.

La ourientaçon a oubjetos ye outro marco amportante na stória de las lenguaiges de porgramaçon. La lenguaige Simula 67 antroduç l cunceito de classes. La lenguaige Smalltalk  spande l cunceito de classes i se torna la purmeira lenguaige de porgramaçon qu'ouferecie suporte cumpleto a la porgramaçon ourientada a oubjetos. La lenguaige C++ (ouriginalmente coincida cumo C cun classes) populariza l'ourientaçon a oubjetos.

Dibersas lenguaiges de porgramaçon surgiran zde anton, grande parte ourientadas a oubjetos. Antre estas ancluen-se C♯,  BB.NET, Java, Object Pascal, Objective-C, PHP, Python, SuperCollider i Ruby.

## Anterpretaçon i cumpilaçon

Ua lenguaige de porgramaçon puode ser cumbertida, ó traduzida, an código de máquina por cumpilaçon ó anterpretada por un porcesso chamado anterpretaçon. An ambas ocorre la **traduçon** de l código fuonte para código de máquina.

Se l método outelizado traduç to l testo de l porgrama (tamien chamado de código), para solo depuis eisecutar l porgrama, anton diç-se que l porgrama fui cumpilado i que l macanismo outelizado pa la traduçon ye un cumpilador (que por sue beç nada mais ye de l qu'un porgrama). La berson cumpilada de l porgrama tipicamente ye armazenada, de forma que l porgrama puode ser eisecutado un númaro andefenido de bezes sin que seia neçaira nuoba cumpilaçon, l que cumpensa l tiempo gasto na cumpilaçon. Esso acuntece cun lenguaiges cumo Pascal i C. 

Se l testo de l porgrama ye eisecutado a la medida que bai sendo traduzido, cumo an JavaScript, BASIC, Python ó Perl, nun porcesso de traduçon de trechos seguidos de sue eisecuçon eimediata, anton diç-se que l porgrama fui anterpretado i que l macanismo outelizado pa la traduçon ye un anterpretador. Porgramas anterpretados son giralmente mais lentos de l que ls cumpilados, mas son tamien giralmente mais flexibles, yá que puoden anteragir cul ambiente mais facilmente.

Ambora haba essa çtinçon antre lenguaiges anterpretadas i cumpiladas, las cousas nin siempre son tan simples. Hai lenguaiges cumpiladas para un código de máquina dua máquina birtual (sendo esta *[[máquina birtual]]* solo mais un software, qu'emula la máquina birtual sendo eisecutado nua máquina rial), cumo Java  (cumpila pa la plataforma Java) i C♯ (cumpila pa la plataforma CLI). I tamien hai outras formas d'anterpretar an que ls códigos fuontes, al ambés de séren anterpretados linha-la-linha, ténen blocos "cumpilados" pa a mimória, d'acuordo culas necidades, l qu'oumenta la performance de ls porgramas quando ls mesmos módulos son chamados bárias bezes, técnica esta coincida cumo JIT.

Cumo eisemplo, podemos citar la lenguaige Java. Neilha, un cumpilador traduç l código Java pa l código antermediairo (i portable) de la JBM. Las JBMs ouriginales anterpretában esse código, d'acuordo cul código de máquina de l cumputador hospedeiro, mas atualmente eilhas cumpilan, segundo la técnica JIT l código JBM para código hospedeiro.

La traduçon ye tipicamente feita an bárias fases, sendo las mais quemuns la análeze léxica, la análeze sintática (ó *[[Parser|parsing]]*), la geraçon de código i la outimizaçon. An cumpiladores tamien ye quemun la geraçon de código antermediairo.

## Cunceitos

### Porgramaçon struturada
Porgramaçon estruturada ye ua forma de porgramaçon de cumputadores que preconiza que todos ls porgramas possibles puoden ser reduzidos a solo trés struturas: sequéncia, decison i repetiçon. Un de ls purmeiros a preconizar la porgramaçon struturada fui Haskell B. Curry Tenendo, na prática, sido trasformada na Porgramaçon modular, la Porgramaçon struturada ourienta ls porgramadores pa la criaçon de struturas simples an sous porgramas, usando las sub-rotinas i las funçones. Fui la forma dominante na criaçon de software antre la porgramaçon linear i la porgramaçon ourientada por oubjetos. Anque tener sido sucedida pula porgramaçon ourientada por oubjetos, puode-se dezir que la porgramaçon struturada inda ye marcantemente anfluente, ua beç que grande parte de las pessonas inda daprenden porgramaçon atrabeç deilha. Mas, l'ourientaçon a oubjetos superou l'uso de las lenguaiges struturadas ne l mercado.

### Porgramaçon modular

Porgramaçon modular ye ua forma de porgramaçon ne l qual l zambolbimiento de las rotinas de porgramaçon ye feito atrabeç de módulos, que son anterligados antre si atrabeç dua anterface quemun. Fui apersentado ouriginalmente pula Anformation & Systems Anstitute, Anc. ne l National Symposiun on Modular Porgramming an 1968, cula liderança de Larry Custantine. Eisemplos de lenguaiges qu'ourientórun sou porjeto para este aspeto stan las lenguaiges Modula-2, zambolbida por Niklaus Wirth i la Modula-3..

### Porgramaçon ourientada a oubjetos
Ourientaçon a oubjetos, tamien coincida cumo Porgramaçon Ourientada la Oubjetos (POO) ó inda an anglés *Oubjet-Ouriented Porgramming* (OOP) ye un paradigma d'análeze, porjeto i porgramaçon de sistemas de software baseado na cumposiçon i anteraçon antre dibersas ounidades de software chamadas d'oubjetos. L stensibo uso d'oubjetos, particularmente an cunjunçon cul macanismo d'hardança, carateriza l stilo de porgramaçon ourientada a oubjetos. An alguns cuntestos, prefire-se ousar modelaige ourientada al oubjeto, an beç de porgramaçon. De fato, l paradigma "ourientaçon a oubjetos" ten bases cunceituales i ourige ne l campo de studo de la cogniçon, qu'anfluenciou la ária d'anteligencia artificial i de la linguística ne l campo de l'abstraçon de cunceitos de l mundo rial. Na culidade de método de modelaige, ye tenida cumo a melhor stratégia, i mais natural, para se eliminar l "gap semántico", deficuldade recorrente ne l porcesso de modelar l mundo rial, ne l domínio de l porblema, nun cunjunto de cumponentes de software que seia l mais fiel na sue repersentaçon deste domínio. Facelitarie la quemunicaçon de l profissional modelador i de l'usuairo de la ária albo, na medida an que la correlaçon de la simbologie i cunceitos abstratos de l mundo rial i de la ferramienta de modelaige (cunceitos, treminologie, simblos, grafismo i stratégias) fusse la mais óbbia, natural i sata possible. L'análeze i porjeto ourientados a oubjetos ten cumo meta eidantificar l melhor cunjunto d'oubjetos para çcrebir un sistema de software. L funcionamiento deste sistema se dá atrabeç de l relacionamiento i troca de mensaiges antre estes oubjetos. Na porgramaçon ourientada a oubjetos, amplementa-se un cunjunto de classes que definen ls oubjetos persentes ne l sistema de software. Cada classe detremina l cumportamiento (defenido ne ls métodos) i stados possibles (atributos) de sous oubjetos, assi cumo l relacionamiento cun outros oubjetos.

### Porgramaçon linear
An matemática, porblemas de Porgramaçon Linear son porblemas d'outimizaçon ne ls quales la funçon oubjetibo i las restriçones son todas lineares. Porgramaçon Linear ye ua amportante ária de l'outimizaçon por bárias rezones. Muitos porblemas práticos an pesquisa ouperacional puoden ser spressos cumo porblemas de porgramaçon linear. Ciertos causos speciales de porgramaçon linear, tales cumo porblemas de *network flow* i porblemas de *multicommodity flow* son cunsidrados amportantes l suficiente para que se tenga gerado muita pesquisa an algoritmos specializados para sues soluçones. Bários algoritmos para outros tipos de porblemas d'outimizaçon funcionan resolbendo porblemas de PL cumo sub-porblemas. Storicamente, eideias de la porgramaçon linear anspirórun muitos de ls cunceitos centrales de teorie de l'outimizaçon, tales cumo dualidade, decumposiçon, i l'amportança de la cumbexidade i sues generalizaçones.

## Classeficaçon
Las lenguaiges de porgramaçon puoden ser classeficadas i sub-classeficadas de bárias formas.

### Classeficaçon de la ''ACM''
La ACM mantén un sistema de classeficaçon culs seguintes sub-itenes:

* Lenguaiges aplicatibas, ó d'aplicaçon
* Lenguaiges cuncorrentes, çtribuídas i paralelas
* Lenguaiges de fluxo de dados
* Lenguaiges de porjeto
* Lenguaiges stensibles
* Lenguaiges de montaige i de macro
* Lenguaiges de microprogramaçon
* Lenguaiges nun determinísticas
* Lenguaiges nó procedurales
* Lenguaiges ourientadas a oubjeto
* Lenguaiges d'aplicaçon specializada
* Lenguaiges d'altíssemo nible

### Quanto al paradigma

Defrentes lenguaiges de porgramaçon puoden ser agrupadas segundo l paradigma que seguen para abordar la sue sintaxe i semántica. Ls paradigmas se debeden an dous grandes grupos: amperatibo i declaratibo. 

#### Paradigmas Amperatibos
Ls paradigmas amperatibos son aqueilhes que facelitan la cumputaçon por meio de mudanças de stado. Se debeden an:

* L paradigma procedural. Neste paradigma, ls porgramas son eisecutados atrabeç de chamadas sucessibas a procedimientos apartados. Eisemplos de lenguaiges deste paradigma son l Fortran i l BASIC.
* L paradigma d'estruturas de blocos. La caratelística marcante deste paradigma son ls scopos amarrados. Eisemplos de lenguaiges deste paradigma son l Algol 60, Pascal i C.
* L paradigma d'ourientaçon a oubjetos. Este paradigma çcribe lenguaiges que suportan l'anteraçon antre oubjetos. Eisemplos de lenguaiges deste paradigma son C++, Java, Python i Ruby.
* L paradigma de la cumputaçon çtribuída. Este paradigma suporta que mais dua rotina puoda eisecutar andependientemente. Un eisemplos de lenguaige deste paradigma ye la lenguaige Ada.

#### Paradigmas Declaratibos
Ls paradigmas declaratibos son aqueilhes ne ls quales un porgrama specifica ua relaçon ó funçon. Se debeden an:

* L paradigma funcional. Lenguaiges deste paradigma nun ancluen qualquiera probison para atribuiçon ó dados mutables  Na porgramaçon funcional, l mapeamiento antre ls balores d'antrada i saida son alcançados mais diretamente. Un porgrama ye ua funçon (ó grupo de funçones), tipicamente custituída d'outras funçones mais simples. Eisemplos de lenguaiges deste paradigma son las lenguaiges Lisp, Scheme i Haskell

* L paradigma de la porgramaçon lógica. Este paradigma se baseia na noçon de qu'un porgrama amplementa ua relaçon al ambés dun mapeamiento. Eisemplos de lenguaiges deste paradigma son l Prolog i la lenguaige Gödel.

### Quanto la strutura de tipos
* Fracamente tipada, cumo PHP i Smalltalk, adonde l tipo de la bariable muda dinamicamente cunforme la situaçon.
* Fuortemente tipada, cumo Java i Ruby, adonde l tipo de la bariable, ua beç atribuído, se mantén l mesmo até ser çcartada de a mimória.
* Dinamicamente tipada, cumo SNOBOL, APL, Awk, Perl, Python i Ruby, adonde l tipo de la bariable ye defenido an tiempo d'eisecuçon.
* Staticamente tipada, cumo Java i C, adonde l tipo de la bariable ye defenido an tiempo de cumpilaçon.

### Quanto al grau d'abstraçon
* Lenguaige de porgramaçon de baixo nible, cujos simbolos son ua repersentaçon direta de l código de máquina que será gerado, adonde cada comando de la lenguaige eiquibale a un "oupcode" de l processador, cumo Assembly.
* Lenguaige de porgramaçon de médio nible,  que ten simblos que puoden ser cumbertidos diretamente para código de máquina (goto, spressones matemáticas, atribuiçon de bariables), mas tamien simblos cumplexos que son cumbertidos por un cumpilador. Eisemplo: C, C++
* Lenguaige de porgramaçon d'alto nible, cumpuosta de simblos mais cumplexos, anteligible pul ser houmano i nó-eisecutable diretamente pula máquina, ne l nible de la specificaçon d'algoritmos, cumo Pascal, Fortran, ALGOL i SQL.

### Quanto a la geraçon
La classeficaçon de las lenguaiges de porgramaçon an geraçones ye ua queston qu'apersenta dibergéncias d'outor para outor. Segundo Maclennan, las lenguaiges se debeden an cinco geraçones culas seguintes caratelísticas:

* Purmeira geraçon - San lenguaiges adonde sues struturas de cuntrole son aparentemente ourientadas la máquina. Las anstruçones cundicionales nun son amarradas i dependen fuortemente d'anstruçones de zbio ancondicional cumo l GOTO. Ua lenguaige típica desta geraçon ye la lenguaige Fortran.

* Segunda geraçon - San lenguaiges adonde las struturas de cuntrole son struturadas de forma a menimizar ó çpensar l'uso d'anstruçones GOTO. La segunda geraçon eilaborou melhor i generalizou dibersas struturas de cuntrole de las lenguaiges de purmeira geraçon. Ua de las grandes cuntribuiçones desta geraçon fui sues struturas de nomes, que éran hierarquicamente amarradas. Esto permitiu melhor cuntrole de spácios de nomes i ua eficiente alocaçon dinámica de mimória. Ua lenguaige típica desta geraçon ye l Algol 60.

* Terceira geraçon - San lenguaiges que dan énfase la simplicidade i eficiéncia. Ua lenguaige típica desta geraçon ye la lenguaige Pascal. Las struturas de dados desta geraçon mostran un çlocamiento de la máquina pa l'aplicaçon. Las struturas de cuntrole son mais simples i eficientes. 

* Quarta geraçon - Esta geraçon ye eissencialmente l sinónimo para lenguaiges cun abstraçon de dados. La maiorie de las lenguaiges desta geraçon focan na modularizaçon i ne l'ancapsulamiento. Ua lenguaige típica desta geraçon ye la lenguaige Ada. 

* Quinta geraçon - Nesta geraçon, Maclennan agrupa dibersos paradigmas cumo l'ourientaçon a oubjeto i l paradigma funcional, paradigma lógico. 

Heinri Bal i Dick Grune, yá apersentan ua classeficaçon an geraçones de forma defrente, anfatizando mais l'aspeto de l'aplicaçon. San eilencadas 6 geraçones. 

* Purmeira geraçon - lenguaige de máquina.
* Segunda geraçon - lenguaiges de montaige (*assembly*).
* Terceira geraçon - Lenguaiges procedurales. 
* Quarta geraçon - Lenguaiges aplicatibas.
* Quinta geraçon - Lenguaiges buoltadas la Anteligéncia artificial cumo las lenguaiges lógicas (Prolog) i las lenguaiges funcionales (Lisp).
* Sesta geraçon - Redes neurales.

Doris Apleby i Julius J. BandeKopple debeden las lenguaiges an quatro geraçones que coinciden culas quatro purmeiras geraçones eilencadas por Heinri Bal i Dick Grune.

## Lista de lenguaiges

Eesisten ; d'acuordo cul Índice Tiobe, las 20 mais populares son:

# Java
# C
# Objective-C
# C++
# C♯
# PHP
# Python
# Visual Basic
# Perl
# Ruby
# JavaScript
# Visual Basic .NET
# Lisp
# Pascal
# Delphi / Object Pascal
# Transact-SQL
# Bash
# MATLAB
# Assembly
# Ada

## Notas


## 
* 

## 
* 
* Lenguaige cumpilada
* Lenguaige de scrit
* Lenguaige anterpretada
* Paradigma de porgramaçon
* Porgramaçon de cumputadores

## 
* 
* 
*