Che cosa è venuto prima, il compilatore o la fonte?

17

Sono curioso della nascita del compilatore. Come è iniziata la programmazione? Le persone prima costruivano hardware che riconosceva un certo insieme di comandi, o le persone definivano una lingua e quindi costruivano l'hardware attorno ad essa? E su una nota correlata, qual è stato il primo linguaggio di programmazione?

    
posta David Cowden 09.07.2012 - 11:35
fonte

6 risposte

30

Questo ha una risposta molto chiara, in realtà: Il codice sorgente è venuto prima - con un grande margine.

Prima di fornire i dettagli tecnici, un po 'di prospettiva:

I primi linguaggi di programmazione sono stati tutti tradotti in linguaggio macchina o assemblatore a mano . L'idea di usare un pezzo di software per automatizzare questa traduzione (tramite un compilatore o un valutatore) veniva sempre dopo, ed era tutt'altro che intuitiva.

Considera questa citazione dell'articolo di Wikipedia su FORTRAN che illustra i compilatori di riluttanza che dovevano affrontare:

… the first FORTRAN compiler [was] delivered in April 1957. This was the first optimizing compiler, because customers were reluctant to use a high-level programming language unless its compiler could generate code whose performance was comparable to that of hand-coded assembly language. [emphasis mine]

= > Nel momento in cui il compilatore FORTRAN ha colpito il mercato (1957), le persone erano già felici di programmare sia in linguaggio assembly che FORTRAN.

Il caso era simile per LISP (di Hacker e pittori ) :

Steve Russell said, look, why don't I program this eval …, and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today..."

Ancora una volta, non solo il codice sorgente (in LISP) precede l'interprete, quest'ultimo non era nemmeno implicito nel primo.

Ma questi sviluppi sono relativamente tardi. Anche senza considerare il motore analitico di Charles Babbage e il relativo primo programma , ci sono stati linguaggi di programmazione nel 20 ° secolo che hanno preceduto i compilatori:

Plankalkül di Konrad Zuse e il costrutto matematico di λ-calculus presentato da Alonzo Church. Entrambi questi sono linguaggi di programmazione indubbiamente formalmente specificati, ma nessuno dei due aveva un compilatore al momento.

Per mettere questo in prospettiva, il calcolo λ è degli anni '30, e Plankalkül è stato sviluppato intorno al 1945. Al contrario, il primo compilatore FORTRAN è uscito nel 1957 (ma ancora tre anni dopo FORTRAN è stato specificata).

    
risposta data 11.07.2012 - 22:25
fonte
10

La programmazione è iniziata con le persone che scrivevano il codice macchina direttamente nella memoria, su schede perforate e nastro di carta o persino collegamenti di cortocircuito su un pannello di permutazione. È difficile dire se l'hardware sia stato costruito attorno alle esigenze del software o viceversa. Sicuramente il primo progetto per un computer programmabile turing completo , Babbage's Motore analitico , pre-datato primo programma documentato .

Per quanto riguarda il primo linguaggio di programmazione, ho sostenuto che si trattava del linguaggio macchina del motore analitico di Babbage ( dalla domanda Qual è stata la prima lingua di programmazione scritta per i computer? )

Per rispondere alla domanda nel titolo della domanda, poiché linguaggio assembly è codice sorgente , e lingue di assemblaggio precedenti lingue di alto livello che potrebbe essere compilato in assembler, il codice sorgente è venuto prima.

Inoltre, un compilatore non è mai stato necessario , semplicemente conveniente.

È perfettamente possibile scrivere software direttamente nella memoria se hai memorizzato le tabelle appropriate op-code . In effetti, alcuni dei primi computer richiedevano all'utente di inserire il codice di bootstrap sul pannello frontale tastiera esadecimale per farli avviare, ma puoi toccare qualsiasi codice che ti piace e verrà eseguito.

Certamente come le CPU diventano più complesse, questo diventa più difficile, ma un semplice set di istruzioni come 6809 o Z80 (ignorando tutto le strane modalità indicizzate) è relativamente facile da programmare anche senza un assemblatore , per non parlare di un compilatore di un linguaggio di alto livello .

Se il motore analitico di Babbage fosse mai stato costruito, sono sicuro che ci sarebbe stato un steampunk Mel , ottimizzato per la scrittura programmi direttamente su schede telaio.

    
risposta data 09.07.2012 - 15:40
fonte
6

Il compilatore era prima . È stato scritto direttamente in codice macchina, perché la fonte non poteva essere compilata senza un compilatore.

Articoli di Wikipedia come questo su Computer Languages può rispondere alla maggior parte delle domande. In caso contrario, scegli uno dei libri di Tanenbaum, come Organizzazione per computer strutturato , che può rispondere a più domande di te può anche chiedere:)

Non posso dire nulla di più specifico, perché la tua domanda è troppo ampia.

    
risposta data 09.07.2012 - 11:44
fonte
4

Gli interpreti esistevano prima dei compilatori quindi il codice sorgente esisteva prima dei compilatori.

Ci sono alcuni documenti molto interessanti sulla storia dell'informatica qui . Il codice sorgente per il compilatore FORTRAN II dovrebbe essere disponibile, ma tali collegamenti sono interrotti.

Questo documento , del 1954, descrive l'interprete di Whirlwhind.

    
risposta data 11.07.2012 - 19:50
fonte
1

Questa domanda è strongmente imperniata sulla nostra interpretazione semantica del "codice sorgente". Se lo definiamo come "istruzioni per computer testuali che sono compilate", presumibilmente un compiler è arrivato per primo.

Sono più incline ad andare con qualcosa di più autorevole, come Mark Harman's paper "Perché l'analisi e la manipolazione del codice sorgente sarà sempre importante" presentata alla Decima conferenza internazionale di lavoro IEEE su Analisi e manipolazione del codice sorgente

Definition 1 (Source Code): For the purpose of clarity ‘source code’ is taken to mean any fully executable description of a software system. It is therefore so construed as to include machine code, very high level languages and executable graphical representations of systems.

E penso che la tua risposta sia implicita in quella definizione - il codice sorgente è stato sicuramente il primo.

    
risposta data 12.07.2012 - 04:57
fonte
0

Gli algoritmi sono stati ordinati su carta, quindi gli alus sono stati cablati fisicamente / meccanicamente (fili in movimento). per cambiare il programma, sposta i fili e corri di nuovo.

Più tardi la lingua dell'assemblaggio è stata ordinata su carta, tradotta manualmente a mano con il codice macchina, quindi utilizzando interruttori, ecc. per alimentarla in ram. O perforare le carte, ecc. Alla fine puoi creare un assemblatore, quindi puoi programmare in assembly non codice macchina, quindi puoi creare un compilatore. Alla fine puoi eseguire il bootstrap del compilatore. E crea nuovi linguaggi e nuovi compilatori, ecc.

La prima lingua non era una lingua, in seguito la prima lingua era la lingua di assemblaggio. per ogni processore la prima lingua è il linguaggio assembly (derivato dal codice macchina). Il set di istruzioni è progettato prima dall'hardware per implementarlo quindi assemblatore, quindi compilatori.

    
risposta data 16.07.2012 - 05:05
fonte

Leggi altre domande sui tag