23
Dynamic Languages Dynamic Languages & The .Net & The .Net Framework Framework Shay Friedman ActionBase http://blogs.microsoft.co.il/ blogs/shayf

Dynamic Languages & The.Net Framework Shay Friedman ActionBase

Embed Size (px)

Citation preview

Dynamic Languages & Dynamic Languages & The .Net FrameworkThe .Net Framework

Shay FriedmanActionBasehttp://blogs.microsoft.co.il/blogs/shayf

יו ל ַש� א ֶכ� ָב ָבה ָב ָאְר�

http://www.flickr.com/photos/ko_an/1472480778/

hru? gr8, i noe u <3 me, i

luv u 2

SMS

http://www.flickr.com/photos/qilin/527130002/

תמסוְר לקמָב"ץ ַשיַש אָבט"ַש !ָבלת"מ חָבל"ז ָבָבח"א

!וַשיַשֶכח מְרָבעו"ַש

http://www.flickr.com/photos/kikasso/1399327118/

Dynamic Languages & Dynamic Languages & The .Net FrameworkThe .Net Framework

Shay FriedmanActionBasehttp://blogs.microsoft.co.il/blogs/shayf

AgendaAgenda

• The Dynamic Languages World• The Dynamic Language Runtime• Dynamic Languages on Everyday Tasks• The Future: Dynamic Capabilities in .Net 4.0• Q & A• Summary

The Dynamic Languages WorldThe Dynamic Languages World

The Dynamic Languages WorldThe Dynamic Languages World

DEMODEMODynamic Languages Introduction

Dynamic Language RuntimeDynamic Language Runtime

Dynamic Language Runtime

Expression TreesExpression Trees Dynamic DispatchDynamic Dispatch Call Site CachingCall Site Caching

JavaScriptBinder

ObjectBinder

PythonBinder

RubyBinder

COMBinder

IronRuby IronPhyton C# VB.Net Others…

Dynamic Language Runtime – LOLCODEDynamic Language Runtime – LOLCODE

HAICAN HAS STDIO?I HAS A FISH ITZ "Yummy"VISIBLE FISHVISIBLE "HAI WORLD!"

IM IN YR LOOP VISIBLE “LOOP!”KTHXKTHXBYE

Code startCode start

Equivalent to:FISH = “Yummy”;Equivalent to:FISH = “Yummy”;

Equivalent to:Console.WriteLine(“HAI WORLD!”);Equivalent to:Console.WriteLine(“HAI WORLD!”);

Loop startLoop start

Loop endLoop end

Code endCode end

DEMODEMODynamic Languages with .Net

Dynamic Languages on Everyday TasksDynamic Languages on Everyday Tasks

DEMODEMODynamic Languages on Everyday Tasks

Dynamic Capabilities in C# 4.0Dynamic Capabilities in C# 4.0

�יק ִנ �ְד� ִנּו

Dynamic Capabilities in C# 4.0Dynamic Capabilities in C# 4.0

Calculator calc = GetCalculator();int sum = calc.Add(10, 20);Calculator calc = GetCalculator();int sum = calc.Add(10, 20);

object calc = GetCalculator();Type calcType = calc.GetType();object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });int sum = Convert.ToInt32(res);

object calc = GetCalculator();Type calcType = calc.GetType();object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });int sum = Convert.ToInt32(res);

ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);

ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);

dynamic calc = GetCalculator();int sum = calc.Add(10, 20);

dynamic calc = GetCalculator();int sum = calc.Add(10, 20);

Statically typed to be dynamic

Statically typed to be dynamic

Dynamic method invocation

Dynamic method invocation

Dynamic conversion

Dynamic conversion

Dynamic Capabilities in C# 4.0Dynamic Capabilities in C# 4.0public abstract class DynamicObject : IDynamicObject{ public virtual object GetMember(GetMemberBinder info); public virtual object SetMember(SetMemberBinder info, object value); public virtual object DeleteMember(DeleteMemberBinder info);  public virtual object UnaryOperation(UnaryOperationBinder info); public virtual object BinaryOperation(BinaryOperationBinder info, object arg); public virtual object Convert(ConvertBinder info);  public virtual object Invoke(InvokeBinder info, object[] args); public virtual object InvokeMember(InvokeMemberBinder info, object[] args); public virtual object CreateInstance(CreateInstanceBinder info, object[] args);  public virtual object GetIndex(GetIndexBinder info, object[] indices); public virtual object SetIndex(SetIndexBinder info, object[] indices, object value); public virtual object DeleteIndex(DeleteIndexBinder info, object[] indices);  public MetaObject IDynamicObject.GetMetaObject();}

public abstract class DynamicObject : IDynamicObject{ public virtual object GetMember(GetMemberBinder info); public virtual object SetMember(SetMemberBinder info, object value); public virtual object DeleteMember(DeleteMemberBinder info);  public virtual object UnaryOperation(UnaryOperationBinder info); public virtual object BinaryOperation(BinaryOperationBinder info, object arg); public virtual object Convert(ConvertBinder info);  public virtual object Invoke(InvokeBinder info, object[] args); public virtual object InvokeMember(InvokeMemberBinder info, object[] args); public virtual object CreateInstance(CreateInstanceBinder info, object[] args);  public virtual object GetIndex(GetIndexBinder info, object[] indices); public virtual object SetIndex(SetIndexBinder info, object[] indices, object value); public virtual object DeleteIndex(DeleteIndexBinder info, object[] indices);  public MetaObject IDynamicObject.GetMetaObject();}

DEMODEMODynamic Capabilities in C# 4.0

Q & AQ & A

SummarySummary

• The Dynamic Languages World• The Dynamic Language Runtime• Dynamic Languages on Everyday Tasks• The Future: Dynamic Capabilities in .Net 4.0• Try it yourself:

http://blogs.microsoft.co.il/blogs/shayf

© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after

the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.