Sto leggendo il libro The Elements of Computing Systems: Building a Modern Computer from First Principles , che contiene progetti che comprendono la costruzione di un computer da porte booleane fino ad applicazioni di alto livello (in questo ordine). Il progetto attuale a cui sto lavorando è scrivere un assemblatore usando un linguaggio di alto livello di mia scelta, per tradurre dal codice assembly Hack al codice macchina Hack (Hack è il nome della piattaforma hardware creata nei capitoli precedenti). Sebbene l'hardware sia stato tutto costruito in un simulatore, ho cercato di fingere che sto davvero costruendo ogni livello usando solo gli strumenti disponibili a quel punto nel processo reale.
Detto questo, mi ha fatto pensare. Usare un linguaggio di alto livello per scrivere il mio assemblatore è certamente conveniente, ma per il primissimo assemblatore mai scritto (cioè nella storia), non avrebbe bisogno di essere scritto in codice macchina, dato che era tutto ciò che esisteva al momento?
E una domanda correlata ... che ne dici di oggi? Se emergesse una nuovissima architettura CPU, con un nuovo set di istruzioni e una nuovissima sintassi dell'assemblaggio, come sarebbe costruito l'assemblatore? Suppongo che potresti ancora usare un linguaggio di alto livello esistente per generare file binari per il programma assembler, poiché se conosci la sintassi sia dell'assembly che dei linguaggi macchina per la tua nuova piattaforma, il compito di scrivere l'assemblatore è davvero solo un attività di analisi del testo e non è intrinsecamente correlata a quella piattaforma (cioè deve essere scritta nel linguaggio macchina di quella piattaforma) ... che è la vera ragione per cui sono in grado di "imbrogliare" mentre scrivo il mio assemblatore Hack nel 2012 e usare un po 'di preesistente linguaggio di alto livello per aiutarmi.