Jaki jest związek między środowiskiem wykonawczym Dynamic Language a C # 4.0?

11

Powiedzmy, że chciałem stworzyć dynamiczny kompilator / interpreter języka, być może interpreter schematu, na platformie .NET w obecnym kształcie. Czy lepiej byłoby użyć Dynamic Language Runtime (DLR) lub C # 4.0 do wdrożenia funkcji dynamicznych mojego języka? Czy potrzebuję obu?

Wiem, że w tej dziedzinie wykonano inne prace, w szczególności w przypadku IronScheme i IronPython . Oba te języki używają DLR; Wierzę, że IronPython używa najnowszej wersji DLR (która ma około roku), podczas gdy IronScheme używa wczesnego, mocno zmodyfikowanego rozwidlenia wczesnej wersji DLR. Ale C # 4.0 nie był dostępny, gdy te kompilatory zostały utworzone.

Widziałem pracę Roba Conery'ego z Massive, wykorzystującą dynamiczne funkcje C # 4.0; robi wrażenie. Ale czy C # wytrzyma pełny wysiłek dynamicznego kompilatora / interpretera języka? Czy w DLR są jakieś funkcje, których brakuje w języku C #, czy też DLR zasadniczo został wprowadzony do wersji C # 4.0? Czy straciłbym jakieś ważne cechy DLR, jeśli użyłem wyłącznie C # 4.0?

Robert Harvey
źródło
Wierzę, że funkcje .Net 4.0 Dynamic są oparte również na DLR.
Dave Nay
@Dave: Byłbym zadowolony z bieżącego, autorytatywnego linku do artykułu szczegółowo opisującego związek między środowiskiem uruchomieniowym .NET 4.0 a DLR. Dałoby mi to dobry pomysł, jeśli dynamiczny system typów w C # 4.0 jest wystarczająco solidny i czy istnieją jakieś krytyczne funkcje w DLR, które zostały pominięte w środowisku uruchomieniowym .NET 4.0. Znalazłem kilka artykułów, ale wszystkie zostały napisane w czasach, gdy kształtowała się DLR, a wiele z nich ma charakter spekulacyjny.
Robert Harvey,

Odpowiedzi:

3

To jest artykuł, który pamiętam. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Później DLR został również włączony do .NET Framework 4, aby obsługiwać dynamiczne funkcje w C # i Visual Basic. Jeśli potrzebujesz tylko słowa kluczowego dynamicznego w C # 4, możesz po prostu użyć .NET Framework, a w większości przypadków będzie on obsługiwał wszystkie interakcje z DLR samodzielnie. Ale jeśli chcesz wdrożyć lub przenieść nowy język dynamiczny do .NET, możesz skorzystać z dodatkowych klas pomocników w projekcie open source, który ma więcej funkcji i usług dla implementatorów języka.

Dave Nay
źródło
3

Od: Jimmych

Robert,

Fakty: IronRuby i IronPython używają DLR, w rzeczywistości większość funkcji DLR pochodzi z wcześniejszej implementacji IronPython. Nie wiem, z jakiej wersji DLR IronScheme korzysta. Część DLR (Microsoft.Scripting.Core.dll) została dostarczona w .NET 4.0 w System.Core.dll, a ta część jest tym, czego używa C # 4.0 do obsługi „dynamicznego” słowa kluczowego, dlatego ten zestaw nie jest obecny w kompilacjach DLR .NET 4.0.

Reszta bazy kodu DLR (najważniejsze są Microsoft.Scripting.dll, Microsoft.Dynamic.dll) jest dostępna do pobrania z tego projektu CodePlex lub projektu IronLanguages ​​GitHub. Zapewniają interfejsy API dla konsumentów i producentów języków hostujących, podczas gdy interfejsy API w .NET 4.0 służą do dynamicznej wysyłki metod.

Aby napisać dynamiczny kompilator językowy dla .NET 4.0, użyłbym C # jako języka implementacji i używałbym DLR jako biblioteki dla uproszczenia typowych zadań kompilatora. Aby zapoznać się z prostym przykładem języka DLR, zobacz Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Robert Harvey
źródło