动态类型语言(以下简称:"动态语言"),应该说有很古老的历史了,10年前就已经在学术圈内流行起来。JavaScript更是成为了WEB前台开发的事实标准。但是他们进入普通开发人员的视野也就是在最近几年。随着Web 2.0和敏捷开发方法论的兴起。动态语言的灵活高效成为了他被大多数项目选择和使用的理由。一些大型的项目和网站都开始使用动态类型语言实现,其中,国内比较优秀的作品有“豆瓣”。各个大公司也纷纷加入其中。不断的推进着动态语言的发展。其中最典型的就是Google对Python语言的推崇。
最近Google推出了App Engine平台,为广大的开发人员提供了一个低成本,高扩展性的实现平台。关于App Engine的详细信息,后面我有时间的时候,考虑介绍一下。现在大家可以上网搜索一下。有很多详细的介绍。
推动动态语言发展的并不仅限于Google一家,IBM, Sun等公司也有相应的举措。微软,当然也不会落后,推出了他自己的动态语言平台——DLR 并且在其上实现了IronPython, IronRuby和JavaScript(其中,前两个应该算是社区作品,并且是开源的。最后一个是微软自己的实现,并且,目前还没有看到开源的说)。
目前我找不到DLR的源代码的独立下载地址,大家只能通过下载IronPython或IronRuby的源代码来获得DLR的源代码。简单来说,DLR就像.NET的CLR一样为动态语言提供了一套公共的运行时支持(例如:解释器,GC,语法树以及和CLR的交互等)。用微软官方的说法:DLR使动态语言开发者能够将精力放在该语言核心的功能上,而不是这些通用的功能。至少动态语言开发者并不再需要重写一套GC。虽然,很多开发人员总喜欢做这些。
微软的DLR使得动态语言开发者能够加少很多工作量,同样对于我们这些希望能够将动态语言嵌入到我们的应用程序中的开发人员也是一种好事。我们可以面向DLR去设计,提供基本的平台。然后,针对各种不同语言的特性进行一些优化,就可以简单的将他们嵌入到我们的运行环境里来。
随后的一系列文章中,我将制作一个自定义WinForm控件。该控件的功能就像一个控制台,通过将这个自定义控件嵌入你的窗口,使用户可以在其中输入代码并执行。大家可以将它想象为IDE中的Immediate窗口。
1. 建立运行环境并运行脚本
2. 实现IConsole接口,重定向输入输出
3. 添加CLR对象到运行环境
4. 添加方法到运行环境
5. 使用Module扩展IronPython (失败的项目,微软没有提供对PythonModuleAttribute的支持)
6. 使CLR对象对动态语言更友好
6.1 支持运行时添加删除属性
6.2 支持切片
6.3 使用ExtensionTypeAttribute
7. 使DLConsole支持其它动态语言
8. 高级话题,建立安全沙箱运行IronPython脚本
9. 高级话题,CLR类型和Python类型之间的映射
你可以在这里下载本系列每个阶段的源代码
本系列中所有示例将基于IronPython 2.0 Beta 3.大家可以通过这里下载IronPython的源代码