トップページtech
981コメント297KB

【Lua】組み込み系言語総合 その4【Squirrel】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/03/30(水) 01:00:58.93
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合 その3【Squirrel】
http://hibari.2ch.net/test/read.cgi/tech/1272643397/

■過去スレ
その2 http://pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 http://pc12.2ch.net/test/read.cgi/tech/1205208141/

プログラミング言語 Lua
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0655デフォルトの名無しさん2011/08/17(水) 15:35:57.26
単一State の操作をスレッドセーフにするバカっているの?
0656デフォルトの名無しさん2011/08/17(水) 15:46:11.04
>>653
それはLuaの実態がStateであると捉えるか、VM関数群であると捉えるかで
変わるんじゃない。

C標準関数みたいに内部変数が使いまわされてるのが混ざってないのだから、
マルチスレッドでの使用は一応考慮されて設計してるのでしょ。
0657デフォルトの名無しさん2011/08/17(水) 15:48:59.44
python とか ruby は実際そういうことをやってるよね。もっとも逆に「複数ステート」相当が無いんだけど。

lua や squirrel でやる物好きは、なかなかいないと思うけど、誰かが作ったら使う人はいるんじゃね?
0658デフォルトの名無しさん2011/08/17(水) 15:52:20.26
>適切にロックする処理を全部の箇所に足す必要

そんなことしなくてもコルーチンと併用して、VMが一時停止したときだけ
ロック解除すれば良いかと。
それ以前にグローバル変数はLua上で管理しない方がてっとり早いだろうけど。
0659デフォルトの名無しさん2011/08/17(水) 15:54:16.80
>>657
lua_newthreadがまさにそれじゃね
0660デフォルトの名無しさん2011/08/17(水) 16:03:24.61
>>658
コルーチンベースでのVMまるごとロックならそもそもスレッド全くわける必要がないような……

>>659
あれはコルーチン用のステート生成なので、親stateともども別スレッドから同時にはさわれません
0661デフォルトの名無しさん2011/08/17(水) 16:04:19.31
>>660
PythonやRubyはいけるの?
初耳
0662デフォルトの名無しさん2011/08/17(水) 16:11:47.34
>コルーチンベースでのVMまるごとロックならそもそもスレッド全くわける必要がないような

そうだよね。
だからなおさら1Stateを複数スレッドで〜という状況がありえないと思う。
0663デフォルトの名無しさん2011/08/17(水) 18:30:49.46
>>654
その要望自体理解できないが。
単に設計ミスじゃね。何でもかんでもLuaに頼る必要なかんべ。
0664デフォルトの名無しさん2011/08/17(水) 18:33:13.35
>>653
それの何が問題かをいってくれないと。
インスタンス単位でスレッド単位で十分なクラスなんだからそれでいいじゃん。
LuaもState単位でスレッドセーフが保障されていれば十分。
それ以上を望むのは馬鹿とマニアだけ。
0665デフォルトの名無しさん2011/08/17(水) 18:34:24.23
>>659
Do not confuse Lua threads with OS threads.

By Luiz Henrique de Figueiredo
0666デフォルトの名無しさん2011/08/17(水) 18:36:47.79
>>654
「グローバル変数を共有とかお馬鹿な設計はやめとけ」の間違いだろ?
Lua様のせいにしてんじゃねぞ、こら
0667デフォルトの名無しさん2011/08/17(水) 18:47:37.03
まとめ
Luaはlua_state毎に別スレッドで動作させることができます。
そういう意味でLuaはスレッドセーフです。
異なるlua_satateで情報を共有できるか否か、というのはまた別の話になりますです。
普通は母体となるC言語なり何なりでロックしてから情報を書き換えるなどすればよいだけなので、
一般的な意味でも、Luaはスレッドセーフであるといえると思います。
0668デフォルトの名無しさん2011/08/17(水) 18:58:47.61
>>664
言い方の問題じゃね?
「vectorはスレッドセーフである」とか普通は言わないでしょ
0669デフォルトの名無しさん2011/08/17(水) 19:11:08.78
まぁ完全なスレッドセーフではないよな。
スレッド運用可能程度で。
0670デフォルトの名無しさん2011/08/17(水) 19:15:17.29
関数がリエントラントでもスレッドセーフと呼ばないのは自由だが
馬鹿だと思われるから気をつけた方が良いよ
0671デフォルトの名無しさん2011/08/17(水) 19:18:32.78
>>661
CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
他の実装だと、MacRuby は既に GIL 無しになってて、実際に複数スレッドで同時にスクリプトが走る。
あとは Rubinius もたしか開発ブランチでは GIL 排除してる。
CPython は GIL 排除は目標にあがってたけどまだ実現はしてなかったはず
Jython と JRuby はJava上の実装だけど完全に複数スレッド対応ずみ

>>663
「スクリプトだけでなんでもやる」的なスクリプト言語では、現実に求められてる要望だよ。
マルチコア時の性能がかなり上がるからね。

もっとも、俺も Lua でする必要はさっぱり無いと思う。適材適所やね
0672デフォルトの名無しさん2011/08/17(水) 20:01:03.74
AngelScript|Д`)<AngelScriptは一応マルチスレッド環境対応って書いてるけど大丈夫なのかな?
AngelScript|Д`)<boost::threadと組み合わせて複数のスクリプト動かした時は問題なかったけど。
06736442011/08/18(木) 00:37:04.54
まずごめん。予感はしてたんだがやっぱり荒れ気味にしてしまった
とりあえず >>647 の認識で合ってるか気になったんだ。
前の流れのときは(今もいるっぽいが)悪口雑多撒き散らしてまで
「一般的にスレッドセーフ」でまとめたい人がいたから。
これに関しては定義を決めないと結論出ないし、これでまとめるには
誤解を招くと思ったんで、 >>647 でおkなのを確認したかった

>>670
関数はそれでいいと思うんだけどvectorもLuaも状態を持ってるから、
ちょっと前提が違う。関数もstatic変数で状態持ってたら崩れる

でなんか面白い議論になってるLuaStateを単一でマルチスレッド化に
需要あんの?って話だけど、ちょっとずれてるかもしれんがGameProgrammingGemsの
7か8にそういう話が載ってたような。確か、変数、関数をスレッド数分
コピーしたくないから、一箇所に集めてアクセスさせる話だったと思う。
State自体はスレッド数あったかもしれんからずれてるかもしんない。
本は会社においてるから確認できなくてすまん。
ただ、最近は8コアとかざらだから無視できないのかもしれないね

あとほんと、なんか自分の自身が無いのに巻き込んだようですまない。
0674デフォルトの名無しさん2011/08/18(木) 02:08:07.86
>>671
> >>661
> CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
それで良しとするならLuaでも同じじゃないの?
countフックしてスイッチングするだけじゃん
0675デフォルトの名無しさん2011/08/18(木) 10:20:35.12
Lua Programming Gems http://www.lua.org/gems/
という本の
Enhanced Coroutines in Lua
という記事で、Lua のコルーチンをネイティブスレッドに対応させる拡張が紹介されてます。
ソースコードだけダウンロードできます。
使った事ないけど。
0676デフォルトの名無しさん2011/08/18(木) 15:18:24.60
>>668
多分この中でお前だけ話を理解できてない。
0677デフォルトの名無しさん2011/08/22(月) 22:05:23.49
AngelScript2.21.1リリース記念火気庫ヽ( ´∀`)ノ ボッ
http://www.gamedev.net/topic/609014-angelscript-2211-released/

asOBJ_ASHANDLEを使えばvalue typeをハンドルのように扱えるらしい
CScriptHandleは・・・どんな型の変数でもreference typeのように扱えるアドオンか?
Win64とMinGWでのnative calling conversionか・・・、うちには関係ないな
CSerializerというアドオンはモジュールの変数を、スクリプトを再コンパイルした後も内容を維持するためのものっぽい
0678デフォルトの名無しさん2011/08/22(月) 22:11:06.82
Lua 5.2リリース記念火気庫ボッはまだですか
0679デフォルトの名無しさん2011/08/22(月) 22:28:51.39
        (´\r-、     ┼         +     /`/`)    +
     ┼   (\. \!              *     // ,/)  *
  +     * (ヽ、   \ +  *          /   /)   +
      ⊂ニ      )        *   +  (     ニ⊃
  *  +  ⊂、     (   ∩___∩   ノ     ⊃   +  *
         (/(/   ヽ  | ノ     ヽ /    、)ヽ)  ┼
    +        (/     ∨  ●   ●レ /⌒) 、)ヽ)
     *       (/'   |   ( _●_) ミ'  /、)、)´       +
         +    (/'ヽ 彡、   |∪| ノ /     AngelScript!!
     +            / __ヽノ  /  *      +
       ┼        (___) /      +
0680デフォルトの名無しさん2011/08/23(火) 14:24:57.18
   ∧_∧  / ̄ ̄ ̄ ̄
  ( ・∀・) <  Lua!!
⊂/  9)  \____
q(   /
  >  >

0681デフォルトの名無しさん2011/08/23(火) 20:53:31.84
>CSerializerというアドオンはモジュールの変数を、スクリプトを再コンパイルした後も内容を維持するためのものっぽい 
これがsuspendで一時停止させたスクリプトの状態まで保存してくれるとなるとすげぇ便利なんだけどなぁ…
今度調べてみよう。
0682デフォルトの名無しさん2011/08/26(金) 14:17:09.17
ログ復活
0683デフォルトの名無しさん2011/08/26(金) 18:59:01.22
        (´\r-、     ┼         +     /`/`)    +
     ┼   (\. \!              *     // ,/)  *
  +     * (ヽ、   \ +  *          /   /)   +
      ⊂ニ      )        *   +  (     ニ⊃
  *  +  ⊂、     (   ∩___∩   ノ     ⊃   +  *
         (/(/   ヽ  | ノ     ヽ /    、)ヽ)  ┼
    +        (/     ∨  ●   ●レ /⌒) 、)ヽ)
     *       (/'   |   ( _●_) ミ'  /、)、)´       +
         +    (/'ヽ 彡、   |∪| ノ /     AngelScript!!
     +            / __ヽノ  /  *      +
       ┼        (___) /      +
               /     /
               (_ ⌒丶..
                | /ヽ }.
                  し  ))
                    ソ  トントン
0684デフォルトの名無しさん2011/08/31(水) 21:00:58.75
Luaのメタテーブルの__addメソッドでテーブルとテーブルの足し算をしたいのですが、
同じメタテーブルを設定したテーブルのXとYがあって、
X = X + Y と X = Y + X を区別するために、
今、呼び出されているメタテーブルがXとY、どちらのメタテーブルか、
判定する方法はないでしょうか?
同じメタテーブルを設定しているので、getmetatableでも判定できないので困ってます。
0685デフォルトの名無しさん2011/09/01(木) 00:41:00.58
__addに指定したメソッドの中で判別できるでしょ
0686デフォルトの名無しさん2011/09/04(日) 11:49:09.40
こういう答え方するオタクの事
前からキモイと思っていたけど病気だったんだな
ttp://livedoor.blogimg.jp/hamusoku/imgs/1/c/1cd6fc3e.jpg

「俺ごときが知ってる事を答えれない奴はどんなに見下してもいい」
とか顔を真っ赤にして反論してくれよw
0687デフォルトの名無しさん2011/09/04(日) 12:50:40.32
Firefox 9、「型推論エンジン」をついに統合 -JavaScriptさらに高速化
http://s.journal.mycom.co.jp/news/2011/09/01/079/

効果は言語によって違うのだろうけど、LuaJITなどに移植し易い機能だったら、
patch対応出来るのだろうか
0688デフォルトの名無しさん2011/09/04(日) 13:20:09.35
http://www.extremetech.com/computing/94532-firefox-9-javascript-performance-improved-by-20-30-with-type-inference
詳細項目みると単純ループや数値計算まわりで、LuaJITの最適化済みの得意分野になるので、あんまり期待できないかも。
0689デフォルトの名無しさん2011/09/04(日) 16:12:14.33
>>686

482 :名無しさん@初回限定:2007/09/10(月) 02:39:05 ID:+7lLhCDw0

2chで調べ物をしたい時は「教えてください」って書いても
なかなか教えてもらえない。

そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。
0690デフォルトの名無しさん2011/09/04(日) 21:07:22.31
アスペ診断か
この板でもっと流行らせるべき
0691デフォルトの名無しさん2011/09/06(火) 00:38:09.21
Javascriptかー。最近Node.jsが熱いらしいね
webGLもあるしどうなるかな
0692デフォルトの名無しさん2011/09/07(水) 20:36:46.82
LuaでLuacのバイトコードコンパイルでもJITコンパイルでもなくて
普通にバイナリにコンパイルしてDLLかなんかにするっていう
そんな魔法のようなことできませんか?
0693デフォルトの名無しさん2011/09/07(水) 21:28:07.12
普通に C とかで書くかプログラマ辞めろ
0694デフォルトの名無しさん2011/09/08(木) 09:02:27.07
>>692
ネイティブバイナリにするのが重要なのか、DLLにするのが重要なのか、
どちらなのかでアプローチが変わると思う。
0695デフォルトの名無しさん2011/09/08(木) 20:57:31.40
>>693
ひどい…そんな風に言わなくたっていいじゃない!

>>694
配布形式は全部バイナリで、
開発中はVMにDLL読み込ませて呼び出し〜みたいにできたらいいなぁ。
ということで両方知ってたら教えてください。
0696デフォルトの名無しさん2011/09/08(木) 21:04:45.62
llvm-luaとかで、バイナリコード吐けるのかな?
0697デフォルトの名無しさん2011/09/08(木) 21:40:20.80
周辺のモジュールも含めて全体をコンパイルするのはJITでないと難しい気がする。
単体でコンパイルして意味があるのかよくわからん。
0698デフォルトの名無しさん2011/09/08(木) 22:48:17.38
>>695
DLLにLuaを埋め込めばいいのでは?
0699デフォルトの名無しさん2011/09/09(金) 09:50:27.31
>>695
ネイティブの速度が必須とかじゃなきゃ、698の言うとおり
Luaを丸ごとDLLにすれば良いだけじゃ。
配布形式は全部バイナリでというのは、スクリプトが別ファイルになってるのが
嫌なのだろうか?
もしそうならスクリプトのソースをバイナリに埋め込めばいい。
07006952011/09/09(金) 22:00:26.22
>ネイティブの速度
…現状で遅いんで、ちょっとでも早くならないかなと思って聞きました…。

0701デフォルトの名無しさん2011/09/09(金) 22:57:30.61
>>700
どの部分が遅いのかテストしてみたら?
なんかよう分からんけどLuaは遅いという理由だと
全部Cで書けとしか言えない
0702デフォルトの名無しさん2011/09/10(土) 00:10:13.57
LuaJIT使ってるかい?
0703デフォルトの名無しさん2011/09/10(土) 06:44:17.73
スクリプトは所詮スクリプト。
適材適所。
07046952011/09/10(土) 07:21:42.29
JITより早くしたいから最適化コンパイラでもないかなぁと思って聞いたんですが、
ムリポ ナイポですかね。理解した。
0705デフォルトの名無しさん2011/09/10(土) 10:19:46.79
全部Cで書くのは無理じゃないが、コスパを考えると人間は怠惰になる。
0706デフォルトの名無しさん2011/09/10(土) 10:48:28.84
Basic並にメジャーになればそのうちコンパイラを作ろうとかいう奇特な人が現れるかもね。
0707デフォルトの名無しさん2011/09/10(土) 13:01:35.78
コンパイラ作るよりコード変換機作るほうが楽だし早いよ
0708デフォルトの名無しさん2011/09/10(土) 14:18:37.55
JITより速くしたいとか夢見てるんだから、コード変換機じゃまだ足りないなんじゃね?
07096842011/09/14(水) 22:00:02.88
あの>>684の質問に誰か答えてくださる方いないでしょうか?
>>685で言われてる通りの質問なのでそのメソッドの中で判別する方法を聞きたいのですが。
0710デフォルトの名無しさん2011/09/14(水) 22:48:38.64
>>709
もし__addがXのものでもYのものでもない普通の関数だったら、
「__addは誰のものか」という質問は存在しない。
だから質問が無視されているのだと思います。
07116842011/09/14(水) 23:39:19.08
>>710
普通の関数というのがよくわかりませんが、
__add=function(operand1,operand2) … end
という要素が入ったメタテーブルを使ってます。
このメタテーブルをXとY両方にsetmetatableしているので、
XのものでもYのものでも無く共用、というか、
XとYは同じクラスのオブジェクトです。
0712デフォルトの名無しさん2011/09/14(水) 23:57:20.68
>>711
一例として
X = { 1,2,3,4,tonumber=function(self) ret=1; for i,v in ipairs(self) do ret = ret * v end; return ret end}
Y = { 1,2,3,4,tonumber=function(self) ret=0; for i,v in ipairs(self) do ret = ret + v end; return ret end}
mt = {__add=function(op1,op2) return op1:tonumber() + op2:tonumber() end}
setmetatable(X,mt); setmetatable(Y,mt)
print(X+Y); print(Y+X)
0713デフォルトの名無しさん2011/09/15(木) 15:40:50.46
>>711
X+YとY+Xをなぜ区別したいのかわからないので
適切な回答が思いつかない。

ひょっとしてX=X+YのときXの束縛を変更するんじゃないくて、
Xに束縛されているオブジェクトに副作用を起こしたいとかか?
07146842011/09/15(木) 22:03:12.20
>>712
これはX+YもY+Xも値が一緒だから判定は無理ってことでしょうか・・・?

>>713
順番を保持した値が重複の無いリストを作りたいのですが、
X = {1,2,3},Y = {2,4} とあって両方に__addメソッドがついた同じメタテーブルが設定されているとき
X = X + Y なら Y が後ろなので X = {1,3,2,4} に、
X = Y + X なら Y が前なので X = {2,4,1,3} になるといった形で
足されるリストの並びを優先するようにソートしたいのです。
0715デフォルトの名無しさん2011/09/15(木) 22:47:00.74
>>714
一例として
X = {1,2,3}
Y = {2,4}
mt = {__add = function (op1,op2)
local t = {}
local s = {}
for i,v in ipairs(op1) do
table.insert(t,v)
s[v] = true
end
for i,v in ipairs(op2) do
if not s[v] then
table.insert(t,v)
end
end
return setmetatable(t,getmetatable(op1))
end}
setmetatable(X,mt)
setmetatable(Y,mt)
print(unpack(X+Y))
print(unpack(Y+X))
0716デフォルトの名無しさん2011/09/15(木) 23:17:55.02
>>714
普通だったら
X + Y => {1,3,2,4}, Y + X => {4,1,2,3}
もしくは
X + Y => {1,2,3,4}, Y + X => {2,4,1,3}
ってすると思うんだけど、
なんで
X + Y => {1,3,2,4}, Y + X => {2,4,1,3}
になるの?
ただの誤記なら>715でいいけど
0717デフォルトの名無しさん2011/09/16(金) 14:48:55.75
>>696
可能なはずでは?無理ならCやアセンブリコードへ変換して
手作業で最適化すればいいと思う。

>>704
言語の速度に文句を言う前にプロファイラ使って
遅い部分を見つけて最適化しては?マシン買い換えるのも手。
0718デフォルトの名無しさん2011/09/16(金) 16:42:46.02
単に全部Luaでやりたい変態ってだけだろ。
たぶんプログラマに向いてない。
07196842011/09/16(金) 20:41:28.97
>>715-716
X = X + Y なら代入されるのは X なので重複される値を
X から消して Y を後ろから足すという風にしたかったのです。
X = Y + X でも同様に X に代入されるので
重複される値を X から消してから Y を前から足す、といった形です。
代入されるのを Y に変えれば
Y = X + Y → Y = {1,2,3,4}   Y = Y + X → Y = {4,1,2,3}
と言う風に計算したかったのですが、自分で書いてて気づきましたが、
どちらのoperandのmetatableが呼ばれたかを判定するだけじゃなくて
代入先の変数が何かも判定しないといけないから無理っぽいですね…。
すみません。お騒がせしました。
0720デフォルトの名無しさん2011/09/16(金) 20:52:46.08
こういうのはスズキ菌キャリアではなくライトデベロッパであればありがちな話だな。

まあLua 遅くて不満なら、Cコードの吐ける Euphoria 4.0.3 でも使えば?
LL言語の癖に嫌でも低級メモリ操作とC言語と向き合わなくては Win32 API すら
叩けないから脱童貞にはいいんじゃない? 必要ならスレ立てておいで。
0721デフォルトの名無しさん2011/09/16(金) 21:22:33.94
そういうことなら、拙作だけど Teco(>>395) が吐くバイトコードはかなり単純なので、アセンブラへの変換も楽じゃないかな。
0722デフォルトの名無しさん2011/09/16(金) 22:20:28.28
「Javaより遅い言語なんて耐えられん」by Webプログラマ
0723デフォルトの名無しさん2011/09/16(金) 22:54:08.67
>>719
X+Yの場合 {1,2,3}+{2,4} -> {1,2,3}+{4} -> {1,2,3,4}
Y+Xの場合 {2,4}+{1,2,3} -> {4}+{1,2,3} -> {4,1,2,3}
という事なら
X = unq.new({1,2,3})
Y = unq.new({2,4})
function unq.concat(op1,op2,[,base])...end
というような関数で操作した方がいいんじゃない?
メタメソッドでやるとすると
どちらを基準とするのかという情報をX,Yに埋め込んだり
他から参照したりする必要があるから汚くなる
07246842011/09/17(土) 16:33:14.72
>>723
確かにクラスやメソッドでやったほうがいいですね…。
テーブルをテーブルのままに処理を加えられるメタテーブルっていいなと思いましたが、
制限多すぎるのでやっぱりやめておきます。
0725デフォルトの名無しさん2011/09/26(月) 18:31:24.78
AngelScript 2.21.2 released - GameDev.net
http://www.gamedev.net/topic/611415-angelscript-2212-released/
0726デフォルトの名無しさん2011/09/26(月) 18:48:04.05
・スクリプトエンジンがvakye typeで値を返すときに、
 ヒープではなくスタックに確保するようにして高速化
・64bit LinuxとMac OS Xでnative calling conventionsに対応するための変更
 3次元ベクトルのようなPODの構造体ではコピーコンストラクタやデストラクタが実装されず、
 この機能がうまく働かないことがあるらしい
 全てのメンバーがint,float,doubleの場合、asOBJ_APP_CLASS_ALLINTSやasOBJ_APP_CLASS_ALLFLOATSのフラグをつけることで解決した
 全ての組み合わせをカバーできるわけではないが、ほとんどのものはこれでカバーできる
・サンプルゲーム
・クラスメンバーにもメタデータを付けられる

ABIってなんだろ?64bit LinuxとMac OS XのABIは複雑で、
メンバーの型によっては違うレジスタに渡される事があると書いてあるが
0727デフォルトの名無しさん2011/09/26(月) 19:20:42.04
この場合コーリングコンベンションのことかな

ABIという言葉にはもっと他のものも含まれるけども
0728デフォルトの名無しさん2011/09/26(月) 23:00:45.10
Application binary interface
0729デフォルトの名無しさん2011/09/27(火) 08:14:54.52
> 全てのメンバーがint,float,doubleの場合、asOBJ_APP_CLASS_ALLINTSやasOBJ_APP_CLASS_ALLFLOATSのフラグをつけることで解決した
なんだかグダグダだな
0730デフォルトの名無しさん2011/09/27(火) 08:20:21.82
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ Lua!!
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

0731デフォルトの名無しさん2011/09/27(火) 09:09:08.59
規則を単純明解にしようと思ったら、全部スタック(CPUスタック)渡しになって重くてかなわん、
というわけで性能を稼ごうとレジスタ渡しを頑張ると規則が複雑怪奇になる。というトレードオフ。
0732デフォルトの名無しさん2011/09/27(火) 09:40:13.82
トレードオフではないだろ
クロスコンパイルと同じで
ターゲットごとに処理を振り分けりゃいいだけなんらからw
0733デフォルトの名無しさん2011/09/28(水) 01:10:06.20
大体組み合わせと例外でバリエーションがやたら増えて泥沼になるよ
0734デフォルトの名無しさん2011/09/28(水) 07:07:59.80
   ∧_∧  / ̄ ̄ ̄ ̄
  ( ・∀・) <  Lua!!
⊂/  9)  \____
q(   /
  >  >

0735デフォルトの名無しさん2011/09/29(木) 00:27:13.65
Windows環境でUnicodeビルドして普通に使えるのって今のところSquirrelだけ?
0736デフォルトの名無しさん2011/09/29(木) 07:29:47.36
Luaでも普通にUnicode使えるよ
0737デフォルトの名無しさん2011/09/30(金) 22:57:03.23
AngelScriptだって大丈夫
ファイルを読み込みをライブラリに頼らず
自分でやればいいだけ
0738デフォルトの名無しさん2011/10/01(土) 00:50:39.29
Xtalも少し初期化あたりいじる必要あるけどできるよ
0739デフォルトの名無しさん2011/10/01(土) 01:07:11.13
す、Squirrelだってっっ……!
0740デフォルトの名無しさん2011/10/01(土) 02:37:23.52
>>739
それ最初に出とるわw
0741デフォルトの名無しさん2011/10/01(土) 02:41:46.32
Squirrelのstring型ってutf16leでいけんの?
他の言語の同じようにvm内(とファイルエンコーディング)はutf8でやって
変換かませてたわ。
0742デフォルトの名無しさん2011/10/01(土) 08:33:44.98
ゲーム系ってLua多くねえか
0743デフォルトの名無しさん2011/10/01(土) 08:41:17.42
WoWがluaだから?
他にも何か理由あるのかな
0744デフォルトの名無しさん2011/10/01(土) 08:53:42.52
浮動小数点をfloatに指定して再コンパイルしてやるとDirectXとの相性ばっちりになるからとか?
0745デフォルトの名無しさん2011/10/01(土) 12:36:38.69
そ、そんなマニアックな理由なの?
もっと単純に小さくて速い組み込みやすいスクリプト言語で、
開発者がよく知っている言語をゲーム内のスクリプトに使いたかっただけじゃないの

ゲームとは関係ないが、unix系ツールの組込みスクリプトが
lua,python,tclあたりでデファクト争ってて、ただのユーザーとしては面倒きわまりない
0746デフォルトの名無しさん2011/10/01(土) 13:27:05.52
速度と採用実績だろうね>Lua多い
ゲームは特に速度気にする傾向が強いような気がする。
0747デフォルトの名無しさん2011/10/01(土) 15:15:08.08
pythonとluaは別の道具な感じがするが
0748デフォルトの名無しさん2011/10/01(土) 22:32:28.93
LuaでCからモジュール内の変数を設定することは出来るのでしょうか?

例えば
static luaL_Reg l_foo);[] = {
{ "bar", lua_bar },
{ NULL, NULL }
};
luaL_register(L, "foo", l_foo);
で設定した後にC側で
foo.varに3を設定し

Lua側で
a = foo.var
などのように利用したいのですが
0749デフォルトの名無しさん2011/10/02(日) 00:01:23.77
lua_pushnumber(L, 3);
lua_setfield(L, -2, "bar");
lua_pop(L,1);

luaL_dostring(L,"foo.bar=3");
lua_pop(L,1);

luabind::globals(L)["foo"]["bar"] = 3;
lua_pop(L,1);
0750デフォルトの名無しさん2011/10/02(日) 00:06:59.72
あぁ、varか。
barの部分をvarに読み替えてちょーだい
0751デフォルトの名無しさん2011/10/02(日) 02:14:44.52
>>746
ユーザー(ゲームだから、プレイヤーか)も速度を求める人が多いからね
そりゃ開発側も速度に気を使うだろうと思うよ
0752デフォルトの名無しさん2011/10/02(日) 11:35:03.09
>>749
lua_getglobal(L, "foo");
lua_pushinteger(L, g_"3");
lua_setfield(L, -2, "var");
lua_pop(L,1);

これで登録できました

モジュール名でテーブルが作成され、そこにモジュール内部の関数等が登録されるのですね
0753デフォルトの名無しさん2011/10/02(日) 11:52:41.94
>>752
ちょっとゴミが残ってた、正しくは以下です

lua_getglobal(L, "foo");
lua_pushinteger(L, "3");
lua_setfield(L, -2, "var");
lua_pop(L,1);
0754デフォルトの名無しさん2011/10/02(日) 14:31:39.30
>>751
日本語よめる?
■ このスレッドは過去ログ倉庫に格納されています