Estendendo o compilador C # do Mono com recursos personalizados adicionais (mais ou menos açúcar sintático)

5

Estou ciente de que esta é uma questão bastante ampla, mas aqui está mesmo assim ...

Qual é, na sua opinião, a maneira mais prática de criar a própria implementação do C # com pequenas adições ao conjunto de recursos 4.0 existentes?

Para contexto: Estou pensando em adicionar algumas sutilezas (principalmente sintáticas) ao conjunto de recursos dinâmicos que melhorariam toda a experiência de digitação de pato. Por exemplo, isso incluiria a ideia de uma interface dinâmica, conforme proposta em este debate (particularmente no último comentário da MiddleTommy) .

Estou ciente de que nada me impede de simplesmente mergulhar nas fontes Mono. No entanto, sou obrigado a perguntar primeiro sobre projetos potencialmente semelhantes que já existem na natureza. Quais são os esforços de extensão em andamento?

    
por aoven 16.02.2012 / 11:15
fonte

3 respostas

5

Dê uma olhada na linguagem de programação Nemerle - ela fornece um front-end em C # (construído sobre o Nemerle.Peg) , que é facilmente extensível. O único recurso ausente da sua implementação do C # 4.0 é goto .

    
por 16.02.2012 / 11:42
fonte
1

É possível fazer algo parecido com o que a postagem do blog vinculada descreve com o C # 4.0. Você pode subclassificar DynamicObject (ou mesmo ExpandoObject para ter um bom ponto de partida) e substituir TryGetMember e os gostos de encaminhar as chamadas. Em seguida, crie um proxy dinâmico para o objeto dinâmico. Existem várias bibliotecas para esse fim, uma delas é interface-impromptu . Então você pode dizer algo como:

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

E você recebe uma referência com o suporte do IntelliSense e ActLike<> também verificará a disponibilidade dos membros da interface.

    
por 16.02.2012 / 13:15
fonte
-1

Eu não acho que você precise modificar o compilador para ficar muito próximo de dynamic interface .

Basta criar uma classe wrapper (possivelmente autogerada) que encaminha dinamicamente as chamadas de método para o objeto subjacente.

Isso tem algumas desvantagens quando comparado com o verdadeiro dynamic interface , mas deve ser muito mais fácil de implementar.

    
por 16.02.2012 / 12:45
fonte

Tags