Come è stato scritto il primo compilatore?


166

Ho sentito parlare del pollo, dell'uovo e del bootstrap. Ho alcune domande.

Cosa ha scritto il primo compilatore che ha convertito qualcosa in istruzioni binarie?

L'assemblaggio è compilato o tradotto in istruzioni binarie?

... Troverei difficile credere che abbiano scritto un compilatore in binario.



@nawfal, fa la differenza tra un nuovo linguaggio di programmazione e il primo compilatore, quindi no - non è un duplicato

@PauliSudarshanTerho qual è la differenza? Lo spirito delle domande è lo stesso. Non puoi scrivere un linguaggio di programmazione, questa domanda a sua volta parla del primo compilatore.
nawfal,

Nella tua immaginazione spirituale forse? In realtà non trovi nulla di menzionato sul primo compilatore in quel link. E non dovresti consigliare a nessuno di scrivere una nuova lingua per iniziare da zero. E se è così, allora perché dovresti nascondere le risposte su come viene scritto il primo compilatore se è importante per scrivere una nuova lingua?

Imparate da me - Questo è un duplicato: stackoverflow.com/questions/4772768/...

Risposte:


133

Le istruzioni di assemblaggio sono (generalmente) una mappatura diretta ai codici operativi, che sono valori (multi) byte del codice macchina che possono essere interpretati direttamente dal processore. È abbastanza possibile scrivere un programma in codici operativi direttamente cercandoli da una tabella (come questa per il microprocessore 6039 , ad esempio) che li elenca con le istruzioni di assemblaggio corrispondenti e determinando manualmente gli indirizzi di memoria / offset per le cose come i salti.

I primi programmi sono stati eseguiti esattamente in questo modo: codici operativi scritti a mano.

Tuttavia, la maggior parte delle volte è più semplice utilizzare un assemblatore per "compilare" il codice assembly, che esegue automaticamente queste ricerche di codice operativo, oltre ad essere utile nel calcolo di indirizzi / offset per etichette jump denominate, eccetera.

I primi assemblatori furono scritti a mano. Questi assemblatori potrebbero quindi essere utilizzati per assemblare assemblatori più complicati, che potrebbero quindi essere utilizzati per assemblare compilatori scritti per linguaggi di livello superiore e così via. Questo processo di scrittura iterativa degli strumenti per semplificare la creazione del prossimo set di strumenti è chiamato (come menzionato da David Rabinowitz nella sua risposta) bootstrap .


18
Il mio primo computer era una macchina basata su Z80 nel cui monitor ROM dovevo assemblare a mano un caricatore bootstrap per mettere in evidenza le basi di un sistema operativo (CP / M) in modo da poter assemblare il resto di detto sistema operativo in un sistema funzionante , completo di un caricatore di bootstrap basato su disco. Momenti divertenti. Quindi sì, puoi assemblare a mano bene. È lento e doloroso e soggetto a errori (motivo per cui abbiamo automatizzato le cose) ma è possibile.
SOLO IL MIO OPINIONE corretta,

Il primo collegamento è interrotto.
Luca,

Scritto a mano Come? Cablaggio o punzonatura di carte? Immagino che avessero tastiere esadecimali.


36

Le uova hanno preceduto a lungo i polli. La risposta alla maggior parte dei problemi "pollo e uovo" è la stessa: evoluzione. Alcune persone hanno difficoltà a credere anche nell'evoluzione biologica, ma l'incredulità non è un argomento (google argumentum ad ignorantiam).

Per rispondere direttamente alla tua domanda: il primo compilatore è stato scritto (da un essere umano) in un linguaggio assembly - un programma chiamato assembler traduceva il linguaggio assembly in binario; questo è un processo molto più semplice della compilazione perché il linguaggio assembly è solo una forma simbolica di linguaggio macchina che utilizza nomi di codici operativi anziché numeri, rappresenta indirizzi con simboli e così via. Molti compilatori successivi furono scritti anche in un linguaggio assembly. Ma il primo compilatore C è un compilatore B modificata, che è stato scritto in B . Il primo compilatore B è stato scritto in TMG . Il compilatore TMG usato per compilare quel compilatore B è stato scritto nel linguaggio assembly PDP-7.


24

Woz ha detto in uno dei suoi discorsi pubblici che quando ha iniziato, non poteva permettersi un compilatore, quindi ha compilato il binario a mano su carta. Se vuoi vedere qualcosa di ancora più selvaggio, leggi le condizioni in cui Bill Gates e Paul Allen hanno scritto il BASIC per l'Altair 8800.

Per quanto riguarda "scrivere un computer in binario", fai un passo indietro rispetto all'essere un programmatore e pensa a quali erano i primi computer. Le cose di alto livello non esistevano ancora: hai pensato a tutto ciò che era basso perché era tutto. Avevi hardware che poteva fare la logica di base e l'aritmetica che manipolavi tramite il codice macchina (che è solo un assemblaggio compilato - Amber spiega perché questa parte non è difficile da fare a mano) e volevi che questo hardware eseguisse determinati talenti matematici. Non ti sei preoccupato del sistema operativo inesistente, hai solo detto all'hardware (in assemblea) come manipolare i numeri che lo alimentano. Era solo un grande calcolatore. Il computer di oggi è stato costruito un'astrazione alla volta.

Se vuoi abbattere la barriera che fa sembrare i computer magici, consiglio vivamente di leggere CODICE di Charles Petzold e / o The Elements of Computing Systems . Con solo una conoscenza di base della programmazione, questi libri meravigliosamente accessibili ti faranno comprendere i computer da cima a fondo. Ovviamente, non si può ottenere un comp. sci. o EE dopo solo 2 libri, ma posso dire come programmatore autodidatta che ha perso la formazione formale: questi libri hanno scosso il mio mondo!


2
Scrivere l'interprete BASIC di Altair dopo aver effettuato il pitch delle vendite? Codificare il bootstrapper sulla corsa in aereo per Albuquerque? Sembra ridicolo. E divertimento.
Ehtesh Choudhury,

2
@Surano: ah! Anche questi punti sono rilevanti, ma per me la nitidezza di come hanno fatto l'interprete BASIC e di come il gruppo lo ha stipato nel piccolo spazio è una cosa di bellezza e sorprendente capacità di programmazione / hacking.
Dinah,

10

Cosa ha scritto il primo compilatore che ha convertito qualcosa in istruzioni binarie?

L'ha fatto un essere umano. Leggi il sistema A-0 :

Nel 1952, Grace Hopper completò il suo primo compilatore per Sperry, noto come A-0. Il sistema A-0 era un insieme di istruzioni che potevano tradurre il codice matematico simbolico in linguaggio macchina. Nel produrre A-0, prese tutte le subroutine che aveva collezionato negli anni e le mise su nastro. A ogni routine è stato assegnato un numero di chiamata, in modo che la macchina potesse trovarlo sul nastro. "Tutto quello che dovevo fare era scrivere una serie di numeri di chiamata, lasciare che il computer li trovasse sul nastro, portarli e fare le aggiunte. Questo è stato il primo compilatore", come descritto da Grace.


1
Il link sembra essere 404 in questo momento, in ogni caso, "Grace" sopra è Grace Hopper.
Volker Stolz,

2
Ho sentito che Hopper ha scritto il primo compilatore, ma la descrizione sopra lo fa sembrare più un linker che un compilatore. Comunque, bella storia. È incredibile pensare che ci sia stato un tempo in cui gli informatici erano scettici sull'idea dei compilatori ...
Mark E. Haase,

1
@mehaase è per questo che si chiama "compilatore". crea una raccolta di routine, ognuna delle quali è (potenzialmente) scritta direttamente in linguaggio macchina.
Elazar,

@ MarkE.Haase Le persone a cui Hopper fa riferimento qui erano ingegneri e scienziati delle applicazioni che usano i computer per compiti di calcolo specifici; non erano "informatici". C'era una manciata di cibernetisti in giro nel 1952, ma dubito che abbia parlato con qualcuno di quelli.
Jim Balter,

9

I primi programmi sono stati scritti in codice macchina (non in linguaggio assembly): numeri effettivi collegati alla memoria del computer tramite switch. Abbiamo fatto molta strada ...

A volte questo succede ancora in piccola parte: correggere piccoli frammenti di codice o creare thunk. Ricordo di aver punzonato i numeri in stringhe Basic che sono state poi eseguite come subroutine piccole e veloci sui primi micro. Ricordo anche di aver attivato gli interruttori sul pannello frontale di un PDP-11 per inserire un programma bootloader in memoria per un corso universitario.

Questi programmi venivano talvolta utilizzati per elaborare file di testo per creare altri programmi e venivano creati linguaggi di programmazione voilà.


La domanda riguarda il primo compilatore, non i primi programmi in generale, nonostante i programmi a volte siano compilatori; la storia dei due non è la stessa. (Un'analogia: la risposta alla domanda su quando apparvero i primi animali sulla Terra non è la risposta alla domanda su quando apparvero i primi gatti sulla Terra, nonostante i gatti fossero animali.)
Jim Balter
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.