



L`accesso diretto al puntatore è possibile o meno? Quali sono i tipi di dati della tua lingua? È un linguaggio statico o dinamico? Qual è il tuo modello di memoria? Stai usando un Garbage Collector o una gestione manuale della memoria? (Se stai usando un garbage collector, tieni presente che dovrai scriverne uno o adattarne uno esistente al tuo linguaggio di programmazione.) Come gestirai la concorrenza? Stai usando un semplice modello di filettatura/bloccaggio o qualcosa di più complesso come Linda o il modello "attore"? (Perché oggi i computer hanno più processori.) Ci sono semplici funzioni integrate nella lingua o è tutto da una libreria? Qual è il paradigma o quali sono i paradigmi del tuo linguaggio di programmazione? Funzionale? Orientato agli oggetti? Prototipo (come JavaScript)? Orientato all`aspetto? Orientato ai modelli? O qualcosa di completamente nuovo? Come comunica la tua lingua con le biblioteche e le lingue esistenti (principalmente C)? Questo punto è importante se stai sviluppando un linguaggio specifico del dominio. Alla fine, alcune di queste domande riceveranno risposta nel secondo passaggio e dovrai rispondere al passaggio successivo.










Sviluppo di un linguaggio di programmazione
Contenuto
Molte persone hanno problemi o frustrazioni con i linguaggi di programmazione che usano ogni giorno. Alcuni vogliono che le cose vengano gestite in modo più astratto, mentre altri odiano l`implementazione di funzionalità che dovrebbero essere "standard". Che tu sia un professionista IT o solo un hobbista, molte volte vorresti poter creare un nuovo linguaggio di programmazione.
Passi

1. Acquisisci familiarità con la tecnologia. Non puoi sviluppare un linguaggio di programmazione se non sai usare un computer.

2. Familiarizzare con la terminologia. Gli scrittori di compilatori usano spesso una terminologia sconosciuta. Leggi di più sui compilatori prima di procedere. Assicurati di sapere tutto ciò che devi sapere.

3. Decidi quale problema deve risolvere la tua lingua. Il problema è che il linguaggio affronterà il dominio specifico o il linguaggio dovrebbe essere adatto a tutti i tipi di applicazioni?

4. Pensa alla semantica della tua lingua e ai suoi concetti.

5. Pensa a compiti specifici che qualcuno vorrebbe essere in grado di svolgere con la tua lingua. Ad esempio: fare in modo che un robot segua una certa traiettoria o sviluppare programmi desktop o applicazioni web relativamente portatili.

6. Sperimenta con idee sintattiche (il testo della lingua) per gli esempi sopra.
Assicurati di mantenere la tua lingua all`interno della categoria della lingua indipendente dal contesto, o qualcosa al suo interno. Il tuo generatore di parser e te ne sarai grato alla fine.

7. Scrivi una grammatica formale per la sintassi.

8. Decidi se interpretare o compilare il linguaggio. Ciò significa che con un programma interpretato, l`utente modificherà un programma in un editor, quindi lo eseguirà direttamente dall`interprete; se il programma viene compilato, l`utente scriverà il programma in un editor, lo compilerà, salverà l`eseguibile risultante da qualche parte e quindi lo eseguirà.

9. Scrivi lo scanner e il parser front-end o trova uno strumento che possa aiutarti in questo.
Pensa anche a come avviserai gli utenti del compilatore/interprete di errori di programma e di sintassi.

10. Utilizzare i dati del parser per scrivere il codice oggetto o per una rappresentazione preliminare. Lascia che il parser crei AST e crei il tuo codice oggetto dall`AST usando "tre codici di indirizzo" o il suo fratello maggiore SSA, quindi crea una tabella di simboli per definire le tue funzioni, variabili globali, ecc.
A seconda della tua lingua, potresti anche voler creare tabelle di puntatori virtuali o tabelle di dati per le tue classi (per supportare la riflessione o RTTI).

11. Scrivi l`esecutore o il generatore di codice che mette tutto insieme.

12. Scrivi molti programmi di test per testare la tua lingua.
Soprattutto, scrivi programmi che sfidino la grammatica formale del tuo linguaggio per assicurarti che il tuo compilatore accetti tutto ciò che rientra nella tua definizione e rifiuta tutto ciò che non rientra in essa.

13. Considera come l`utente eseguirà il debug dei propri programmi.

14. Se la tua lingua utilizza una libreria standard, dovrai scriverla. Insieme a un Garbage Collector o altre funzioni di runtime, se ne hai bisogno.
Soprattutto se stai scrivendo un compilatore, hai bisogno del codice che esegue il sistema operativo per eseguire il codice utente (ad es.: assegnazione di tutte le variabili globali).

15. Pubblica la tua lingua, insieme alle sue specifiche e ad alcuni esempi di cosa puoi fare con essa.
Non dimenticare la documentazione per l`integrazione con le librerie esistenti, i linguaggi e come utilizzare le funzioni di runtime e/o la libreria di default.
Consigli
- Inizia a progettare il tuo linguaggio senza scrivere alcun codice, finché non sei soddisfatto e hai risposto a tutte (o alla maggior parte) delle domande o dei problemi associati al tuo design, poiché è più facile cambiare il design all`inizio, poi in una fase successiva.
- Conosci la tua piattaforma di destinazione (sistema operativo e librerie) per il tuo compilatore/interprete, poiché le utilizzerai e le manipolerai.
Avvertenze
- Chiediti se hai davvero bisogno di una nuova lingua e cosa ha di nuovo la tua lingua rispetto ad altre lingue (potrebbe essere una combinazione di funzionalità o una singola funzionalità).
- Dovrai dedicare tempo alla progettazione della lingua poiché non avrai la possibilità di cambiare la lingua dopo aver scritto il compilatore e aver superato la fase di progettazione.
- Scrivere un linguaggio di programmazione è difficile se non sai cosa stai facendo. Ci vuole anche molta pratica.
- Non provare a mescolare funzioni di lingue diverse, ad esempio una lingua come combinazione di lingue X, Y e Z. La storia ci dice che i linguaggi fatti in questo modo non hanno mai successo, altrimenti tutti programmano in PL/1 invece di qualcosa basato su C.
Necessità
- Pazienza.
- Conoscenza delle funzioni del linguaggio e della progettazione del linguaggio (possibilmente leggere Programming Language Design Concepts di David A. watt).
- Conoscenza della teoria dei compilatori (perché scriverai un compilatore/interprete per il tuo linguaggio e la tua implementazione sarà l`implementazione di riferimento).
- Usi utili per il tuo linguaggio (sappi che alcuni dei linguaggi più comunemente usati, come C o Lisp, sono stati creati per fare qualcosa di specifico, come creare Unix o fare calcoli simbolici).
Articoli sull'argomento "Sviluppo di un linguaggio di programmazione"
Condividi sui social network:
Popolare