Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 14293|Válasz: 2

[C] A C nyelv olyan erős, milyen nyelven van írva?

[Linket másol]
Közzétéve 2019. 09. 28. 16:51:21 | | |
"Milyen nyelven van írva a C?"

Más nézőpontból ez az: mielőtt a C nyelv futna, le kell fordítani, akkor honnan származik a C nyelv fordítója? Milyen nyelven van írva? Ha maga C-vel van írva, először tojás vagy csirke van?

1

Tegyük fel, hogy a világon nincsenek fordítók, kezdjük a gépi nyelvvel, és nézzük meg, hogyan.

A gépi nyelvet közvetlenül a CPU futtathatja lefordító nélkül.

Aztán ott van az assembly nyelv, bár az assembly nyelv csak egy memória a gépnyelvre, de a végrehajtáshoz gépnyelvre is le kell fordítani, így nincs más választás, mint gépi nyelvet használni az első fordítógép megírásához (amit a jövőben nem használnak).

Az assembly nyelv problémája megoldódott, és ez nagy előrelépés, jelenleg lehetséges az assembly nyelv segítségével megírni a C nyelvű fordítót, amelyet a C fordító elődjének nevezünk.

Ezzel az ősszel bármilyen C nyelvű programot lefordíthatsz, tehát lehet maga C nyelven is fordítót írni? Csak fordítsd össze az ősökkel.

Rendben, egy ilyen réteg után végre egy C nyelvű fordítót írtam, ami nagyon problémás.

Ezen a ponton az előző csomag által írt C fordító el lehet hagyni.

Természetesen, ha léteztek más magas szintű nyelvek a C előtt, például a Pascal, akkor Pascal segítségével C fordítót lehetne írni.

Az első Pascal összeállítóját állítólag Fortranban írták. Mint az első magas szintű nyelv, a Fortran fordítóját assembler nyelven kell írni.

2

Íme egy érdekes legenda a fordításról:

A legenda szerint Ken Thompson, az Unix egyik feltalálója, odasétált bármelyik Unix géphez a Bell Labs-ban, beírta a felhasználónevét és jelszavát, és be tudott jelentkezni a gyökér módon!

A Bell Labs tele van tehetséggel, és néhány más nagy ügy is megfogadta, hogy megtalálja ezt a sebezhetőséget, átolvasták a Unix C forráskódját, végül megtalálták a bejelentkezési hátsó ajtót, majd miután kitakarították a hátsó ajtót, lefordították a Unixot és futtatták, de Thompson még mindig be tudott jelentkezni.

Egyesek úgy gondolják, hogy a fordítóval lehet probléma, és Unix fordítása során egy hátsó ajtót ültettek be, ezért újraírtak egy C-fordítást, és újra egy új fordítóval fordították le Unixot.

De ez még mindig nem működik, Thompson még mindig be tud jelentkezni roottal, ami nagyon összetörő!

Később maga Thompson feloldotta a titkot, ez volt az első C fordító, amivel problémát okozott, ez a fordító természetesen a hátsó ajtóba kerül Unix forráskód fordításakor, ez nem elég, ami még jobb, ha új fordítót írsz C nyelven, mindenképp bináris kódba kell fordítanod, mit kell fordítani, csak az első Thompson által írt fordítót használd a fordításhoz, rendben, a fordítód szennyezett lesz, a fordítód újra Unix-ot fordít, Hátsó ajtót is beültetek :-)

Eszembe jutott az XcodeGhost incidens néhány évvel ezelőtt, ami egyszerűen azt jelenti, hogy egy trójai falót ültettek be az Xcode-ba (nem hivatalos csatornákról letöltötték), így az XCode által összefordított iOS alkalmazások szennyezettek voltak, és ezeket az alkalmazásokat hackerek illegális dolgokra használhatták.

Bár ez az XCodeGhost messze áll a Thompsonétól, emlékeztet minket arra, hogy szoftverletöltéskor hivatalos csatornákat kell használni, letölteni a hivatalos weboldalról, keresni a weboldal HTTPS szabványát, sőt ellenőrizni az ellenőrző összeget is.

3

Néhányan megkérdezhetik: Én Hui-val írok egy Hello World bekezdést, de valaki képes vele összetett fordítót írni? Ez lehetséges?

Természetesen, amikor az első generáció Unixet fejlesztették, nem volt C nyelv, és Ken Thompson és Dennis Ritchie gépeltek Unix-et összeszerelő vonalakkal.   A WPS első változatát Qiu Bojun írta Hui-ban, a Turbo Pascal összeállítóját is Anders írta Hui-ban, és az istenek képességei elképzelhetetlenek a hétköznapi emberek számára.

A fordítók esetében "hógolyó" módon is fejleszthetők:

A C nyelvet példaként veszve: az első verzió választhat egy részhalmazt a C nyelvből, például csak az alapvető adattípusok, folyamatvezérlő utasítások és függvényhívások támogatása...... Ezt az alhalmazt C0-nak hívjuk.

Ezután írjunk egy fordítót assembly nyelven, és csak egy részhalmazt kapjunk ebből a nyelvből, C0, így sokkal könnyebb legyen írni.

A C0 nyelv működik, majd ezt az részhalmazt bővítjük structok, mutatók, ...... hozzáadásával, és az új nyelv C1-nek nevezésével.

Ki írja a C1 nyelv fordítóját?   Természetesen C0.

Amikor a C1 működik, bővítsd ki újra a nyelvi funkciókat, írd meg a fordítót C1-gyel, és kapd meg a C2-t.

Aztán ott van a C3, C4......  Végül megkapod a teljes C nyelvet.

Ezt a folyamatot bootstrappingnek hívják, kínaiul pedig bootstrappingnek.





Előző:Az új .NET Core funkciók egy egyfájlos futtatható fájlt adnak ki
Következő:Miért dolgoznak a programozók végtelen túlórázásban?
Közzétéve 2019. 09. 29. 9:27:54 |
Milyen nyelven írják magukat a C?
Közzétéve 2019. 10. 01. 23:54:34 |
Milyen nyelven írják magukat a C?
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com