2013-02-01 11 views
8

Gram i uczę się trochę z ANTLR budując prosty DSL dla .NET, przekształcając skrypt w łańcuch na metodę dynamiczną. Mój pierwszy pomysł został przetłumaczony na opcodes IL, ale teraz czytam o drzewach ekspresji do tworzenia DM. Wydaje się, że mogę wytworzyć dowolną metodę z użyciem drzewek wyrażeń, tak jak kod IL?C# Metoda dynamiczna - IL vs drzewa wyrażeń

dziękuję!

Kod: https://github.com/ricardoborges/NPortugol2

+0

Nie można definiować nowych typów z drzewkami wyrażeń. IL jest o wiele bardziej elastyczny (ale jednocześnie bardzo łatwy do wygenerowania). –

Odpowiedz

9

Kod IL daje trochę więcej mocy. Na przykład można go użyć do emisji kodu właściwego dla środowiska .NET CLR, ale niekoniecznie do czegoś, co można napisać w języku C# lub VB.NET.

Ale ogólnie rzecz biorąc, powinieneś być w stanie zrobić praktycznie wszystko, co chcesz zrobić z drzewkami ekspresji, i są one o wiele prostsze do objęcia głowy.

Emitowanie kodu IL będzie prawdopodobnie działać nieco szybciej niż kompilacja drzewa wyrażeń. Nie martwiłbym się o to (przedwczesna optymalizacja), ale warto to zauważyć. Zobacz How does having a dynamic variable affect performance? dla niektórych specyfikacji wydajności.

+0

Fajnie! Dziękuję za wyjaśnienie! Przeczytam link! – Ricardo

+2

Jedną znaczącą różnicą między tymi dwoma jest to, że IL może być użyty do tworzenia całych klas i złożeń. Wyrażeń można używać tylko do tworzenia metod. – svick

Powiązane problemy