`
RednaxelaFX
  • 浏览: 3047949 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

针对Change Set 32648而更新的荒井省三的简单DLR语言例子

    博客分类:
  • DLR
阅读更多
为什么会有这东西呢?请看这边:LanguageProvider跑哪里去了?。我很“高兴”的发现我把日期的May看成Mar了,于是错过了好几个更新信息。呜呜。

错过的其中一个信息就是荒井省三对他所作的简单DLR语言的例子对DLR Beta 2的更新。结果我傻乎乎的自己把那个例子针对change set 32648做了次更新。

诶,既然做了还是发出来吧。虽然一发出来就是过时的东西……
注意:下面的代码包里没有包含DLR的代码。请自行从IronPython的源码发布页面下载change set 32648的源码来得到对应版本的DLR。

更新点:(相对原始版本的)

1、命名空间变更。有部分DLR类从Microsoft.Scripting转移到了Microsoft.Scripting.Runtime里。
2、OptionsParser类的构造器参数有改变。受此影响MyCalcOptionsParser的构造器添加了context参数。
3、获取LanguageContext时不再通过ScriptDomainManager,而是像这样:
Program.cs: MyCalcConsole.Initialize()
this.Options.ScriptEngine = Environment.GetEngine( typeof( MyCalcLanguageContext ) );

4、不再直接使用ScriptDomainManager之后,MyCalcHelper类中的Print方法的参数也相应更新:
public static void Print( CodeContext context, object o ) {
    context.LanguageContext.DomainManager.
        SharedIO.OutputWriter.WriteLine( o ?? "<null>" );
}

5、应对helper的变更,为Print类中Ast.Call()添加context参数。同时,去除Print类的Generate方法中的Statement包装,直接返回Expression。
protected internal DlrAst.Expression Generate( ) {
    return DlrAst.Ast.Call(
        typeof( Runtime.MyCalcHelper ).GetMethod( "Print" ),
        DlrAst.Ast.CodeContext( ),
        DlrAst.Ast.ConvertHelper( _exp, typeof( object ) )
    );
}

这里我没弄明白作者原本为什么会写上了这个包装,但作者自己似乎也发觉这个包装没用而在后来的更新中将其去除了。
7、将原本用到CodeBlock的地方全部更新为使用LambdaExpression。同时,为了生成LambdaExpression,需要用到LambdaBuilder;用Ast.Lambda()来得到LambdaBuilder。
8、把所有Microsoft.Scripting.Ast命名空间用DlrAst的别名代替,将没有使用的命名空间的using语句去除,并且对所有源代码做了适合我自己的习惯的格式化。
9、在Token类里添加了一个静态成员_empty,当需要空token的时候直接返回这个单一实例(而不重复构造空token)。

==============================================================================

以上的一些更改在DLR Beta 2中已经不再适用。例如说ConsoleHost类不再拥有Initialize()方法,换为CreateEngine()方法,并且增加了CreateCommandLine()。另外一个很重要的变化是工厂类Microsoft.Scripting.Ast.Ast被废除,其中的工厂方法都被整合到了Microsoft.Scripting.Ast.Expression(也就是DLR的Ast体系的基类)中。

==============================================================================

荒井省三的blog上使用DLR制作一个简单语言系列:
簡単な言語の作り方1
簡単な言語の作り方2
簡単な言語の作り方3
簡単な言語の作り方4
簡単な言語の作り方5
簡単な言語の作り方-まとめ-
DLRで簡単な言語を作る -ベータ1用に修正しました-
DLR beta2 を使ったホスティング

==============================================================================

顺便对荒井省三针对DLR Beta 2的更新也做了类似的一些适合我自己习惯用的变更,顺便发上来吧。
  • MyCalc_32648.zip (406.3 KB)
  • 描述: 针对IronPython change set 32648中的DLR而对荒井省三所制作的简单语言的例子的更新
  • 下载次数: 2
  • MyCalc_B2_fx.zip (8.6 KB)
  • 描述: 针对Beta 2的版本,稍微做了点修改
  • 下载次数: 4
分享到:
评论
2 楼 RednaxelaFX 2008-05-14  
lwwin 写道
奇怪,避免重复的代码,KNOW YOUR LIBRARY这篇怎么没有了?

这里:http://rednaxelafx.iteye.com/blog/182675
1 楼 lwwin 2008-05-14  
奇怪,避免重复的代码,KNOW YOUR LIBRARY这篇怎么没有了?

相关推荐

    .net4的DLR高级编程 Apress.Pro.DLR.in.NET.4.Nov.2010

    《.NET 4 的 DLR 高级编程》是一本深度探索 .NET 动态语言运行时(Dynamic Language Runtime,简称 DLR)的专著,由 Chaur Wu 撰写,出版于 2010 年 11 月。这本书针对 .NET 4 开发者,特别是那些对在 .NET 平台上...

    Pro DLR in .NET 4

    《Pro DLR in .NET 4》这本书深入探讨了.NET框架4中的动态语言运行时(DLR),这是一个关键的技术,它极大地增强了.NET平台对动态语言的支持。DLR是.NET Framework 4的一个重要组成部分,它的引入使得.NET应用程序...

    dlr-618最新升级固件

    dlr-618最新升级固件

    AB设备级环网DLR应用

    AB PLC设备级环网交换机应用案例http://u.download.csdn.net/images/btn_submit.png

    DLR DEM数据中国范围

    dlr dem是德国的免费dem数据,不是全覆盖的,但精度比一般的公开的30米dem要高;地图、遥感、Gis等相关行业使用,网盘链接

    Neo- AI -DLR 是 AWS SageMaker Neo、TVM 或 TreeLite 编译的机器学习模型的通用运行时

    DLR 是由AWS SageMaker Neo、TVM或Treelite编译的深度学习模型和决策树模型的紧凑型通用运行时。DLR 使用 TVM 运行时、Treelite 运行时、NVIDIA TensorRT,并且可以包含其他特定于硬件的运行时。DLR 提供统一的 ...

    Pro DLR in .NET 4 无水印pdf

    Pro DLR in .NET 4 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    可莱特S125DLR 声光组合LED反射镜旋转警示灯产品目录.pdf

    可莱特S125DLR 声光组合LED反射镜旋转警示灯产品目录pdf,特点:LED反射镜旋转警示灯和信号扬声器为一体的声光组合产品;采用本司独特的信号扬声器的内装构造;以小的外形能发出最大105dB/m的高音量;采用大功率发光...

    Python库 | downward_dlr-19.6.0.tar.gz

    对于"downward_dlr-19.6.0",我们可以假设它可能提供了针对动态语言的一些优化策略,比如内存管理、垃圾回收或者执行效率的提升。此外,它可能还包含了对Python解释器的扩展,允许开发者更高效地编写和运行Python...

    DIR619L语言文件

    当DIR619L语言不是简体中文时使用,需要进入web管理-维护

    一文带你了解 C# DLR 的世界(DLR 探秘)

    而DLR则是建立在CLR之上,为动态语言和C#中的动态类型特性提供支持。 C#中的`dynamic`关键字是DLR的核心,它使得变量的类型在运行时而不是编译时确定。当我们声明一个`dynamic`类型的变量时,编译器不会尝试进行...

    3DsMax2009导出到Quest3d的.X文件插件_vrender2009.dlr

    3DsMax2009导出到Quest3d的.X文件插件_vrender2009.dlr

Global site tag (gtag.js) - Google Analytics