Lenguajo de programasion

[thumb|right|325x325px|On exenpio de [codaxe sorxente|codaxe fonte scrito in lenguajo Java,chel stanparà la fraxe "Hello World!"col stàndar output col vegnarà compilà e exeguio]]
On **lenguajo de programasion** l'è un lenguajo che esendo doparà da na persona, in sto caxo el programadore, el ghe dà la manjiera par scrivare (o programare), na serie de istrusion o seguense de ordini, soto forma de algoritmi, par controlar el conportamento de na machina, in xenare un computer, in manjiera da poder otegner difarenti tipi de dati. Sta intera union de comandi scriti, doparando el lenguajo de programasion, el njien ciamà programa. 
Ogni lengua la xe formada da un union de sinboli (ciamai alfabeto), la ga na serie de regole dure semanteghe, sintateghe, morfoloxeghe e lesicali, che le ga da esar rispetae co se scrive un programa par computer, descrivéndoghe prima la strutura e dopo el signifegà, che le xe neçesarie par speçifegar, sia el tipo de dati che serve par far laorar el programa, sia le asion chel programa el farà.

Par date motivasion, la programasion xe el proçeso de creasion de software fidabili, co la scritura, test, debug, conpilasion o interpretasion e mantegnimento del codaxe sorxente del xà dito codaxe. In poche parole, sto proçeso l'è definio doparando in manjiera logica i pasaji che vien:
*El xvilupo loxego del programa, par dar solusion a un problema particolar
*Scritura de la loxega del programa, doparando un lenguajo speçifego (codifega del programa)
*Compilasion o interpretasion del programa, fin a convertirlo in un lenguajo par machina
*Prova e coresion (se ghe xe erori) del programa
*Xvilupo de la documentasion

On eror comune, l'è chelo de pensar che i termini "lenguajo de programasion" e "lenguajo informadego" sia la stesa roba. El lenguajo informadego, ingloba el linguajo de programasion e altri, come HTML (el lenguajo de markup de pajine web, che no l'è par da vero un lenguajo de programasion, ma un union de istrusion che le fa in manjiera de struturar el conteguo dei documenti).

El lenguajo de programasion, el fa in modo de speçifegar co preçixion so che dati el ga da funsionar un software speçifego, come sti dati li garia da esar archiviai o traxmesi e che asion el software el garia da fare so un monton de situasion. 
Tuta sta roba, la njien fata co un lenguajo che tzerca de esar relativamente viçin al lenguajo uman, parché la carateristega relevante dei lenguaji de programasion, l'è proprio chelo che pì un programadore e la machina i dopara un lenguajo pì conpagno posibile, se xe in grado de far programi in manjiera senpre pì colaboradiva.

## Clasifegasion dei lenguaji de programasion
I lenguaji de programasion li xe stai clasificai storegamente in baxe a difarenti criteri:

* **Clasifegasion storega**

: Co xe vegnui fora novi lenguaji che i consentia novi stili de programasion pì espresiva, sti stili i se dividea so na serie de **jenerasion**, che ognuna de ste cuà, le raprexentava a so volta lenguaji de programasion nasui so na epoca simile e co carateristeghe de xenari comuni.

* **Lengue de alto e baso livelo**

: I lenguaji de programasion i xe xeneralmente clasificai in do grandi categorie che le se riferise ai "liveli de astrasion", o sia se el lenguajo el sia orientà a la machina o al programadore.

* **Clasifegasion par paradigmi**

: I paradigmi de programasion i difarensia difarenti modeli de calcolo e stili de struturasion e organixasion dei conpiti che un programa el ga da realixar. On lenguajo de programasion el pole dar suporto a uno o pì paradigmi de programasion, in tuto o parsialmente.
* **Clasifegasion par propoxito**

: I lenguaji de programasion par **propoxito xenerego** i se difarensia de cheli par **scopo spesifego** .

In algune ocaxion, i lenguaji de programasion i xe anca clasifegai in **fameje** che le condivide algune carateristeghe comuni come el stile xeneral de la sintasi che i dopara. Ste carateristeghe le xe xeneralmente ereditae da lenguaji de programasion pì veci che i ga ispirà i creadori de chel lenguajo.
## Robe da savere
Tuti i lenguaji de programasion che ghe xe, i xe definii da un lesego, na sintasi e na semandega e i ga:

*Istrusion: un comando o na regola descritiva: anca el modo de intendare la parola "istrusion" la canbia a segonda del linguajo. Na roba in comun che ga tuti i lenguaji, xe che ogni volta che na istrusion la njien exeguia, el stato interno del calcolador (chel sia el stato real de la machina o un anbiente virtual, teorego, creà dal lenguajo) el canbia.

Alguni conçeti i xe prexenti in alguni programi:
*Variabile e costante: un dato o un union de dati, conosui o no, xà memorixai o no; a na variàbiłe corisponde senpre, da calche parte, un certo numaro (fiso o variabile) de locasion de memoria che le njien *alocae*, o sia riservae, par contegnere i dati de st'ultimi. Tanti lenguaji i da a le variàbiłi un tipo, co difarenti proprietà (stringhe de testo, numari, liste, *atomi* ecc.) che le pole esar dae in manjiera *forte* (tipixasion forte) o in manjiera *debole* (tipixasion debole). Ghe xe lenguaji de programasion, come unlambda, che no le dopara variabili. Alguni lenguaji i soporta i puntadori a variabili.
*Espresion: Na conbinasion de variàbiłi e costanti, unie da operadori; le espresion le xe stae doparae inisialmente par raprexentar le espresion mademadeghe, ma col tenpo le so funsion le se ga xlargà. Na espresion la njien **valutada** par produr un valore, e la so valutasion la pol ver "efeti colaterali" sol sistema e/o sui ojeti che ghe parteçipa. I caxi particolari de espresion le xe le cusì ciamae espresion regolari.
*Struture dati, mecanixmi che i permete de organixar e jestir dati complesi.
*Struture de controlo, che le permete de goernar el fluso de controlo del programma, alterandolo in baxe al rixultà o valutasion de na espresion (che la pol scursarse al contegnuo de na variabile, o esare anca masa complesa) (çicli iterativi come par exenpio: *for*, *do*, *while* e struture condisionali come par exenpio *if*, *switch-case*).
* Sotoprograma: On bloco de codaxe chel pole esar riciamà da calsiasi altro ponto del programa. In sto caxo, caxi tuti i lenguaji i dà la funsionalità de ridoparasion del codaxe unendo secuense de istrusion drento de funsion riciamàbiłi dipendendo da cosa che neçesita, se drento de programi o drento de librerie riciamàbiłi in ogni programa.
* Funsionaità de input dati da tastiera e vixualixasion dati in output (stanpa a video) traverso i cusì ciamai canali stàndar (stàndar input, stàndar output).
* Posibilità de scrivare dei comenti sol codaxe xà scrito, sintaticamente identifegai e delimitai, che ghin spiega le funsion par poderli capire e lexare.

### Codaxe sorxernte

Programare so un determinà lenguajo de programasion signifega, de solito, scrivare uno o pì fasili file de testo ASCII , ciamà codaxe sorxente, chel dixe el algoritmo del programa, ma tradoto inte el lenguajo de programasion. I programadori no i dopara programi de videoscritura, ma dei *[[Editor (informadega)|editor]]* de testo (come emecs e drief) che invese i da grandi funsion de tratamento dei testi, par sto cuà no xe inportante, a l'inisio, l'aspeto grafego.

Se un serto editor l'è bon de laorare co altri strumenti de laoro (compilatore, linker, interprete e altri.. lexi pì vanti), no se parla de un senplise editor, ma de  **[[Integrated development environment|IDE - Anbiente de xvilupo integrà]]**. Se ga da dire parò, che alguni dei lenguaji de programasion pì novi, i dà el modo de laorare so na forma mista de programasion, o sia se pole scrivar el codaxe sorxente ASCII e se ghe dà anca operasion de programasion vixuale, che co sto cuà, el programadore el pole descrivare alguni aspeti del programa, dixegnando a video traerso el mouse (un programa l'è GUI par dixegnar finestre, menù, e altra roba).On codaxe sorxente, par esare exeguio dal proçesadore, el ga da esare tradoto in lenguajo machina (che l'è el lenguajo de la machina), e sta rob, la xe posìbiłe solo fata co do tecneghe: la compilasion e l'interpretasion.

El codaxe sorxente el pole esar exeguio pasandoghelo a un interprete chel exeguirà le operasion che ghe xe stae scrite sol codaxe sorxente, che xe la roba normale che capita inte i lenguaji di scripting; o se no el pol vegner conpilà, o sia tradoto in istrusion de lenguajo machina da un programa conpiladore: El rixultato el xe un file binario 'exeguibile' (codaxe exeguibile) che nol ghe serve nisun altro programa par esar exeguio e l'è anca pì rapido rispeto a un programa interpretà.

In tenpi pasai, la conpilasion la xe sta la norma par tuti i lenguaji de programasion che se doparava, deso invese ghe xe difarenti lenguaji interpretai che i njien doparai par uxi xenerali, come el Java, chel dopara na via de mexo tra le do manjiere, doparando un conpiladore el produxe el codaxe so un lenguajo *intermedio* (dito bytecode) chel njien dopo interpretà.

Col ndar dei ani, la difarensa de prestasion tra i lenguaji interpretai e cheli conpilai, la xe sta scursada co tecneghe de conpilasion just-in-time, anca se oncora se costuma doparare cheli conpili (se non addirittura l'assembly) par le aplicasion che le domanda la masima veloçità.