Ügyességi játékok programozása
Pythonnal és Pygame-mel

Chapter 2: Mi az a számítógépes nyelv?

Videó: Mi az a számítógépes nyelv?

Mi alkotja a számítógépes nyelveket? Miért rendelkeznek ilyennel a számítógépek? Miért van olyan sokféle nyelv?

A motor működését nem szükséges megérteni az autóvezetéshez. Hasonlóan nem szükséges megérteni a fenti a kérdéseket a programozáshoz. Mindazonáltal, ahhoz, hogy magasabb szintre juthassunk, már szükséges megérteni azt, ahogyan a számítógép működik. Szélesebb látókört biztosít számunkra.

2.1 A programozás rövid története

A számítógépek elektromosak és digitálisak. Egy számítógép számára minden dolog csupán azt jelenti, hogy van-e vagy nincs feszültség a vezetékben. A feszültség hiánya nullát jelent. Bármilyen feszültség megléte egyet jelent. A számítógépek nem is képesek tovább számolni, efelett már a nullák és egyesek többszöröseit veszik figyelembe.

Korábban, kapcsolókat használtak arra, hogy egyeseket és nullákat juttassanak el a számítógép memóriájába. Ábra 2.1, A Wikimedia Commons jóvoltából, íme egy Altair 8800. A szemközti panel kapcsolók arra voltak használatosak, hogy betöltsenek valamit a programba. A fények jelezték a kimenetet. Nem volt még monitor.

fig.altair
Figure 2.1: Altair 8800

Minden be/ki kapcsoló egy számot jelképezett. Minden szám egy adatot vagy egy végrehajtandó utasítást a számítógép számára. Ez a rendszer csak egyeseket és nullákat használt a számok megjelenítésére, ezt bináris vagy kettes számrendszernek hívjuk. Ezt a számítógépes nyelvet "1GL"-nek hívják, vagy első generációs programnyelvnek.

A bináris számok gyakran vannak négyes csoportokban ábrázolva. Például:

1010 0010 0011

Mind az adat és a számítógép utasításai binárisan vannak kódolva. A gépnyelv bináris számokból áll, melyek olyan utasításokat tartalmaznak, amiket a számítógép előbb lefordít. Nem minden bináris adat gépnyelv persze. Adatok, mint például a dokumentumok, adatbázisok, pénzügyi grafikonok is bináris formában vannak a gépen tárolva. Ez az adat, természetesen, nem feltétlenül futtatható egyből a számítógépen.

Már a haladás jele volt a kapcsolókkal kódolt programokhoz képest, a hexadecimális kódok megjelenése. Az emberek többsége a decimális számokat használja, melyek a 0-9 jelekből állnak. A hexadecimális számok a 0-9 és A-F használhatóak, és négy kapcsolót jelentenek, vagy a 0-15 számokat.

BinaryDecimalHexadecimal
000
111
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F
1 00001610
1 00011711
Videó: Tízes, bináris, és hexadecimális számrendszerek

Annak reményében, hogy a programok bevitelét könnyebbé tegyék, később a számítógépek elkezdték használni az assambly nyelvet. Minden parancs egy kódszó, és egy program, amit fordítónak (compiler) nevezünk, átfordította a kódszót számokra, a parancs értelmezése közben. Ezt a típusú nyelvet "2GL" nyelvnek, vagy második generációs nyelvnek hívjuk.

Ez az ábra 2.2 egy példát mutat egy assembly nyelven megírt programból, lásd még: A Wikimedia Commons jóvoltából.

fig.assembly
Figure 2.2: Példa assembly nyelvre

Miközben ez egy előrelépés volt, még mindig nem volt elég könnyű programot írni. A következő nyelvi generáció már magasabb szintű absztrakciót is megengedett. A harmadik generációs nyelvek úttörői: (COBOL, FORTRAN and LISP) Ezekkel már sokkal könnyebb volt programozni.

A második és harmadik generációs nyelvek fordítókat használtak. Az fordító fogja a felhasználó által begépelt programot (nevezzükforráskódnak) és lefordítja gépi kóddá. A programozó ezután ezt a gépi kódot futtatja. Az eredeti forráskód nem fut valójában.

Ha sok forráskód részlet van egy programban, akkor összekapcsolják őket egy programmá, egy programmal, amit szerkesztőnek (linker) neveznek. A szerkesztő a gépi kódon fut, amit a fordító generált, hogy az generáljon egy végső programot. A végső program az, amit a felhasználó lefuttat, és az eredeti forráskód már nem kell.

fig.compiler_and_linker
Figure 2.3: Fordítók és szerkesztők

A hátránya a gépi nyelv lefordításának, hogy a program csak egy adott típusú gépen tud futni. Azok a programok, amiket Windowsra fordítottak le, nem fognak Apple Macintoshon futni, vagy Linuxon.

Mivel a teljes fordítási és szerkesztési lépések túl bonyolultak az új programozók számára, ezért néhány nyelv értelmezőt(interpreter) kezdett el használni. Ezek a programok ránéznek a forráskódra, és azon nyomban lefordítják gépikódra. Emiatt lehetséges, hogy a program fut Windows, Mac, vagy Unix alatt is, mivel egy fordító dolgozik minden platform alatt.

A hátulütője az értelmezők használatának az, hogy lassabbak, mivel az értelmező lassabban fordít a számítógép anyanyelvére.

fig.interpreter
Figure 2.4: Értelmező

A Python is egy példa az értelmező nyelvekre. Könnyebb fejleszteni Pythonban, mint C-ben, de a Python lassabban fut, és egy értelmezőnek kell még a háttérben futnia.

Azok a nyelvek, mint például a Java olyan rendszert használnak, ahol a program lefordítódik gépi kódra, és elfut a Java Virtuális gépen. (a JVM-n), vagyis nem az adott gépen. Másik népszerű nyelv, mely hasonlóan működik, a C#, a Közös Nyelvi Infrastruktúra (CLI) nevű nyelven, ami a virtuális végrehajtási rendszeren fut, vagyis a (VES) virtuális gépen. Ezekről teljes képet alkotó leírást adni nem ennek a könyvnek a célja, de nyugodtan olvass utána, ha érdekel.

Ma már sokféle különböző számítógépes nyelv létezik. Mivel a számítógépek is különféle feladatokra szakosodtak, ezért a különböző nyelvek is hozzá vannak rendelve egy-egy ilyen feladathoz. Az olyan nyelv, mint a C, jól működik együtt az operációs rendszerekkel, és kisebb számítógépekkel. Más nyelvek, mint például a PHP arra specializálódtak, hogy weboldalakat lehessen velük létrehozni. A Python egy általános célú nyelv, ami arra specializálódott, hogy könnyű legyen használni.

A Tiobe nevű cég nyomonköveti a különböző programnyelvek népszerűségét, és az ő indexükön frissítik is az adatokat minden hónapban. Jó ötlet ellátogatni ide, és a munkahely-toplistákhoz, mint amilyen aDICE, hogy az ember képben legyen, milyen nyelveket keresnek a munkáltatók.

Szerencsére, majdnem az össze nyelv osztozik közös elemeken, és ha egyszer egy nyelvet megtanultunk, akkor a hasonló elméleteket használhatjuk a másik nyelven is.

Ajánlanám megnézésre az alábbi számítástechnika történetével foglalkozó, szórakoztató videót: A kockák diadala/Triumph of the Nerds Robert X Cringley-től, ami egy háromrészes sorozat a számítástechnika eredetéről. A mozik elég szórakoztatóak ahhoz, hogy akár az egész család megnézhesse. Ajánlanék még egy könyvet: Véletlenszerű birodalmak/Accidental Empires, ha jobban szeretnél olvasni, mint videózni.

Mi történik a videók után? Még nem tárták fel az internet születésének történetét! Nézd meg az alábbi sorozatokat: Nerds 2.0.1 szintén Robert X Cringely-től.

2.2 Áttekintés

2.2.1 Többválaszos tesztkérdések

Click here for a multiple-choice quiz.

2.2.2 Rövid válaszos munkafüzet

Click here for the chapter worksheet.

2.2.3 Laborgyakorlatok

Click here for the chapter lab.