A C++ alacsony, vagy magas szintű nyelv?
"És találtam olyan oldalt is, ahol az assembly-t is magas, vagy közepes szintűnek írják, és csak a gépi kódot írják alacsony szintűnek."
Ez már a humor kategóriája. :))
Ahogy írták előttem, a határok nem egzaktak. (Mint ahogy egyébként az elméleti informatikában nagyon sok minden nem az.)
Én egyértelműen magas szintűnek tartom. Alacsony szintűek azok, amik meglehetősen gépközeliek. Azok, amiknek a használatához komolyabban ismerni kell a számítógép architektúráját. Mondjuk az Assembly ilyen. Ott ha nem ismered a proci regisztereit, akkor elbuktál. Még a ciklusszervezést is neked kell megoldanod, mert nincs benne pl. számlálós ciklus, csak összehasonlító és ugró utasítások. De például a Forth már véleményes, hogy hová soroljuk. Veremközeli nyelv, azért nem árt, ha tud az ember alacsonyabb szinten gondolkozni, de nem kell már hozzá ismerni a proci lelkivilágát. Viszont azért a vezérlési szerkezetei sokkal elemibbek, mint mondjuk C++-ban. Én inkább az alacsony szintűekhez soktam sorolni.
A C++ pedig nagyon komoly, magas szintű eszkzöket kínál. A C-nél még talán lehetett vitatkozni, hogy alacsony szintű-e, bár a Forth-szal, vagy az Assemblyvel összehasonlítva egyáltalán nem tűnik alacsony szintűnek. Annyiban alacsony szintű, hogy néha mutatókkal kell babrálni benne, meg nincs normális stringkezelés, de ez minden. C++-ban meg még ennyi "alacsony szintűség" sincs. Cserébe van OOP, ami azért nem az alacsony szintű nyelvek sajátja, meg ebből adódóan sok olyan dolog, amik a magas szintű nyelveknél szoktak előfordulni. Névterek, összetett adatszerkezetek, template-ek, stb.
Egyébként meg a világ nem fekete-fehér. ;-) Egyrészt az, hogy mi milyen szintű, abban is van némi szubjektív megítélés. Emellett: ez nem egy bináris dolog, hogy valami vagy ilyen, vagy olyan. Sokkal inkább egy folyamatos skála. Persze, fel lehetne osztani azt 3 részre is, alacsony, közepes, meg magas szint, de ugyanezen problémák továbbra is fenn fognak állni.
lehetne a szinteket számmal jelezni, és akkor meg lenne oldva.
1. áramkör, elektronok, kapcsolók
2. hardver
3. gépi kód
4. assembly
5. C, C++ egyes elemei
6. és akkor itt mégtöbb elem
...
9. javascript, CSS, HTML5
#1 "illetve a compile során előállt bináris nem cross-platform."
Ez egyáltalán nem kitétel. Ez leginkább attól függ, hogy az adott nyelvet (pontosabban annak az adott implementációját) milyen módszerrel valósáítják meg. Fordítóval? Értelmezővel? Köztes kóddal? A Java "bináris" még csak nem is fog tudni elfutni, ha nincs külön feltelepítve az adott platformra natívan megírt JAva értelmező.
#2 "a fordított kód "szinte olyan" mintha assembly-ben írták volna"
Nem mondom magam egy Assembly-mesternek, de azért párezer Assembly-kódsor már kikerült a kezeim közül. Azt meg, hogy hányszor fordítottam vissza programokat, programrészeket, és elemeztem, hogy elemi szinten mit hogyan fordít, nem akarom megszámolni. Sok száz, de talán még sok ezer óra is, ha a régi C64-es, meg DOS-os korszakokat is beleveszem. Nos, a C fordítók bár tudnak nagyon jó kódot generálni, de azért távolról sem egy Assembly. Tele van tök felesleges utasításokkal, meg néha már-már ezoterikus, ahogy egyébként tök egyszerűen megoldható dolgokat fordít.
"bizonyos egyszerűbb dolgok, pl. összeadás, nem sokkal lassabb, mint assemblyben"
Azért az összeadás az tipikusan egy olyan dolog, amin nem lehet sokat cifrázni. (Mármint az egész számok összeadására gondolok.)
#8 "Ahhoz, hogy Assembly-ben olyan szinten tudj hatékony kódot írni elég pengének kell lenni"
Ez tény.
De ez igazából mindenről elmondható. Helyesebb úgy fogalmazni, hogy XY nyelvben POTENCIÁLISAN gyorsabb kódokat lehet írni. Hogy ténylegesen milyen lesz a program hatékonysága, az nagyban múlik a programozó képességein. Egyszer egy magát webfejlesztőnek valló csávónál láttam olyan weboldalt, ahol egy kb. 400×300-as képet úsztatott be középre. De ezt úgy oldotta meg, hogy másodpercekre befagyott tőle a gépem. :D
"valami nem stimmel, mert régebben mindenhol alacsony szintűnek írták a C++-ot"
Mindenhol?
Én sehol nem láttam, hogy annak írták volna.
A C-nél láttam egy-két fórumposztban, hogy alacsonynak mondják, de komolyabb szakirodalmakban nem. Vagy magas szintűnek mondták, megjegyezve, hogy vannak gépközeli lehetőségei is, vagy valahová az alacsony, és a magas szint közé pozícionálták. De a C++-t én sehol nem láttam alacsony szintűnek említeni.
"És találtam olyan oldalt is, ahol az assembly-t is magas, vagy közepes szintűnek írják"
Jó, én meg láttam olyan oldalt, ami szerint a Föld lapos (más oldal szerint meg üreges), és olyat is, ami szerint sem a Balaton, sem Ausztrália nem létezik.
Az internet egyik hatalmas nagy előnye pont az egyik hátránya is. Bárki bármit leírhat ellenőrzés nélkül. Ezért kell mindig némileg szkeptikusnak lenni, és az állítások hitelességének legalább alapszinten utánajárni.
8. névterek, OOP, előre megírt függvények
De ez csak egy példa.
"lehetne a szinteket számmal jelezni, és akkor meg lenne oldva."
Erre írtam, hogy ez sokkal inkább egy skála, mintsem egy binárisan rendszer. Bár a számkategóriákkal is rengeteg probléma lenne, és talán még több vita lenne, hogy mit hová kellene besorolni. Ugyanis bőven vannak véleményes dolgok.
Ráadásul ha programozási nyelvekről beszélünk, akkor mit keres ott a hardver? És mit keres ott a HTML?
"és akkor meg lenne oldva"
Szerintem meg a megoldás az, hogy nem filozofálunk túl olyan dolgokat, amiket tök felesleges. Teljesen mindegy, hogy kik minek mondják mondjuk a C++-t, attól én nem fogom másképp használni, és a lehetőségei sem lesznek mások attól, ha XY alacsonynak, vagy magasnak mondja.
Gépi kódhoz képest magas, modern managed nyelvekhez képest alacsony.
Ennyi, nincs ebben túl nagy rocket science.
További 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!