• 关于.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(导致不能多核问题),让我无比之不喜欢,下一篇写一下几种语言的一个比较和个人看法吧
  • 相关阅读:
    python day6
    python day5
    python基础晋级篇
    python基础篇
    初识Python
    if语句
    A22. openstack架构实战-openstack的api
    A21. openstack架构实战-配置三层网络vxlan
    A20. openstack架构实战-虚拟机创建的流程
    A19. openstack架构实战-云主机的冷迁移
  • 原文地址:https://www.cnblogs.com/Lowlevel/p/3963221.html
Copyright © 2020-2023  润新知