個人對腳本語言認識不深, 尤其是動態語言...
但是問了好多人為什麼邏輯用腳本寫, 答案都是不用編譯
這也只能怪DT的C++當初沒設計好
由於WOW的成功, 讓lua幾乎成了游戲腳本的標准
原來的python/ruby/tcl啥的一下子就沒落了, 都怪暴雪啊~
雖然lua做為一個腳本語言來說, 非常的完美
但是我對它不是很感冒, 可能習慣了C系語言的語法了
對於C/C++/C#/Java/JS/AS類的我才看著比較順眼
而且, 從學校開始, 好像自己就中了C#的毒一般, 雖然一直沒機會大量應用, 但心中一直念念不忘
這也導致了我把引擎工具用WPF來開發的念頭
今年Unity這個名字在眼前和耳邊不斷地飄過, 其理念非常不錯
而它的腳本是基於Mono的, 冒似實際效果很不錯
這也讓我有了使用C#做為腳本的沖動
如果嫌C#不是動態語言的話, Mono還支持JavaScript和Boo
本來想如果不跨平台的話是不是可以直接使用MS的.Net實現
Google一下到是真有個叫CS-Script的實現, 不過想嵌入NativeC++看來不是那麼好整
所以, 一切還是要從Mono下手, 雖然它的運行效率比MS的要打個折扣, 但再怎麼說也是lua的好多倍
Mono在Windows下的編譯不是很順利, 因為官方的壓縮包裡的sln壓根文件就不全
搜索也沒什麼頭緒, 看來大家都是在linux下搞這玩意
後來從github上下載了最新的代碼, 好不容易在修改了部分路徑下的情況下編譯通過
其中有些.lib是在mono的windows安裝版本中的
Embedded Samples就是嵌入mono的示例程序
以teste為例, 運行時需要依賴mscorlib.dll, 而且那個路徑很奇怪, 竟然是monomsvcWin32_Debuglibmono2.0
這個之後再搞懂怎麼配置
test.cs載入之前要先編譯成test.exe, 然後才能載入運行
這個可以看成是腳本的預編譯, 怎麼直接載入文本執行呢? 這個待研究
P/Invoke方式的調用顯然不實用, 要是能這樣用還不如直接MS的.Net
另外一種腳本調用底層的方法是internal call, 大體看了下好像必須要在C#中再做一次extern聲明
這個看看能不能做自動生成的, 要不然每次改動兩邊都要改多不爽
C++調腳本是通過Mono提供的一系列API來完成的, 如mono_runtime_invoke
另外有個類似luabind的庫, 叫monobind, 可以參考一下