关于.net中的脚本语言使用
基于.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中的脚本语言使用的更多相关文章
- FPGA开发中的脚本语言
多数FPGA开发者都习惯图形化界面(GUI).GUI方式简单易学,为小项目提供了一键式流程.然而,随着FPGA项目越来越复杂,在很多情况下GUI工具就阻碍了工作效率.因为GUI工具不能对整个开发过程提 ...
- 第七节 JBPM 中的脚本语言
1.JPDL表达式 2.动作:数据库操作例子 3.路由:transaction一个流程之间的指向 4.BeanShell脚本语言 例子: 发布到数据库中才能做一个测试类
- 在delphi中嵌入脚本语言--(译)RemObjects Pascal Script使用说明(1)(译)
翻譯這篇文章源於我的一個通用工資計算平台的想法,在工資的計算中,不可避免的需要使用到自定義公式,然而對於自定義公式的實現,我自己想了一些,也在網上搜索了很多,解決辦法大致有以下幾種: 1. 自己寫代碼 ...
- Java学习笔记--脚本语言支持API
Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...
- java 计算数学表达式及执行脚本语言
java SE6中对常用的脚本语言做了支持. 可供使用者在java代码中执行脚本语言,还可以利用get("key"),put("key","value ...
- SWIG 3 中文手册——4. 脚本语言
目录 4 脚本语言 4.1 两种语言的概览 4.2 脚本语言如何调用 C? 4.2.1 包装器函数 4.2.2 变量链接 4.2.3 常量 4.2.4 结构体与类 4.2.5 代理类 4.3 构建脚本 ...
- VBA中使用JavaScript脚本语言解析JSON数据
JSON:JavaScript 对象表示法(JavaScript Object Notation) 和xml相似,都是文本形式(保存在文本文件中或字符串等形式),比如: jsstr = {" ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- Cocos2d-x 脚本语言Lua中的面向对象
Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...
随机推荐
- Viewpager+Fragment出现空白页面的问题
写了三个Fragment,一次点击跳转显示正常,如果从第一个直接跳转到第三个,第三个页面会出现空白界面. 问题找到了:原来动态获取数据页面数据不显示,页面显示空白,就是onCreateView每次都调 ...
- PHP学习笔记 - 进阶篇(6)
PHP学习笔记- 进阶篇(6) 会话控制(session与cookie) 当前的Cookie为: cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据. ...
- iOS开发——iOS10升级极光推送SDK、友盟分享SDK
前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分 ...
- 【leetcode】352. Data Stream as Disjoint Intervals
问题描述: Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers ...
- lucene4入门(1)
欢迎转载http://www.cnblogs.com/shizhongtao/p/3440325.html lucene你可以理解为一种数据库,他是全文搜索的一种引擎. 1.首先去官网download ...
- Linux 进行反编译 或者 汇编
Linux 进行反编译 或者 汇编 一.需要的工具 1.objdump 2. 3.
- Trie树入门及训练
什么叫Trie树? Trie树即字典树. 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本 ...
- discuz论坛X3升级时 文件下载出现问题,请查看您的服务器网络以及data目录是否有写权限
discuz论坛2.5升级X3时候, 在线升级一半提示: 文件 static/image/postbg/3.jpg 下载出现问题,请查看您的服务器网络以及data目录是否有写权限,请确认无误后点击确定 ...
- [DevExpress]ChartControl之基准线示例
关键代码: /// <summary> /// 创建基准线ConstantLine /// </summary> /// <param name="chart& ...
- Asp.net 引用css/js资源文件
注意Page.ResolveUrl之前的双引号,不是单引号 <script type="text/javascript" src="<%= Page.Reso ...