您的位置:首页 > Web前端 > JavaScript

关于.net中的脚本语言使用

2015-02-09 11:53 302 查看
摘要: 基于.net中drl框架的脚本现在有很多,最近也由于工作的需要,想试一下哪一种比较好,目前有lua、python、ruby、javascript的.net实现,对ruby不怎么了解,python、lua、js就成了试验的对象。

基于.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 lua python javascript dlr