Dynamic Language Runtime

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Dynamic Language Runtime (DLR) to 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 oraz dynamic invocation, zapewniających wydajne wykonywanie 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 we flagowych, 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 | edytuj kod]

Strona projektu Dynamic Language Runtime

Dokumentacja na portalu MSDN

Artykuł w MSDN Magazine