文档章节

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

butland
 butland
发布于 2014/08/22 22:42
字数 714
阅读 101
收藏 1

基于.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(导致不能多核问题),让我无比之不喜欢,下一篇写一下几种语言的一个比较和个人看法吧


© 著作权归作者所有

butland
粉丝 1
博文 1
码字总数 714
作品 0
武汉
私信 提问
加载中

评论(1)

石兴亮
为啥没有下文了,我觉得这个研究很有意义啊。
关于 Java Scripting API 您不知道的 5 件事

关于 Java Scripting API 您不知道的 5 件事 Java 平台上更简单的脚本编写方法 while (true){ } C:developerWorks5things-scriptingcodejssrc>jrunscript periodic.jsHello, world!Hello, w......

linugb118
2010/09/19
0
0
ES使用脚本进行局部更新的排错记录

初学Elasticsearch,在按照《Elasticsearch服务器开发(第2版)》进行学习的过程中,在P17页中小节,使用脚本对文档进行局部更新的时候遇到了如下报错: ~ curl -XPOST http://127.0.0.1:9200/...

aaao
2016/05/19
0
0
SUSE 开发者提议在 GCC 编译器中用 Python 替代 AWK

日前,一位 SUSE 开发者向 GCC 开发团队发送了一封邮件,希望允许在 GCC 编译器代码库中使用一门脚本语言(Python),这主要是为了替代现有的 AWK 语言。 这位 SUSE 开发者 Martin Liška 目前...

局长
2018/07/18
2K
16
重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 如果微软的 Excel 中支持了人生苦短的 Python,你还会喜欢那个直接且易上手的 VBA 编程吗? 近日,据国外媒体 BLEEPINGCOMP...

csdnnews
2017/12/19
0
0
游戏之中的粘合剂---Lua脚本语言

前言: 每当自己想要放弃的时候,可以告诉自己再多撑一天、一个星期、一个月,再多撑一年吧。你会发现拒绝退场的结果令人惊讶! --摘自短篇原创文学 --------------------------------------...

loving_forever_
2016/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
13分钟前
4
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
15分钟前
34
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
16分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
58分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部