「NeoLua」の版間の差分

imported>Administrator
imported>Administrator
編集の要約なし
1行目: 1行目:
'''NeoLua'''とは、[[オープンソース]]の下で[[開発]]されている[[.NET Framework]]向けの[[Lua]]実装である。
'''NeoLua'''とは、[[オープンソース]]の下で[[開発]]されている[[.NET Framework]]向けの「ピュア」な[[Lua]]実装である。


== 概要 ==
== 概要 ==
[[.NET Framework]]向けの[[Lua]]実装は多数存在するが、それらは本家Luaの[[DLL]]を[[P/Invoke]]で呼び出すものが多い。これらは[[C言語]]で書かれた環境依存しまくりの[[ネイティブコード]]を呼び出している関係でXamarin環境やLinux上のMono環境では動かないことが多い。
[[.NET Framework]]向けの[[Lua]]実装は多数存在するが、それらは本家Luaの[[DLL]]を[[P/Invoke]]で呼び出すものが多い。これらは[[C言語]]で書かれた環境依存しまくりの[[ネイティブコード]]を呼び出している関係で[[Xamarin]]環境や[[Linux]]上の[[Mono]]環境では動かないことが多い。


一方、NeoLuaは.NET向けに移植された[[CLR]]でのピュア実装となっている。つまり[[IronPython]]などと同じ系列である。表向きの名前はNeoLuaであるが内部的な名前空間は「Neo.IronLua」となっており、やはり「Iron〜」である。さらにNeoLuaは[[Portable Class Library]]([[PCL]])環境でも何も考えずに一発で動くように作られている点がポイント高い。[[Xamarin]]系、[[MonoGame]]系では大活躍である。
一方、NeoLuaは.NET向けに移植された[[CLR]]でのピュア実装となっている。つまり[[IronPython]]などと同じ系列である。表向きの名前はNeoLuaであるが内部的な名前空間は「Neo.IronLua」となっており、やはり「Iron〜」である。さらにNeoLuaは[[Portable Class Library]]([[PCL]])環境でも何も考えずに一発で動くように作られている点がポイント高い。[[Xamarin]]系、[[MonoGame]]系では大活躍である。
53行目: 53行目:


=== C#で関数を追加する ===
=== C#で関数を追加する ===
NeoLuaではLuaでfunctionを書く方法だけでなくC#で関数を追加することもできる。NeoLuaではLua標準ライブラリの「os名前空間」が未実装だったりするので、日付・時間などを扱おうと思う場合は、この方法で実装すれば綺麗に決まる。Lua側からclr名前空間を叩いて実装する方法もあるがあんまり綺麗じゃない。<source>
NeoLuaではLuaで関数を書く方法だけでなくC#で関数を追加することもできる。NeoLuaではLua標準ライブラリの「os名前空間」が未実装だったりするので、日付・時間などを扱おうと思う場合は、この方法で実装すれば綺麗に決まる。Lua側からclr名前空間を叩いて実装する方法もあるがあんまり綺麗じゃない。<source lang="csharp">
             using (var lua = new Lua())
             using (var lua = new Lua())
             {
             {
67行目: 67行目:
</source>
</source>


ちなみにdynamic版の場合だと更に簡潔明瞭。<source>
ちなみにdynamic版の場合だと更に簡潔明瞭。C#のFunc<>メソッドをそのままブチ込める。<source lang="csharp">
             using (var lua = new Lua())
             using (var lua = new Lua())
             {
             {