Limbàgiu de programmatzione

Unulimbàgiu de programmatzione, ininformàtica, est unu limbàgiu formale chi ischerat un'impare de istrutziones chi podent èssere impreadas pro prodùere datos in essida. Si podet impreare pro su controllu de su cumportamentu de una màchina formale o de unu cumprimentu suo (in manera tìpica, un'elaboradore), duncas in fase de programmatzione de custa pro mèdiu de s'iscritura de sucòdighe de orìginede unu programma a òpera de unu programmadore. Unu limbàgiu de programmatzione est cunsideradu tale de su totu si est Turing-cumpletu.
Su primu limbàgiu de programmatzione de s'istòria est su limbàgiu mecànicu impreadu dae Ada Lovelace pro sa programmatzione de sa màchina de Charles Babbage, sighidu dae su Plankalkül de Konrad Zuse, isvilupadu dae issu in s'Isvìtzeraneutrale durante sasegunda gherra mundialee publicadu in su1946. Plankalkül no est istadu mai impreadu a beru pro programmare.
Sa programmatzione de is primos elaboradores fiat fata imbetzes in short code, chi est istadu sa base de s'assemblye est una rapresentatzione simbòlica de sulimbàgiu màchina. S'ùnica forma de controllu de flussu est s'istrutzione de brincu cunditzionadu, chi faghet is programmas meda difìtziles de sighire in manera lògica pro neghe de is brincos de unu puntu a s'àteru de su còdighe.
Sa parte manna de is limbàgios de programmatzione imbenientes ant chircadu de pònnere un'astratzione a suba a custu livellu basilare, donende sa possibilidade de rapresentare istruturas de datos e istruturas de controllu prus generales e cun faeddos chi s'acostant de prus a is chi is umanos impreant pro rapresentare is problemas chi depent èssere risòlvidos iscriende is programmas. Intre is primos limbàgios a livellu artu a segudare una tzerta popularidade ddoe aiat su Fortran, creadu in su1957dae John Backus, de cale est derivadu posca su BASIC (1964): ultres a su brincu cunditzionadu, otentu cun s'imparu IF, custa generatzione noa de limbàgios introduit istruturas noas de controllu de flussu comente a sos tziclos WHILE e FOR e is istrutziones CASE e SWITCH: custu mènguat meda s'impreu de istrutziones de brincu (GOTO), faghende su còdighe prus craru e elegante, e duncas de mantenidura prus fàtzile.
A pustis de sa cumparta de su Fortran sunt nàschidos una sèrie de àteros limbàgios de programmatzione istòricos, chi ant postu in òpera una sèrie de ideas e paradigmas innovativos: is prus importantes sunt su Lisp (1959) e s'ALGOL(1960). Totu is limbàgios de programmatzione chi esistint oe podent èssere cunsiderados discendentes de unu o prus de custos primos limbàgios, chi tenent medas cuntzetos de base a cumone cun issos; s'ùrtimu ingendradore mannu de is limbàgios modernos est istadu suSimula(1967), chi at introduidu pro primu su cuntzetu deogetu.
In su 1970 Niklaus Wirth pùblicat su Pascal, su primu limbàgiu istruturadu, cun punna didàtica; in su1972de su BCPL naschent su B e posca su C, chi at tentu resèssida manna dae s'incumintzu. In su matessi annu cumparet fintzas su Prolog, su printzipale esèmpiu de limbàgiu lògicu, chi mancari no siat de norma impreadu pro s'isvilupu industriale de programmas (pro neghe de s'atòliu suo bàsciu) rapresentat una possibilidade teòrica ammajadora.
Cun is primos mini e micro-elaboradores e sas chircas inPalo Alto, in su1983naschetSmalltalk, su primu limbàgiu a ogetos beru, chi s'ispirat a su Simula e a su Lisp. Est impreadu ancora oe in unos cantos setores e est ammentadu pro s'influèntzia manna in s'istòria de is limbàgios de programmatzione, introduende su paradigmaorientadu a is ogetosin su primu cumprimentu. Esempros de limbàgios a ogetos de oe sunt Eiffel (1986), C++ (chi essit in su matessi annu de Eiffel) e posca Java, classe1995.
Totu is limbàgios de programatzione chi esistint sunt definidos dae unu lèssicu, una sintassi e una semàntica e tenent:
Programmare in unu limbàgiu de programmatzione sinnìficat de sòlitu iscrìere unu o prus documentos de testu ASCII, mutiducòdighe de orìginechi espressat s'algoritmude su programma traduidu in su limbàgiu de programmatzione. Is tipos de caràtere, is colores e in generale s'aspetu gràficu no sunt de importu pro sa programmatzione e totu: pro custu is programmadores no impreant programmas de video-iscritura, maeditoresde testu(comente aemacsebrief) chi imbetzes oferint funtziones sobradas de tratamentu de tesos (espressiones regulares, càmbios cunditzionales e chircas intre documentos mùltiplos, possibilidades de impreare trastos esternos etz).
Si un'editore de testu dislindadu podet traballare a cuntatu cun is àteros trastos de traballu (compiladore, linker, intèrprete etc.: bide prus a in antis) tando si faeddat deIDEoambiente de isvilupu integradu. Bolet naradu chi carchi limbàgiu de programmatzione reghente cunsentint fintzas una forma mista de programmatzione, in ue a s'istèrrida de còdighe de orìgine ASCII s'assòtziant fintzas operatziones de programmatzione visuale, chi permitit a su programmadore de descrìere carchi aspetu de su programmadisinnendea vìdeu pro mèdiu de susòrighe; un' aplicatzione tìpica de custa forma de programmatzione est su disinnu interativu de s'interfàtzia gràfica de su programma (bentanas, menùs, etz).Pro èssere esecutadu dae su protzessore su còdighe de orìgine depet èssere traduidu in limbàgiu màchina chi est su limbàgiu de livellu fìsicu de sa màchina, e custu est possìbile pro mèdiu de duas tècnicas: sa cumpiladura e s'interpretatzione.
Su còdighe de orìgine, cun is istrutziones de esecutare e (s'ispissu) carchi datu connotu e costantes, podet èssere esecutadu colende·ddu a un'intèrprete chi nd'at a esecutare is istrutziones, su chi est sa prassi normale pro is limbàgios de scripting; opuru podet èssere compiladu, est a nàrrere traduidu in istrutziones de limbàgiu màchina dae unu programma compiladore: su resurtadu est unu documentu binàriu 'esecutàbile' (còdighe esecutàbile) chi non bisòngiat de àteros programmas pro andare in esecutzione, e est fintzas meda prus lestru de unu programma interpretadu.
In passadu, sa cumpiladura est istada sa norma pro totu is limbàgios de programmatzione de impreu generale; oe in die ddoe at medas limbàgios interpretados e de impreu generale, comente a su limbàgiu Java o is de sa prataforma .NET, chi àplicant un'ìbridu intre is duas solutziones, impreende unu compiladore pro prodùere còdighe in unu limbàgiuintermèdiu(naradu bytecode) chi est a pustis interpretadu. Sa diferèntzia de prestatziones tra is limbàgios interpretados e is compilados est istada reduida cun tècnicas de cumpiladura just-in-time, mancari chi si sigat a impreare is limbàgios compilados (e fintzas s'assembly) pro is aplicatziones chi recherent sas màssimas prestatziones possìbiles.
Sa cumpiladura est su protzessu de furriadura de unu programma, iscritu in unu limbàgiu de programmatzione a artu livellu, in unu còdighe esecutàbile pro mèdiu de un'àteru programma naraducumpiladore.
Sa cumpiladura oferit medas avantàgios, a primu su fatu de otènnere esecutàbiles lestros a beru in sa fase de esecutzione adatende vàrios paràmetros de custa fase a s'hardware a disponimentu; ma tenet s'isvantàgiu printzipale in su fatu chi est netzessàriu compilare un'esecutàbile diferente pro onni sistema operativu o hardware (prataforma) in ue su programma depet èssere esecutadu. In faeddos tècnicos, ammancat saportabilidade.
Is limbàgios de programmatzione esotèricos sunt ideados cun sa punna de èssere prus complicados possìbile. No tenent un'utilidade bera, ma podent èssere impreados comente a proa de abilesa de unu programmadore o isceti pro ispàssiu.
Esempros sunt Brainfuck, LOLCODE, Cow e Ook.
Cun s'interpretatzione, su còdighe est esecutadu in sa forma sua de orìgine dae un'intèrpretechi, in sa forma prus simpre, pigat onni istrutzione de su programma e dda portat a cumprimentu. In custa manera su problema de sa portabilidade est risòlvidu, cun sa cunditzione chi ddoe siat un'intèrprete pro sa prataforma in ue su programma bolet esecutadu.
Cun custa modalidade, su traballu pro sa màchina est prus mannu, ca onni istrutzione de su programma depet èssere averiguada dae s'intèrprete e bortada in un'istrutzione màchina o prus de una. Pro custa resone, is prestatziones de is programmas interpretados sunt de sòlitu prus pòberas chi no cun is programmas cumpilados.
Is limbàgios de scripting e totu is chi sunt orientados a suWebsunt belle semper interpretados.
PHP, Perl, Tcl/Tk e JavaScript e medas àteros sunt esèmpios cuncretos de interatzione non vinculada a sa prataforma.
Ddoe at tentativos de furriare  torrare sos compiladores multipiattaforma creende unu livellu intermèdiu, una bènnida de sèmenes-interpretatzione, comente a s'in casu subra mentovadu de Java; de àteru càntigu pro sos limbàgios interpretados b'ant tentativos pro generare de sas cumpiladuras (o sèmenes-cumpiladuras) automàticas dillindadas pro sa màchina subra cale sunt esecutados.
Si su programma, comente a s'ispissu acontesset, impreat librerias o est assentadu dae prus mòdulos de programma, custos depent èssere 'ligados' s'unu cun s'àteru. A su trastu chi faghet custa operatzione di narantligadore(linker), e su traballu suo est prus che totu de risòlvere sas interconnessiones tra sos diferentes mòdulos.
Esistent duos tipos diferentes de ligamentu:dinàmicueistàticu.
Totu is mòdulos de su programma e is librerias impreadas sunt inclùdidas in s'esecutàbile, chi resurtat mannu ma cuntenet totu su netzessàriu pro s'esecutzione sua. Si est netzessària una muda a una de is librerias, pro curregire un'errore o unu problema de seguridade, totu is programmas chi ddas impreant cun ligamentu istàticu depent èssere torrados a ligare cun is versiones noas de is librerias.
Is librerias impreadas sunt carrigadas dae susistema operativucando netzessàriu (is librerias esternas sunt mutidas "DLL" (Dynamic-link libraries) in is sistemasMicrosoft Windows, mentras "SO" (Shared Object) in is sistemas Unix-like). S'esecutàbile est prus cumpatu, ma dipendet de sa presèntzia de sas librerias impreadas in su sistema operativu pro pòdere èssere esecutadu.
In custa manera, is librerias podent èssere annoadas una borta isceti a livellu de sistema operativu, sena netzessidade de torrare a ligare is programmas. Bessit fintzas possìbile impreare diversas versiones de sa matessi libreria o impreare librerias personalizadas.
In su cumprimentu de unu progetu de programma cumplessu, podet acontèssere chi carchi ala de su programma bèngiat iscrita che libreria, pro comodidade de mantenidura o pro ddas pòdere impreare in àteros programmas.
Sa cumplicazione agiunta est chi cando s'installat unu programma cun collegamentu dinàmicu est netzessàriu averguare sa presèntzia de is librerias chi impreat, e s'in casu mai installare custas puru. Is sistemas de manìgiu de pachetes, chi s'òcupant de installare is programmas in unu sistema operativu, de sòlitu tenent rasta de custas dipendèntzias.
De sòlitu si preferit su ligamentu dinàmicu, in manera de creare programmas minores e in generale reduire sa memòriaRAMocupada, assumende chi is librerias netzessàrias siant giai presentes in su sistema, o a bortas distribuende·ddas in paris cun su programma.
Custos duos mètodos de creatzione e esecutzione de unu programma presentant ambos avantàgios e isvantàgios: s'avantàgiu majore de sa cumpiladura est sena duda s'atòliu superiore meda in tèrmines de prestatziones, a su prètziu de su restare vinculados a unaprataforma(cumbinatzione de architetura hardware e sistema operativu); unu limbàgiu interpretadu imbetzes non tenet, in lìnia de màssima, custa dipendèntzia ma est prus lentu e recheret prus memòria in fase de esecutzione.
Una solutzione intre cumpiladura e interpretatzione est istada introduida in sas primas versiones de Pascal (inclùdida cussa portada a cumprimentu in su 1975 de s'imbentore suo, Niklaus Wirth) e posca adotada in is limbàgios Java e Python, cun su bytecode, e in is limbàgios Visual Basic e .NET de Microsoft cun suCommon Intermediate Language.
In ambos casos su còdighe de orìgine de is programmas non est cumpiladu in limbàgiu màchina, ma in unu còdighe intermèdiu "ìbridu" destinadu a èssere interpretadu in su momentu de s'esecutzione: sa resone de custu dòpiu coladòrgiu est de tènnere sa portabilidade de unu limbàgiu interpretadu e, gràtzias a sa pre-cumpiladura, fintzas una fase de interpretatzione prus simpre e tando prus lestra. Su bytecode de Java est unu limbàgiu assembly beru, chi est insandus postu in òpera in parte dae unos cantosmicroprozessores, comente a is ARM cun tecnologia Jazelle.
Su còdighe intermèdiu est prus fàtzile siat de interpretare siat de cumpilare: pro custu motivu siat pro Java siat pro is limbàgios .NET sunt istados isvilupados cumpiladores JIT (Just In Time), chi in su momentu de su làntziu de su programma cumpilant su còdighe intermèdiu e mandant in esecutzione unu còdighe màchina nativu, eliminende sa netzessidade de s'intèrprete e fadende is programmas iscritos in custos limbàgios lestros agiumai che is cumpilados.
In generale esistent belle 2500 limbàgios de programmatzione prus o mancu connotos e difùndidos.
Custos a primu sunt classificados, a segunda de su livellu de astratzione partende dae su limbàgiu màchina finas a su limbàgiu lògicu umanu, in limbàgios a bassu livellu e a artu livellu (in is annos noranta si distinghiant fintzas cussos a livellu a beru artu). In prus, is limbàgios podent èssere classificados in limbàgioscompiladoseinterpretadoscomente bidu subra. De sòlitu, is limbàgios sunt a pustis distintos in tres famìlias mannas basadas in suparadigma de programmatzionede riferimentu: is limbàgiosimperativos,funtzionaleselògicos.
In is limbàgios imperativos s'istrutzione est unu cumandu craru, chi òperat a suba a una o prus variàbiles o a suba a s'istadu internu de sa màchina, e is istrutziones sunt esecutadas in un'òrdine pre-defnidu. Iscrìere unu programma in unu limbàgiu imperativu bolet nàrrere in manera essentziale s'ocupare de ite sa màchina depet fàghere pro otènnere su resurtadu e su programmadore depet pònnere in òpera is algoritmos netzessàrios a manigiare is datos.
Is istruturas de controllu suntistrutziones de flussu(GOTU, FOR, IF/THEN/ELSE etc.) e su càrculu protzedit prus pro iteratzione chi no pro ricorsione. Is balores de is variàbiles sunt a s'ispissu assinniados partende dae costantes o dae àteras variàbiles e carchi borta pro coladòrgiu de paràmetros.
Unos cantos esempros de limbàgios imperativos sunt Frotrain, Cobol, Basic e C.
Sa programmatzione istruturada est una tècnica ideada pro limitare sa cumplessidade de s'istrutura de su controllu de su programma. Su programmadore est depet impreare isceti is istruturas de controllu canònicas definidas dae su Teorema de Böhm-Jacopini: sasecuèntzia, s'issèberu e sutziclu, evitende is istrutziones de brincu sena cunditziones. Esempros sunt Ada, Fortran 90/95 e Pascal.
Sa programatzione a ogetos est basada a suba a un'evolutzione de su cuntzetu de tipu de datu astratu caraterizada dae incapsulamentu, eredade, polimorfismu. Medas limbàgios modernos ponent in òpera cuntzetos de sa programmatziones a ogetos. Esempros de limbàgios chi ddos ponent in òpera a manera cumprida sunt Java e Smalltalk.
Is limbàgios funtzionales sunt basados a suba a su cuntzetu matemàticu de funtzione. In unu limbàgiu funtzionale fintzas s'assinniamentu est fatu isceti comente coladòrgiu de paràmetros. In custu mollu su controllu de su càrculu est de sòlitu manigiadu cun sa ricorsione, mentras s'istrutura de datos prus comuna est sa lista, una secuèntzia de elementos. Esempros de limbàgios funtzionales sunt Lisp, OCaml e F#.
In is limbàgios lògicos s'istrutzione est unaclàusolachi descriet una relatzione intre is datos: programmare in unu limbàgiu lògicu bolet nàrrere descrìere s'impare de is relatziones chi esistint intre is datos e su resurtadu bòlidu, e su programmadore depet istabilire in cale manera is datos depent mudare durante su càrculu. Non ddoe at un'òrdine predefinidu de esecutzione de is clàusolas: agatare s'òrdine giustu est tarea de s'intèrprete.
S'istrutura de controllu printzipale est sucut, chi ddi narantrujusi mudat su cumportamentu de su programma obirdesi donat isceti prus atòliu a su càrculu, chi protzedit pro ricorsione e non pro iteratzione. Is variàbiles retzint su balore issoro pro coladòrgiu de paràmetros o dae àteras variàbiles giai assinniadas in sa clàusola (unificatzione) e belle mai pro assinniamentu, chi est impreadu isceti pro su càrculu diretu de espressiones numèricas.
Pro pòdere èssere impreados in unu programma decrarativu, un'algoritmu depet èssere formuladu in manera recursiva o debacktracking; custu faghet de sa programmatzione cun custos limbàgios un'esperièntzia de su totu noa e recheret una manera de pensare diferente, pro ite ca prus chi contare unu resurtadu si recheret de nde dimustrare su balore cabale. In antis a custas rechertas, is limbàgios decrarativos permitint de segudare resurtados bonos meda cando si depent manigiare grupos de entes in relata.
Esempros de limbàgios lògicos sunt Curry, Mercury e Prolog.
Is limbàgios de programmatzione podent èssere partzidos fintzas segundu sa manera chi su tipu de dadu est asinniadu a una variàbile.
Is limbàgios de programmatzione esotèricos sunt ideados pro èssere prus complicados possìbile. No tenent un'utilidade bera, ma sunt impreados comente a proa de abilesa de su programmadore o pro ispàssiu. Esempros sunt Brainfuck, LOLCAT, Whitespace, COW e Ook.
Is super-elaboradores modernos e, oe in die, agiumai totu is carculadores tenent prus de unumicroprotzessore. Custu recheret sa capatzidade de ddos isfrutare. Sa parte manna de is limbàgios tenent istruturas o librerias chi permitint de esecutare partes diferentes de su programma in protzessores diferentes, ma unos cantos limbàgios sunt istudiados a manera de agatare issos e totu a manera automàtica is partes de còdighe de esecutare in su pròpiu tempus. Esempros sunt Occam, Linda e Axum.
Is limbàgios de scripting sunt nàschidos comente alimbàgios batch, pro automatizare tareas longas e ripetitivas de esecutare, apuntu, in modalidade batch.
Imbetzes de cumpònnere unu a unu sos cumandos pro cumprire unu tzertu traballu, issos sunt sarvados in secuèntzia in unu documentu, chi a pustis si podet impreare comente a cumandu. Is primos limbàgios de scripting sunt istados is de sas shellUnix; a pustis, pro s'utilidade issoro, medas àteros programmas interativos ant cumintzadu a permìtere s'ammentu e s'esecutzione de archìvios cun listas de cumandos o fintzas s'ammentu de registratziones de cumandos visuales (ismacrode is programmas de videoiscritura, pro esempru). Su passu imbeniente, est istadu in medas casos s'estensione de is limbàgios cun s'assòtziu de sìmbulos a balores, est a nàrrere s'impreu de variàbiles, e is cumandos de gestione de su flussu: brincu cunditzionadu, istrutziones de tziclu torrende·ddos aici limbàgios cumpletos.
Giai ichi medas limbàgios de scripting naschent pro s'invocatzione de cumandos o protzeduras esternas, issos sunt de sòlitu interpretados, duncas esecutados dae un'àteru programma, comente a unu programma chi su script permitit de estèndere, o un'interprete.
Esempros de limbàgios de scripting sunt PHP, Javascript e Python.