Dynamic Language Runtime

Dynamic Language Runtime (DLR) – projekt firmy Microsoft mający na celu stworzenie zestawu usług zbudowanych na bazie Common Language Runtime (CLR) wspomagających tworzenie i wykonywanie różnych dynamicznych języków programowania oraz ich integrację z platformą .NET Framework.

Usługi te to:

  • Dynamiczny system typów, współdzielony pomiędzy wszystkie implementacje języków wykorzystujących DLR.
  • Expression Trees, czyli dynamiczne drzewa wyrażeń reprezentujące semantykę danego języka.
  • Call Site Caching, czyli mechanizm pamięci podręcznej przyspieszający operacje wykonywane na obiektach o dynamicznych typach danych, zazwyczaj poprzez zapamiętywanie cech tych obiektów (najczęściej ich typów danych).
  • Dynamic Object Interoperability, to zestaw klas i interfejsów reprezentujących dynamiczny obiekt i operacje na nim, które mogą być użyte przez programistów implementujących kolejne dynamiczne języki programowania.
  • API pozwalające na osadzanie (hosting) dynamicznych języków we własnych aplikacjach.

Główne zalety DLR:

  • Uproszczenie tworzenia kolejnych implementacji dynamicznych języków programowania wykonywanych poprzez CLR.
  • Rozszerzenie istniejących statycznie typowanych języków programowania, takich jak C#, czy Visual Basic .NET, o wybrane cechy dynamicznych języków programowania.
  • Niezależność od środowiska uruchomieniowego CLR. Jeżeli w przyszłej wersji platformy .NET zostanie usprawniony np. garbage collector, wszystkie języki uruchamiane na tej platformie automatycznie będą mogły skorzystać z tego usprawnienia.
  • Możliwość współdzielenia bibliotek i obiektów. Dzięki DLR każdy typ danych stworzony w dowolnym języku programowania wykonywanym za pomocą środowiska uruchomieniowego CLR jest ze sobą kompatybilny. Obiekt stworzony w języku IronPython może być wykorzystany w języku C# bez żadnych dodatkowych warstw pośredniczących oraz konwersji typów danych.
  • DLR przyczyniło się do stworzenia na platformie .NET Framework szybkich implementacji mechanizmów typu dynamic dispatch(inne języki) oraz dynamic invocation, zapewniających wydajne wytkonywanie dynamicznych operacji poprzez zastosowanie polimorficznej pamięci podręcznej.

Mechanizmy zawarte w DLR zostały użyte do tej pory przy implementacjach języków IronPython oraz IronRuby. DLR jest również częścią platformy .NET Framework w wersji 4.0, oferując wsparcie dla wybranych możliwości dynamicznych języków programowania w sztandarowych, statycznie typowanych językach, takich jak C#, czy Visual Basic.NET.

Najnowsza wersja bibliotek DLR została przez firmę Microsoft przekazana w ręce społeczności i jest rozprowadzana na licencji Apache License, v2.0. DLR będzie również rozwijany niezależnie przez zespół odpowiedzialny za rozwój platformy .NET Framework, w celu zapewnienia wsparcia dla większej ilości możliwości, oferowanych przez dynamiczne języki programowania.

Przykład integracji dynamicznego języka IronPython oraz statycznie typowanego języka C#:

using System;
using System.Linq;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

namespace CallingPythonLib
{
    class Program
    {
        static void Main(string[] args)
        {
            // ustawienie ścieżki do bibliotek języka Python
            System.IO.Directory.SetCurrentDirectory(@"C:\Program Files (x86)\IronPython 2.7\Lib\");

            ScriptRuntime py = Python.CreateRuntime();

            // utworzenie obiektu reprezentującego typ danych zdefiniowany w języku Python
            dynamic random = py.UseFile("random.py");

            int[] items = Enumerable.Range(1, 7).ToArray();

            // wywołanie metody dynamicznego typu Random
            random.shuffle(items);

            foreach (int item in items)
            {
                Console.WriteLine(item);
            }
        }
    }
}

Linki zewnętrzne edytuj

Strona projektu Dynamic Language Runtime

Dokumentacja na portalu MSDN

Artykuł w MSDN Magazine