Tamás Ferenc: Programozási nyelvek generációi

A programozási nyelvek folyamatosan fejlődésen estek át és most is eszeveszett iramban fejlődnek. Ez az írás megpróbál pár alapvető fogalmat és korszakot tisztázni, de nem célja a teljesség. A leírásban látható, hogy nem egyértelműek a határok. Egyes nyelvek besorolásánál több korszak is szóba jöhet.

Nulladik generáció

Idő: kb. 1943-1950. Ez nem hivatalos elnevezés. Gyakorlatilag az egyedi, gépközeli nyelvekről van szó a legelső számítógépekben (pl.: ENIAC, EDVAC). A kód számok sorozata; általában egy szám egy utasítás. Relatíve sok utasítás. Nincs változónév, sem eljárásnév, sem ciklus. Minden egyes memóriacímre hivatkozás számkóddal történik.

  • Példa: 0B0A 0C0E 0D00.

Főbb problémák: a számkódokat a memóriába kell juttatni, de ha másik memória-területre tesszük, az komoly gondot okozhat. A gépi kód erősen gép- (vagy CPU-) függő. Nagyon nehézkes a programírás, amely igen kevesek kiváltsága (volt).
Előnyök: hatékony programkód esetén maximális futási sebesség – minimális memória-felhasználás mellett. A CPU és az egyéb hardware-elemek hatékonyságának maximális kihasználása.

Példák:

- gépi kód
- a Neumann-féle assembly nyelv tervezete.
- Plankantül nyelv (tervezete), a berlini Konrad Züse által megépített Z1-számítógépen.

Első generáció (1GL)

Idő: kb. 1950-1958. A programkódok megjelenése. Elemi típusok megszületése (egész, valós, logikai, karakter, tömb, rekord). Alapvető utasítások kialakulása (elágazás, ciklus, értékadás, eljárás). Hozzájuk tartozó elmélet: assemblerek, kódgenerálás, makroprocesszor, hatékonyság.

Példa:
MOV CX,ADAT
MOV DS,CX
XOR BH,BX
ADD AX,BX
SUB AL,2

Jellemzőik: igen gyors, gépközeli nyelvek, elég bonyolult kódszintű programozás. Az utasítások már egyszerűsített angol szavak, így sokkal könnyebb megjegyezni az utasításokat. Már nem annyira gépfüggő, de még mindig erősen hardware-közeli. Nehézkes a programozása, bár nagyon gyors alkalmazások készíthetők vele. 

Példák:

- John Mauchly rövid kódja (1950-es évek elején): a gépi kód helyett rövid parancsszavakat és utasításokat javasolt, de ezeket először vissza kellett fordítani gépi kódra, így használata igen körülményes volt. 
- Assembly nyelv: alapvetően az angol nyelvből képzett pár betűs utasításokból és címekből álló igen erősen hardver-közeli CPU-függő nyelv. Az utasítások mellett flageket, regisztereket és memóriacímeket is tartalmaz. A könnyebb kezelhetőség kedvéért vannak konstansok, illetve számok is. Hatékonyan megírva a kód igen gyors működést eredményez. A fordítók a kódsorokat rögtön gépi kóddá fordítják le, ami a lehető leggyorsabb futási sebességet eredményezi.
- Fortran I (1954, IBM, John Backus csapata): Az első széles körben használt, általános célú programozási nyelv. Célja főként a numerikus algoritmusok, matematikai formulák kezelése. I/O szempontból nem volt hatékony. Elsődleges célja: matematikai, tudományos kutatási számítások. A programozó által írt szöveget forráskódnak nevezték, a fordító programot pedig compiler-nek. (FORTRAN = FORmula TRANslation) Újabb verziók: Fortran ’95, 2003, 2008 és 2018.
- Algol (1955): főleg matematikai, műszaki számításokra, illetve oktatásra. Támogatja a dinamikus tárkezelést, illetve a rekurziót. Alapvető felhasználás: kutatás területe. (ALGOL = ALGOrithmic Language). Alapja volt a következő nyelveknek: CPL, Simula, B, C, Pascal.
- Codasyl (1955): a Cobol proto-nyelve.

 

Második generáció (2GL)

Idő: kb. 1957-1966. Jellemzők: alapvető utasítások finomodása, adattípusok és kifejezések kialakulása (pl.: fa, teljes zárójelezettség, lengyel formula). Hozzájuk tartozó elmélet: szintaxis, kifejezés-kiértékelés. A nyelvek immár nem túlságosan gép-közeliek, de magukat a nyelveket többnyire egy-egy problémacsoport megoldására lehetett alkalmazni. Az egyes utasítások viszont processzor-családra és környezetre jellemzőek.  A kódokat közvetlenül a programozók írják és (főleg ők) olvassák. Hátrány: egyes CPU-utasításításokban kellett gondolkodni, nem magasabb szintű logikában; kezelni kellett a memóriát és más hardver-részeket; 

Példák:

- Algol 60: algoritmus-leíró nyelv, programegység, blokk-struktúra.
- Fortran IV: fordítási egység, unió típus, kezdő érték adása.
- Cobol (kb. 1958): főleg a gazdasági életben használható adatfeldolgozó nyelv. Jellemzői: rekord, fájl, adatfeldolgozás. (COBOL = COmmon Business Oriented Language)
- PL/I (1964, IBM): összefoglalja az előző három tulajdonságait + dinamikus típusok, tömbműveletek. A legelső általános célú nyelv. Főleg adatfeldolgozási és számítási problémákhoz.
- Basic (1963; kidolgozók: Kemény János, Thomas Kurtz): a legelső oktatási célú nyelv. Interpreteres felület, tehát a fordító nem egyszerre készíti el a futtatási verziót, hanem soronként fordít és futtat. Nem tette lehetővé a strukturált programozást (pl: GOTO utasítás). (BASIC = Beginners All-purpose Symbolic Instrucion Code)

Nem Neumann-elvű nyelv: LISP.

 

Harmadik generáció (3GL)

Idő: kb. 1967-1980. Magas szintű általános nyelvek megjelenése. Jellemzők: típusok további finomodása, strukturált programozás, nagyobb gép-függetlenség és programozó-barátibb megvalósítás. Az alapvető utasításokról itt már a számítógép (és a fordító) gondoskodik, tehát nem a programozónak kell minden részlettel törődnie. Jellemző a gép-függetlenség. Az első (főleg az Algol 60-ra épülő) speciális nyelvek megjelenése. Elméleti fogalmak: helyesség-bizonyítás, programszintézis, szemantika-definiálás, szimbolikus végrehajtás, strukturált programozás, objektum-orientáltság.

Példák:
- Simula 67 (1968, Kristen Nygaard, Ole-Johan Dahl): Az Algol-60 kiterjesztése. Objektumok, osztályok és leszármazott osztályok megjelenése. (Simula = SIMUlation LAnguage)
- Ada: strukturált, típusos, blokk-szerkezetes nyelv. Jellemző felhasználása: rendszerprogramozás, gazdasági számítások. Az Ada egy szigorúan szabályozott és jól dokumentált nyelv, melyhez mindig létezett legalább egy ingyenes és több fizetős fordító is. Nevét Lady Ada Lovelace (1815-1852) után kapta, aki Charles Babbage barátja és bizalmasa volt és a világ első programozója.
- Modula-2 (1977, Niklaus Wirth– zürichi Műszaki Főiskola): moduláris programozás előtérbe helyezése. Eredeti elképzelések szerint a Pascal hiányosságait javította volna ki. Alkalmas kezdő- illetve tanuló nyelvnek; valamint nagy projektek és beágyazott rendszerek fejlesztésére. Maga a nyelv kicsi, jól tanulható és könnyen elsajátítható.
- Algol 68
- Pascal (Niklaus Wirth – zürichi Műszaki Főiskola): sokak által kedvelt kezdő(nek szánt) nyelv. Alapja: Algol. Valószínűleg a legsikeresebb kezdőknek szánt általános célú programozási nyelv. A legelső nyelv, ami megvalósítja a strukturált programozást. Műszaki és tudományos területen, valamint oktatásnál használják. A program blokkokból épül fel (begin ... end). Kialakulnak a függvények, eljárások és a rekurzió.
Legelterjedtebb megvalósítása: a Borland cég által megalkotott Turbo Pascal változat, amely az 1980-as, ’90-es évek általános nyelve volt. Ebből született meg a Borland Delphi, illetve a Free Pascal is.
- C (1972, Dennis Ritchie – AT&T Bell Labs): rendszer-közeli általános célú nyelv. Alapvetően a UNIX fejlesztő nyelvének indult. Megjelenik az alprogram (csak függvényként), valamint a rekurzió és a dinamikus tárkezelés. Elsősorban rendszerprogramozásnál használják. Az első szabványos C-fordító csak 1989-ben jelenik meg (ANSI-C). Nagy szerepe van az oktatásban és a számítógép-tudományban is. Jelenleg a C és utódai az egyik legjobban elterjedt programozási nyelv.
- C++ (kb. 1983, Bjarne Stroustrup): A C egyik utódnyelve. Támogatja a procedurális, az objektumorientált és a generikus programozást, valamint az adatabsztrakciót. Napjainkban szinte minden operációs rendszer alá létezik C++ fordító. A nyelv a C programozási nyelv hatékonyságának megőrzése mellett törekszik a könnyebben megírható, karbantartható és újrahasznosítható kód írására, ez azonban sok kompromisszummal jár.
- C# (kb. 2000, Anders Hejlsberg - ejtsd: szí-sharp): A Microsoft által kifejlesztett C-utódnyelv, jelentős Java-alapokkal. Erősen objektum-orientált, igen sokcélú, általános használt programozási nyelv.

Nem Neumann-elvű nyelvek: Prolog, Logo, SmallTalk, automaták nyelve.

 

Negyedik generáció (4GL)

Idő: kb. 1978-2005, de ma is igen népszerűek. Nem egyszerűen nyelvek, hanem magas-szintű nyelvre épülő komplex, objektum-orientált programfejlesztési környezetek. Jellemzők: modularitás, specifikáció, absztrakt típus (értékhalmaz és műveletek). A legelső ilyen nyelvek az 1980-as évek közepén jelentek meg. Előnyük: hatékonyabb, egyszerűbb, biztonságosabb programkészítés – a nagyobb logikai egységek definiálása és mozgatása a konkrét bitekre és bájtokra koncentrálás helyett. A nyelvek logikája közelít az emberi gondolkodáshoz. Támogatott a grafikus felület (GUI), az adatbázis-kezelés, a jelentés-készítés, a matematikai optimalizálás, valamint a webfejlesztés. Sok tekintetben egybemosódik a 3GL és a 4GL.

Példák:
- Turbo Pascal (1983, Borland): tartalmazott egy IDE-felületű szerkesztővel kombinált fordítót, amely futtatható EXE fájlokat volt képes létrehozni. A Turbo kihangsúlyozta a fordítás és a futtatás gyorsaságát egyaránt. A Turbo Pascalt igen széles körben használták az oktatásban.
- Borland Delphi (Object Pascal): Pascal alapokból kifejlesztett magas szintű általános nyelv. Maga a Delphi még 1995-ben jelent meg a 16-bites Windows-ra, amit számos későbbi verzió követett. A beépített negyedik generációs (4GL) felület integrált környezete kifejezetten magas szintű és hatékony fejlesztést tesz lehetővé.
- Visual Basic (1991): A Microsoft által kifejlesztett magas szintű, általános célú programozási nyelv, melynek alapja a régi DOS-os rendszerekben megszokott Basic. A programkód alapja, mint a legtöbb nyelvé az angol nyelv. Számos verziója fut egymással párhuzamosan. Sikerét a grafikus programozási környezetnek, az esemény-orientáltságnak és az egyszerű feldolgozásnak köszönheti.
- Visual C++: a C nyelven alapuló, annak tulajdonságait vizuális platformra áttevő, általános célú programozási nyelv. Számos verziója együtt létezik; több fordítója is van. A mai napig az egyik legnépszerűbb fejlesztési környezet.
- Visual C# (ejtsd: Szí-sharp): szintén a C nyelven alapuló, magas szintű grafikus fejlesztési környezettel rendelkező, általános programozási nyelv. Több fordítója is van. A Microsoft-verzió magában foglalja a .NET fejlesztési környezetet is.
- Borland JBuilder (Java): egy platform-független, általános célú igen könnyen használható programozási nyelv. Előnye a könnyű elsajátíthatósága, valamint a könnyű oktatása.

Az internet rohamos fejlődésével sorra jelentek meg a jobbnál jobb internetes nyelvek is, melyek egy része speciális és azóta is nagy népszerűségnek örvend.

Példák:
- SQL, mySQL: a adatbázis-kezelés szokványos nyelve. Alapvetően deklaratív nyelv, mivel nem tartalmaz algoritmikus szerkezeteket (elágazás, ciklus), de beépíthető más nyelvekbe; pl.: PHP-be beágyazott SQL-lekérdezés. Sikere többet között annak köszönhető, hogy igen nagy adatbázisokat is meglepő könnyedséggel tud kezelni. Bár a kezelése elég fapados, de még ma is népszerű. Több komoly program is alapjául használja, pl.: MS Access. Egyik legnépszerűbb verziója az ingyenes mySQL. (SQL = Structured Query Language)
- PHP: (1. verzió: Rasmus Lerdorf, 1995) általános szerver oldali nyelv. Alapvetően dinamikus weblapok leírására és kezelésére hozták létre. Segítségével olyan kódokat is létre lehet hozni, amelyek a HTML-lel ellentétben nem töltődnek le a kliens-gépre, hanem csak a szerveren futnak. Az eredeti verzió kicsi kód- és makrókészlete hamar túlnőtte magát és mára az egyik legnépszerűbb webes platformra használt programozási nyelve lett. Alkalmazásához a szerveren telepíteni kell egy PHP-t értő alkalmazást, pl.: Apache szervert. Érdekes, hogy a PHP-oldalak letöltve a kliens-oldali számítógépre HTML-kimenetként jelennek meg. (PHP = Personal Home Page)
- Java: (James Gosling, 2008) alkalmazás-fejlesztő nyelv, melyet a Sun Microsystems fejlesztett ki az 1990-es évek elején, majd 2009-ben az Oracle felvásárolt. A nyelv lényege, hogy a megírt programkódok futtatása a Java virtuális géppel történik, ami vagy interpretálja a kódokat, vagy natív gépi kódot készít, amit aztán az adott operációs rendszeren futtat. Előnyei: teljes programok írhatók, objektum-orientáltság, viszonylagos operációs rendszer-függetlenség, hálózati programozást is elősegítő kódokat és könyvtárakat tartalmaz, valamint távoli gépeken is lehet futtatni. Leágazása a weblapokhoz használt JavaScript programozási nyelv.
- HTML: (1991, Tim-Barners Lee, CERN, Genf, Svájc) weblapok alapvető programozási nyelve. Igen egyszerű az elsajátítása, szinte semmilyen előképzettség nem szükséges hozzá. A nyelv ún. "tag"-ekből, azaz jelekből áll. Ezek mutatják meg a böngészőnek, hogy mit is kezdjen a tartalmi résszel. Mivel a világháló eredetiben csak szövegeket tartalmazott, így a tartalmát kezelő oldal is csak szöveges utasításokat fogad el. A HTML-alapú weblapok egyik előnye és egyben hibája is, hogy alapvetően nem-dinamikus oldalakat tudnak megjeleníteni, bár az újabb verziók, pl.: DHTML már ezt a korlátot meghaladta. A HTML-lapok letöltődnek a számítógépre, így a teljes kódbázisuk is megjeleníthető. (HTML = HyperText Mapkup Language)
- CSS: (1996, Tim-Barners Lee és Hakon Wium Lievel) Webes kódlapok programozása. A nyelv alapvető célja a kicsit nehézkesen formázható HTML-lapok gyors és tömeges formázása, így egy-egy webhely kinézetének teljes körű megtervezése gyorsan és egyszerűen. (CSS = Cascade Style Sheet)

 

Ötödik generáció (5GL)

Idő: 2000-ma. Igen magas szintű nyelvek. Jellemzők: párhuzamosság, hálózatok programozása. Felhasználása pl. központilag vezérelt számítógép-hálózatok, döntéstámogató rendszerek fejlesztése; valamint a mesterséges intelligenciát fejlesztők eszköze. Ezek a nyelvek általában már alkalmasak arra, hogy a számítógép a problémát a programozó nélkül oldja meg. Több nyelv is a LISP-re épül és átvett onnan elemeket. Sokáig úgy vélték, hogy az 5. generációs nyelvek elavulttá teszik, így felváltják a régebbi nyelveket, de kiderült, hogy egyes elemekhez feltétlenül szükséges van emberi programozóra, így továbbra is van létjogosultsága a régebbi nyelveknek.

Példák:
- Prolog: (eredeti kifejlesztő: Alain Colmerauer, 1972) A nyelv egy deklaratív programozási nyelv, azaz a programozónak azt kell leírnia, hogy egy adott adathalmazból mit kellene kiszámítania és a program jelzi, hogy ez lehetséges-e. Tehát a hogyannal nem kell igazán törődnie. Ezen kívül sem eljárások, sem objektumok, sem adattípusok nem úgy működnek benne, mint más nyelvekben.
- Mercury: (kb. 1995) Somogyi Zoltán vezette ausztrál kutatók által a Melbourne-i Egyetemen kifejlesztett általános célú programozási nyelv. A Mercury a tradicionális logika programozási szintaxisát nyújtja, de emellett kényelmes szintaxist biztosít saját függvények megírásához, integrálva a logikai és a funkcionális programozást egyetlen adathalmazzá. Sok mindent átvett a Prolog nyelvből.
- OPS5: (eredetileg 1970-es évek vége, Charles Forgy, Carnegie Mellon Egyetem) Egy szabályalapú vagy gyártási rendszerű számítógépes nyelv, amely elsősorban a sikeres szakértői rendszerben használt R1/XCON rendszer, amelyet a VAX számítógépek konfigurálásához használnak. Különösen hatásos a döntés-előkészítő rendszereknél és egyes mesterséges intelligenciáknál.
- CMS: (Content Management System) Nem önálló programozási nyelv, hanem egy fejlesztési környezet, amely rengeteg alkalmazás-fejlesztési lehetőséget ad a programozó kezébe, akinek így nem kell minden egyes kódsorral külön küszködnie. Elsődleges célja a tartalom kezelése, fejlesztése, illetve megjelenítése. Több webes CMS-ben nem is kell érteni a konkrét HTML/CSS/PHP-nyelvekhez, mivel modulokat tudunk integrálni a tartalomba, majd azokat rengeteg különféle tulajdonsággal/tartalommal felruházni. Konkrét megvalósításuk általában hatékony, de időnként támadják a tartalomszolgáltatás motorját használó (többnyire mySQL) rendszert. További előnye a kereső-optimalizálás hatékony megoldása. Áruk alapvetően ingyenes, de egyes speciális modulokért már kérhetnek pénzt is. Internetes megvalósításai például: Joomla, Drupal, WordPress. E két utóbbi rendszer kicsit bővebb összehasonlítása: https://elemzeskozpont.hu/vallalkozas/cms-rendszerek-osszehasonlitasa-drupal-es-wordpress. Joomla bemutatása: https://www.joomla.org/3/hu/


Tisztelt Olvasó!

Ha úgy érzi, hogy jelen írás kiegészítésre, illetve pontosításra szorul, akkor kérem ne habozzon ezt velem is megosztani! Levelét várom a megszokott tferi(kukac)tferi(pont)hu címen.

Előre is köszönöm!

 

© TFeri.hu, 2017.
Felújítva: 2019 és 2021.nov.

 

Felhasznált irodalom:

-          http://szamosp.web.elte.hu/pub/allamvizsga/av.doc/PRNYALAP.DOC

-          http://webprog.blog.hu/2009/02/01/programozas_1_resz_programozasi_nyelvek_fejlodese_generaciok_osztalyozasok

-          https://prog.hu/hirek/4464/60-eves-lett-a-fortran-programozasi-nyelv

-          http://tudasbazis.sulinet.hu/

-          http://www.inczedy.hu/~viktoria/prog/2_ora/progr_nyelvek.pdf

-          http://slideplayer.hu/slide/11390213/

-          http://www.rentit.hu/hu-HU/Cikk/erdekessegek/milyen-nyelven-ert-a-szamitogep-a-programozasi-nyelvek-tortenete.rentit

-          https://en.wikipedia.org/wiki/Simula

-          https://hu.wikipedia.org/wiki/Ada_(programoz%C3%A1si_nyelv)

-          http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl?_alpha=a

-          https://en.wikipedia.org/wiki/Modula-2

-          https://www.modula2.org/

-          https://en.wikipedia.org/wiki/C_(programming_language)

-          http://www.tutorialspoint.com/cprogramming/c_overview.htm?

-          https://www.tutorialspoint.com/cprogramming/

-          http://progopedia.com/implementation/turbo-pascal/

-          https://en.wikipedia.org/wiki/Delphi_(programming_language)

-          https://www.embarcadero.com/products/delphi

-          https://msdn.microsoft.com/hu-hu/library/y4wf33f0.aspx

-          http://www.vbtutor.net/lesson1.html

-          http://www.max-visual-basic.com/history-of-visual-basic.html

-          https://www.visualstudio.com/vs/cplusplus/

-          https://msdn.microsoft.com/en-us/library/3bstk3k5.aspx

-          https://msdn.microsoft.com/en-us/library/kx37x362.aspx

-          https://msdn.microsoft.com/en-us/library/z1zx9t92.aspx

-          https://www.tutorialspoint.com/csharp/

-          http://nyelvek.inf.elte.hu/leirasok/Prolog/index.php?chapter=2

-          https://hu.wikipedia.org/wiki/Prolog

-          http://www.learnprolognow.org/

-          http://nyelvek.inf.elte.hu/leirasok/Mercury/index.php?chapter=1

-          http://programozasalapjai.hu/programozas/php/a-php-programozasi-nyelv-bemutatasa