20080207 IronPython
http://www.yippeesoft.com
http://www.builder.com.cn/2007/1230/693664.shtml
IronPython是Python动态语言在.NET平台上的实现。它支持一个可交互的控制台,该控制台支持完全的动态编译,并且可以让Python程序员轻松地访问所有的.NET库,同时还保持对Python语言完全的兼容性。
IronPython 提供了.NET 编程语言可以如何利用我们在去年发行的.NET 2.0版本的CLR中新加入的动态语言特性的一个极好的例子。譬如,象“轻量级编码生成”这样的CLR特性,现在可以让动态语言很快地在内存里编译和JIT源码 (给予你非常快速的运行速度而不必生成一个.dll 文件)。CLR 2.0 还有把这些JIT过的代码垃圾回收的能力。这意味著,你可以在运行时很快地动态调整类型,而且不用泄漏生成的编码。
http://www.cnblogs.com/team/ipy.html
IronPython 这几天刚发布了两个新的版本,一个是去年发布的 1.1 的升级和修正版:1.1.1, 在这里下载:
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython&ReleaseId=5141
另一个,则是基于 DLR 的 2.0 alpha 8:
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython&ReleaseId=9219
IronPython 2.0 alpha 8 是第一个包含了 VS 2008 solution 文件的发布版本。
目前,正式的开发还是使用 1.1.1 比较好,如果想研究 DLR 的相关实现细节,可以研究 2.0 alpha 8 的代码。
微软的John Lam发布了IronRuby first preview ,使用微软的开源协议MS-Pl (Microsoft 的 OpenSource Licence)。这个版本的代码也是基于DLR构建的,也可以运行于Mono平台,不过Mono需要从SVN中拉代码来编译,才能运行它。详细信息参见Miguel de Icaza\’s的blog:http://tirania.org/blog/archive/2007/Jul-23-1.html
IronPython(铁蟒)是.NET平台上的Python的CodeName,该语言尚处在Alpha预览版(pre-alpha preview release)阶段。它拥有一个完全动态的交互式解释器,可以支持所有的.NET类型库,并且集成了.NET Framework的诸多优点,甚至可以用Python的类来扩展.NET类。IronPython遵从ECMA的CLI标准(ECMA-335),可以运行在Microsoft .NET Framework和MONO上。
IronPython比传统的Python快1.8倍左右(相对于Python 2.4),并且和传统的Python一样是完全动态的;但相对于传统的Python,IronPython却支持可选的静态编译功能,静态编译过的IronPython程序就形成了常规的.NET可执行文件(.EXE文件)。甚至还可以将IronPython程序静态编译为.NET动态链接库(.dll文件)并且供C#和VB.NET等.NET语言调用。由于IronPython程序集中仅包含与系统库无关的托管代码,因此IronPython程序集是完全可验证的。
不过,目前的IronPython还未完工,很多支持库还有待完成和完善,而且它需要.NET Framework 2.0的支持。对IronPython的源代码进行编译,也需要Visual Studio 2005的支持(IronPython提供的是msbuild构建文件);在这一点上,如果IronPython能够提供NAnt脚本等开源构建支持的话,相信还能引起更多朋友的关注。
http://gotdotnet.com/workspaces/workspace.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742
前不久,IronPython发布了2.0A3,早期的1.1版本我早有耳闻,可是一直没有机会尝试使用。由于工作需要,今天尝试了一下。
在网上说的最多的就是在IronPython调用.Net的核心类库或其它的Assembly对象,却很少描述如何从C# 中调用IronPython。就算有也只是零零碎碎地只言片语,或者就是早期的1.1版本。
由于在两个版本中,C#中的调用方式上存在很大差别。所以费了不少周折。
1 PythonEngine pe = PythonEngine.CurrentEngine; //It requires to analyze parameters.
2 IScriptModule sm = pe.CreateModule("Demo");
3 sm.SetVariable("x", 1);
4 sm.SetVariable("y", 2);
5 object s = pe.Evaluate("x>y", sm);
上面的代码演示了如何从C#中调用一个Lambda表达式然后返回结果,首先创建一个Python引擎,然后向模块中注册两个参数并设置Value(有些和CommandParameter对象相似),然后使用计算方法完成并返回调用结果。
http://www.cnblogs.com/cavingdeep/archive/2006/08/01/464781.html
http://blog.csdn.net/t_larry/archive/2007/06/05/1639883.aspx
IronPython脚本调用C#实现的dll库
http://www.cnblogs.com/DreamWinter/archive/2007/08/12/851011.html
如何在C#中调用 IronPython 代码 (基于IronPython 2.0A3)
http://www.xwy2.com/article.asp?id=132
IronPython 学习笔记 – 8.在.NET程序中嵌入IronPython
嵌入脚本的主要应用场景:
1) 允许用户使用 IronPython 为应用扩展功能,比如:Shell 扩展
2) 扩展用于处理相同类型的不同问题,比如:语法高亮显示
3) 游戏开发场景开发
http://blog.csdn.net/softart/archive/2007/10/27/1847256.aspx
C#与IronPython脚本进行数据交互示例
http://blog.csdn.net/softart/archive/2007/10/27/1847255.aspx
C#嵌入IronPython脚本示例(hello world)
http://www.xwy2.com/article.asp?id=126
IronPython是一个Python语言在.Net框架下的实现,允许使用类似Python的体验来享用.NET强大的类库。
IronPython最初是由Jim Hugunin编写的,他同时也是Jython的创造者。
Jim现在在微软,IronPython现在拥有一个开发团队。IronPython是一个Python编译器,它把Python源代码在内存中编译为汇编,而作为本地代码运行。由于Python是高度动态的语言,所以这些汇编也需要以来IronPython的动态库来运行。
IronPython 1.x 实现了C版Python 2.4
IronPython 2.x 实现了C版Python 2.5
IronPython带来了一些在传统的.Net语言中很难见到的东西:动态类型检查、duck typing、函数式编程、后期绑定、运行时修改、对象自省、元编程、交互式解释等等。。
IronPython是一个非常可靠的Python实现,主要的不同在于IronPython是用C#写的,你不能使用为CPython写的c扩展。这意味着并不是所有的标准库都可以在IronPython中使用。微软的开发小组已经做了很多的努力来尽量使更多的模块可以使用。一些C模块实际上已经被重新构建到IronPython中,并且可能还有很多其他可选择的包装。
你可以从IronPython访问.Net自己的类型以及.Net框架的类库。这让IronPython成为一个非常好的工具用来实验、写应用程序或者嵌入到其他的程序中。
下载
可以到 http://www.codeplex.com/IronPython 下载,下载后解压即可。
C#与IronPython脚本进行数据交互示例 文章开始
单单执行脚本是没有什么意思的,最重要的是嵌入的脚本能和宿主语言进行交互,下面我就讲讲这方面的实现。
字串4
IronPython脚本最优秀的地方就是与C#(或者说.net框架集)几乎无缝集成,C#实现的类很容易就传入到脚本中去。(目前唯感遗憾的是,IronPython脚本还没有支持嵌入版,希望不远的的将来能实现嵌入式版本)。
字串9
这是宿主语言的代码: 字串2
public partial class Form1 : Form
…&leftsign;
public Form1()
…&leftsign;
InitializeComponent();
&rightsign;
字串6
private void button1_Click(object sender, EventArgs e)
…&leftsign;
PythonEngine scriptEngine = new PythonEngine();
TestData td = new TestData();
td.intNum = 10; 字串4
scriptEngine.DefaultModule.Globals["td"] = td;
scriptEngine.Execute(textBox1.Text); 字串6
//显示intNum是否被脚本识别并改变
MessageBox.Show(td.intNum.ToString());
&rightsign;
&rightsign;
//数据交互类
public class TestData
…&leftsign;
public int intNum = 0;
&rightsign;
上面最关键的代码就是:scriptEngine.DefaultModule.Globals["td"] = td; 字串4
scriptEngine.DefaultModule这是一个字典类,可以添加多个不同类型,供脚本使用。字典中的关键字与脚本中对象的名称保持一致(内容任意,可以和你传的对象名称不一样,关键看你的意愿了)即可。 字串2
历史博文
- rgb - 2009
- 20070609 2007 女排 名单 mpx220 电量指示 - 2007
- 0528 smartphone 主题制作资料 - 2006
- VS.NET PROCESS 输入 输出 模拟 CMD - 2005