Udostępnij za pośrednictwem


Omówienie ś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 i uruchamianie języków dynamicznych na platformie .NET oraz dodawanie funkcji dynamicznych do języków statycznie typowanych.

Języki dynamiczne mogą identyfikować typ obiektu w czasie wykonania, natomiast w statycznie typowanych językach, takich jak C# i Visual Basic, gdy używasz 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 informacji zwrotnej (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 systemu DLR jest umożliwienie działania dynamicznych języków na platformie .NET i zapewnienie im współpracy z platformą .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 opracowanego 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ęzyków unikanie tworzenia analizatorów leksykalnych, analizatorów składniowych, analizatorów semantycznych, generatorów kodu i innych narzędzi, które tradycyjnie musieli tworzyć sami. 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 interfejs IDynamicMetaObjectProvider. 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 DLR i platformy .NET

Języki zaimplementowane przy użyciu biblioteki DLR mogą korzystać z przyszłych ulepszeń bibliotek DLLR i .NET. Na przykład, jeśli platforma .NET wydaje nową wersję z ulepszonym mechanizmem oczyszczania pamięci lub krótszym czasem ładowania zestawów, języki zaimplementowane przy użyciu biblioteki DLR natychmiast uzyskują 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 typizowanymi i dynamicznymi językami. 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 dla lepszego wsparcia 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 DLR rozszerzyło drzewa wyrażeń LINQ, aby uwzględnić przepływ sterowania, przypisania i inne węzły modelowania języka. Aby uzyskać więcej informacji, zobacz drzewa wyrażeń (C#) lub drzewa wyrażeń (Visual Basic).

  • Buforowanie witryn połączeń. miejsce wywołania dynamicznego jest miejscem w kodzie, w którym wykonujesz operację, taką jak a + b lub a.b() na obiektach dynamicznych. Biblioteka DLR buforuje cechy a i b (zazwyczaj typy tych obiektów) oraz informacje dotyczące operacji. Jeśli taka operacja została wykonana wcześniej, DLR pobiera wszystkie niezbędne informacje z pamięci podręcznej do szybkiego przetwarzania.

  • 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, DynamicMetaObject, DynamicObjecti ExpandoObject.

Biblioteka DLR używa wiążących funkcji w miejscach wywołań do komunikacji nie tylko z platformą .NET, ale także z innymi infrastrukturami i usługami, takimi jak COM. Wiążące hermetyzują semantykę języka i określają sposób wykonywania operacji w miejscu wywołania przy użyciu drzew wyrażeń. Języki dynamicznie i statycznie typowane, które używają DLR, mogą dzielić się zasobami i uzyskiwać dostęp do wszystkich technologii obsługiwanych przez 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 używania języka dynamicznego na platformie .NET, zobacz dokumentację dotyczącą repozytorium IronLanguages/dlr w witrynie GitHub.

Zobacz też