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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.