Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 14293|Antwoord: 2

[C] De C-taal is zo krachtig, in welke taal is het geschreven?

[Link kopiëren]
Geplaatst op 28-09-2019 16:51:21 | | |
"In welke taal is C zelf geschreven?"

Vanuit een ander perspectief is het: voordat de C-taal draait, moet deze gecompileerd zijn, dus waar komt de C-taal compiler vandaan? In welke taal is het geschreven? Als het in C zelf geschreven is, is er dan eerst een ei of een kip?

1

Laten we aannemen dat er geen compilers in de wereld zijn, laten we beginnen met machinetaal en kijken hoe.

Machinetaal kan direct door de CPU worden uitgevoerd zonder dat er een compiler nodig is.

Dan is er assemblertaal, hoewel assembleertaal slechts een ezelsbruggetje is voor machinetaal, maar het moet ook worden gecompileerd naar machinetaal om uit te voeren, dus er is geen andere keuze dan machinetaal te gebruiken om deze eerste compiler te schrijven (die in de toekomst niet meer wordt gebruikt).

Het probleem van assemblytaal is opgelost, en het is een grote stap vooruit; op dit moment is het mogelijk om assemblytaal te gebruiken om de C-taalcompiler te schrijven, waarvan wij zeggen dat die de voorloper is van de C-compiler.

Met deze voorloper kun je elk C-taalprogramma compileren, dus kun je een compiler schrijven in de C-taal zelf? Complimeer het gewoon met de voorouders.

Oké, na zo'n laag heb ik eindelijk een compiler geschreven in C, wat echt lastig is.

Op dit punt kan de C-compiler die door het vorige pakket is geschreven, worden opgegeven.

Natuurlijk, als er andere hoog-niveau talen vóór C waren, zoals Pascal, dan kon Pascal worden gebruikt om een C-compiler te schrijven.

De samensteller van de eerste Pascal zou in Fortran zijn geschreven. Als eerste hoge-niveau taal zou Fortrans compiler in assemblytaal geschreven moeten zijn.

2

Hier is een interessante legende over de compiler:

Volgens de legende liep Ken Thompson, een van de uitvinders van Unix, naar elke Unix-machine bij Bell Labs, voerde zijn gebruikersnaam en wachtwoord in en kon hij via de root-route inloggen!

Bell Labs zit vol talent, en een paar andere grote mensen zwoeren deze kwetsbaarheid te vinden, ze lazen de C-broncode van Unix en vonden uiteindelijk de login-backdeur, en na het schoonmaken van de backdeur compileerden ze Unix en draaiden het, maar Thompson kon nog steeds inloggen.

Sommige mensen denken dat er een probleem kan zijn met de compiler, en dat er een achterdeur is geïmplanteerd bij het compileren van Unix, dus hebben ze een compiler in C herschreven en Unix opnieuw gecompileerd met een nieuwe compiler.

Maar het werkt nog steeds niet, Thompson kan nog steeds inloggen met root, wat echt verwoestend is!

Later ontgrendelde Thompson zelf het geheim, het was de eerste C-compiler met een probleem, deze compiler zal natuurlijk in de achterdeur worden geïmplanteerd bij het compileren van Unix-broncode, dit is niet genoeg, wat nog beter is, als je een nieuwe compiler in de C-taal schrijft, moet je die zeker compileren naar binaire code, wat je moet compileren, gebruik alleen de eerste compiler die Thompson schreef om te compileren, oké, de compiler die je schreef zal vervuild zijn, je compiler zal Unix opnieuw compileren Ik zal ook een achterdeur implanteren :-)

Over gesproken, ik moet denken aan het XcodeGhost-incident een paar jaar geleden, wat simpelweg betekent dat er een Trojaans paard in Xcode is geïmplanteerd (gedownload via onofficiële kanalen), zodat de iOS-apps die door XCode zijn gecompileerd besmet waren, en deze apps door hackers gebruikt konden worden voor illegale doeleinden.

Hoewel deze XCodeGhost ver van Thompson afstaat, herinnert het ons eraan dat je bij het downloaden van software formele kanalen moet gebruiken, van de officiële website moet downloaden, de HTTPS-standaard van de website moet zoeken en zelfs de checksum moet verifiëren.

3

Sommige mensen vragen misschien: Ik gebruik Hui om een Hello World-paragraaf te schrijven, maar iemand anders kan het gebruiken om een complexe compiler te schrijven? Is dit mogelijk?

Natuurlijk was er bij de ontwikkeling van de eerste generatie Unix geen C-taal, en typten Ken Thompson en Dennis Ritchie Unix uit met assemblagelijnen.   De eerste versie van WPS werd geschreven door Qiu Bojun in Hui, en de samensteller van Turbo Pascal werd ook geschreven door Anders in Hui, en de vaardigheden van de goden zijn voor gewone mensen ondenkbaar.

Voor compilers is het ook mogelijk om op een "sneeuwbal"-manier te ontwikkelen:

Nog steeds als voorbeeld van de C-taal kan de eerste versie een subset van de C-taal kiezen, zoals alleen het ondersteunen van basisdatatypes, procescontrole-instructies en functieaanroepen...... We noemen deze deelverzameling C0.

Schrijf dan een compiler in assemblytaal, en krijg slechts een deelverzameling van deze taal C0, zodat het veel makkelijker te schrijven is.

De C0-taal werkt, en vervolgens breiden we deze subset uit door structs, pointers, ...... toe te voegen en de nieuwe taal C1 aan te roepen.

Wie schrijft de compiler voor de C1-taal?   Natuurlijk is het C0.

Wanneer C1 werkt, breid je de taalfuncties opnieuw uit, schrijf je de compiler met C1 en haal je C2 op.

Dan is er C3, C4......  Tot slot krijg je de volledige C-taal.

Dit proces heet bootstrapping, en in het Chinees wordt het bootstrapping genoemd.





Vorig:De nieuwe .NET Core-functies brengen een uitvoerbaar bestand uit met één bestand
Volgend:Waarom werken programmeurs eindeloos overuren?
Geplaatst op 29-09-2019 09:27:54 |
In welke taal wordt C zelf geschreven?
Geplaatst op 01-10-2019 23:54:34 |
In welke taal wordt C zelf geschreven?
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com