Programozási nyelv
A Wikipédiából
A programozási nyelv egy formális jelrendszer. számítógépes programok rögzítésére. A programozási nyelv meghatározza a lexikális sorozatot. szintaktikai és szemantikai szabályokat, amelyek meghatározzák a program megjelenését és azokat az intézkedéseket, amelyeket az előadóművész (általában a számítógép) az ellenőrzése alatt végez.
Az első programozható gépek létrehozása óta az emberiség több mint nyolcezer programozási nyelvet (beleértve a nem szabványos, vizuális és ezoterikus nyelveket is) jött létre [1]. Minden évben növekszik a számuk. Egyes nyelvek csak kevés saját fejlesztőt használhatnak, mások milliók ismertek. A professzionális programozók tíz vagy több különböző programozási nyelvvel rendelkezhetnek.
A programnyelv olyan számítógépes programok írására szolgál, amelyek olyan szabályok, amelyek lehetővé teszik a számítógép számára egy adott számítási folyamat végrehajtását. szervezzen különféle tárgyak kezelését, stb. A programozási nyelv eltér a természetes nyelvektől, mivel egy ember számítógéphez való interakcióját szolgálja, míg a természetes nyelveket használják az emberek közötti kommunikációra. A legtöbb programozási nyelv speciális konstrukciókat használ az adatstruktúrák meghatározására és manipulálására, valamint a számítási folyamat irányítására.
A programozási nyelv általában több, de alapvetően különböző típusú formában létezik:
- a nyelv szabványa - olyan specifikációk készlete, amelyek meghatározzák a szintaxist és a szemantikát; a nyelv standardja történelmileg fejlődhet (lásd részletesebb szabványosítás);
- a szabványos szoftverek megvalósításai (megvalósításai), amelyek a szabványos nyelv egyik vagy másik változatának megfelelően működnek; az ilyen szoftvereszközök különböznek a gyártó, a márka és a verzió (verzió), a kiadási idő, a szabvány teljes körű végrehajtása, további jellemzők; lehetnek bizonyos hibái vagy a kiviteli alak jellemzői, amelyek befolyásolják a nyelv használatának gyakorlatát, sőt a szabványt is.
Történelem [szerkesztés]
A fejlődés korai szakaszai [szerkesztés]
Ugyanakkor, 1940-ben, nem volt elektromos digitális számítógépek és fejlesztette ki egy nyelvet, amely lehet tekinteni az első magas szintű programozási nyelv a számítógépek - «plankalkül» által létrehozott német mérnök K. Zuse időszakban 1943-1945 [2] .
Az 1950-es évek közepétől kezdődően megjelenik a harmadik generációs nyelvek, például a Fortran. Lisp és Kobol [3]. Az ilyen típusú programozási nyelvek absztraktabbak ("magas szintű nyelvek" -nek is nevezik) és univerzálisak, nincsenek merev függőségük egy adott hardverplatformtól és a gépen alkalmazott utasításoktól. A program egy magas szintű nyelven lehet végezni (legalábbis elméletben, a gyakorlatban általában számos konkrét verzióit vagy nyelvjárások nyelvi végrehajtás) minden olyan számítógépen, amelyen a nyelvhez van egy fordító (az eszköz, amellyel a program a gép nyelvére, akkor a processzor végrehajthatja).
A felsorolt nyelvek frissített változatai továbbra is forgalomban vannak a szoftverek fejlesztésében, és mindegyikük befolyásolta a programozási nyelvek későbbi fejlesztését [4]. Ugyanakkor az 1950-es évek végén megjelent Algol. szintén alapul szolgál számos további fejlesztéshez ezen a területen. Meg kell jegyezni, hogy a korai programozási nyelvek formátumát és alkalmazását nagymértékben befolyásolta az interfész korlátai [5].
Tökéletesség [hivatkozás szükséges]
Abban az időszakban, 1960 - 1970-ben fejlesztette ki a alapparadigmája programozási nyelvek használata ma, bár sok szempontból ez a folyamat az egyetlen javulás ötletek és koncepciók megtestesülő több az első nyelv, a harmadik generáció.
- Az APL nyelv befolyásolta a funkcionális programozást, és az első nyelv lett a tömb-feldolgozás támogatására [6].
- A PL / 1 (NPL) nyelvét az 1960-as években fejlesztették ki a Fortran és a Kobol legjobb tulajdonságainak egyesítésével.
- A Simul nyelvét. amely ebben az időben jelent meg, első ízben tartalmazott támogatást az objektumorientált programozáshoz. Az 1970-es évek közepén egy szakértői csoport vezette be a Smalltalkot. amely már teljesen objektumorientált volt.
- Az 1969 és 1973 közötti időszakban a C nyelv kifejlesztését végezték el. ma is népszerű [7], és számos későbbi nyelv alapjává vált, például olyan népszerű, mint a C ++ és a Java.
- 1972-ben létrehozták a Prologot - a logikus programozás leghíresebb (bár nem az első, és nem egyetlen) nyelvét.
- 1973-ban az ML kiterjesztette a kiterjesztett polimorf tipizálási rendszert. a funkcionális programozás gépelt nyelvének kezdete.
Mindegyik nyelv egy leszármazott családot hozott létre, és a legmodernebb programozási nyelvek végső soron egyikükre épülnek.
Ezenkívül az 1960-as és 1970-es években vitákat vitattak meg arról, hogy egyes nyelveken strukturális programokat kell támogatni [8]. Különösen a holland szakértő E. Dijkstra jelent meg nyomtatásban, javaslatokkal a GOTO utasítások teljes körű elhagyására minden magas szintű nyelven. Fejlesztettek olyan módszerek is, amelyek célja a programok mennyiségének csökkentése és a programozó és a felhasználó termelékenységének növelése.
Egyesítés és fejlesztés [szerkesztés]
Az 1980-as években jött egy olyan időszak, amely feltételesen a konszolidáció idejének nevezhető. A C ++ nyelv kombinálja az objektumorientált és a rendszerprogramozás jellemzőit, az amerikai kormány a Hell nyelvét szabványosítja. Származó Pascal és felhasználásra szánt katonai létesítmények fedélzeti rendszerek, Japánban és más országokban jelentős összegeket fektetett be a tanulmány a kilátások az úgynevezett ötödik generációs nyelvek, amely magában foglalná a logikai programozási szerkezeteket [9]. A funkcionális nyelvek közössége az ML és a Lisp szabványt alkalmazta. Általában ezt az időszakot az előző évtized alapjától való függés jellemezte, nem pedig új paradigmák kifejlesztését.
A nagyszabású rendszerek programozási nyelvének fejlesztésében megfigyelt fontos tendencia a modulok - nagyteljesítményű kódszervezeti egységek - használatának középpontjában állt. Bár egyes nyelvek, például a PL / 1 már támogatta a megfelelő funkcionalitást, a moduláris rendszert tükrözte és alkalmazta a Modula-2 nyelveken is. Oberon. Ada és ML. Gyakran előfordul, hogy a moduláris rendszerek kombinálódnak az általános programozó konstrukciókkal [10].
A munka fontos iránya a vizuális (grafikus) programozási nyelv. amelyben a program "szövegének" szövegként való felváltását egy számítógépes képernyőn "rajzolás" (a program diagramjának alakítása) váltja fel. A vizuális nyelvek láthatóvá teszik a program logikáját, és jobban felfogják az ember számára.
A programozási nyelvek fejlesztése jelenleg a biztonság és a megbízhatóság javításának irányába mutat, a moduláris kódrendszer új formáinak kialakítása és az adatbázisokba való integráció felé.
A programozási nyelvek standardizálása [szerkesztés]
Számos széles körben használt programozási nyelv esetében nemzetközi szabványokat hoztak létre. A speciális szervezetek rendszeresen frissítik és közzéteszik az adott nyelvek specifikációit és formális meghatározásait. Az ilyen bizottságok keretében folytatódik a programozási nyelvek fejlesztése és korszerűsítése, valamint a létező és az új nyelvi konstrukciók bővítésére vagy támogatására vonatkozó kérdések.
Adattípusok [szerkesztés]
A modern digitális számítógépek binárisak és az adatokat bináris (bináris) kódban tárolják (bár a megvalósítás más számrendszerekben is lehetséges). Ezek az adatok általában a valós világról származó információkat (neveket, bankszámlákat, méréseket stb.) Tükrözik.
A programban az adatok szervezésére szolgáló speciális rendszer a programozási nyelvek típusrendszere; A típusrendszerek fejlesztése és tanulmányozása típuselméletként ismert. A nyelvek oszthatók a statikus gépeléssel és dinamikus gépeléssel. valamint a nem típusú nyelvek (például Forth).
Adatszerkezetek [szerkesztés]
A magas szintű nyelvek típusú rendszerek lehetővé teszik összetett, összetett típusok, úgynevezett adatstruktúrák definiálását. A strukturális adattípusok általában alap- (atomi) típusú és korábban meghatározott kompozit típusokból származnak.
Az alapvető adatszerkezeteket (listákat, sorokat, hash táblákat, bináris fákat és párokat) gyakran speciális szintaktikai konstrukciók képviselik magas szintű nyelveken. Az ilyen adatok automatikusan strukturáltak.
A programozási nyelvek szemantikája [szerkesztés]
Számos módszer létezik a programozási nyelvek szemantikájának meghatározására.
A következő három legszélesebb körben elterjedt fajta: operatív, származtató (axiomatikus) és denotációs (matematikai).
- A szemantika leírásában az operatív megközelítés keretében a programozási nyelvek konstrukcióinak végrehajtását általában egy képzeletbeli (absztrakt) számítógép segítségével értelmezik.
- Az axiomatikus szemantika leírja a nyelvi konstrukciók végrehajtásának következményeit a logika és az elő- és utófeltételek nyelvével.
- A fogászati szemantika a matematikához jellemző fogalmakkal működik - a készlet, a levelezés, valamint a megítélések, kijelentések stb.
A programozási paradigma [szerkesztés]
A programozási nyelv a számítás egy vagy másik alapmodelljével és a programozási paradigmával összhangban épül fel.
A nyelvek végrehajtásának módszerei [szerkesztés]
A fordítóprogramban (egy speciális program) fordított nyelvben a program fordítása (összeállítása) gépkódba (egy utasításkészlet) történik az ilyen típusú processzorhoz, majd összeállít egy végrehajtható modulba. amely külön programként futtatható kivitelezésre. Más szóval, a fordító a program forráskódját a magas szintű programozási nyelvről a processzor utasításainak bináris kódjaira fordítja.
Ha a programot értelmezett nyelven írták le, akkor a tolmács közvetlenül végrehajtja (értelmezi) a forrás szöveget anélkül, hogy előző fordítás lenne. A program az eredeti nyelven marad, és nem indítható tolmács nélkül. A számítógép processzora, ezzel összefüggésben, a gépi kód számára értelmezhető.
A szétválasztás az összeállított és értelmezett nyelvekhez feltételes. Tehát minden hagyományosan összeállított nyelvre, például Pascalra. tolmácsot írhat. Ráadásul a legtöbb modern "tiszta" tolmács nem közvetlenül végrehajtja a nyelvi konstrukciókat, hanem összeállít néhány magas szintű köztes ábrázolásba (például változó dereferencing és makró bővítés).
Bármely értelmezett nyelv esetében létrehozhat egy fordítót - például a Lisp nyelvet, amelyet eredetileg értelmeztek, bármiféle korlátozás nélkül összeállítható. A program végrehajtása során létrehozott kód dinamikusan is fordítható a futásidő alatt.
Rendszerint a fordított programok gyorsabban futnak, és nem igényelnek további programok végrehajtását, mivel már le vannak fordítva a gép nyelvére. Ugyanakkor, minden alkalommal, amikor megváltoztatja a program szövegét, újra kell fordítania, ami lassítja a fejlesztési folyamatot. Ezenkívül az összeállított program csak azonos típusú számítógépeken és szabályszerűen ugyanazon operációs rendszer alatt végezhető, amelyre a fordítót tervezték. Egy másik típusú gép futtatható létrehozásához új összeállításra van szükség.
A tolmácsolt nyelveknek van néhány speciális kiegészítő képessége (lásd fent), emellett a programok közvetlenül a változtatás után is futhatnak rájuk, ami elősegíti a fejlesztést. Egy értelmezett nyelven működő program gyakran futtatható különböző típusú gépeken és operációs rendszereken további erőfeszítések nélkül.
Az értelmezett programok azonban sokkal lassabban futnak le, mint a fordított programok, emellett nem hajthatók végre tolmácsprogram nélkül.
Néhány nyelv, például Java és C #. vannak összeírva és értelmezve. Nevezetesen a programot nem gépi nyelvre fordítják, hanem gépi független, alacsony szintű kódot, bájt kódot. A byte-kódot ezután a virtuális gép végzi. Bájtkód végrehajtásához rendszerint egy értelmezést használnak, bár egyes részei gépi kóddal közvetlenül a gépi kódra lefordíthatók a program végrehajtása során a Just-in-time compilation (JIT) technológiával. A Java esetében a bytecode-ot a Java Virtual Machine (JVM) hajtja végre a C # - Common Language Runtime.
Ez a megközelítés bizonyos értelemben lehetővé teszi mind a tolmácsok, mind a fordítók előnyeit. Meg kell említeni, hogy vannak olyan nyelvek, amelyek mind tolmácsot, mind fordítót (Fort) tartalmaznak.
Alacsony szintű programozási nyelvek [szerkesztés]
Az első számítógépeket bináris gépi kódokkal kellett programozni. A programozás azonban meglehetősen nehéz és nehéz feladat. A feladat egyszerűsítése érdekében kezdtek megjelenni alacsony szintű programozási nyelvek, amelyek lehetővé tették számunkra, hogy a gépi utasításokat olyan módon hozzuk létre, amely érthető volt az ember számára. Bináris kódká konvertálásához különleges programokat hoztak létre - fordítók.
Alacsony szintű nyelvek, általában írásához használt kis programok, eszközmeghajtók, közös modulok nem szabványos eszközök, programozás speciális mikroprocesszorok legfontosabb követelmények a tömörség, a teljesítmény és közvetlen hozzáférést biztosít a hardver erőforrásokat.
Magas szintű programozási nyelvek [szerkesztés]
Az adott számítógépes architektúrák jellemzőit nem veszi figyelembe számukra, ezért a létrehozott alkalmazások könnyen átvihetők számítógépről számítógépre. A legtöbb esetben egyszerűen átírja a programot egy adott számítógépes architektúra és operációs rendszer számára. A programok fejlesztése ezeken a nyelveken sokkal könnyebb, és a hibák kevésbé megengedettek. Jelentősen lerövidíti a program fejlesztési idejét, ami különösen fontos, amikor nagy szoftverprojekteken dolgozik.
Néhány magas szintű nyelv hátránya a programok nagy száma az alacsony szintű nyelvű programokhoz képest. Másrészt, algoritmikusan és szerkezetileg bonyolult programok esetén, szuperkompozíció használata esetén az előny a magas szintű nyelvek oldalán állhat. A magas szintű nyelvű programok szövege kisebb, de ha bájtba kerül, akkor az összeszerelőben írt kód kisebb lesz. Ezért többnyire magas szintű nyelveket használnak olyan szoftverek kifejlesztésére, amelyek nagy mennyiségű memóriával rendelkeznek számítógépekhez és eszközökhöz. A szerelő különböző alfajait más eszközök programozására is használják, ahol a program mérete kritikus.
Használt szimbólumok [szerkesztés]
A modern programozási nyelveket ASCII használatára tervezték. vagyis az összes ASCII grafikus karakter rendelkezésre állása szükséges és elégséges feltétel a nyelvi konstrukciók rögzítéséhez. ASCII vezérlő karakterek használt korlátozódik: csak akkor megengedett kocsi vissza CR, LF fordítás vonal és vízszintes lapra HT (néha VT függőleges lapot, és lépjen a következő oldalra, FF).
Korai nyelvek, amelyek a 6 bites karakterek korában merültek fel. használtak egy korlátozottabb készletet. Például, Fortran ábécé tartalmaz 49 karakter (beleértve a tér): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / (). $ '.
Kivételes kivétel az APL nyelv. amely sok speciális karaktert használ.
Matematikailag alapú programozási nyelvek [szerkesztés]
Példák a matematikailag megalapozott nyelvekre és a matematikai modellekre, amelyeket megtestesítenek:
A nyelv matematikai igazolásának jelenléte garantálhatja (vagy legalább nagyon nagy valószínűséggel ígérheti) az alábbi pozitív tulajdonságok egy részét vagy mindegyikét:
Nem szabad elfelejteni, hogy a "matematikából örökölt" nyelvek már nem feltétlenül rendelkeznek ezekkel a tulajdonságokkal. Például Python egyesíti több modell szerepel, de ezek kombinációja, nincs indok, ezért nem tekinthető „öröklése matematika”, és ennek következtében, benne rejlik csak az utolsó ilyen tulajdonságai.
Lásd még: [szerkesztés]
Megjegyzések [szerkesztés]
A szoftverrendszer bonyolultságára alapvető korlát van, ezért az összetevő nem fog teljesen értelmezni. Rendkívül nehéz lesz javításokat vagy hibákat felvenni, és minden egyes fix valószínűleg további hibákat okoz a hiányos ismeretek miatt.