HTML

Programozni tanulok!

Iskolai szinten közel két éve tanulok programozni, tehát még én is viszonylag kezdőnek számítok. Ennek ellenére úgy döntöttem nyitok egy blogot, ami segítség lehet azok számára, akik még kezdőbbek, mint én :)

Friss topikok

Virtuális gépek

laszloka 2012.05.07. 14:06

Na szóval. Hol is tartottam? Ja igen... Assemblerek, hordozhatóság, meg ilyesmi. A magas szintű nyelveket tárgyaltuk utoljára, és odáig jutottunk, hogy ezek a nyelvek is csak részben tudták megoldani a hordozhatóság problémáját. Ekkor pattant ki egy okos bácsinak a fejéből a virtuális gépek (VM) ötlete.

Hordozhatóság Virtuális Gépekkel


Manapság kétféle virtuális gépet ismerünk. Az ismertebb fajta az, amelyik szoftveres úton fizikailag is különbözőnek tűnő gépet generál az operációs rendszeren belül. (VirtualBox, WMWare, stb...) Ezek úgy néznek ki, hogy van egy program, amiben létrehozhatunk gépeket, megadhatjuk a szimulálni kívánt hardvereket, majd mint egy fizikailag különálló gépet, használhatjuk őket különböző célokra. Ezekre a gépekre ugyanúgy telepíteni kell operációs rendszert, de bármit is rontunk el rajtuk, ez (jó esetben) semmilyen hatással nem lesz sem a fizikai gépre, sem az azon futó operációs rendszerre.

A másik fajta virtuális gép (erről lesz szó most) tulajdonképpen egy szoftveres úton szimulált processzor. Tegyük fel, hogy elkészíted a saját programnyelvedet. Ez szép és jó, de ha nincs saját processzorod ami végrehajtja az utasításokat, akkor ez mind semmit nem ér. Tehát csinálsz hozzá egy szoftvert, ami a te virtuális géped lesz. Ez a szoftver értelmezi a saját programnyelved utasításait, és lefordítja parancsokká annak a gépnek, amin éppen fut a szoftver. Az alábbi ábra bemutatja a folyamatot.

1.1 ábra.PNG

És ennek mégis mi az értelme? Nem lenne jobb, ha a programot egyből a fizikai gép nyelvén írnánk meg? A válasz a hordozhatóságban rejlik. Képzeljük csak el, hogy mondjuk csinálunk tízféle VM-et tíz különböző platformra. Így, ha megírunk egy programot a VM nyelvén, máris le tudjuk futtatni tíz teljesen különböző gépen! Amint azt a mellékelt ábra is mutatja...

1.2 ábra.PNG

A Java Virtual Machine (JVM, A Java programozási nyelvhez fejlesztették ki) egyike a legszélesebb körben használt virtuális gépeknek. A cél egy olyan nyelv elkészítése volt, ami bárhol, bármilyen számítógépen elfut. 100 százalékos hordozhatóság. Ez lehetővé tette volna a készítőknek, hogy csináljanak egy programot, majd eladják bármilyen platformra, ami támogatja a JVM-et, a legcsekélyebb mennyiségű plusz munka és pénz befektetése nélkül. Így a készítők jóval nagyobb célközönséget érhetnek el programjaikkal. A programok nem csak Windows alatt futnának, hanem Macintosh és Linux alatt is, mindezt úgy, hogy ez a készítőknek semmibe sem kerül.

Bár ez nagyon jól hangzik, a Java mégsem hozta meg az igazi áttörést. Az első probléma természetesen a sebesség. A virtuális gépek lassítják a programok futását, mivel minden utasításnak keresztül kell mennie a virtuális gépen mielőtt a fizikai gép végrehajthatná azokat, és ez a programok futásának jelentős lassulását eredményezi. A Java sikerét a kisebb játékok, illetve web-alapú alkalmazások hozták meg, mert ezeknél nem igazán fontos a sebesség, de ha valami nagyobb volumenű dolgot akarunk írni, a Java szóba sem jöhet.

Ráadásul egy nyelv nem megoldás minden problémára. Néhány esetben a célnak tökéletesen megfelel a Java, de más esetekben sajnos nem nyújt eleget. Vannak nyelvek, amik bizonyos problémákat sokkal egyszerűbben képesek megoldani, esetleg olyan dolgok is megvalósíthatóak velük amire a Java egyáltalán nem alkalmas.

Rossz ötlet egy bizonyos nyelvhez kötni a virtuális gépet, mert ezzel rengeteg ember rá lesz kényszerítve arra, hogy olyan nyelven írjon programot, amit esetleg nem szeret.

Aztán jött a Microsoft, és tanulva a JVM hibáiból, előrukkolt a saját megoldásával...

TO BE CONTINUED...

Címkék: történet hordozhatóság VM virtuális gépek JVM

Szólj hozzá!

A magas szintű nyelvek

laszloka 2012.04.21. 14:20

Az assemblerek ugyan megoldották a gépi kódra fordítás problémáját, ám rögtön ezután az iparágnak egy teljesen új problémával kellett szembenéznie. A hordozhatóságéval. De nem kell félteni a számítógépes szakembereket. Találtak rá megoldást...

A nap hősei: A magas szintű nyelvek


Itt jönnek be a képbe a magas szintű programozási nyelvek. Ezek komplex nyelvek, melyek ugyan leírták különböző matematikai problémákra a megoldást, de nem mentek bele túl mélyen a részletekbe. Valami ilyesmit kell elképzelni:

int i = 6 * 7;

Egy nyelvben, mint például a C (az egyik legkorábbi és legelterjedtebb magas szintű programozási nyelv), egy program, az ún. fordító fogta a programkódot, és lefordította gépi kódra. Az nem is érdekes, hogy mi történik a háttérben. A programozó csak annyit tud, hogy létrehozott egy számot, ami 6-szor 7 eredményét tárolja.

Sajnos a magasszintű nyelvekkel sem lehet tökéletesen hordozható programokat készíteni. A probléma az, hogy minden fordító különböző, és máskép valósítja meg a dolgokat. Minden operációs rendszernek van egy úgynevezet API-ja (Application Programming Interface - Alkalmazásprogramozási Felület), amit más gépek nem tudnak használni. Ha csinálsz egy programot Windowsra, a WIN32 API-t használod, de a program semmiképp sem fog lefutni egy Macintosh gépen.

Erre néhány okos ember előrukkolt a Virtuális Gépek (Virtual Machine, VM) ötletével, amik kb. úgy működnek, mint egy tolmács, vagy inkább közvetítő...

TO BE CONTINUED...

Címkék: történet hordozhatóság VM API programnyelvek

Szólj hozzá!

A hordozhatóság problémája

laszloka 2012.04.14. 17:33

Az assemblerekkel megoldódott a programok gépi kódra fordításának problémája, de hamarosan egy még nagyobb probléma ütötte fel a fejét. Ez pedig a hordozhatóság volt...

Hordozhatóság


A hordozhatóság, mint olyan, azt jelenti, hogy egy program tetszőleges másik gépen is futtatható legyen. A hordozhatóság problémáját csak nemrégiben sikerült orvosolni (erről majd később). A régi időkben csak néhány ember készített számítógépet, és szinte egyik gép sem dolgozott együtt másikakkal. Szóval tegyük fel van egy (A) gép, aminek az 1 mint parancs szorzást jelent, de egy másik (B) gépnek a szorzás parancsa balga módon mondjuk pont a 2.

Az assembly nyelvek segítettek az ilyen és ehhez hasonló problémák megoldásában. Mindkét gépnek megvolt a saját parancsa összeadásra, kivonásra, szorzásra és osztásra, szóval a gyakorlatban csupán kétféle assembler kellett. Egy az A géphez, ami a "MUL" parancsot 1-re, egy pedig a B géphez, ami a "MUL" parancsot 2-re fordítja.

Elméletben tetszőlegesen sok gépre portolható volt egy bizonyos program, feltéve, hogy minden géphez volt egy assembler, ami értette azt a bizonyos assembly nyelvet amit a programozó a program megíráshoz használt.

De a dolgok nagyon hamar eldurvultak. A számítógépek egyre összetettebbé váltak, és a gyártók úgy döntöttek, hogy annyi parancsot építenek be a processzoraikba, amennyit csak lehet. A probléma ott kezdődött, hogy nem tudtak megegyezésre jutni, hogy pontosan milyen parancsokat is használjanak a processzorok. Némelyik processzor képes volt matematikai műveletekre lebegőpontos számokkal, sok másik viszont nem. Az egyikkel több tucat módon hozzá lehetett férni a memóriához, a másik viszont csak egyféle módon tette lehetővé ugyanezt.

Ennek hatására az assemblerek már nem voltak alkalmasak a programok különböző platformokra való portolására, mert a platformok palettája hamar egy sötét, átláthatatlan halmazzá duzzadt. Szóval ahelyett, hogy a programozók az összes gépre próbáltak volna programokat írni, inkább kitanulták egy típus fortélyait, és a programjaikat csak arra az egy típusra írták. B gépen le akarsz futtatni egy programot, amit A gépre írtak? Sajna; semmi esélyed sincs rá.

Ekkor jöttek a magas szintű programnyelvek...

TO BE CONTINUED...

Címkék: történet hordozhatóság

Szólj hozzá!

In the beginning...

laszloka 2012.04.12. 20:47

Már van egy blogom ezen kívül, de abban inkább hétköznapi témákat taglalok. Mivel programozói pályára készülök, és még emlékszem milyen nehéz volt az indulás, úgy döntöttem, hogy segítő/tanító jelleggel csinálok még egy blogot, ami csak és kizárólag programozásról fog szólni. Igyekszem majd hasznos dolgokkal teleszórni. Bárki, bármikor, bármilyen problémával fordulhat hozzám bizalommal, megteszek majd minden tőlem telhetőt a válasz megtalálására.

De hogy ez a poszt se legyen felesleges, kicsit írok a programozás történetéről.

 

A kezdet kezdetén...

 

És mondá Isten: Legyen világosság. Na nem ennyire régen, de az tuti, hogy sok évvel ezelőtt néhány okos bácsi kitalálta a matematikát. Akkor még nem voltak számológépek, szóval az embereknek kézzel, írásban, vagy esetleg fejben kellett számolniuk. Képzeld csak el a középiskolát számológép nélkül. Nem túl vicces dolog...
Na pont azért, mert nem vicces, néhány még okosabb bácsi előrukkolt egy olyan masina ötletével, ami megkíméli az embert attól a rettenetes mennyiségű fárasztó agymunkától, amivel a számolás jár. Teremté tehát az ember a számítógépet. És látá az ember, hogy jó. Most már nem kellett arra várni, hogy valami szegény szerencsétlen elvégezzen néhány száz számolási műveletet papíron. Már ott volt a számítógép, ami mindezt relatíve gyorsan, és hibátlanul elvégezte.

Gépi nyelvek és az Assembly

A régi időkben a számítógépek még nagyon egyszerűek voltak. A legelső számítógépek például még csak kb. nyolc parancsot ismertek. Gyakorlatilag a programozó írt egy számsort, megetette a géppel, és lefuttatta; a számok képviselték a parancsokat. Például tegyük fel, hogy a 0 volt az összeadás, az 1 pedig a szorzás művelete. Az ilyen programokat gépi nyelven írt programoknak nevezzük.

Egyszerű számítógépekről lévén szó, a programozók még könnyen fejben tudták tartani, melyik szám mit jelent, hiszen kb. nyolc parancs volt összesen. De aztán telt-múlt az idő, és egyre több, egyre bonyolultabb parancsok születtek, először csak néhány tucat, aztán később akár száz is. Kevés ember tud ennyi számot fejben tartani, és minden alkalommal kikeresni annak a bizonyos parancsnak a számát egy könyvből, eléggé kimerítő és hosszadalmas munka. Tehát kitalálták az Assembly nyelveket. Az Assembly nyelv tulajdonképpen egy nyelv, ami a szóalapú parancsokat lefordítja gépi kóddá. A korábban említett gépi kóddal működő masina tehát 6-ot 7-el az alábbi módon szorozná meg:

1 6 7Az 1 a konkrét parancs a 6 és a 7 pedig az adat, amin a parancsot végre akarjuk hajtani. Természetesen sok oldalnyi számsor nézegetése káros lenne nem csak a szemnek, de az agynak is. Ugyanez Assembly-ben már így nézne ki:

MUL 6 7

Ez már sokkal egészségesebb. Legalább most már ránézésre tudni lehet, hogy szorzásról van szó. (A parancs az angol multiply szóból ered, ami szorzást jelent.) Vannak úgynevezett assembler programok. Feladatuk nem más, mint átírni az Assembly nyelven írt programokat gépi kóddá. Az assemblerek nagyon egyszerű programok; gyakorlatilag csak kikeresik a parancsot egy listából, és kicserélik a neki megfelelő számra.

Mára ennyi.

To be continued...

Címkék: történelem történet assembly gépi kód assembler

Szólj hozzá!

süti beállítások módosítása