Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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"), null, SourceCodeKind.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文档请参考https://compilerlab.members.winisp.net/dlr-spec-hosting.pdf(英文版)
Software Development Engineer
范翔
Comments
Anonymous
September 17, 2008
PingBack from http://www.easycoded.com/dlr-in-silverlight/Anonymous
October 01, 2008
袖珍超级计算机Cray CX1 微软和Cray两家公司在历史上首次联手,提供各自最好的技术生产出了 Cray CX1 ! CX1是个什么东东呢?它是一个运行Windows HPC Server 2008的超级计算机,大小和普通PC相当。这是Cray公司迄今为止提供的最实惠的超级计算机:两万五千美金,微软、Cray和其他一些公司9月15日早上八点宣布开始供货。