Visualizza il feed RSS

Titolo provvisorio...

Bibliografia: compilatori, interpreti, little languages..

Valuta questo inserimento
di pubblicato il 05-12-2019 alle 16:35 (262 Visite)
- Aho, Sethi, Ullman, "Compilers - Principles, techniques, and tools", Addison-Wesley Longman

- Hopcroft, Motwani, Ullman, "Introduction to Automata Theory, Languages and Computation, 3rd ed.", Pearson

- Kaplan, "Constructing language processors for little languages", John Wiley & Sons

- Mak, "Writing compilers and interpreters: a software engineering approach", John Wiley & Sons

- Gries, "Principi di progettazione dei compilatori", Franco Angeli Editore

- Grune & Jacobs, "Parsing techniques - a practical guide" (consigliati in generale tutti i lavori di Dick Grune)

- Morgan, "Building an optimizing compiler", DP Digital Press

- Kennedy & Allen, "Optimizing Compilers for Modern Architectures", Morgan Kaufmann

- Winskel, "La semantica formale dei linguaggi di programmazione", UTET

- Bruno, "Linguaggi formali e compilatori", UTET

- Srikant & Shankar, "The Compiler Design Handbook", CRC Press

- Kaspersky, "Code Optimization", A-List Publishing

- Sebesta, "Concepts of Programming Languages", Pearson

- Abelson & Sussman, "Structure and Interpretation of Computer Programs, 2nd Ed.", MIT Press

- Van Roy & Haridi, "Concepts, Techniques, and Models of Computer Programming", MIT Press

- Friedman & Wand, "Essentials of Programming Languages, 3rd Ed.", MIT Press

Inventare un "nuovo" linguaggio di ragionevole complessità non è un esercizio particolarmente frequente nella didattica informatica di base. Se ne parla semmai in corsi di dottorato e seminari piuttosto esoterici sulla progettazione formale di linguaggi secondo paradigmi molto specifici (dichiarativo, funzionale, constrained etc.).

Scrivere un compilatore o interprete per un linguaggio ben definito, asseverato e coerente, è già un compito applicativo sufficientemente impegnativo a livello didattico e/o di autoapprendimento, che richiede una lunga full immersion in nozioni complesse e molto peculiari, fortemente radicate nella conoscenza dell'architettura dei sistemi.

Oltre livelli piuttosto bassi di complessità (i "little languages" di Kaplan, o giù di lì), la progettazione di linguaggi e l'implementazione dei relativi processori sono compiti diversi e condotti da specialisti con preparazioni diverse, spesso anche molto divergenti (logici matematici e informatici teorici tra i progettisti di linguaggi, informatici applicativi o ingegneri gli implementatori di buoni compilatori o interpreti).

Questo vale in linea generale, naturalmente: per l'informatico quadratico medio è più probabile prendere facilmente confidenza col codice ed i concetti di un compilatore ottimizzante che con le notazioni formali necessarie a descrivere sintassi e semantica di un linguaggio di programmazione, permettendo di dimostrarne a priori coerenza ed altre proprietà in modo rigoroso, evitando quindi a monte situazioni penose, ambiguità e conflitti insolubili. Certo, è vero che nel real world esistono tristemente anche linguaggi che semplicemente non sono stati progettati...
Categorie
Libri , Programmazione , Scienza