IronPython(转)

IronPython(铁蟒)是.NET平台上的Python的CodeName,该语言尚处在Alpha预览版(pre-alpha preview release)阶段。它拥有一个完全动态的交互式解释器,可以支持所有的.NET类型库,并且集成了.NET Framework的诸多优点,甚至可以用Python的类来扩展.NET类。IronPython遵从ECMA的CLI标准(ECMA-335),可以运行在Microsoft .NET FrameworkMONO上。

    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);
    }
  }
}
posted @ 2007-06-12 23:07  烈马狂生  阅读(260)  评论(0编辑  收藏  举报