Eu ouvi sobre o frango, o ovo e a inicialização. Eu tenho algumas perguntas.
O que escreveu o primeiro compilador que converteu algo em instruções binárias?
O assembly é compilado ou traduzido em instruções binárias?
... Eu acho difícil acreditar que eles escreveram um compilador em binário.
compiler-construction
machine-instruction
Shawn Mclean
fonte
fonte
Respostas:
As instruções de montagem são (geralmente) um mapeamento direto para os códigos de operação, que são valores de (multi) bytes de código de máquina que podem ser interpretados diretamente pelo processador. É bem possível escrever um programa em código de operação diretamente, pesquisando-os em uma tabela (como esta para o microprocessador 6039 , por exemplo) que os lista com as instruções de montagem correspondentes e determinando manualmente endereços / compensações de memória para coisas como saltos.
Os primeiros programas foram feitos exatamente dessa maneira - opcodes escritos à mão.
No entanto, na maioria das vezes é mais simples usar um assembler para "compilar" o código de montagem, que realiza automaticamente essas pesquisas de código de operação, além de ser útil na computação de endereços / deslocamentos para etiquetas de salto nomeadas etc.
Os primeiros montadores foram escritos à mão. Esses assemblers poderiam então ser usados para montar assemblers mais complicados, que poderiam ser usados para montar compiladores escritos para linguagens de nível superior, e assim por diante. Esse processo de escrita iterativa das ferramentas para simplificar a criação do próximo conjunto de ferramentas é chamado de bootstrap (como mencionado por David Rabinowitz em sua resposta) .
fonte
Leia sobre a inicialização do compilador e o histórico de escrita do compilador
A idéia é escrever um compilador muito simples diretamente no código da máquina, usá-lo para escrever um compilador mais sofisticado, usar o segundo para criar um terceiro e assim por diante até que você possa ter um compilador completo.
fonte
Ovos por muito tempo precedem galinhas. A resposta para a maioria dos problemas de "galinha e ovo" é a mesma: evolução. Algumas pessoas também têm dificuldade em acreditar na evolução biológica, mas a descrença não é um argumento (google argumentum ad ignorantiam).
Para responder diretamente à sua pergunta: o primeiro compilador foi escrito (por um humano) em uma linguagem assembly - um programa chamado assembler traduzia a linguagem assembly em binário; esse é um processo muito mais simples que a compilação, porque a linguagem assembly é apenas uma forma simbólica da linguagem de máquina que usa nomes de códigos de operação em vez de números, representa endereços com símbolos e assim por diante. Muitos compiladores subsequentes também foram escritos em uma linguagem assembly. Mas a primeira compilador C foi um compilador B modificada, que foi escrita em B . O primeiro compilador B foi escrito em TMG . O compilador TMG usado para compilar esse compilador B foi escrito na linguagem de montagem PDP-7.
fonte
Woz disse em uma de suas palestras públicas que, quando ele começou, ele não podia pagar um compilador, então ele compilou o binário manualmente no papel. Se você quiser ver algo ainda mais selvagem, leia sobre as condições sob as quais Bill Gates e Paul Allen escreveram o BASIC para o Altair 8800.
Quanto a "escrever um computador em binário" - dê um passo para trás de ser um programador e pense sobre o que eram os primeiros computadores. Material de alto nível ainda não existia - você pensou em tudo no nível baixo, porque era tudo o que era. Você tinha um hardware que poderia fazer lógica e aritmética básica que manipula via código de máquina (que é apenas uma montagem compilada - Amber explica por que essa peça não é difícil de fazer manualmente) e você queria que esse hardware realizasse certos feitos matemáticos. Você não se preocupou com o sistema operacional inexistente, apenas disse ao hardware (em montagem) como manipular os números que você o alimenta. Era uma calculadora apenas grande. O computador de hoje foi construído uma abstração por vez.
Se você quiser quebrar a barreira que faz com que os computadores pareçam mágicos, recomendo a leitura de CODE de Charles Petzold e / ou The Elements of Computing Systems . Com apenas um conhecimento básico de programação, esses livros maravilhosamente acessíveis farão você entender os computadores de cima para baixo. Obviamente, não se pode obter um comp. sci. ou diploma de EE após apenas dois livros, mas posso dizer como programador autodidata que perdeu o treinamento formal: esses livros abalaram meu mundo!
fonte
Um humano fez. Leia sobre o sistema A-0 :
fonte
Os primeiros programas foram escritos em código de máquina (não em linguagem assembly) - números reais conectados à memória do computador usando interruptores. Percorremos um longo caminho ...
Às vezes, isso ainda acontece em pequena medida - para corrigir pequenos pedaços de código ou criar thunks. Lembro-me de digitar números em seqüências de caracteres básicas que foram executadas como sub-rotinas pequenas e rápidas nos primeiros micros. Também me lembro de alternar interruptores no painel frontal do PDP-11 para inserir um programa de bootloader em sua memória para um curso universitário.
Esses programas costumavam ser usados para processar arquivos de texto para criar outros programas e foram criadas linguagens de programação voila.
fonte