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.