Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14293|Odpověď: 2

[C] Jazyk C je tak silný, v jakém jazyce je napsán?

[Kopírovat odkaz]
Zveřejněno 28.09.2019 16:51:21 | | |
"V jakém jazyce je samotné C napsáno?"

Z jiného pohledu je to tak: než se jazyk C spustí, musí být zkompilován, takže odkud pochází překladač jazyka C? V jakém jazyce je napsáno? Pokud je to napsáno přímo v C, je nejdřív vejce nebo slepice?

1

Předpokládejme, že na světě nejsou žádné kompilátory, začněme strojovým jazykem a uvidíme, jak to půjde.

Strojový jazyk může být přímo vykonán CPU bez potřeby kompilátoru.

Pak je tu assembler, i když assembler je pouze mnemotechnická pomůcka pro strojový jazyk, ale také musí být zkompilován do strojového jazyka pro jeho vykonání, takže není jiná možnost než použít strojový jazyk k napsání tohoto prvního kompilátoru (který v budoucnu nebude použit).

Problém assembleru je vyřešen a je to velký krok vpřed, v této době je možné použít assembler k napsání C jazykového kompilátoru, který považujeme za předchůdce C překladače.

S tímto předkem můžete zkompilovat jakýkoli program v jazyce C, takže můžete napsat kompilátor přímo v jazyce C? Prostě to zkompilujte s předky.

OK, po takové vrstvě jsem konečně dostal kompilátor napsaný v C, což je opravdu problém.

V tomto bodě lze C kompilátor napsaný předchozím balíčkem opustit.

Samozřejmě, pokud existovaly jiné vysoce úrovňové jazyky před C, například Pascal, pak by Pascal mohl být použit k napsání C kompilátoru.

Říká se, že kompilátor prvního Pascalu byl napsán ve Fortranu. Jako první vysokoúrovňový jazyk by měl být kompilátor Fortranu napsán v assembleru.

2

Tady je zajímavá legenda o kompilátoru:

Legenda praví, že Ken Thompson, jeden z vynálezců Unixu, se přiblížil k jakémukoliv unixovému stroji v Bell Labs, zadal své uživatelské jméno a heslo a mohl se přihlásit pomocí rootu!

Bell Labs je plné talentu a někteří další velcí býci slíbili, že tuto zranitelnost najdou, pročetli si zdrojový kód Unixu v C a nakonec našli zadní vrátka pro přihlašování, a po vyčištění zadních vrátek zkompilovali Unix a spustili ho, ale Thompson se stále dokázal přihlásit.

Někteří lidé si myslí, že může být problém s kompilátorem, a při kompilaci Unixu byla implantována zadní vrátka, takže přepsali kompilátor v C a znovu zkompilovali Unix s novým kompilátorem.

Ale pořád to nefunguje, Thompson se může přihlásit přes root, což je opravdu demotivující!

Později Thompson sám odemkl tajemství, byl to první C kompilátor, který měl problém, tento kompilátor bude samozřejmě implantován do zadních vrátek při kompilaci unixového zdrojového kódu, to nestačí, a co je ještě lepší, pokud napíšete nový kompilátor v jazyce C, rozhodně ho musíte zkompilovat do binárního kódu, co kompilovat, použijte jen první kompilátor napsaný Thompsonem, dobře, kompilátor, který jste napsali, bude znečištěný, váš kompilátor znovu zkompiluje Unix, Také implantuju zadní vrátka :-)

Když už o tom mluvíme, připomíná mi incident XcodeGhost před několika lety, což jednoduše znamená, že do Xcode byl implantován trojský kůň (stažený z neoficiálních kanálů), takže iOS aplikace kompilované XCode byly kontaminovány a tyto aplikace mohly být hackery zneužity k nelegálním činnostem.

Ačkoliv je tento XCodeGhost daleko od Thompsonov, připomíná nám, že při stahování softwaru byste měli používat formální kanály, stáhnout z oficiálních webových stránek, hledat HTTPS standard webu a dokonce ověřit kontrolní součet.

3

Někteří lidé se mohou ptát: Používám Hui k napsání odstavce Hello World, ale někdo ho může použít k napsání složitého kompilátoru? Je to možné?

Samozřejmě, když byla vyvíjena první generace Unixu, neexistoval žádný jazyk C a Ken Thompson a Dennis Ritchie psali Unix pomocí assemblerových linií.   První verzi WPS napsal Qiu Bojun v Hui a kompilátor Turbo Pascal také napsal Anders v Hui, a schopnosti bohů jsou pro běžné lidi nepředstavitelné.

U kompilátorů je také možné vyvíjet "sněhovou koulí" formou:

Stále jako příklad jazyka C může první verze zvolit podmnožinu jazyka C, například podporovat pouze základní datové typy, příkazy řízení procesů a volání funkcí...... Tuto podmnožinu nazýváme C0.

Pak napište kompilátor v assembleru a získáte pouze podmnožinu tohoto jazyka C0, aby bylo mnohem snazší jej napsat.

Jazyk C0 funguje, a pak tuto podmnožinu rozšiřujeme přidáním struktur, ukazatelů ...... a voláním nového jazyka C1.

Kdo píše kompilátor pro jazyk C1?   Samozřejmě je to C0.

Když C1 funguje, znovu rozšířte funkce jazyka, napište kompilátor pomocí C1 a získejte C2.

Pak je tu C3, C4......  Nakonec dostanete plný jazyk C.

Tento proces se nazývá bootstrapping, v čínštině bootstrapping.





Předchozí:Nové funkce .NET Core vydávají spustitelný soubor s jedním souborem
Další:Proč programátoři pracují nekonečně přesčas?
Zveřejněno 29.09.2019 9:27:54 |
V jakém jazyce je samotné C napsáno?
Zveřejněno 01.10.2019 23:54:34 |
V jakém jazyce je samotné C napsáno?
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com