Il puzzle diventa un po 'più semplice una volta che hai compreso una verità fondamentale sull'archiviazione dei dati nei computer. La verità è questa:
I caratteri non esistono.
I computer non possono gestire i personaggi. Driver di stampa, output video, teletype, ecc. Possono generare forme di lettere e quindi fornire l'illusione necessaria che qualcuno stia scrivendo qualcosa per voi da leggere, ma è comunque un'illusione. Fondamentalmente, i computer memorizzano numeri e nient'altro. Per gestire lettere, parole e testi, una comune codifica deve essere concordata da tutti gli utenti, ed è questa codifica dei caratteri che associa, ad esempio, A con 65 .
Ne consegue che la codifica deve essere scelta, implementata e rispettata molto prima di scrivere un compilatore. Ogni programma che deve stampare l'output leggibile dall'utente deve essere in grado di memorizzare un 65 e fare affidamento sulla convenzione che gli O.S. il driver del display mostrerà una "A" al suo posto, ecc. In altre parole, qualunque sistema operativo si scriva su un compilatore già ha una convenzione per associare numeri con caratteri, e il compilatore nuovo-scritto usa semplicemente la stessa convenzione di tutti i programmi esistenti.
Nel caso delle sequenze di escape, è spesso qualcosa come "un \n
dovrebbe corrispondere a un carattere di nuova riga, un \r
a un carattere di ritorno a capo". Questi due caratteri sono - dalla convenzione già esistente - 10 e 13, quindi è sufficiente inserire semplicemente quelle costanti per fare la cosa giusta. Il compilatore non conosce questi valori più di quanto faccia un editor di testo. Un editor accetta il numero 65 (come inviato dal driver della tastiera quando si preme "A") e lo memorizza su disco, quindi lo recupera dal disco e il driver dello schermo simula una "A" sullo schermo al suo posto. Funziona perché il driver della tastiera e il driver del display sono d'accordo su come interpretare i numeri nel tuo file di testo.
È lo stesso con un compilatore e il runtime della lingua. La programmazione con caratteri funziona perché il compilatore accetta il codice sorgente e il runtime e l'hardware I / O che esegue l'eseguibile concordano su come mappare i caratteri ai numeri e viceversa. Se si porta un compilatore su una piattaforma diversa con una codifica di caratteri diversa (cosa rara oggi ma un'attività comune quando i compilatori sono stati inventati), ciò comporterà sempre almeno alcuni hackery per adattare questa mappatura. (Questa è una delle volte in cui ti rendi conto quanto siamo < felici che tali questioni fondamentali siano state ampiamente standardizzate e la nostra generazione di solito le dimentichi - ma i problemi sono ancora lì, e le scritture del compilatore necessitano per capirle.)