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?)
Szerintem csak a legalapvetőbb funkciókat írják gépi kódban. Utána az így létrehozott parancsokra építve hoznak létre újabb magasabb rendű parancsokat és rutinokat
Mert miért is kéne az egészet gépi kódban megszívni?
#1 nem lehet, hogy a kérdésemet úgy érteted, mintha a programozás jellegéről szólna? Bocsi, lehet, hogy nem értetted félre, csupán tisztáznám.
Mindenesetre nem a prg-ozás jellegéről írtam ki a kérdésemet, hanem érdekel, hogy pl minden (szinte minden) Pascal parancs gépi kódban / assembly-ben készült?
Tehát nem arra vonatkozik a kérdésem, hogyan írunk pl Pascal programokat.
Hanem hogy pl maga a Pascal prg-ozási nyelv (és annak utasításai stb) hogyan jött létre, miből? Cak gépi kódokból / assembly-ből?
Vagy a középszintű programnyelvek, mint pl a Pascal inkább evolúció eredménye?
Általában kb hány %-a gépi kód / assembly a legtöbb középszintű
programnyelvnek?
Nem szőrszálhasogatásmból mondom, de félreértést elkerülendő, jelzem:
A Pascal program nem azonos a Pascal programnyelvvel,
épp úgy, ahogy
a beszélő robot szavai nem azonosak a beszélő robot beszédét megalkotó program nyelvvel.
Köszi az illetőnek, aki priviben válaszolt, de én nem arról írtam a kérdésem, hogy a fordítókat vajon miben írják. Hanem magukat a középszintű programNYELVEKET miben írják? Inkább csak assemblyben / gépi kódban vajon, vagy inkább "evolúciós" eredmény?
Tehát se nem programokról ( / szubrutinokról) szól a kérdésem, hogy vajon azokat miben írják, se nem fordítókról szól, hogy azokat vajon miben írják.
A programnyelveket nem írják semmiben sem, a programnyelv egy absztrakt fogalom. Amit te programnyelvnek nevezel, az minimum egy lexer/parser, tokenizer, compiler és/vagy interpreter együttmőködése.
Ezeket manapság valamilyen létező nyelven írják, de az ritkán assembly, jellemzően inkább C, C++, OCaml.
Aztán ha a nyelv fordított (kompilált), akkor egy idő múlva eléri azt a szintet, hogy a sajat fordítóját is meg lehet írni benne, onnantól az adott nyelv self-hosted. A Rustot pl. OCaml-ban kezdték el írni LLVM segítségével 2006-ban, és 2011-ben lett self-hosted.
"Ezeket manapság valamilyen létező nyelven írják, de az ritkán assembly, jellemzően inkább C, C++, OCaml"
Na de épp az a kérdésem lényege, hogy eredetileg milyen nyelven írták, tehát akkor a C-t milyen nyelven írták?
#6 tessék??
Programnyelvekről van szó. A C nyelvet miben írják meg? Assembly, gépi kód, más, vagy ezek kombói?
Egy compilert bármilyen nyelvben meg lehet írni. Az első compilerek gépi kódban voltak, majd a többi a korábban elkészült compilerek segítségével felsőbb rendű nyelvekben.
A FreePascal compilert pl Pascalban írták és le tudja fordítani önmagát.
Erre nehéz pontos választ adni.
Az első C compilert tulajdonképpen C nyelven írták. Itt az első ismert C fordító forrása: [link]
De az az igazság, hogy az akkori C nyelv eléggé különbözött még a korai K&R C-től is. Szintaktikailag a történet valahol az 1960-as években kezdődött, a TMG nyelvvel. Ken Thompson kifejlesztette a B nyelvet a TMG segítségével, abből kifejlesztették a BCPL-t, abból az NB-t (NewB-t). Nehéz pontos határvonalat húzni a B, az NB és a C között, főképp, mivel ezek a nyelvek folyamatosan formálódtak. Az NB pl. olyan rövid életű volt, hogy leírás sem készült róla.
Szóval az akkori C lehet, hogy közelebb állt a B-hez, ezért sok helyen azt lehet olvasni, hogy az C fordítót B nyelven írták. És ha azt olvasod, hogy az első C compilert assembly nyelven írták, abban is van igazság, ugyanis 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. Szóval mondhatod, hogy az első C fordítót assembly nyelven írták, de ez sem fedi le a teljes igazságot.
Az első Pascal fordítót FORTRAN nyelven írták, de az a történet nem volt túl sikeres, úgyhogy inkább átportolták egy C-stílusú nyelvre (Scallop), ezután a Pascal is elég gyorsan self-hosted lett.
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!