Quanto dovrebbe essere facile utilizzare un framework di sviluppo linguistico?

11

This is part of a series of questions which focuses on a project called the Abstraction Project, which aims to abstract the concepts used in language design in the form of a framework.

Another page associated to it related to structural typing can be viewed here. The meta-topic associated to an inquiry about the framework and the proper place to post can be found here.

Quanto è facile usare un Language Development Framework?

Ho scritto framework di generazione di codice su larga scala che includevano anche la possibilità di inviare il risultato al compilatore specifico per la lingua. Il tema della facilità di utilizzo deriva da un esempio di questo esempio: CodeDOM o il modello di documento del codice.

È un framework scritto da Microsoft che descrive strutture di codice comuni, ma in genere ha lasciato molto (espressione di coercizione) e tendeva ad essere un po 'astratto nella sua rappresentazione di determinati costrutti, per emettere un codice errato basandosi su quello che eri doing: precedente CodeDOM gestito male emettendo PrivateImplementationType su CodeMemberMethod , quando il tipo usato era un'interfaccia generica. CodeDOM è stata la mia ragione originale per scrivere il mio primo generatore di codice.

Una cosa che sto cercando di fare, semplificare il framework, è ridurre la quantità di lavoro necessario per fare qualcosa e concentrarsi sulle azioni rispetto ai tipi specifici che compongono tali azioni.

Ecco un confronto fianco a fianco di come funziona il framework che sto scrivendo:

//Truncated...
/* *
 * From a project that generates a lexer, this is the 
 * state->state transition character range selection logic.
 * */
var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference()));
//...
char start = rangeElement.B.Value.Start;
char end = rangeElement.B.Value.End;
/* *
 * 'start' <= nextChar && nextChar <= 'end'
 * */
currentExpression = start.LessThanOrEqualTo(nextChar).LogicalAnd(nextChar.LessThanOrEqualTo(end));

Versus CodeDOM:

//Truncated...
var nextChar = new CodeVariableReferenceExpression("nextChar");
//...
var start = new CodePrimitiveExpression(rangeElement.B.Value.Start);
var end = new CodePrimitiveExpression(rangeElement.B.Value.End);
currentExpression = new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(start, CodeBinaryOperatorType.LessThanOrEqual, nextChar), CodeBinaryOperatorType.BooleanAnd, new CodeBinaryOperatorExpression(nextChar, CodeBinaryOperatorType.LessThanOrEqual, end));

Il fulcro del framework sono gli appassionati di lingue, così come coloro che sono interessati a generare codice o applicazioni. Dato il suo focus sulla compilazione, sulla generazione di codice e sullo sviluppo del linguaggio, il framework dovrebbe concentrarsi sulla facilità d'uso o sulla potenza cruda?

Il mio obiettivo principale è aumentare la disponibilità di tali strumenti, quindi chi è interessato al dominio non richiede molta esperienza nel dominio della teoria del linguaggio prima di poter iniziare a lavorare sui propri progetti incentrati sulla lingua.

Dato che sono l'autore del framework, la mia visione di "usabilità" è parziale. Quindi, devo chiedere ad un altro se il focus e l'obiettivo hanno senso per gli altri che non sono associati al progetto.

    
posta Alexander Morou 29.07.2011 - 21:26
fonte

2 risposte

2

È difficile costruire un framework di sviluppo linguistico. Devi decidere che tipo di cose vorresti che supporti, quindi devi decidere quali di quelli che conosci sapete come fare e come integrarli insieme in un insieme coerente. Infine, hai fatto un investimento sufficiente in modo che funzioni con linguaggi reali (ad esempio, tipici linguaggi del computer e DSL), e in realtà fa qualcosa di utile. Il mio cappello ti sta cercando.

Potresti confrontare il tuo sforzo con quello che ho iniziato 15 anni fa, il DMS Software Reengineering Toolkit . DMS ha lo scopo di fornire analisi generiche, analisi e trasformazione del codice. Data una specifica esplicita di langauge, analizzerà il codice, costruirà AST, rigenererà il codice da AST (prettyprint), trasformerà il codice usando pattern scritti nel linguaggio di programmazione mirato, costruirà tabelle di simboli, controllo di calcolo e flusso di dati, ecc. Aggiungendo codice personalizzato, uno fa DMS portare fuori una vasta gamma di effetti. (Vedi gli strumenti sul sito: sono tutti DMS in un modo o nell'altro).

Ecco un documento tecnico su DMS come è stato diversi anni fa. (Continuiamo a migliorarlo)

Sebbene DMS stesso sia stato difficile da costruire, abbiamo scoperto che ci voleva un grosso pezzo di ingegneria per definire veri langauges in DMS, inclusi IBM COBOL, C # 4.0, Java 1.7, C ++ 11 (e molti altri).

Cosa pensiamo che faccia (abbastanza bene): abbassare il costo degli strumenti di costruzione di 1-2 ordini di grandezza. Ciò significa che i compiti che potrebbero altrimenti richiedere 1-10 anni possono essere contemplati da semplici mortali come progetti di 1 mese-1 anno. Cosa ancora non è facile:

  • Definizione di nuove lingue
  • Gestire tutte le idiozie delle lingue correnti
  • Semplifica la scrittura del codice personalizzato specifico per la tua attività
  • Definizione di nuove e complesse analisi
  • Gestione di programmi parziali o programmi contenenti errori
  • (Al tuo punto iniziale) Semplifica l'uso di questi strumenti da parte di non esperti

Quindi, ci sono molti margini di miglioramento. Lascia che molti fiori sbocciano.

    
risposta data 05.12.2011 - 03:31
fonte
0

Questa domanda potrebbe aver trovato risposta nel mese di Mythical Man, nella sezione "Integrità concettuale". In caso contrario, è almeno altamente pertinente alla tua domanda. Anche se Brooks descrive l'architettura di un intero sistema informatico, il saggio si applica perfettamente a framework e nuovi linguaggi.

Credo che esista una correlazione positiva tra il tasso di adozione di qualsiasi tecnologia e la sua integrità concettuale e facilità d'uso. Dovrebbe esserci un case study su tecnologie recenti come linguaggi, framework e sistemi operativi, per dimostrare questa correlazione, ma non ne conosciamo ancora.

    
risposta data 14.08.2011 - 23:48
fonte