Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14293|Atsakyti: 2

[C] C kalba yra tokia galinga, kokia kalba ji parašyta?

[Kopijuoti nuorodą]
Paskelbta 2019-09-28 16:51:21 | | |
"Kokia kalba parašyta pati C?"

Žvelgiant iš kitos perspektyvos, tai yra: prieš paleidžiant C kalbą, ji turi būti kompiliuojama, taigi iš kur atsiranda C kalbos kompiliatorius? Kokia kalba jis parašytas? Jei parašyta pačiame C, ar pirmiausia yra kiaušinis ar višta?

1

Tarkime, kad pasaulyje nėra kompiliatorių, pradėkime nuo mašinų kalbos ir pažiūrėkime, kaip.

Mašinos kalba gali būti vykdoma tiesiogiai procesoriaus be kompiliatoriaus.

Tada yra asamblėjos kalba, nors asamblėjos kalba yra tik mašinų kalbos mnemonika, tačiau ją taip pat reikia kompiliuoti į mašininę kalbą, kad būtų galima vykdyti, todėl nėra kito pasirinkimo, kaip tik naudoti mašinų kalbą šiam pirmajam kompiliatoriui parašyti (nenaudojamas ateityje).

Asamblėjos kalbos problema išspręsta, ir tai yra didelis žingsnis į priekį, šiuo metu galima naudoti asamblėjos kalbą rašant C kalbos kompiliatorių, kuris, mūsų teigimu, yra C kompiliatoriaus protėvis.

Su šiuo protėviu galite kompiliuoti bet kurią C kalbos programą, taigi ar galite parašyti kompiliatorių pačia C kalba? Tiesiog sudarykite jį su protėviais.

Gerai, po tokio sluoksnio pagaliau gavau kompiliatorių, parašytą C kalba, o tai tikrai vargina.

Šiuo metu galima atsisakyti ankstesnio paketo parašyto C kompiliatoriaus.

Žinoma, jei prieš C buvo kitų aukšto lygio kalbų, tokių kaip Pascal, tada Pascal galėjo būti naudojamas C kompiliatoriui parašyti.

Teigiama, kad pirmojo Paskalio sudarytojas buvo parašytas Fortrane. Kaip pirmoji aukšto lygio kalba, Fortran kompiliatorius turėtų būti parašytas asamblėjos kalba.

2

Štai įdomi legenda apie kompiliatorių:

Legenda pasakoja, kad Ken Thompson, vienas iš Unix išradėjų, swaggered į bet Unix mašina Bell Labs, įvedė savo vartotojo vardą ir slaptažodį, ir galėjo prisijungti šakniniu būdu!

Bell Labs yra pilnas talentų, ir kai kurie kiti dideli buliai pažadėjo rasti šį pažeidžiamumą, jie perskaitė Unix C šaltinio kodą ir galiausiai rado prisijungimo užpakalines duris, o išvalę užpakalines duris, jie sukompiliavo Unix ir paleido, bet Thompson vis tiek galėjo prisijungti.

Kai kurie žmonės mano, kad gali kilti problemų su kompiliatoriumi, o kompiliuojant Unix buvo implantuotos užpakalinės durys, todėl jie perrašė kompiliatorių C ir vėl kompiliavo Unix su nauju kompiliatoriumi.

Bet jis vis dar neveikia, Thompson vis dar gali prisijungti su root, kuris yra tikrai pražūtingas!

Vėliau pats Thompsonas atrakino paslaptį, tai buvo pirmasis C kompiliatorius, turintis problemų, šis kompiliatorius, žinoma, bus implantuotas į užpakalines duris kompiliuojant Unix šaltinio kodą, to nepakanka, kas dar geriau, jei parašysite naują kompiliatorių C kalba, būtinai turite jį kompiliuoti į dvejetainį kodą, ką kompiliuoti, kompiliuoti naudokite tik pirmąjį Thompsono parašytą kompiliatorių, gerai, jūsų parašytas kompiliatorius bus užterštas, jūsų kompiliatorius vėl sukompiliuos Unix, Taip pat implantuos užpakalines duris :-)

Kalbant apie tai, man primena prieš kelerius metus įvykusį "XcodeGhost" incidentą, o tai tiesiog reiškia, kad "Xcode" buvo implantuotas Trojos arklys (atsisiųstas iš neoficialių kanalų), todėl "XCode" sudarytos "iOS" programos buvo užterštos, o šias programas įsilaužėliai galėjo naudoti neteisėtiems dalykams atlikti.

Nors šis "XCodeGhost" toli gražu nėra "Thompson", jis primena, kad atsisiųsdami programinę įrangą turėtumėte naudoti oficialius kanalus, atsisiųsti iš oficialios svetainės, ieškoti svetainės HTTPS standarto ir net patikrinti kontrolinę sumą.

3

Kai kurie žmonės gali paklausti: aš naudoju Hui parašyti Hello World pastraipą, bet kas nors gali naudoti jį parašyti sudėtingą kompiliatorių? Ar tai įmanoma?

Žinoma, kai buvo sukurta pirmoji Unix karta, C kalbos nebuvo, o Ken Thompson ir Dennis Ritchie spausdino Unix su surinkimo linijomis.   Pirmąją WPS versiją parašė Qiu Bojun Hui, o Turbo Pascal kompiliatorių taip pat parašė Andersas Hui, o dievų sugebėjimai paprastiems žmonėms neįsivaizduojami.

Kompiliatoriams taip pat galima vystytis "sniego gniūžtės" būdu:

Vis dėlto imant C kalbą kaip pavyzdį, pirmoji versija gali pasirinkti C kalbos poaibį, pvz., palaiko tik pagrindinius duomenų tipus, proceso valdymo sakinius ir funkcijų iškvietimus...... Šį poaibį vadiname C0.

Tada parašykite kompiliatorių asamblėjos kalba ir gaukite tik šios kalbos C0 poaibį, kad būtų daug lengviau rašyti.

C0 kalba veikia, o tada išplečiame šį poaibį pridėdami struktūras, rodykles ...... ir pavadindami naują kalbą C1.

Kas rašo C1 kalbos kompiliatorių?   Natūralu, kad tai yra C0.

Kai C1 veikia, dar kartą išplėskite kalbos funkcijas, parašykite kompiliatorių C1 ir gaukite C2.

Tada yra C3, C4......  Galiausiai gausite visą C kalbą.

Šis procesas vadinamas bootstrapping, o kinų kalba - bootstrapping.





Ankstesnis:Naujos .NET Core funkcijos išleidžia vieno failo vykdomąjį failą
Kitą:Kodėl programuotojai dirba begalę viršvalandžių?
Paskelbta 2019-09-29 09:27:54 |
Kokia kalba parašytas pats C?
Paskelbta 2019-10-01 23:54:34 |
Kokia kalba parašytas pats C?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com