IronPython 2.0 beta 5
ironpython 2.0 beta 5 已经发布,下载地址:http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=15625。IronPython 2.0 Beta 5是2.0系列的最后一个beta版本,下个版本就是RC版了。也就是说到了下个版本所有API都将固化了。现在也是到学习IronPython 2的时间了。从beta 4发布就有了msi 安装文件,并且带来了python的标准库 ,标准库的许可是以Python Software Foundation license 发布,这也就意味着移值cpython应用会很容易了。
值得注意的是带来了DLR hosting spec 的稳定版本,你可以从这里下载 DLR hosting spec的word 版本 http://compilerlab.members.winisp.net/dlr-spec-hosting.doc
这个版本还有一个最明显的变化的是命名空间作了个重大的修改,把所有的DLR 类型从System移到了Microsoft,原因是http://lists.ironpython.com/pipermail/users-ironpython.com/2008-August/thread.html#8036 许多人把IronPython嵌入到C# (.NET 3.5)项目中。
另外一点是DLR 宿主API不有一个针对Python的默认配置,现在应该用IronPython.Hosting.Python去创建脚本引擎,这样在应用程序中宿主IronPython就更容易了。IronPython.Hosting.Python有几个辅助方法,以创建一个ScriptRuntime或ScriptEngine ,并为ScriptRuntime和ScriptEngine增加了一些Python-specific 扩展方法。
using IronPython.Hosting;
ScriptEngine engine = Python.CreateEngine();
ScriptScope sys = engine.GetSysModule();
var platform = sys.GetVariable("platform");
Console.WriteLine(platform);
ScriptScope builtins = engine.GetBuiltinModule();
var pow = builtins.GetVariable<Func<double, double,double>>("pow");
Console.WriteLine(pow(2,3));
ScriptScope clr = engine.GetClrModule();
var getPythonType = clr.GetVariable<Func<Type, PythonType>>("GetPythonType");
Console.WriteLine(PythonType.Get__name__(getPythonType(typeof(string))));
引用:http://blogs.msdn.com/srivatsn/archive/2008/09/16/hosting-ironpython-made-easier.aspx
如何在托管语言中调用动态语言。
首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。
ScriptRuntimeSetup setup = new ScriptRuntimeSetup(true); //true表示载入所有支持的动态语言的环境配置
ScriptRuntime runtime = ScriptRuntime.Create(setup); //创建动态语言运行环境
foreach (LanguageProviderSetup langSetup in setup.LanguageProviders) //遍历所有动态语言的环境配置
{
try
{
ScriptEngine engine = null;
if (runtime.TryGetEngine(langSetup.Names[0], out engine)) //尝试获取动态语言的运行引擎
{
//engine就是我们需要的运行引擎
}
}
catch (MissingTypeException) //处理创建不支持的动态语言时可能抛出异常
{
}
}
获取了运行引擎后,我们就可以执行动态语言的代码了
public class MyErrorSink : ErrorSink //编译错误处理
{
IList<string> m_ErrorMsg = new List<string>();
public IList<string> ErrorMsg
{
get { return m_ErrorMsg; }
}
public MyErrorSink()
{
}
public virtual void Add(SourceUnit source, string message, SourceSpan span, int errorCode, Severity severity)
{
if (severity == Severity.Error || severity == Severity.FatalError)
{
m_ErrorMsg.Add(message);
}
}
}
LanguageContext langContext = HostingHelpers.GetLanguageContext(engine);
SourceUnit sourceUnit = langContext.CreateSourceUnit(new SourceStringContentProvider("1/4+3"), null, SourceCodeKind.Expression); //创建代码序列:1/4+3
MyErrorSink errorSink = new MyErrorSink();
try
{
Scope scope = new Scope();
object ret = sourceUnit.Execute(scope, errorSink); //执行动态语言代码,ret就是执行结果的返回值了
if (errorSink.ErrorMsg.Count > 0) //检查编译错误
{
//
}
}
catch (Exception)
{
}
引用: http://blogs.msdn.com/silverlightshanghai/archive/2008/09/18/dlr-in-silverlight.aspx
- 分布式计算,WCF+JSON+实体对象与WebService+DataSet效率大比拼
- 【自然框架】 页面里的父类—— 改进和想法、解释
- 线性神经网络
- 【数据可视化】深度解析大数据可视化设计案例分析
- 使用IE6看老赵的博客——比较完美版(可以在线查看、回复)
- 【Python环境】R vs Python:硬碰硬的数据分析
- 使用IE6看老赵的博客——jQuery初探
- matlab GUI基础8
- 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?
- 再论桥接模式(上)纸上谈兵
- 反馈型神经网络
- 竞争型神经网络续1
- 径向基神经网络续1
- "开门待客"还是“送货上门”?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅析Python基础知识之面向对象
- 手把手教你用Python进行SSH暴力破解
- 一文学会注解的正确使用姿势
- 面试官:请算出走迷宫需要的最少步数
- lua执行redis脚本找不到脚本的问题
- Android |《看完不忘系列》之dagger
- Android | dagger细枝篇
- ES UpdateByQuery Java Api
- [Bazel]repository_rule() vs rule()
- Windows 系统信息收集姿势
- 小白学PyTorch | 3 浅谈Dataset和Dataloader
- 小白学PyTorch | 4 构建模型三要素与权重初始化
- 小白学PyTorch | 5 torchvision预训练模型与数据集全览
- 细品redis的Scan和Keys命令
- if语句与while语句