Dynamic Language Runtime

Dynamic Language Runtime (DLR)Original author(s)| Microsoft Dynamic Language Runtime Team

|

Developer(s)| .NET Foundation
Initial release| April 16, 2010; 14 years ago (2010-04-16)
Stable release|

1.3.1 / December 2, 2021; 3 years ago (2021-12-02)[1]

Repository| github.com/IronLanguages/dlr
Written in| C#
Operating system| Windows, macOS, Linux (Debian, Ubuntu)
Platform| Common Language Infrastructure
Type| System platform
License| Apache License 2.0
Website| docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/dynamic-language-runtime-overview

The Dynamic Language Runtime (DLR) from Microsoft runs on top of the Common Language Runtime (CLR) and provides computer language services for dynamic languages. These services include:

* A dynamic type system, to be shared by all languages using the DLR services
* Dynamic method dispatch
* Dynamic code generation
* Hosting API

The DLR is used to implement dynamic languages on the .NET Framework, including the IronPython and IronRuby projects.

Because the dynamic language implementations share a common underlying system, it should be easier for them to interact with one another. For example, it should be possible to use libraries from any dynamic language in any other dynamic language. In addition, the hosting API allows interoperability with statically typed CLI languages like C# and Visual Basic .NET.

## History

[edit]

Microsoft's Dynamic Language Runtime project was announced by Microsoft at MIX 2007.[2][3]

Microsoft shipped .NET DLR 0.9 beta in November 2008,[4] and final 0.9 in December 2008. Version 1.0 shipped in April 2010. In July 2010, Microsoft changed the license of the DLR from the Microsoft Public License to the Apache License 2.0.[5] With the release of .NET 4, also in April 2010, DLR was incorporated into the .NET Framework itself.[6]

The open source DLR project hosted on GitHub has a few additional features for language implementers. After the July 2010 release, there was little activity on the project for some years. This was interpreted by a Microsoft developer who worked on IronRuby as a lack of commitment from Microsoft to dynamic languages on the .NET Framework.[7][8] However, there has been regular activity since 2016/17, leading to a number of improvements and upgrades.

## Language implementations

[edit]

In 2007, Microsoft initially planned to use the DLR for the upcoming Visual Basic 2010 (VB 10.0) and Managed JScript (ECMAScript 3.0) as well as Python and Ruby.[2][9][10][11][12]

The DLR work on Ruby and Python resulted in IronRuby, a .NET implementation of the Ruby language, and IronPython.[2]

By August 2009, Microsoft had announced it had no more plans to implement Managed JScript on the DLR.[13] Fredrik Holmström later independently contributed a JavaScript implementation for the DLR which he dubbed "IronJS" in the naming tradition of IronPython and IronRuby.

Like C#, Visual Basic can access objects from dynamic languages built on the DLR such as IronPython and IronRuby.[14][15]

PowerShell 3.0, released in Windows 8, was updated to use the DLR.[16]

IronScheme, a Scheme implementation,[17] was planning to build upon the DLR. This idea was abandoned because the DLR branch used by the project became out of sync with the trunk, and also because (according to the project coordinator) the current version of the DLR at that time could not support the majority of Scheme's requirements.[18]

## Architecture

[edit]

The Dynamic Language Runtime is built on the idea that it is possible to implement language specificities on top of a generic language-agnostic abstract syntax tree, whose nodes correspond to a specific functionality that is common to many dynamic languages.[19] This architecture is backed by the idea that the number of elementary language constructs that would have to be implemented on the generic stack should be inherently limited.[20] The DLR dynamically generates code corresponding to the functionality expressed by these nodes. The compiler for any dynamic language implemented on top of the DLR has to generate DLR abstract trees, and hand it over to the DLR libraries.

The DLR provides dynamically updated `DynamicSite` objects that cache the task of binding methods to objects. Since the type of an object—as well as the members it contains—in dynamic languages can change during a program lifetime, a method invocation must check the method list to see if the invocation is a valid one. `DynamicSite` objects represent and cache the state of the object and its methods; any update to the object is reflected in the `DynamicSite` objects as well. DLR routes all method invocations via the `DynamicSite` objects, which then performs a fast lookup and binding of the method with the actual implementation.[21]

In contrast to other efforts like the Parrot virtual machine (with no dependencies) or Da Vinci Machine (built on Java's JVM by adding new bytecodes in the JVM instruction set), the DLR is built on top of the existing Common Language Runtime, the .NET Framework virtual machine.[22]

## See also

[edit]

* Free and open-source software portal

* Da Vinci Machine – a project starting at Sun Microsystems which brought support for dynamic languages to the Java Platform at the Java virtual machine (JVM) level
* Parrot virtual machine

## References

[edit]

1. ^ "Releases". IronLanguages/dlr. GitHub. Retrieved 2022-01-27.
2. ^ a b c Hugunin, Jim. "A Dynamic Language Runtime (DLR)". Retrieved 2007-06-21. "For the short term, our focus is on using a small number of languages to drive the first wave of DLR development where we can work closely and face-to-face with the developers in order to iron out the worst kinks in the DLR design. After this initial phase, we want to reach out to the broader language community."
3. ^ Viehland, Dino (2008-01-15). "Roadmap for IronPython 2.0". Archived from the original on 2008-09-06. Retrieved 2008-02-09. "We don't really have a document like this but the general goal is to ship IronPython 2.0 by the end of the year. For the DLR itself the plan is to ship a v1.0 around the same time as IronPython 2.0."
4. ^ "CodePlex Archive".
5. ^ "CodePlex Archive". Archived from the original on 2011-08-14. Retrieved 2010-07-27.
6. ^ "Dynamic Language Runtime Overview - .NET Framework". 30 March 2024.
7. ^ "Microsoft Tires of IronRuby; Jimmy Schementi Jumps Ship". rubyinside.com. 2010-08-07. Retrieved 2012-02-26. "A year ago the team shrunk by half and our agility was severely limited. [..] Overall, I see a serious lack of commitment to IronRuby, and dynamic language[s] on .NET in general."
8. ^ "Microsoft's Dynamic languages are dying". i-programmer.info. 2010-08-10. Retrieved 2012-02-26. "Without the final push to get the languages working under Visual Studio and integrated with the designer both Iron languages are probably dead - and Microsoft seems to have lost the will to make them a success."
9. ^ "Managed JScript announced". Retrieved 2007-05-04.
10. ^ "What the heck is "VBx"?". 2007-05-01. Archived from the original on 2009-05-25. Retrieved 2009-08-12. "With the new DLR, we have support for IronPython, IronRuby, Javascript, and the new dynamic VBx compile"
11. ^ "Putting Mix, Silverlight, the CoreCLR and the DLR into context". 2007-05-01. Retrieved 2008-08-12.
12. ^ "Introducing Visual Basic 10". infoq.com. 2007-05-04. Retrieved 2009-08-12. "VB 10 takes advantage of a Silverlight feature called the Dynamic Language Runtime or DLR"
13. ^ Chiles, Bill (2009-06-01). "Future of Managed JScript (IronJScript)?". Archived from the original on 2009-08-31. Retrieved 2009-08-12. "The DLR JScript was experimental for informing the design of the DLR (expression trees, interop, callsites, hosting, etc.). The JS we released with asp futures and the Silverlight dynamic sdk became very old and unserviceable as the DLR continued evolving for release in CLR 4.0. Unfortunately, there are no plans at this time to develop and release a DLR-hostable JScript."
14. ^ "What's New in Visual Basic 2010". Microsoft. 2009. Retrieved 2009-08-12. "Visual Basic binds to objects from dynamic languages such as IronPython and IronRuby"
15. ^ "Walkthrough: Creating and Using Dynamic Objects (C# and Visual Basic)". 25 February 2023.
16. ^ "PowerShell 3 – Finally on the DLR!". Archived from the original on 2012-04-28. Retrieved 2012-03-30.
17. ^ "CodePlex Archive".
18. ^ "Is there any silverlight sample?". 2009-05-11. Archived from the original on January 19, 2013. Retrieved 2009-07-26. "Unfortunately, my DLR branch is very out of sync with the Silverlight one. I just thought about it, perhaps I do not need the DLR perse, will investigate. The problem is that the DLR as-is, is not good enough to support the majority of the Scheme's requirements"
19. ^ Hugunin, Jim (2007-05-15). "DLR Trees (Part 1)". Retrieved 2008-02-23. "The key implementation trick in the DLR is using these kinds of trees to pass code around as data and to keep code in an easily analyzable and mutable form as long as possible."
20. ^ Nutter, Charles (2008-01-28). "Lang.NET 2008: Day 1 Thoughts". Retrieved 2008-02-23. "The idea is that there's a quickly-flattening asymptotic curve to the number of expression tree nodes required to implement each new language. Whether that's the case is yet to be seen."
21. ^ Bill Chiles (October 2007). "CLR Inside Out: IronPython and the Dynamic Language Runtime". MSDN Magazine. Retrieved 2007-08-10.
22. ^ Rose, John (2008-02-02). "Bravo for the dynamic runtime!". Archived from the original on 2008-02-06. Retrieved 2008-02-23. "The differences between the CLR and JVM extensions are interesting to note. They work completely above the level of the CLR without significantly enhancing it, while we are developing the JVM and libraries at the same time."

* "MIX 07 - Silverlight shines brighter!". Retrieved 2007-04-30.
* "MIX 07 Video Presentation - DEV02 - Just Glue It! Ruby and the DLR in Silverlight". Archived from the original on 2007-05-08. Retrieved 2007-05-04.
* "Jim Hugunin's Thinking Dynamic – A Dynamic language runtime (DLR)". Retrieved 2008-02-06.
* "Details of source package dlr-languages in squeeze – DLR in Debian". Retrieved 2010-07-06.
* "Details of source package dlr-languages in lucid – DLR in Ubuntu". Retrieved 2010-07-06.
* "Pratap Lakshman's o.x the Managed JScript Type System". Archived from the original on 2013-12-08. Retrieved 2008-01-28.

## External links

[edit]

Wikibooks has a book on the topic of: .NET Development Foundation

* Dynamic Language Runtime Overview
* dlr on GitHub

* v
* t
* e

.NET

* .NET strategy
* Libraries and frameworks

Implementations|

* .NET (Core)
* .NET Framework
* Version history
* .NET Compact Framework
* .NET Micro Framework
* DotGNU
* Mono
* XNA Framework

Architecture|

* Common Language Runtime (CLR)
* COM Interop
* Framework Class Library (FCL)

Components|

* ADO.NET
* Entity Framework
* ASP.NET
* Web Forms
* AJAX
* Core
* Dynamic Data
* MVC
* Razor
* Avalonia
* ClickOnce
* Dynamic Language Runtime
* Extensible Application Markup Language (XAML)
* Language Integrated Query (LINQ)
* Managed Extensibility Framework
* Microsoft Silverlight
* Microsoft XNA
* Parallel Extensions
* Windows Communication Foundation (WCF)
* WCF Data Services
* Windows Forms (WinForms)
* Windows Identity Foundation (WIF)
* Windows Presentation Foundation (WPF)
* Windows Workflow Foundation (WF)
* .NET Remoting

Tools|

| Decompilers|

* .NET Reflector
* dotPeek

|

Obfuscators|

* Dotfuscator
* SmartAssembly

* CLR Profiler
* ILAsm
* .NET Compiler Platform
* Native Image Generator (NGen)
* XAMLPad

IDEs|

* Visual Studio
* Blend
* Express
* MonoDevelop
* SharpDevelop
* Xamarin Studio

Organizations|

* .NET Foundation
* Microsoft
* Xamarin

* Category
* List
* Commons

* v
* t
* e

Microsoft free and open-source software (FOSS)

Overview|

* Microsoft and open source
* Shared Source Initiative

Software|

| Applications|

* 3D Movie Maker
* Atom
* Conference XP
* Family.Show
* File Manager
* Open Live Writer
* Microsoft PowerToys
* Terminal
* Windows Calculator
* Windows Console
* Windows Package Manager
* WorldWide Telescope
* XML Notepad

|

Video games|

* Allegiance

Programming
languages|

* Bosque
* C#
* Dafny
* F#
* F*
* GW-BASIC
* IronPython
* IronRuby
* Lean
* P
* Power Fx
* PowerShell
* Project Verona
* Q#
* Small Basic Online
* TypeScript
* Visual Basic

Frameworks,
development tools|

* .NET
* .NET Framework
* .NET Gadgeteer
* .NET MAUI
* .NET Micro Framework
* AirSim
* ASP.NET
* ASP.NET AJAX
* ASP.NET Core
* ASP.NET MVC
* ASP.NET Razor
* ASP.NET Web Forms
* Avalonia
* Babylon.js
* BitFunnel
* Blazor
* C++/WinRT
* CCF
* ChakraCore
* CLR Profiler
* Dapr
* DeepSpeed
* DiskSpd
* Dryad
* Dynamic Language Runtime
* eBPF on Windows
* Electron
* Entity Framework
* Fluent Design System
* Fluid Framework
* Infer.NET
* LightGBM
* Managed Extensibility Framework
* Microsoft Automatic Graph Layout
* Microsoft C++ Standard Library
* Microsoft Cognitive Toolkit
* Microsoft Design Language
* Microsoft Detours
* Microsoft Enterprise Library
* Microsoft SEAL
* mimalloc
* Mixed Reality Toolkit
* ML.NET
* mod_mono
* Mono
* MonoDevelop
* MSBuild
* MsQuic
* Neural Network Intelligence
* npm
* NuGet
* OneFuzz
* Open Management Infrastructure
* Open Neural Network Exchange
* Open Service Mesh
* Open XML SDK
* Orleans
* Playwright
* ProcDump
* ProcMon
* Python Tools for Visual Studio
* R Tools for Visual Studio
* RecursiveExtractor
* Roslyn
* Sandcastle
* SignalR
* StyleCop
* SVNBridge
* T2 Temporal Prover
* Text Template Transformation Toolkit
* TLA+ Toolbox
* U-Prove
* vcpkg
* Virtual File System for Git
* Voldemort
* VoTT
* Vowpal Wabbit
* Windows App SDK
* Windows Communication Foundation
* Windows Driver Frameworks
* KMDF
* UMDF
* Windows Forms
* Windows Presentation Foundation
* Windows Template Library
* Windows UI Library
* WinJS
* WinObjC
* WiX
* XDP for Windows
* XSP
* xUnit.net
* Z3 Theorem Prover

Operating systems|

* MS-DOS (v1.25, v2.0 & v4.0)
* Barrelfish
* SONiC
* Azure Linux

Other|

* ChronoZoom
* Extensible Storage Engine
* FlexWiki
* FourQ
* Gollum
* Project Mu
* ReactiveX
* SILK
* TLAPS
* TPM 2.0 Reference Implementation
* WikiBhasha

Licenses|

* Microsoft Public License
* Microsoft Reciprocal License

Forges|

* CodePlex
* GitHub

Related|

* .NET Foundation
* F# Software Foundation
* Microsoft Open Specification Promise
* Open Letter to Hobbyists
* Open Source Security Foundation
* Outercurve Foundation

Category
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template