Estensione del compilatore C # di Mono con caratteristiche personalizzate aggiuntive (più o meno zucchero sintattico)

5

Sono consapevole che questa è una domanda piuttosto ampia, ma qui va comunque ...

Quale è, secondo te, il modo più pratico per creare la propria implementazione C # con aggiunte minori al set di funzionalità 4.0 esistente?

Per contesto: sto pensando di aggiungere un paio di sottigliezze (per lo più sintattiche) al set di funzionalità dinamiche che migliorerebbe l'intera esperienza di tipizzazione anatra. Ad esempio, questi includono l'idea di un'interfaccia dinamica, come proposto in questo dibattito (in particolare nell'ultimo commento di MiddleTommy) .

Sono consapevole che nulla mi impedisce di immergermi semplicemente nelle sorgenti Mono. Tuttavia, sono costretto a chiedere prima su progetti potenzialmente simili che potrebbero già esistere in natura. Qualsiasi tentativo di estensione in corso?

    
posta aoven 16.02.2012 - 11:15
fonte

3 risposte

5

Dai un'occhiata al Nemerle linguaggio di programmazione - fornisce un front-end C # (basato su Nemerle.Peg) , che è facilmente estensibile. L'unica caratteristica mancante dalla sua implementazione di C # 4.0 è goto .

    
risposta data 16.02.2012 - 11:42
fonte
1

È possibile fare qualcosa di simile a ciò che il post del blog collegato descrive con C # 4.0. Puoi sottoclassi DynamicObject (o anche ExpandoObject per avere un buon punto di partenza) e sovrascrivi TryGetMember e i mi piace per inoltrare le chiamate. Quindi, creare un proxy dinamico per l'oggetto dinamico. Esistono diverse librerie per questo scopo, una delle quali è interfaccia improvvisata . Quindi puoi dire qualcosa del tipo:

var obj = Impromptu.ActLike<ISomeInterface>(dyn_obj);

E ottieni un riferimento con il supporto IntelliSense e ActLike<> controllerà anche la disponibilità dei membri dell'interfaccia.

    
risposta data 16.02.2012 - 13:15
fonte
-1

Non penso che tu abbia nemmeno bisogno di modificare il compilatore per avvicinarti molto a dynamic interface .

Crea semplicemente una classe wrapper (possibilmente autogenerata) che inoltra dinamicamente invocazioni di metodi all'oggetto sottostante.

Questo ha alcuni svantaggi rispetto al vero dynamic interface , ma dovrebbe essere molto più facile da implementare.

    
risposta data 16.02.2012 - 12:45
fonte

Leggi altre domande sui tag