A C, C++, C#, Java nyelvek magas szintűek, vagy alacsony szintűek?
Azt kell tudni, hogy ezek nem egzakt fogalmak. Magas szintű egy nyelv, ha a számítógép – CPU műveletek, regiszterek, memóriacímek, vermek – működéséhez képest a nyelv elemei absztraháltabbak, elvontabbak, összetettebb változótípusokat, komplex típusokat (tömb, string, objektum), komplex műveleteket, objektumorientált nyelvi funkciókat tartalmaz, mint amit valójában a CPU használ, ami valójában történik a program futása közben. Sokkal függetlenebbek az adott architektúrától.
Alacsony szintű egy nyelv akkor, ha ez az absztrakció kisebb mértékű (vagy nem létezik). Általában egy adott architektúrához kötöttek.
Alacsony szintű mindenképpen a gépi kód önmagában, illetve mindenképpen ide sorolják az assembly nyelvet, nyelvjárásokat is.
A Java és a C# úgy általában mindenképpen magas szintűnek tekinthető. További nyelvek: Python, Basic, Delphi, Perl, PHP, javascript, stb… A Java maximum abból a szempontból lehet kakukktojás, hogy az absztrakciót a tényleges CPU-hoz, memóriához képest, vagy a virtuális gép sajátosságaihoz képest nézzük (amely virtuális gépet elvileg meg lehetne valósítani natív architektúraként is).
A C és még a C++ is kicsit kakukktojás, erősen nézőpont kérdése, hogy hova soroljuk őket. Mondjuk 10-15 éve a C még inkább sorolódott a magas szintű nyelvek közé, ma főleg a fent említett magas szintű nyelvekhez képest inkább tűnik alacsony szintűnek. Van absztrakció, de korántsem olyan mély, még mindig sokkal könnyebb megfeleltetni a C nyelv alapelemeit a CPU, memóriakezelés tényleges műveleteinek. Tehát önmagában erősen alacsony szintűek. De tartalmaznak olyan nyelvi lehetőségeket, amik igencsak magas szintűvé tudják tenni a bennük a programozást, mondjuk egy komplex matematikai függvénykönyvtárral, összetett adatstruktúrákkal, stb…
Kicsit olyan ez, mint az idős vs. fiatal. Egy 30 éves egy 14 éves szemében öregnek tűnik, míg egy 60 éves szempontjából fiatalnak. Vagy egy egér az emlős állatok többségéhez, mondjuk az emberhez képest kicsi, de a rovarokhoz, baktériumokhoz képest óriási.
Szerintem egyértelműen magas színtűek.
A c# ÉS JAVA MEG "MÉGINKÁBB"
"Még a C is teljesen platform független."
Míg forrás kód, addig igen. De lefordítva alig ha.
Kérdező: Ld. 1-es válasz. Ez eléggé relatív, anno, amikor engem tanítottak, akkor az Assembly volt az alacsony szintű, a C a magas, mert a C kód hordozható, tehát elméletben meg tudod csinálni, hogy egy forrásfát le tudsz fordítani pl. x86-64 és ARM architektúrára, és menni fog. Más kérdés, hogy a gyakorlatban több architektúra támogatása egy nagyobb rendszer esetén igen csak erőforrás (mérnökóra) igényes művelet. Ezzel megválaszoltam a "mérnemjönki a kedvenc xbox-os játékom gépre" c. kérdést.
A C# és a Java magas szintű nyelvek, ám mint ahogy az 1.-es mondta, mindkettő mögött virtuális gép van (CIL illetve JVM), és a virtuális gép utasításait követi a nyelv megvalósítása.
A C++-t még magas szintű nyelvnek mondanám, mivel támogat objektumorientált kifejezéseket, pl. osztály, öröklődés, polimorfizmus, és vannak magas szintű adatstruktúrák, pl. std::vector, vagy string.
A C eggyel alacsonyabb szintű, hiszen objektumorientáltságot nem támogat (ANSI C-ről beszélünk, lehet, hogy újabb C nyelvekben már benne van), az adatstruktúrákat általában kézzel kell megírnod, (beleértve a stringet is -> /NUL terminált ASCII karakterek "tömbje", ahol "tömb" = egymás utáni memóriacímek tartalma. A tömb változó az első memóriacím re mutató mutató.)
És bár igaz, hogy van C fordító mikrovezérlőre, és modern mikroprocesszorokra is, kétlem, hogy egy összetettebb, x86-64-es mikroprocesszorra írt programot triviális lenne mikrovezérlőre (általában 16 bit) portolni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!