DLR in Silverlight

本文介绍了如何在Silverlight中利用Dynamic Language Runtime (DLR)调用Python、Ruby和JSX等动态语言,通过初始化环境配置、获取运行引擎并执行代码实现跨语言编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DLR(Dynamic Language Runtime)是Silverlight中提供的一套非常强大的动态语言运行时。目前2.0 beta2中支持Python,Ruby和JSX。利用DLR,你可以很方便的使用熟悉的动态语言编写Silverlight程序。本文主要介绍如何在托管语言中调用动态语言。

 

首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。

 

ScriptRuntimeSetup setup = new ScriptRuntimeSetup(true); //true表示载入所有支持的动态语言的环境配置
ScriptRuntime runtime = ScriptRuntime.Create(setup); //创建动态语言运行环境

foreach (LanguageProviderSetup langSetup in setup.LanguageProviders) //遍历所有动态语言的环境配置
{
    try
    {
        ScriptEngine engine = null;
        if (runtime.TryGetEngine(langSetup.Names[0], out engine)) //尝试获取动态语言的运行引擎
        {
            //engine就是我们需要的运行引擎
        }
    }
    catch (MissingTypeException//处理创建不支持的动态语言时可能抛出异常
    {
    }
}

 

获取了运行引擎后,我们就可以执行动态语言的代码了。

 

public  class  MyErrorSink :  ErrorSink //编译错误处理
{
     IList< string> m_ErrorMsg =  new  List< string>();
     public  IList< string> ErrorMsg
    {
         get {  return m_ErrorMsg; }
    }

     public MyErrorSink()
    {
    }
     public  virtual  void Add( SourceUnit source,  string message,  SourceSpan span,  int errorCode,  Severity severity)
    {
         if (severity ==  Severity.Error || severity ==  Severity.FatalError)
        {
            m_ErrorMsg.Add(message);
        }
    }
}

LanguageContext langContext = HostingHelpers.GetLanguageContext(engine);
SourceUnit sourceUnit = langContext.CreateSourceUnit(new SourceStringContentProvider("1/4+3"), nullSourceCodeKind.Expression); //创建代码序列:1/4+3

MyErrorSink errorSink = new MyErrorSink();
try
{
    Scope scope = new Scope();
    object ret = sourceUnit.Execute(scope, errorSink); //执行动态语言代码,ret就是执行结果的返回值了

    if (errorSink.ErrorMsg.Count > 0) //检查编译错误
    {
        //
    }
}
catch (Exception)
{
}

 

是不是很方便呢 :-) 完整的DLR文档请参考http://compilerlab.members.winisp.net/dlr-spec-hosting.pdf(英文版)

PS:你也可以使用配置文件或者直接初始化动态语言运行引擎。: )

 

Software Development Engineer
范翔

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值