2011-07-18 14 views
7

Chciałbym używać DLR do mojego języka zabawek i jestem nieco zdezorientowany. Jeśli .NET 4.0 ma drzewa wyrażeń LINQ, obiekty dynamiczne i typ "dynamiczny", czy naprawdę potrzebujemy już DLR? Co oznacza DLR zapewniają, która stałaby moje życie łatwiejsze jako programista językaCzy DLR jest potrzebny w .NET 4.0?

--- Edit ----

Pozwól mi wyjaśnić moje pytanie trochę lepiej. Projekt DLR znaleziony na codeplex (dlr.codeplex.com) jest już potrzebny? Czy wszystkie funkcje tego projektu DLR zostały wprowadzone do platformy .NET 4? Czy w DLR można znaleźć coś wartościowego?

+0

Typ "dynamiczny" używa DLR pod maską. –

+0

dynamic == DLR. Więc nie. –

Odpowiedz

2

To nie jest odpowiedź na twoje pytanie, ale bardzo chciałem przeczytać wiadomość od Jima Hugunina o opuszczeniu Microsoftu jakiś czas temu.

Jedną z rzeczy, które wskazał, było to, że DLR był kierowcą wielu udanych postępów, jakie mamy w .Net 4.0, który teraz powiesz, że możesz już nie potrzebować DLR.

Edit: Link do messsage - http://hugunin.net/microsoft_farewell.html

Z drugiej strony uważam, że system DynamicSite wciąż coś, co jest bardzo cenne mieć, choć nie koniecznie coś ważne jest aby umieścić w samej CLR.

Druga edycja: to interesujące zapytanie, właśnie przeglądałem dokumenty na Codeplex. Jak to określisz i wyjaśnisz, CLR .NET 4.0 implementuje takie rzeczy, które sprawiały, że DLR jest wyjątkowy; Czytając przegląd DLR, myślę, że zasadniczo chodzi o to, że rzeczy zaimplementowane z DLR mają tę zaletę, że szybciej uzyskują dostęp do nowych funkcji, niż czekają na nową wersję Framework.

To może być dyskusyjne, ponieważ od jakiegoś czasu nie wydały nowej wersji DLR!

Inną możliwą przewagę, ale muszę przyznać, że nie zostały zbadane to właściwie jest to, że AST w DLR ma więcej funkcji:

Shared AST (expression drzewach) - Jest to jeden z rdzeniem filary z DLR. Rozszerzyliśmy drzewa wyrażeń LINQ, aby objąć kontrolą przepływ, przypisanie, itp. Wysyłamy również źródła dla wszystkich wyrażeń Drzewa v1 i v2 (nowe elementy dla DLR). Wyrażenie Tres to część obniżania paska języków portingu do .NET, a my używamy ich w dla binderów i protokołów DynamicMetaObject.

+0

Dodano edycję, aby lepiej wyjaśnić moje pytanie. –

1

DLR na codepleksie jest open source, więc DUŻO łatwiej jest wprowadzić ulepszenia/dodatki do funkcji wsparcia, których może wymagać twój język.

3

Podczas opracowywania DLR dzielimy go na dwie części - warstwę wewnętrzną i warstwę zewnętrzną. Wewnętrzna warstwa składała się z buforowania strony wywołania, rozszerzonych drzewek wyrażeń i protokołu metaobiektu. Wszystko to było przeznaczone i zostało dodane do .NET 4.0.

Zewnętrzna warstwa składa się z hostujących interfejsów API, interpretatora drzewa ekspresji, obsługi współdziałania COM, dostosowywanego przeszukiwacza przeciążeniowego do wywoływania metod .NET, domyślnego modułu wiążącego dla większości operacji DLR i wielu innych różnych pomocników. Żadna z nich nie została dostarczona w środowisku .NET, ale nadal może być przydatna. Podczas korzystania z tego na platformie .NET 4.0 jest on oparty na interfejsach API DLR przesłanych w .NET 4.0.

Zewnętrzna warstwa została również podzielona na dwie części - hostujący interfejs API (Microsoft.Scripting.dll) i wszystko inne (Microsoft.Dynamic.dll). Możesz kierować interfejsy API hostingu DLR, jeśli chcesz, aby ludzie mogli hostować twój język w taki sam sposób, w jaki używają IronPython i IronRuby. Możesz też użyć Microsoft.Dynamic.dll lub po prostu wyciągnąć z niego użyteczne fragmenty kodu, zamiast ponownie odkrywać koło. W obu przypadkach, jeśli chcesz najnowszą wersję, musisz sprawdzić witryny IronPython/IronRuby, ponieważ Microsoft nie jest już aktywnie rozwijać zewnętrznych składników warstwy.