This document discusses dynamic languages on the .NET framework. It introduces IronPython and IronRuby, which are dynamic language implementations that run on the .NET Common Language Runtime (CLR) and Dynamic Language Runtime (DLR). It explains that dynamic languages on DLR are first-class .NET citizens that provide simplicity while leveraging the robust .NET libraries and tools. The document demonstrates integrating Ruby test frameworks in C# and embedding IronPython in Visual Studio as examples of using dynamic languages on DLR. It concludes by mentioning future dynamic language implementations could be built for DLR.
13. The traditional view of the world
Dynamic Static
Languages Languages
Simple and succinct Robust
Implicitly typed Performance
Meta-programming Intelligent tools
No compilation Better scaling
15. Dynamic Languages on .NET
IronPython IronRuby Iron?
C# VB.NET
Common Language Runtime
16. Multiple Language Dynamic Dispatch
IronPython IronRuby C# VB.NET
x.Foo x.Foo x.Foo x.Foo
Dynamic Language Runtime
GetMember
Name=“Foo”, IgnoreCase=false
Object COM Python Ruby
Binder Binder Binder Binder
17. Today’s view of the world
Common Language = CLR + DLR
Dynamic Static
Languages Languages
Simple and succinct Robust
Implicitly typed Performance
Meta-programming Intelligent tools
No compilation Better scaling
20. IronWhat?
• True language implementation
– True to the language
– True to the community
– True to the experience
– Excellent performance
• Great integration with .NET
– Easy to use .NET libraries
– Easy to use other .NET languages
– Easy to use in .NET hosts
– Easy to use with .NET tools
• Implementation Running On .NET
26. [TestClass]
public class StackTest {
[TestMethod]
public void NewStackHasZeroElements() {
var s = new Stack<string>();
Assert.AreEqual<int>(0, s.Count); }
[TestMethod]
public void StackPeekTopElement() {
var s = new Stack<string>();
s.Push("bob");
Assert.AreEqual<int>(1, s.Count);
Assert.AreEqual<string>("bob", s.Peek()); }
[TestMethod]
public void StackPopTopElement() {
var s = new Stack<string>();
s.Push("bob");
Assert.AreEqual<string>("bob", s.Pop());
Assert.AreEqual<int>(0, s.Count); } }