Langaj pwogramasyon

Soti nan Wikipedia, ansiklopedi gratis.
Ale nan navigasyon Ale nan rechèch
Kòd sous yon pwogram ki ekri nan lang BASIC

Yon lang pwogram , nan syans enfòmatik , se yon lang fòmèl ki presize yon seri enstriksyon ki ka itilize pou pwodwi done pwodiksyon: li ka itilize pou kontwole konpòtman yon machin fòmèl oswa yon aplikasyon li (tipikman, yon òdinatè ) oswa nan faz nan pwogram nan sa a nan ekri nan kòd la sous nan yon pwogram pa yon pwogramè : se yon langaj pwogramasyon konsidere kòm nan tout entansyon ak objektif kòm sa yo si li se Turing-konplè .

Istwa

Egzanp lang asanble

Premye langaj pwogramasyon nan listwa se lang mekanik Ada Lovelace itilize pou pwogram machin Charles Babbage , ki te swiv pa Plankalkül Konrad Zuse , devlope pa li nan Swis net pandan Dezyèm Gè Mondyal la e ki te pibliye an 1946 . Plankalkül pa janm te reyèlman itilize pou pwogramasyon. Pwogramasyon an nan òdinatè yo an premye te olye fè nan kòd kout [1] , ki soti nan ki tout pèp la evolye, ki konstitye yon reprezantasyon senbolik nan lang lan machin. Sèl fòm kontwòl koule a se enstriksyon sote kondisyonèl la, ki mennen nan ekri pwogram ki trè difisil pou swiv lojikman akòz so yo konstan soti nan yon pwen a yon lòt nan kòd la.

Pifò nan lang yo pwogram pita te eseye abstrè tèt yo soti nan nivo debaz sa a, bay posibilite pou reprezante estrikti done ak estrikti kontwòl ki pi jeneral ak pi pre fason (imen) nan reprezante kondisyon ki nan pwoblèm yo pou ki nou vize ekri pwogram yo. Pami premye lang wo nivo yo reyalize kèk popilarite se te Fortran , ki te kreye an 1957 pa John Backus , ki soti nan ki BASIC ( 1964 ) imedyatman sòti: nan adisyon a so a kondisyonèl, rann ak deklarasyon an SI, nouvo jenerasyon sa a nan lang Entwodui nouvo estrikti kontwòl koule tankou PANDAN ak POU pasan ak enstriksyon CASE ak SWITCH: nan fason sa a itilizasyon enstriksyon so (GOTO) redwi anpil, sa ki fè kòd la pi klè ak pi elegant, ak Se poutèt sa pi fasil antretyen.

Aprè aparisyon Fortran, yo te fèt yon seri lòt lang istorik pwogramasyon, ki te aplike yon seri lide inovatè ak paradigm : sa ki pi enpòtan yo se Lisp ( 1959 ) ak ALGOL ( 1960 ). Tout lang pwogram ki egziste jodi a kapab konsidere kòm desandan youn oswa plis nan premye lang sa yo, kote yo prete anpil konsèp debaz; dènye gwo progenitor nan lang modèn yo te Simula ( 1967 ), ki te premye a prezante konsèp la (Lè sa a, apèn trase) nan yon objè lojisyèl. An 1970 Niklaus Wirth pibliye Pascal , premye lang estriktire, pou rezon didaktik; an 1972 B a (byen vit bliye) ak Lè sa a, C a te fèt soti nan BCPL a , ki olye de sa te yon gwo siksè depi nan konmansman an. Nan menm ane a tou Prolog parèt, byen lwen tèlman egzanp prensipal la nan lang ki lojik, ki byenke pa nòmalman itilize pou devlopman endistriyèl nan lojisyèl (akòz efikasite li yo) reprezante yon posibilite teyorik trè kaptivan.

Avèk mini an premye ak mikrokompitè ak rechèch nan Palo Alto, nan 1983 Smalltalk te fèt , lang nan premye ki se reyèlman ak konplètman objè-oryante, enspire pa Simula ak Lisp: nan adisyon a ke yo te toujou nan itilize jodi a nan sèten sektè, Smalltalk se vin chonje pou enfliyans nan menmen li egzèse sou istwa a nan lang programmation, entwodwi paradigm nan objè-oryante nan premye enkarnasyon matirite li yo. Men kèk egzanp langaj oryante sou objè jodi a se Eiffel ( 1986 ), C ++ (ki te soti nan menm ane ak Eiffel) epi pita Java , klas 1995 .

Deskripsyon

Konsèp fondamantal

Icône loup mgx2.svg Sijè a menm an detay: Teyori nan lang pwogramasyon ak pwogramasyon (syans enfòmatik) .
Manyèl pwogramasyon

Tout lang pwogram ki egziste deja yo defini pa yon leksik , yon sentaks ak yon semantik epi yo gen:

  • Enstriksyon : yon lòd oswa yon règ deskriptif: menm konsèp enstriksyon an trè varyab ant divès lang yo. Kèlkeswa lang patikilye a, sepandan, chak fwa yon enstriksyon egzekite, eta entèn nan òdinatè a (si li se eta reyèl la nan machin nan oswa yon vityèl, anviwònman teyorik kreye pa lang lan) chanje.

Gen kèk konsèp ki prezan tou nan pifò lang:

  • Varyab ak konstan : yon datum oswa yon seri done, li te ye oswa enkoni, deja memorize oswa yo dwe memorize; nan yon varyab toujou koresponn, yon kote, yon sèten kantite (fiks oswa varyab) nan kote memwa ke yo resevwa lajan , sa vle di rezève, ki gen done yo tèt li. Anpil lang tou atribi a varyab yon kalite , ak pwopriyete diferan (strings tèks, nimewo, lis, atòm, elatriye) ki ka asiyen nan yon ( tape fò ) oswa fèb ( tape fèb ) fason. Gen langaj pwogram, tankou unlambda , ki pa sèvi ak varyab. Kèk lang sipòte itilizasyon sa yo rele pwent varyab.
Flowchart egzanp sou yon algorithm
  • Ekspresyon : yon konbinezon de varyab ak konstan , ansanm ak operatè yo ; ekspresyon yo te okòmansman prezante yo reprezante ekspresyon matematik, men fonctionnalités yo depi elaji. Yon ekspresyon evalye yo pwodwi yon valè, ak evalyasyon li yo ka pwodwi "efè segondè" sou sistèm lan ak / oswa objè yo ki patisipe nan li. Ka espesyal nan ekspresyon yo sa yo rele ekspresyon regilye .
  • Done estrikti , mekanis ki pèmèt ou òganize ak jere done konplèks.
  • Estrikti kontwòl , ki pèmèt yo gouvène koule nan ekzekisyon pwogram, chanje li ki baze sou rezilta a oswa evalyasyon nan yon ekspresyon (ki ka redwi a kontni an nan yon varyab, oswa menm dwe trè konplèks) (pasan iteratif tankou pou , , pandan y ap ak estrikti kondisyonèl tankou si , chanje-ka ).
  • Subprogram : yon blòk kòd ki ka rele nan nenpòt lòt pwen nan pwogram nan. Nan kontèks sa a, prèske tout lang ofri fonksyon reutilizasyon kòd lè yo konbine sekans enstriksyon nan fonksyon ki ka raple jan sa nesesè nan pwogram yo oswa nan bibliyotèk ki ka raple nan chak pwogram.
  • Fonksyonalite nan opinyon done ki soti nan klavye ak vizyalizasyon nan done pwodiksyon (enprime ekran) nan sa yo rele chanèl yo estanda (estanda opinyon, pwodiksyon estanda).
  • Posibilite pou mete kòmantè sou kòd la ekri, sentaksik idantifye ak delimite, ki eksplike fonksyon li yo pou benefis nan lizibilite oswa entèlijans.

Kòd sous

Icône loup mgx2.svg Menm sijè an detay: Kòd Sous .
Egzanp kòd sous

Pwogramasyon nan yon langaj bay jeneralman vle di ekri youn oswa plis dosye tèks ASCII senp, ki rele kòd sous ki eksprime algorithm nan pwogram tradui nan lang lan pwogramasyon. Polis, koulè ak an jeneral aspè grafik la pa enpòtan pou rezon pwogramasyon an se pou rezon sa a pwogramè yo pa sèvi ak pwogram pwosesis mo, men editè tèks (tankou emacs ak kout ) ki olye ofri fonksyon pwosesis mo avanse. ( Regilye ekspresyon , ranplasman kondisyonèl ak rechèch sou dosye miltip, posibilite pou rele zouti ekstèn, elatriye).

Si yon editè bay kapab travay sere sere ak lòt zouti travay (du, linker, entèprèt, elatriye: gade anba a) Lè sa a, plis pase jis yon editè nou ap pale de IDE oswa anviwònman devlopman entegre. Li ta dwe remake ke kèk lang pwogramasyon resan pèmèt tou yon fòm melanje nan pwogramasyon, nan ki ekri nan ASCII kòd sous tou ki asosye ak operasyon pwogramasyon vizyèl , nan ki pwogramè a dekri kèk aspè nan pwogram nan pa desen sou ekran an. lè l sèvi avèk sourit la ; yon aplikasyon tipik nan fòm nan lèt nan pwogramasyon se konsepsyon entèaktif nan entèfas pwogram lan (fenèt, meni, ak sou sa). Pou egzekite pa processeur a, kòd sous la dwe tradwi nan lang machin ki se lang kote machin nan opere nan nivo fizik, e sa posib atravè de teknik posib: konpilasyon ak entèpretasyon .

Kòd sous la, ki gen enstriksyon yo dwe egzekite ak (souvan) kèk done li te ye ak konstan, ka Lè sa a, dwe egzekite pa pase l 'bay yon entèprèt ki moun ki pral egzekite enstriksyon yo genyen ladan yo, ki se pratik nòmal pou scripting lang ; oswa li ka konpile, sa vle di tradwi nan enstriksyon langaj machin pa yon pwogram du : rezilta a se yon 'ègzèkutabl' dosye binè ( kòd ègzèkutabl ) ki pa bezwen lòt pwogram nan kouri, epi li se tou pi vit pase yon pwogram entèprete. Nan tan lontan, konpilasyon te nòmal pou tout langaj pwogram jeneral; kounye a gen anpil entèprete ak langaj jeneral itilize, tankou Java oswa sa yo ki nan platfòm la .NET , ki aplike yon apwòch ibrid ant de solisyon yo, lè l sèvi avèk yon du yo pwodwi kòd nan yon lang entèmedyè (yo rele bytecode ) ki se imedyatman entèprete. Diferans pèfòmans ant entèprete ak lang konpile yo te redwi ak teknik konpilasyon jis-an-tan , byenke lang konpile (si se pa asanble ) kontinye itilize pou aplikasyon ki mande pou pi wo pèfòmans posib.

Konpilasyon

Icône loup mgx2.svg Menm sijè an detay: Konpilasyon ak Kòd objè .
Tipik konplo nan yon du ideyal

Konpilasyon se pwosesis la ki pwogram nan, ekri nan yon langaj pwogramasyon wo nivo, se tradui nan yon kòd ègzèkutabl pa vle di nan yon lòt pwogram yo rele yon du . Konpilasyon ofri anpil avantaj, premye nan tout reyalite a nan jwenn ègzèkutabl trè vit nan faz nan kouri pa adapte paramèt divès kalite faz sa a nan pyès ki nan konpitè ki disponib; men li gen dezavantaj prensipal la nan lefèt ke li nesesè konpile yon ègzèkutabl diferan pou chak sistèm opere oswa pyès ki nan konpitè ( platfòm ) ki te sou ekzekisyon an dwe disponib oswa sa yo rele Transparans a manke.

Entèpretasyon

Icône loup mgx2.svg Menm sijè an detay: Entèprèt (òdinatè) .
Yon kòd Piton

Pou eseye elimine pwoblèm nan Transparans (depandans la oswa ou pa nan lang lan sou platfòm la), nou te eseye kreye lòt lang ki ta ka baze sèlman sou konpile bibliyotèk (konpozan) ad hoc pou chak platfòm, pandan y ap kòd yo entèprete , ak Se poutèt sa pa gen okenn bezwen pou yon konpilasyon sou tout kalite machin ki te sou li se kouri. [ sitasyon bezwen ] Gwo domaj nan lang sa yo se ralanti nan ekzekisyon an; sepandan, yo gen avantaj nan gwo ki pèmèt ou sèvi ak pwogram nan menm san yo pa modifikasyon sou tribin miltip. Nan ka sa a, li te di ke pwogram lan se pòtab .

Pèt la nan pèfòmans ki se nan baz la nan lang yo entèprete se travay la doub ki se reskonsab bay machin nan ki ap prepare nan pwosesis pwogram sa a. Kontrèman ak yon pwogram konpile, an reyalite, chak enstriksyon yo tcheke epi entèprete nan chak ekzekisyon pa yon entèprèt . Lang entèprete yo itilize nan faz devlopman nan yon pwogram pou fè pou evite pote anpil konpilasyon oswa olye lè ou vle kreye lojisyèl ki fè operasyon ki pa kritik ki pa mande pou optimize konsènan vitès oswa gwosè, men ki benefisye plis de Transparans. Scripts ak tout Web- lang oryante se prèske toujou entèprete. PHP , Perl , Tcl / Tk ak JavaScript ak anpil lòt moun se egzanp konkrè nan entèraksyon ki pa platfòm.

Gen tantativ divès kalite fè konpilateur kwa-platfòm pa kreye yon nivo entèmedyè, yon kalite semi-entèpretasyon, tankou nan ka a susmansyone nan Java ; nan lòt men an, pou lang entèprete gen tantativ jenere konpilasyon otomatik (oswa semi-konpilasyon) espesifik nan machin nan ki te sou yo kouri. Genyen tou zouti yo otomatize kòm anpil ke posib konpilasyon an nan pwogram nan menm sou tribin diferan, pou egzanp GNU otokonf / otomak , ki pèmèt ou yo kreye yon distribisyon kòd la sous ki ka configuré ak konpile otomatikman sou tribin diferan, jeneralman omwen tout Unix .

Ki lye

Icône loup mgx2.svg Menm sijè an detay: ki lye ak .

Si pwogram nan, tankou souvan rive, sèvi ak bibliyotèk , oswa ki konpoze de plizyè modil lojisyèl , sa yo dwe 'lye' youn ak lòt. Zouti ki fè operasyon sa a rele linker , epi li konsène sitou ak rezoud koneksyon ant diferan modil yo. Gen sitou de diferan kalite lyen: dinamik ak estatik .

Lyen estatik

Tout modil pwogram ak bibliyotèk yo itilize yo enkli nan ègzèkutabl la, ki se gwo, men gen tout bagay ki nesesè pou ekzekisyon li yo. Si yon chanjman nan youn nan bibliyotèk yo vin nesesè, yo korije yon ensèk oswa pwoblèm sekirite , tout pwogram ki sèvi ak yo ak lyen estatik dwe re-lye ak vèsyon yo nouvo nan bibliyotèk yo.

Lyen dinamik

Bibliyotèk yo itilize yo chaje pa sistèm nan fonksyone lè sa nesesè (ki lye dinamik ; bibliyotèk ekstèn yo rele "DLL", bibliyotèk dinamik-lyen nan sistèm Microsoft Windows , pandan y ap "SO" Pataje objè nan sistèm ki tankou UNIX ). Ègzèkutabl la ki kapab lakòz se pi plis kontra enfòmèl ant, men li depann de prezans nan bibliyotèk yo itilize nan sistèm nan fonksyone pou kapab kouri. Nan fason sa a, bibliyotèk yo ka mete ajou yon sèl fwa nan nivo sistèm operasyon an, san yo pa bezwen relink pwogram yo. Li vin posib tou pou itilize vèsyon diferan nan menm bibliyotèk la, oswa pou itilize bibliyotèk koutim ak karakteristik espesifik pou lame patikilye a. Nan realizasyon an nan yon pwojè lojisyèl konplèks, li ka rive ke kèk pati nan pwogram nan yo te kreye kòm bibliyotèk, pou fasilite nan antretyen oswa pou kapab sèvi ak yo nan diferan pwogram ki fè pati nan pwojè a menm.

Konplikasyon an te ajoute se ke lè ou enstale yon pwogram lyen dinamik ou bezwen tcheke pou bibliyotèk yo li itilize, ak evantyèlman enstale sa yo tou. Sistèm jesyon pake, ki pran swen enstale pwogram sou yon sistèm opere, anjeneral kenbe tras nan depandans sa yo otomatikman. An jeneral, lyen dinamik pi pito, yo nan lòd yo kreye ti pwogram epi jeneralman diminye memwa a RAM okipe, an konsideran ke bibliyotèk ki nesesè yo deja prezan nan sistèm lan, oswa pafwa distribye yo ansanm ak pwogram nan.

Konparezon ant konpilasyon ak entèpretasyon

Yon egzanp sou kòd sous nan Piton . Mete aksan sou sèten moso kòd se yon zouti komen nan mitan pwogramasyon yo navige kòd la.

De metòd sa yo pou kreye ak egzekite yon pwogram gen tou de avantaj ak dezavantaj: avantaj nan pi gran nan konpilasyon se san dout efikasite nan pi wo an tèm de pèfòmans, nan pri a nan rete mare nan yon platfòm (konbinezon de achitekti pyès ki nan konpitè ak sistèm operasyonèl) patikilye ; yon lang entèprete nan lòt men an pa gen, nan prensip, depandans sa a, men se pi dousman ak mande pou plis memwa nan ègzekutabl.

Bytecode ak P-kòd

Yon solisyon entèmedyè ant konpilasyon ak entèpretasyon te prezante nan vèsyon yo an premye nan Pascal (ki gen ladan yon sèl la ki te kreye an 1975 pa envanteur li yo, Niklaus Wirth ) ak imedyatman adopte nan lang yo Java ak Piton , ak bytecode , ak nan vizyèl debaz la ak .NET lang Microsoft ak P-kòd la .

Nan tou de ka sa yo kòd la sous nan pwogram yo pa konpile nan lang machin, men nan yon entèmedyè "ibrid" kòd destine yo dwe entèprete nan moman sa a nan ekzekisyon an pwogram: rezon ki fè la pou etap sa a doub se gen Transparans nan entèprete lang, men tou, gras a pre-konpilasyon, yon faz entèpretasyon ki pi senp ak Se poutèt sa pi vit. Nan ka bytecode Java a nou ap fè fas ak yon langaj asanble reyèl, ki orijinal te dwe aplike nan yon modèl processeur reyèl, men pa janm reyalize; kèk mikroproseseur modèn, tankou ARM ak Jazelle natif natal aplike anpil enstriksyon bytecode ak Se poutèt sa yo kapab egzekite Java bytecode tankou si li te asanble.

Sepandan, kòd entèmedyè a pi fasil ni pou entèprete ni pou konpile: pou rezon sa a, yo te devlope konpilateur JIT (jis nan tan) pou tou de lang Java ak .NET, ki nan moman lansman yon pwogram Java oswa .NET yo konpile entèmedyè kòd sou vole a ak egzekite natif natal kòd machin, konplètman elimine bezwen an pou yon entèprèt ak fè pwogram ekri nan lang sa yo prèske osi vit ke korespondan pwogram yo konpile.

Anviwònman devlopman ak ekzekisyon

Icône loup mgx2.svg Menm sijè an detay: Anviwònman devlopman ak anviwònman ekzekisyon .
IDE egzanp

Avèk anviwònman devlopman nou vle di mete nan nan zouti pou la devlopman nan pwogram nan kòd sous , pandan y ap ak anviwònman ekzekisyon nou tipikman vle di mete nan nan lojisyèl bibliyotèk , ki rele tou lojisyèl platfòm , itilize pa pwogram nan tèt li yo nan lòd yo fonksyon kòrèkteman.

Klas lang yo

Icône loup mgx2.svg Sijè a menm an detay: Paradigm pwogramasyon ak lis langaj pwogramasyon .

An jeneral, gen apeprè 2500 langaj pwogram plis oswa mwens byen li te ye ak toupatou. Premye a tout sa yo klase, dapre nivo a nan distraksyon, kòmanse nan lang machin jiska lang lojik imen, nan nivo ki ba ak wo nivo lang (nan nineties yo menm moun ki nan nivo ki pi wo yo te distenge). Nan vire, lang yo ka klase nan konpile ak entèprete lang jan yo wè pi wo a. Lè sa a, lang yo anjeneral divize an twa gwo fanmi ki baze sou paradigm nan pwogram referans: lang enperatif , fonksyonèl ak lojik .

Enperatif

Icône loup mgx2.svg Menm sijè an detay: pwogram enperatif .

Nan lang enperatif, enstriksyon an se yon lòd eksplisit, ki opere sou youn oswa plis varyab oswa sou eta entèn la nan machin nan, ak enstriksyon yo egzekite nan yon lòd Predetermined. Ekri yon pwogram nan yon lang enperatif esansyèlman vle di fè fas ak sa ki machin nan gen pou fè pou jwenn rezilta a ou vle, ak pwogramè a se okipe amann-akor algoritm ki nesesè yo manipile done yo. Estrikti kontwòl pran fòm lan nan deklarasyon koule (GOTO, POU, SI / Lè sa a, / Lòt elatriye) ak kalkil la montan pa iterasyon olye ke pa rkursyon. Valè varyab yo souvan asiyen nan konstan oswa lòt varyab (plasman) ak raman pa pase paramèt (enstansyasyon).

Lang enperatif tipik:

Estriktire

Icône loup mgx2.svg Menm sijè an detay: pwogram estriktire .

Pwogram estriktire se yon teknik ki gen objektif se limite konpleksite nan estrikti kontwòl pwogram lan. Pwogramè a mare pou itilize sèlman estrikti kontwòl kanonik yo defini nan Teyorèm Böhm-Jacopini , ki se sekans , seleksyon ak bouk , pou evite enstriksyon so san kondisyon.

Objè oryante

Icône loup mgx2.svg Menm sijè an detay: Pwogramasyon oryante objè .

Objè-oryante pwogramasyon ki baze sou yon evolisyon nan konsèp nan kalite done abstrè karakterize pa enkapsulasyon , pòsyon tè , polymorphism . Anplis de lang espesyalize ki aplike konplètman prensip metodoloji sa a (tankou Smalltalk oswa Java), anpil lang modèn enkòpore kèk konsèp nan pwogram objè-oryante.

Fonksyonèl

Icône loup mgx2.svg Sijè a menm an detay: Fonksyonèl pwogramasyon .

Lang fonksyonèl yo baze sou konsèp matematik fonksyon an. Nan yon langaj pi fonksyonèl, plasman eksplisit se menm konplètman absan epi se sèlman pase nan paramèt yo itilize. Tipikman nan modèl sa a, se kontwòl la nan kalkil la jere pa rkursyon ak matche modèl (aksyon an nan tcheke prezans nan yon motif sèten - modèl - andedan yon objè konpoze), pandan y ap estrikti nan done ki pi komen se lis la , yon sekans nan eleman. Ekspozan ki pi enpòtan nan kategori sa a se san dout Lisp (LISt Processing).

Deklaratif (oswa lojik)

Icône loup mgx2.svg Menm sijè an detay: pwogram lojik .

Nan lang lojik, enstriksyon se yon kloz ki dekri yon relasyon ant done: pwogramasyon nan yon lang lojik vle di dekri seri relasyon ant done yo ak rezilta ou vle a, epi pwogramè a angaje nan etabli kijan done yo dwe evolye pandan kalkil la. Pa gen okenn lòd pre-etabli nan ekzekisyon nan kloz yo divès kalite, men li se jiska entèprèt la jwenn lòd la dwa. Estrikti kontwòl prensipal la reprezante pa koupe a , ki rele wouj si li chanje konpòtman pwogram lan oswa vèt si li sèlman fè kalkil la pi efikas, ki montan pa rkursyon epi yo pa pa iterasyon. Varyab resevwa valè yo pa enstansyasyon oswa nan lòt varyab ki deja asiyen nan kloz la ( inifikasyon ) ak prèske pa janm plasman, ki itilize sèlman nan ka kalkil dirèk nan ekspresyon nimerik.

Nan lòd pou yo dwe itilize nan yon pwogram deklaratif, tout algoritm nòmal yo dwe refòme nan tèm repetitif ak bak ; sa fè pwogram ak lang sa yo yon eksperyans konplètman nouvo epi li mande yon fason radikalman diferan nan panse, paske plis pase kalkile yon rezilta, li mande pou demontre valè egzak li yo. Fè fas ak demand sa yo, lang deklaratif pèmèt yo reyalize rezilta eksepsyonèl lè li rive manipile gwoup antite nan relasyon youn ak lòt.

Lang fèb oswa fòtman tape

Yon lòt klasifikasyon vle soti nan pwen de vi nan ki kalite done eksprime, li vle sibdivizyon an nan lang ak tape oswa tape fèb.

Lang esoterik

Icône loup mgx2.svg Menm sijè an detay: Esoteric langaj pwogramasyon .

Lang paralèl

Superkompitè modèn ak - pa kounye a - tout òdinatè segondè ak mitan-ranje yo ekipe ak CPU miltip. Kòm yon konsekans evidan, sa mande kapasite pou eksplwate yo; per questo sono stati sviluppati dapprima il multithreading , cioè la capacità di lanciare più parti dello stesso programma contemporaneamente su CPU diverse, e in seguito alcuni linguaggi studiati in modo tale da poter individuare da soli, in fase di compilazione, le parti di codice da lanciare in parallelo.

Linguaggi di scripting

Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: Linguaggio di scripting .

I linguaggi di scripting sono nati come linguaggi batch , per automatizzare compiti lunghi e ripetitivi da eseguire, appunto, in modalità batch . Invece di digitare uno ad uno i comandi per realizzare un certo compito, essi sono salvati in sequenza in un file, utilizzabile a sua volta come comando composto. I primi linguaggi di scripting sono stati quelli delle shell Unix ; successivamente, vista l'utilità del concetto, molti altri programmi interattivi hanno cominciato a permettere il salvataggio e l'esecuzione di file contenenti liste di comandi, oppure il salvataggio di registrazioni di comandi visuali (le cosiddette macro dei programmi di videoscrittura , per esempio). Il passo successivo, è stato in molti casi l'estensione dei linguaggi con l'associazione di simboli a valori, cioè l'uso di variabili, con i comandi di gestione del flusso, ovvero i costrutti di salto condizionato, le istruzioni di ciclo o di ricorsione, rendendoli così linguaggi completi. Recentemente molti programmi nati per scopi ben diversi dalla programmazione offrono agli utenti la possibilità di programmarli in modo autonomo tramite linguaggi di scripting.

La sintassi di molti linguaggi di scripting, come PHP oi dialetti di ECMAScript , è simile a quella del C, mentre altri, come Perl o Python , ne adottano invece una progettata ex novo. Visto che molto spesso i linguaggi di scripting nascono per l'invocazione di comandi o procedure esterne, altrettanto spesso essi sono interpretati , cioè eseguiti da un altro programma, come il programma madre, del quale il linguaggio di scripting è un'estensione, o un apposito interprete.

Altri linguaggi

Altri tipi di linguaggi sono i linguaggi di programmazione ad altissimo livello utilizzato da professionisti ei linguaggi di programmazione visuali che non richiedono particolari conoscenze avanzate in fatto di programmazione.

Valutazione

Non ha senso, in generale, parlare di linguaggi migliori o peggiori, o di linguaggi migliori in assoluto: ogni linguaggio nasce per affrontare una classe di problemi più o meno ampia, in un certo modo e in un certo ambito. Però, dovendo dire se un dato linguaggio sia adatto o no per un certo uso, è necessario valutare le caratteristiche dei vari linguaggi.

Caratteristiche intrinseche

Sono le qualità del linguaggio in sé, determinate dalla sua sintassi e dalla sua architettura interna. Influenzano direttamente il lavoro del programmatore, condizionandolo. Non dipendono né dagli strumenti usati (compilatore/interprete, IDE, linker) né dal sistema operativo o dal tipo di macchina.

  • Espressività : la facilità e la semplicità con cui si può scrivere un dato algoritmo in un dato linguaggio; può dipendere dal tipo di algoritmo, se il linguaggio in questione è nato per affrontare certe particolari classi di problemi. In generale se un certo linguaggio consente di scrivere algoritmi con poche istruzioni, in modo chiaro e leggibile, la sua espressività è buona.
  • Didattica : la semplicità del linguaggio e la rapidità con cui lo si può imparare. Il BASIC, per esempio, è un linguaggio facile da imparare: poche regole, una sintassi molto chiara e limiti ben definiti fra quello che è permesso e quello che non lo è. Il Pascal non solo ha i pregi del BASIC ma educa anche il neo-programmatore ad adottare uno stile corretto che evita molti errori e porta a scrivere codice migliore. Al contrario, il C non è un linguaggio didattico perché pur avendo poche regole ha una semantica molto complessa, a volte oscura, che lo rende molto efficiente ed espressivo ma richiede tempo per essere padroneggiata.
  • Leggibilità : la facilità con cui, leggendo un codice sorgente, si può capire cosa fa e come funziona. La leggibilità dipende non solo dal linguaggio ma anche dallo stile di programmazione di chi ha creato il programma: tuttavia la sintassi di un linguaggio può facilitare o meno il compito. Non è detto che un linguaggio leggibile per un profano lo sia anche per un esperto: in generale le abbreviazioni e la concisione consentono a chi già conosce un linguaggio di concentrarsi meglio sulla logica del codice senza perdere tempo a leggere, mentre per un profano è più leggibile un linguaggio molto prolisso.

A volte, un programma molto complesso e poco leggibile in un dato linguaggio può diventare assolutamente semplice e lineare se riscritto in un linguaggio di classe differente, più adatta.

  • Robustezza : è la capacità del linguaggio di prevenire, nei limiti del possibile, gli errori di programmazione. Di solito un linguaggio robusto si ottiene adottando un controllo molto stretto sui tipi di dati e una sintassi chiara e molto rigida; la segnalazione e gestione di errori comuni a runtime dovuti a dati che assumono valori imprevisti ( overflow , underflow ) o eccedono i limiti definiti (indici illegali per vettori o matrici) controllo dei limiti ; altri sistemi sono l'implementare un garbage collector, limitando (a prezzo di una certa perdita di efficienza) la creazione autonoma di nuove entità di dati e quindi l'uso dei puntatori, che possono introdurre bug molto difficili da scoprire.

L'esempio più comune di linguaggio robusto è il Pascal, che essendo nato a scopo didattico presuppone sempre che un'irregolarità nel codice sia frutto di un errore del programmatore; mentre l'assembly è l'esempio per antonomasia di linguaggio totalmente libero, in cui niente vincola il programmatore (e se scrive codice pericoloso o errato, non c'è niente che lo avverta).

  • Modularità : quando un linguaggio facilita la scrittura di parti di programma indipendenti (moduli) viene definito modulare . I moduli semplificano la ricerca e la correzione degli errori, permettendo di isolare rapidamente la parte di programma che mostra il comportamento errato e modificarla senza timore di introdurre conseguenze in altre parti del programma stesso. Questo si ripercuote positivamente sulla manutenibilità del codice; inoltre permette di riutilizzare il codice scritto in passato per nuovi programmi, apportando poche modifiche. In genere la modularità si ottiene con l'uso di sottoprogrammi (subroutine, procedure, funzioni) e con la programmazione ad oggetti.
  • Flessibilità : la possibilità di adattare il linguaggio, estendendolo con la definizione di nuovi comandi e nuovi operatori. I linguaggi classici come il BASIC, il Pascal e il Fortran non hanno questa capacità, che invece è presente nei linguaggi dichiarativi, in quelli funzionali e nei linguaggi imperativi ad oggetti più recenti come il C++ e Java.
  • Generalità : la facilità con cui il linguaggio si presta a codificare algoritmi e soluzioni di problemi in campi diversi. Di solito un linguaggio molto generale, per esempio il C, risulta meno espressivo e meno potente in una certa classe di problemi di quanto non sia un linguaggio specializzato in quella particolare nicchia, che in genere è perciò una scelta migliore finché il problema da risolvere non esce da quei confini.
  • Efficienza : la velocità di esecuzione e l'uso oculato delle risorse del sistema su cui il programma finito gira. In genere i programmi scritti in linguaggi molto astratti tendono ad essere lenti e voraci di risorse, perché lavorano entro un modello che non riflette la reale struttura dell'hardware ma è una cornice concettuale, che deve essere ricreata artificialmente; in compenso facilitano molto la vita del programmatore poiché lo sollevano dalla gestione di numerosi dettagli, accelerando lo sviluppo di nuovi programmi ed eliminando intere classi di errori di programmazione possibili. Viceversa un linguaggio meno astratto ma più vicino alla reale struttura di un computer genererà programmi molto piccoli e veloci ma a costo di uno sviluppo più lungo e difficoltoso.
  • Coerenza : l'applicazione dei principi base di un linguaggio in modo uniforme in tutte le sue parti. Un linguaggio coerente è un linguaggio facile da prevedere e da imparare, perché una volta appresi i principi base questi sono validi sempre e senza (o con poche) eccezioni.

Caratteristiche esterne

Oltre alle accennate qualità dei linguaggi, possono essere esaminate quelle degli ambienti in cui operano. Un programmatore lavora con strumenti software, la cui qualità e produttività dipende da un insieme di fattori che vanno pesati anch'essi in funzione del tipo di programmi che si intende scrivere.

  • Diffusione : il numero di programmatori nel mondo che usa il tale linguaggio. Ovviamente più è numerosa la comunità dei programmatori tanto più è facile trovare materiale, aiuto, librerie di funzioni, documentazione, consigli. Inoltre ci sono un maggior numero di software house che producono strumenti di sviluppo per quel linguaggio, e di qualità migliore. [2]
  • Standardizzazione : un produttore di strumenti di sviluppo sente sempre la tentazione di introdurre delle variazioni sintattiche o delle migliorie più o meno grandi ad un linguaggio, originando un dialetto del linguaggio in questione e fidelizzando così i programmatori al suo prodotto: ma più dialetti esistono, più la comunità di programmatori si frammenta in sottocomunità più piccole e quindi meno utili. Per questo è importante l'esistenza di uno standard per un dato linguaggio che ne garantisca certe caratteristiche, in modo da evitarne la dispersione. Quando si parla di Fortran 77 , Fortran 90 , C 99 ecc. si intende lo standard sintattico e semantico del tale linguaggio approvato nel tale anno, in genere dall' ANSI o dall' ISO .
  • Integrabilità : dovendo scrivere programmi di una certa dimensione, è molto facile trovarsi a dover integrare parti di codice precedente scritte in altri linguaggi: se un dato linguaggio di programmazione consente di farlo facilmente, magari attraverso delle procedure standard, questo è decisamente un punto a suo favore. In genere tutti i linguaggi "storici" sono bene integrabili, con l'eccezione di alcuni, come lo Smalltalk, creati più per studio teorico che per il lavoro reale di programmazione.
  • Portabilità : la possibilità che portando il codice scritto su una certa piattaforma (CPU + architettura + sistema operativo) su un'altra, questo funzioni subito, senza doverlo modificare. A questo scopo è molto importante l'esistenza di uno standard del linguaggio, anche se a volte si può contare su degli standard de facto come il C K&R o il Delphi.

Note

  1. ^ Robert W. Sebesta, Concepts of Programming languages , 2006, pp.44. ISBN 0-321-33025-0
  2. ^ Sito web della TIOBE Software che mensilmente stila una classifica di popolarità dei linguaggi di programmazione.

Bibliografia

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autorità Thesaurus BNCF 5676 · LCCN ( EN ) sh85107313 · GND ( DE ) 4047409-4 · BNF ( FR ) cb13318353n (data) · NDL ( EN , JA ) 00569224
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica