關於.net中的指令碼語言使用

來源:互聯網
上載者:User

標籤:blog   http   color   os   io   使用   java   ar   for   

 基於.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()endlocal 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中的指令碼語言使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.