关于.net中的脚本语言使用
2015-02-09 11:53
369 查看
摘要: 基于.net中drl框架的脚本现在有很多,最近也由于工作的需要,想试一下哪一种比较好,目前有lua、python、ruby、javascript的.net实现,对ruby不怎么了解,python、lua、js就成了试验的对象。
基于.net中drl框架的脚本现在有很多,最近也由于工作的需要,想试一下哪一种比较好,目前有lua、python、ruby、javascript的.net实现,对ruby不怎么了解,python、lua、js就成了试验的对象。
先说lua怎么用吧
DuChunk也支持直接传入脚本的方法重载,通过字典的方法注入全局变量,个人挺喜欢lua的,但是lua的异常机制挺简单的通过
pcall保护方法来防止异常中断,也导致了不能很好的利用.net的异常机制。
引入新的程序集,也挺麻烦的 clr.System.Reflection.Assembly:Load("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089");
看到这publicKeyToken,大有点大不,测试了一下,缺一不可。
再说说Js
js用的是ironjs 开源的https://github.com/fholm/IronJS ,本挺喜欢的,可是看到官方一句介绍,郁闷了,脚本与宿主间是值传递的,
本来利用脚本不仅仅是处理一些动态计算的,也同时可以操纵.net的对象,现在看到值传递,当然也可以曲线救国,再重新传回来赋值就是,
可总觉得,不利索,麻烦,结果自己测试了下,果然是值传递的,代码就没有留下来。
最后说说python
现在ironpython是支持python 2.7的,之前是微软官方支持,现在好像是也让民间来维护了,但我和他接触了也有几年了,
可以说是.net中实现动态脚本最成熟的,和.net支持也是最好的,同时他的异常机制可以和.net也完美结合。通过[]来支持泛型,相关不错。
引擎中引入程序集,挺方便的engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(int)));
也可以在脚本中引用,这个比lua方便很多
from System.Windows.Forms import * 这个和C#中 using System.Windows.Forms一个意思。
个人最终选择python,主要是它目前与.net结合,基于dlr,动态语言运行时最成熟,结合项目是最稳健的做法,但个人对python
始终没有好感,主要其缩进的格式和GIL(导致不能多核问题),让我无比之不喜欢,下一篇写一下几种语言的一个比较和个人看法吧
基于.net中drl框架的脚本现在有很多,最近也由于工作的需要,想试一下哪一种比较好,目前有lua、python、ruby、javascript的.net实现,对ruby不怎么了解,python、lua、js就成了试验的对象。
先说lua怎么用吧
using (var l = new Lua()) { // create a Lua script environment (global) var g = l.CreateEnvironment(); g["mainform"] = this; g.RegisterPackage("Chart", typeof(UserChart)); g.DoChunk(Application.StartupPath + "\\config.lua"); }
DuChunk也支持直接传入脚本的方法重载,通过字典的方法注入全局变量,个人挺喜欢lua的,但是lua的异常机制挺简单的通过
pcall保护方法来防止异常中断,也导致了不能很好的利用.net的异常机制。
local getResponse= function () local response = request.GetResponse() response.Close() end local status,err=pcall(getResponse)
引入新的程序集,也挺麻烦的 clr.System.Reflection.Assembly:Load("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089");
看到这publicKeyToken,大有点大不,测试了一下,缺一不可。
再说说Js
js用的是ironjs 开源的https://github.com/fholm/IronJS ,本挺喜欢的,可是看到官方一句介绍,郁闷了,脚本与宿主间是值传递的,
本来利用脚本不仅仅是处理一些动态计算的,也同时可以操纵.net的对象,现在看到值传递,当然也可以曲线救国,再重新传回来赋值就是,
可总觉得,不利索,麻烦,结果自己测试了下,果然是值传递的,代码就没有留下来。
最后说说python
现在ironpython是支持python 2.7的,之前是微软官方支持,现在好像是也让民间来维护了,但我和他接触了也有几年了,
可以说是.net中实现动态脚本最成熟的,和.net支持也是最好的,同时他的异常机制可以和.net也完美结合。通过[]来支持泛型,相关不错。
var engine = Python.CreateEngine(); var env=engine.Runtime.Globals; env.SetVariable("mainform",this) ; engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(int))); engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(MainForm))); engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(Color))); var code = engine.CreateScriptSourceFromFile(Application.StartupPath + "\\config.py"); code.Execute(env);
引擎中引入程序集,挺方便的engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(int)));
也可以在脚本中引用,这个比lua方便很多
import clr clr.AddReference("System.Windows.Forms.DataVisualization") clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import * 这个和C#中 using System.Windows.Forms一个意思。
个人最终选择python,主要是它目前与.net结合,基于dlr,动态语言运行时最成熟,结合项目是最稳健的做法,但个人对python
始终没有好感,主要其缩进的格式和GIL(导致不能多核问题),让我无比之不喜欢,下一篇写一下几种语言的一个比较和个人看法吧
相关文章推荐
- 关于.net中的脚本语言使用
- 在.NET中使用Javascript作为脚本语言(v8最新版)
- 在.NET中使用Javascript作为脚本语言
- 关于高清在线播放器:[迅播播放器][可使用javascript调用][完全兼容asp,jsp,php,.net等主流语言编写的程序]
- 将PHP作为Shell脚本语言使用
- 利用.NET语言开发自己的脚本语言(一)
- 利用.NET语言开发自己的脚本语言(一)
- MSDN里的关于.net的PropertyGrid的使用和控件设计的文章。
- 使用脚本语言
- delphi 中混合使用脚本语言。
- 将PHP作为Shell脚本语言使用
- 关于在.net环境下通过使用LDAP来访问AD,LDAPServer的一些问题?
- 关于.NET程序中使用Excel对象后,如何结束残留的Excel进程。
- 关于在用户控件中脚本使用情况
- asp教程二:使用脚本语言
- Winform中多国语言窗体的设计以及.NET中资源文件的使用
- 将PHP作为Shell脚本语言使用
- 如何将PHP作为Shell脚本语言使用
- 利用.NET语言开发自己的脚本语言(二)--动态编译
- 使用ASP控制指定站点解析脚本语言函数