kvp#32
A go eseteben a lenyeg nem a forditasi ido vagy a futtatasi sebesseg. A lenyeg, hogy ez meg kozelebb van a klasszikus 1973-ban megalmodott smalltalk-hoz, mint a java. Akit a sebesseg erdekel, az leforditja mindkettot nativ kodda. (java-bol is lehet x86-os gepi kodot gyartani es akkor pont olyan gyors lesz mint a c)
A go elonyei:
-nincsennek objektum leszarmazasok, egy objekum akkor felel meg egy adott interface-nek ha minden szukseges fuggveny megvan benne
-nincs oparator overloading, tehat nem kell azt keresni, hogy ma eppen mit jelent az osszeadas jel
-nincsennek benne implicit operatorok, tehat az amikor egy muvelet nem csak kiszamol valamit, hanem modosit is az adatokon a nelkul, hogy ez latszana
-nincs benne pointer aritmetika, tehat nem lehet olyan kodot irni, a tul/alul/felul/stb csordul
-nincsennek parameter fuggo fuggvenyhivasok, tehat nem kell azon gondolkodni, hogy x fuggveny helyett melyik fog futni, ha masfajta adatot kap, a nevek egyertelmuek
-egyelore nincsennek template-ek, stl es boost, tehat az a kaosz amit a c++ bizottsagok eves gyulesei behoznak a szabvanyokba (es evente ujrairnak)
-van futasideju reflexio, tehat a programok latjak a sajat kodjukat es az adatszerkezetuket, igy nem kell mindent kezzel megadni, sokmindent magatol letrehoz a fordito (a kod akar sajat magat is fejlesztheti menet kozben)
-automatikus a szemetgyujtes, tehat nem fordulhat elo, hogy programozoi hibabol egy program tobb memoriat egyen, mint amennyit tenyleg fel is hasznal
Egyebkent a tovabbfejlesztett c++-t hivjak c#-nak, az ujragondolt c++-t hivjak java-nak, es most itt az ujragondolt c, a go. Egyebkent a go elvei szerint eddig is lehetett c-ben is fejleszteni, csak mivel nem volt letiltva egy csomo veszelyes c-s muvelet es hianyzott par egyszerusites ezert nem hivtak kulon nyelvnek es sokkal jobban oda kellett figyelni, hogy nehogy valami benasagot elkovessen az ember. A go-bol ezeket a lehetosegeket kiszedtek es cserebe jott egy csomo fejlesztesi kenyelmet szolgalo egyszerusites.
ps: A programozas elmelete egyszeru, egy klasszikus neumann gep altalaban a kovetkezoket tudja:
-aritmetikai muveletek: osszeadas, kivonas, szorzas, osztas, maradekkepzes
-logikai muveletek: es, vagy, nem, kizaro vagy
-osszehasonlitas: egyenlo, nem egyenlo, kisebb, nagyobb, kisebb egyenlo, nagyobb egyenlo
-felteteles es feltetel nelkuli vezerlesatadas: menj oda (goto), ha-akkor-egyebkent (if-then-else)
-memoria irasa es olvasasa: ertekadas es valtozok (let, var)
-adatformatumok kezelese: valtozotipusok (egesz, lebegopontos, byte, stb.)
Az osszes tobbi bonyolult programozasi szerkezet es elv ezekbol az alapelvekbol szarmazik es az egeszet le lehet bontai a fenti elemekre. (erre valok a forditoprogramok es a programnyelvek, csak az utobbi idoben valahol a szabvanyositoknak sikerult elveszteniuk a fonalat es az uj szabvanyokat kovetve bonyolultabb megirni valamit mint a regieket hasznalva)