Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14293|Risposta: 2

[C] La lingua C è così potente, in che lingua è scritta?

[Copiato link]
Pubblicato su 28/09/2019 16:51:21 | | |
"In quale lingua è scritta la C stessa?"

Da un'altra prospettiva, lo è: prima che il linguaggio C venga eseguito, deve essere compilato, quindi da dove proviene il compilatore del linguaggio C? In quale lingua è scritto? Se è scritto in C, c'è prima un uovo o una gallina?

1

Supponiamo che non esistano compilatori al mondo, iniziamo dal linguaggio macchina e vediamo come.

Il linguaggio macchina può essere eseguito direttamente dalla CPU senza la necessità di un compilatore.

Poi c'è il linguaggio assembly, anche se il linguaggio assembly è solo un mnemonico per il linguaggio macchina, ma deve anche essere compilato in linguaggio macchina per essere eseguito, quindi non c'è altra scelta che usare il linguaggio macchina per scrivere questo primo compilatore (che non sarà più utilizzato in futuro).

Il problema del linguaggio assembly è risolto, ed è un grande passo avanti; al momento è possibile usare il linguaggio assembly per scrivere il compilatore del linguaggio C, che diciamo essere l'antenato del compilatore C.

Con questo antenato, puoi compilare qualsiasi programma in linguaggio C, quindi puoi scrivere un compilatore direttamente in linguaggio C? Compilalo semplicemente con gli antenati.

OK, dopo un livello del genere, finalmente sono riuscito a scrivere un compilatore in C, il che è davvero problematico.

A questo punto, il compilatore C scritto dal pacchetto precedente può essere abbandonato.

Naturalmente, se c'erano altri linguaggi di alto livello prima di C, come Pascal, allora Pascal poteva essere usato per scrivere un compilatore C.

Si dice che il compilatore del primo Pascal sia stato scritto in Fortran. Essendo il primo linguaggio di alto livello, il compilatore di Fortran dovrebbe essere scritto in linguaggio assembly.

2

Ecco una leggenda interessante sul compilatore:

La leggenda narra che Ken Thompson, uno degli inventori di Unix, si avvicinava con sicurezza a qualsiasi macchina Unix ai Bell Labs, inserisse il suo nome utente e la password, e potesse accedere in modo root!

Bell Labs è pieno di talento, e altri grandi campioni hanno giurato di trovare questa vulnerabilità, hanno letto il codice sorgente C di Unix, e alla fine hanno trovato la backdoor di accesso, e dopo averla pulita, hanno compilato Unix e l'hanno eseguito, ma Thompson è comunque riuscito ad accedere.

Alcuni pensano che ci possa essere un problema con il compilatore, e che durante la compilazione di Unix sia stata impiantata una backdoor, quindi hanno riscritto un compilatore in C e compilato di nuovo Unix con un nuovo compilatore.

Ma comunque non funziona, Thompson può ancora accedere con root, il che è davvero devastante!

Successivamente, Thompson stesso sbloccò il segreto, fu il primo compilatore C ad avere un problema, questo compilatore ovviamente verrà impiantato nella backdoor quando si compila il codice sorgente Unix, questo non basta, cosa ancora meglio, se scrivi un nuovo compilatore in linguaggio C, devi assolutamente compilarlo in codice binario, cosa compilare, usa solo il primo compilatore scritto da Thompson per compilare, ok, il compilatore che hai scritto sarà inquinato, il tuo compilatore compilerà di nuovo Unix, Impianterò anche una backdoor :-)

A proposito, mi viene in mente l'incidente di XcodeGhost di qualche anno fa, che significa semplicemente che un cavallo di è stato impiantato in Xcode (scaricato da canali non ufficiali), così che le app iOS compilate da XCode sono state contaminate, e queste app potrebbero essere usate dagli hacker per compiere azioni illegali.

Anche se questo XCodeGhost è lontano da quello di Thompson, ci ricorda che quando si scarica software, bisogna utilizzare canali formali, scaricare dal sito ufficiale, cercare lo standard HTTPS del sito e persino verificare il checksum.

3

Alcuni potrebbero chiedersi: uso Hui per scrivere un paragrafo Hello World, ma qualcuno può usarlo per scrivere un compilatore complesso? È possibile?

Naturalmente, quando fu sviluppata la prima generazione di Unix, non esisteva il linguaggio C, e Ken Thompson e Dennis Ritchie scrivevano Unix con le linee assembly.   La prima versione di WPS fu scritta da Qiu Bojun in Hui, e il compilatore di Turbo Pascal fu anch'esso scritto da Anders in Hui, e le abilità degli dèi sono inimmaginabili per la gente comune.

Per i compilatori, è anche possibile sviluppare in modo "snowball":

Prendendo comunque come esempio il linguaggio C, la prima versione può scegliere un sottoinsieme del linguaggio C, ad esempio supportando solo tipi di dati base, istruzioni di controllo di processo e chiamate di funzione...... Chiamiamo questo sottoinsieme C0.

Poi scrivi un compilatore in linguaggio assembly, e ottieni solo un sottoinsieme di questo linguaggio C0, così da scrivere molto più facilmente.

Il linguaggio C0 funziona, poi estendiamo questo sottoinsieme aggiungendo struct, puntatori ...... e chiamando il nuovo linguaggio C1.

Chi scrive il compilatore per il linguaggio C1?   Naturalmente, è C0.

Quando C1 funziona, espandi di nuovo le funzionalità del linguaggio, scrivi il compilatore con C1 e ottieni C2.

Poi ci sono C3, C4......  Infine, ottieni il linguaggio completo della C.

Questo processo si chiama bootstrapping, e in cinese si chiama bootstrapping.





Precedente:Le nuove funzionalità di .NET Core rilasciano un eseguibile a singolo file
Prossimo:Perché i programmatori lavorano straordinari senza fine?
Pubblicato su 29/09/2019 09:27:54 |
In quale linguaggio è scritto il C stesso?
Pubblicato su 01/10/2019 23:54:34 |
In quale linguaggio è scritto il C stesso?
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com