IronPython(转)
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脚本等开源构建支持的话,相信还能引起更多朋友的关注。
作为一门非常流行的动态语言,Python在解决某类问题时显得异常的方便。IronPython则是Python在.NET Framework上的实现,虽初出茅庐,但已经显示出了他的强大力量。本文不是介绍IronPython的使用方法,而是介绍如何在C#这个.NET最流行的语言中使用IronPython的动态特性,来处理“动态”的表达式。所谓“动态”的表达式,是指类似“a + b - c”这类的以字符串形式提供的运算表达式。
using System;
using System.Collections.Generic;
using System.Text;
using IronPython.Hosting;
namespace PythonDemo
{
class Program
{
delegate int MyExpressionDelegate(int a, int b);
static void Main(string[] args)
{
PythonEngine pe = new PythonEngine();
MyExpressionDelegate expression =
pe.CreateLambda<MyExpressionDelegate>("a + b");
int a = 10;
int b = 5;
int c = expression(a, b);
Console.WriteLine(c);
}
}
}
using System.Collections.Generic;
using System.Text;
using IronPython.Hosting;
namespace PythonDemo
{
class Program
{
delegate int MyExpressionDelegate(int a, int b);
static void Main(string[] args)
{
PythonEngine pe = new PythonEngine();
MyExpressionDelegate expression =
pe.CreateLambda<MyExpressionDelegate>("a + b");
int a = 10;
int b = 5;
int c = expression(a, b);
Console.WriteLine(c);
}
}
}