Przegląd środowiska uruchomieniowego języka dynamicznego
Środowisko uruchomieniowe języka dynamicznego (DLR) to środowisko uruchomieniowe, które dodaje zestaw usług dla języków dynamicznych do środowiska uruchomieniowego języka wspólnego (CLR). Biblioteka DLR ułatwia opracowywanie języków dynamicznych uruchamianych na platformie .NET i dodawanie funkcji dynamicznych do języków statycznie typicznie.
Języki dynamiczne mogą identyfikować typ obiektu w czasie wykonywania, natomiast w statycznie typowych językach, takich jak C# i Visual Basic (w przypadku użycia Option Explicit On
), należy określić typy obiektów w czasie projektowania. Przykłady języków dynamicznych to Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra i Groovy.
Większość języków dynamicznych zapewnia następujące korzyści dla deweloperów:
- Możliwość używania pętli szybkiej opinii (REPL lub pętli read-evaluate-print). Dzięki temu można wprowadzić kilka instrukcji i natychmiast je wykonać, aby wyświetlić wyniki.
- Obsługa zarówno rozwoju od góry w dół, jak i bardziej tradycyjnego rozwoju dolnego. Jeśli na przykład używasz podejścia od góry do dołu, możesz wywoływać funkcje, które nie zostały jeszcze zaimplementowane, a następnie dodawać podstawowe implementacje, gdy są potrzebne.
- Łatwiejsza refaktoryzacja i modyfikacje kodu, ponieważ nie trzeba zmieniać deklaracji typów statycznych w całym kodzie.
Języki dynamiczne tworzą doskonałe języki skryptowe. Klienci mogą łatwo rozszerzać aplikacje tworzone przy użyciu języków dynamicznych za pomocą nowych poleceń i funkcji. Języki dynamiczne są również często używane do tworzenia witryn internetowych i testowych uprzężeń, obsługi farm serwerów, opracowywania różnych narzędzi i przeprowadzania przekształceń danych.
Celem biblioteki DLR jest umożliwienie uruchamiania systemu języków dynamicznych na platformie .NET i zapewnienie im współdziałania platformy .NET. Biblioteka DLR dodaje obiekty dynamiczne do języków C# i Visual Basic w celu obsługi dynamicznego zachowania w tych językach i umożliwienia współdziałania z językami dynamicznymi.
Biblioteka DLR ułatwia również tworzenie bibliotek obsługujących operacje dynamiczne. Jeśli na przykład masz bibliotekę używającą obiektów XML lub JavaScript Object Notation (JSON), obiekty mogą być wyświetlane jako obiekty dynamiczne w językach korzystających z biblioteki DLR. Dzięki temu użytkownicy biblioteki piszą składniowo prostszy i bardziej naturalny kod do obsługi obiektów i uzyskiwania dostępu do elementów członkowskich obiektów.
Na przykład możesz użyć następującego kodu, aby zwiększać licznik w kodzie XML w języku C#.
Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);
Korzystając z biblioteki DLR, można użyć następującego kodu zamiast tej samej operacji.
scriptobj.Count += 1;
Podobnie jak CLR, biblioteka DLR jest częścią platformy .NET. Jest on dostępny do pobrania w repozytorium IronLanguages/dlr w witrynie GitHub.
IronPython to przykład języka, który został opracowany przy użyciu biblioteki DLR.
Podstawowe zalety biblioteki DLR
Biblioteka DLR zapewnia następujące korzyści.
Upraszcza przenoszenie języków dynamicznych do platformy .NET
Biblioteka DLR umożliwia implementatorom języka unikanie tworzenia analizatorów leksykalnych, analizatorów, analizatorów semantycznych, generatorów kodu i innych narzędzi, które tradycyjnie musiały utworzyć. Aby korzystać z biblioteki DLR, język musi tworzyć drzewa wyrażeń, które reprezentują kod na poziomie języka w strukturze w kształcie drzewa, procedury pomocnika środowiska uruchomieniowego i opcjonalne obiekty dynamiczne implementujące IDynamicMetaObjectProvider interfejs. Biblioteka DLR i platforma .NET automatyzują wiele zadań analizy kodu i generowania kodu. Umożliwia to implementatorom języka skoncentrowanie się na unikatowych funkcjach językowych.
Włącza funkcje dynamiczne w statycznie typiowanych językach
Istniejące języki platformy .NET, takie jak C# i Visual Basic, mogą tworzyć obiekty dynamiczne i używać ich razem ze statycznie typizowanymi obiektami. Na przykład języki C# i Visual Basic mogą używać obiektów dynamicznych dla języków HTML, Document Object Model (DOM) i odbicia.
Zapewnia przyszłe korzyści wynikające z biblioteki DLR i platformy .NET
Języki zaimplementowane przy użyciu biblioteki DLR mogą korzystać z przyszłych ulepszeń bibliotek DLLR i .NET. Jeśli na przykład platforma .NET zwalnia nową wersję, która ma ulepszony czas ładowania pamięci lub krótszy czas ładowania zestawu, języki zaimplementowane przy użyciu biblioteki DLR natychmiast uzyskają tę samą korzyść. Jeśli biblioteka DLR dodaje optymalizacje, takie jak lepsza kompilacja, wydajność również poprawia się dla wszystkich języków implementowanych przy użyciu biblioteki DLR.
Umożliwia udostępnianie bibliotek i obiektów
Obiekty i biblioteki zaimplementowane w jednym języku mogą być używane przez inne języki. Biblioteka DLR umożliwia również współdziałanie między statycznie typizowanym i dynamicznym językiem. Na przykład język C# może zadeklarować obiekt dynamiczny, który używa biblioteki napisanej w języku dynamicznym. Jednocześnie języki dynamiczne mogą używać bibliotek z programu .NET Framework.
Zapewnia szybką dynamiczną wysyłkę i wywołanie
Biblioteka DLR zapewnia szybkie wykonywanie operacji dynamicznych, obsługując zaawansowane buforowanie polimorficzne. Biblioteka DLR tworzy reguły dla operacji powiązań, które używają obiektów do niezbędnych implementacji środowiska uruchomieniowego, a następnie buforuje te reguły, aby uniknąć wyczerpania zasobów obliczeń powiązań podczas kolejnych wykonań tego samego kodu na tych samych typach obiektów.
Architektura biblioteki DLR
Biblioteka DLR dodaje zestaw usług do środowiska CLR w celu lepszego obsługi języków dynamicznych. Te usługi obejmują następujące elementy:
Drzewa wyrażeń. Biblioteka DLR używa drzew wyrażeń do reprezentowania semantyki języka. W tym celu biblioteka DLR ma rozszerzone drzewa wyrażeń LINQ w celu uwzględnienia przepływu sterowania, przypisania i innych węzłów modelowania języka. Aby uzyskać więcej informacji, zobacz Drzewa wyrażeń (C#) lub Drzewa wyrażeń (Visual Basic).
Buforowanie witryn połączeń. Dynamiczna lokacja wywołania to miejsce w kodzie, w którym wykonujesz operację podobną
a + b
do luba.b()
na obiektach dynamicznych. Biblioteka DLR buforuje cechya
ib
(zazwyczaj typy tych obiektów) i informacje o operacji. Jeśli taka operacja została wykonana wcześniej, biblioteka DLR pobiera wszystkie niezbędne informacje z pamięci podręcznej do szybkiego wysyłania.Współdziałanie obiektu dynamicznego. Biblioteka DLR udostępnia zestaw klas i interfejsów reprezentujących dynamiczne obiekty i operacje oraz może być używany przez implementatorów języka i autorów bibliotek dynamicznych. Te klasy i interfejsy obejmują IDynamicMetaObjectProvider, , DynamicObjectDynamicMetaObjecti ExpandoObject.
Biblioteka DLR używa powiązań w lokacjach wywołań do komunikowania się nie tylko z platformą .NET, ale także z innymi infrastrukturami i usługami, takimi jak COM. Bindery hermetyzują semantyka języka i określają sposób wykonywania operacji w lokacji wywołania przy użyciu drzew wyrażeń. Umożliwia to dynamiczne i statycznie wpisywane języki, które używają bibliotek DLR do udostępniania bibliotek i uzyskiwania dostępu do wszystkich technologii obsługiwanych przez bibliotekę DLR.
Dokumentacja biblioteki DLR
Aby uzyskać więcej informacji na temat używania wersji open source biblioteki DLR do dodawania dynamicznego zachowania do języka lub sposobu włączania korzystania z języka dynamicznego na platformie .NET, zobacz dokumentację dotyczącą repozytorium IronLanguages/dlr w usłudze GitHub.