A középszintű programnyelvek (pl C++, Pascal) zöme assemblyben, és/vagy gépi kódban íródott, vagy gyakoribb az egymástól alapvetően eltérő nyelvek közötti cross-compiler megoldás? Vagy több nyelv kombója által készültek? Vagy szinte csak assemblyben?
Különösen a középszintű és általános célú nyelvek esetén érdekel mint C, C++, Pascal.
A félreértés elkerülésére jelzem:
alapvetően NEM a compiler illetve interpreter megoldások módjaira vonatkozik a kérdésem, hanem hogy pl aki feltalálta a Pascal nyelvet, miben írta meg? Assembly-ben? Gépi kódban? Máshogyan nem tudom elképzelni, mint ezek egyikében, vagy mindkettőben, esetleg jellemzőbb, hogy assembly ill gépi kód mellett inkább korábbi középszintű nyelvek evolúciója / továbbfejlesztése a jellemzőbb?
Elsősorban tehát általánoságban a középszintű és alacsony szintű nyelvekről szól a kérdésem, nem csak a Pascal-ról.
(Mellékkérdés: a magas szintű nyelvek mint pl a basic illetve fortran változatai: a gépi kód és assembly mellett -vagy helyett?- inkább más nyelvek által íródtak, utóbbiak továbbfejlesztése gyanánt? Ez mennyire általános vajon, ezeknél?)
De egyébként manapság nem igazán használják az assemblyt ilyesmire. Egyrészt, mert vannak jól használható, kiforrott eszközök (pl. a már említett OCAM, másrészt az assembly nem valami gyógyszer, amiből ha naponta kettőt bevesznek, akkor gyors lesz a kód. Assembly-ben is lehet rossz kódot írni, ugyanakkor ha valaki alaposan ismeri mondjuk a C nyelvet, tud olyan kódot írni, ami lehet annyira gyors, mint egy assembly kód.
Ráadásul a mai fordítók olykor hatékonyabb gépi kódot generálnak magasabb szintű programnyelvből, mint amit egy assembly programozó meg tud írni.
#10
"ezen nyelvek (B, BCPL, NB, C) fordítása úgy történt, hogy egy nagyon minimális assembly fordító lefordította a nyelv egy részhalmazát, épp annyit, amennyi elég volt ahhoz, hogy a nyelv onnantól self-hosted legyen."
Pontosan ez volt a sejtésem. Hiszen amikor még semilyen programnyelv nem létezett assembly-n ss gépi küdon kívül, akkor nyilván csak ezekben lehetett megírni prg-nyelveket.
Ezért vetettem fel, hogy talán idővel kominálták a nyelveket, újabb nyelvek létrehozásához (kvázi "evolúciósan").
#11 igen, erről olvastam, hogy idővel a processzorok architektúrája egyre inkább alkalmazkodott a középszintű nyelvek szerkezetéhez, ezért egyes esetkben C-ban hatékonyabb megoldás kivitelezhető, mint akár assembly-ben.
Te nagyon el vagy tévelyedve.
A programnyelveket nem írják semmiben.
Egy programnyelv az egy szabályhalmaz és kész.
Adott programnyelvnek csak a fordítóját, interpreterét írják valamilyen nyelven.
Amúgy, a borland pascal fordítója pl. 100 % assemblyben lett lefejlesztve.
A delphi korai verziói is nagyon sok asm kódrészt tartalmaztak.
A legtöbb nyelv fordítóját C-ben írták, mert a nyelv alkalmas volt rá és mert elég gyors lett a produktum, ami a régi gépeken még elsődleges szempont volt.
Az összetettebb programok a korai 5-16-25-40 MHz-es gépeken elég lassan, perceken át fordultak. Egy linux kernel fordítása 100 MHz-es 486-os gépen akár egy óráig is eltartott.
Megvan!
A programnyelveket BNF-ben, vagy EBNF-ben írják!
"Assembly-ben is lehet rossz kódot írni, ugyanakkor ha valaki alaposan ismeri mondjuk a C nyelvet, tud olyan kódot írni, ami lehet annyira gyors, mint egy assembly kód."
Ez feladatfüggő, plusz a fordítótól is függ.
Sima egymenetes C fordító elég shit kódot tud generálni, de az benne a jó, hogy asm kimenet generálódik, amit aztán lehet kézzel optimalizálni.
"Ráadásul a mai fordítók olykor hatékonyabb gépi kódot generálnak magasabb szintű programnyelvből, mint amit egy assembly programozó meg tud írni."
Ez meg hülyeség. A legjobban optimalizáló fordítók is nagyon korlátosak egy jó programozóhoz képest, mert a fordítók optimalizációs rutinjai sem képesek minden lehetőséget kihasználni, de az ember igen.
Apropos, BASIC!
Az első kereskedelmi basic-et, 8 bites mikrogépre, a Microsoft-os Bill Gates írta, 100 % assembly-ben, ráadásul papírra, 19 évesen.
Nem volt sem assemblere, sem gépe. Az Altair 88 00-át, amin később a basic futott, egy barátja emulálta le, egy PDP 10-es, három szekrény méretű gépen.
Az emulátor kb ötször lassabb volt a natív gépnél. Az Altair-ban intel 8080-as processzor dolgozott és legalább 4 kB memória kellett a basic futtatásához.
A procihoz volt egy doksija, ami tartalmazta az utasításkészletet és hozzá az opkódokat.
Akkoriban a programokat megírták asm-ben, de papírra és utána soronként lefordították gépi kódra, amit azután be kellett írni a gépbe (olykor mérnöki pulton) és onnan kimenteni valami adathordozóra a binárist.
Nagyon durva lehetett. Én apple I-et emuláltam (PC-n), amihez már volt billentyű, meg minden, benne futott az assembler/monitor, de még így is totál fapad volt.
Akkoriban tényleg csak a nagyon lelkesek maradtak hosszú távon gépközelben.
#12
"Pontosan ez volt a sejtésem. Hiszen amikor még semilyen programnyelv nem létezett assembly-n ss gépi küdon kívül, akkor nyilván csak ezekben lehetett megírni prg-nyelveket."
Igen, de ahogy írtam, a nyelv csak egy kis subsetjét volt szokás megírni assemblyben, magasabb rendű dolgokat nem. A kezdeti C egyébként is nagyon primitív volt, egy rakat dolog nem volt benne, ami később a nyelv része lett (char típus, long típus, többszörös pointer indirekció, for ciklus, stb.).
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!