トップページ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
0482デフォルトの名無しさん2011/07/18(月) 22:38:33.21
リストとかテーブルを一つの型として扱って
目的を達成できるならそうかもね
0483デフォルトの名無しさん2011/07/18(月) 22:45:38.12
カプセル化がしっかりしてればいちいち型チェックなんてしなくていいんだけどな
C++で言うと
void hoge::fuga() { assert(typeid(this) == typeid(hoge())); ・・・ }
なんてするアホは居ない
でもluaだと
selfが期待した型じゃないなんてことはよくある(意図的にしたり、.と:のタイプミスだったり)
ほかの引数も同様だ
宣言を書く手間と
もっとガチガチに強固なクラスを作る機能を提供してくれてもいいじゃないか
0484デフォルトの名無しさん2011/07/18(月) 22:49:26.22
>>481
チェックコード書く手間と宣言書く手間って大差なくね?
0485デフォルトの名無しさん2011/07/18(月) 22:53:19.87
>>480
静的型付け言語だからね。
他のスクリプト言語と比べて、デフォルトで連想配列とコルーチンオブジェクトがないのが難点かな?
0486デフォルトの名無しさん2011/07/19(火) 21:38:23.25
そんなにピキピキガチガチでクラスとか型チェックしたいならC++使ってろ。
0487デフォルトの名無しさん2011/07/19(火) 21:42:31.15
Lua厨の敗北宣言である
0488デフォルトの名無しさん2011/07/19(火) 21:46:08.57
むなしい勝利宣言であった
0489デフォルトの名無しさん2011/07/20(水) 00:16:55.37
文字コードも型チェックも完成するまでにバージョンがいくつ上がるかわからんが
できれば最弱バージョンから最強バージョンに一回だけアップデートしたい
0490デフォルトの名無しさん2011/07/20(水) 00:38:38.71
>>489
バージョンアップしたら以前のスクリプトが使えなくなった、ってそんなに多いかな?
0491デフォルトの名無しさん2011/07/20(水) 01:05:22.16
実行時のタイプチェックなら、erlangみたいな関数型っぽく頑張れればいいんだけどね。なんかないのかな?
http://lua-users.org/wiki/LuaTypeChecking
http://metalua.luaforge.net/

0492デフォルトの名無しさん2011/07/20(水) 06:20:15.30
Lua の coroutine.create() ってのは重い処理なのでしょうか?
それから coroutine.resume() で関数抜けた後(coroutine.status == "dead"な状態)に
そのコルーチンオブジェクト?は再利用は可能でしょうか?
0493デフォルトの名無しさん2011/07/20(水) 08:06:07.04
わりと重い処理だとされている。つーか「コルーチン 再利用」とかでググれ
0494デフォルトの名無しさん2011/07/20(水) 10:22:12.90
テーブルでFSM作ったほうが速いよ
出来ることの差なんてないし
0495デフォルトの名無しさん2011/07/20(水) 10:30:24.24
>>493
dクス。luabindでの例とかありますね。
しかしluaでほとんど処理させてるんで導入したくないでござる。

>>494
状態の数が多い処理だと記述は確かに楽なんですけどね。
それもアリかもですね。

海外のコードみてても普通にcreateして変数上書きしてたりしますね。
速度関係無いなら別にこれでいいかな。
何か簡単ならやっとこうと思ったんですけどね。
0496デフォルトの名無しさん2011/07/20(水) 10:38:12.38
使い回すコード書いてベンチとったけどあんまり速くならんかった記憶があるが、実装適当だったせいかも
「スクリプト言語による〜」でもわざわざ言及されてたし、差が出るかどうか計った人いたら教えて欲しい
0497デフォルトの名無しさん2011/07/20(水) 10:43:11.13
ゲームとかシビアな要求がある場合だけでいいんじゃん?所詮スクリプトだし
0498デフォルトの名無しさん2011/07/20(水) 11:50:48.25
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   
0499デフォルトの名無しさん2011/07/20(水) 17:43:18.24
               . -―- .     
             /       ヽ
          //         ',     
            | { _____  |       
        (⌒ヽ7´        ``ヒニ¨ヽ
        ヽ、..二二二二二二二. -r‐''′     Lua!!
        /´ 〉'">、、,,.ィ二¨' {.  ヽ     _ _     
         `r、| ゙._(9,)Y´_(9_l′ )  (  , -'′ `¨¨´ ̄`ヽ、
         {(,| `'''7、,. 、 ⌒  |/ニY {               \
           ヾ|   ^'^ ′-、 ,ノr')リ  ,ゝ、ー`――-'- ∠,_  ノ
           |   「匸匸匚| '"|ィ'( (,ノ,r'゙へ. ̄ ̄,二ニ、゙}了
    , ヘー‐- 、 l  | /^''⌒|  | | ,ゝ )、,>(_9,`!i!}i!ィ_9,) |人
  -‐ノ .ヘー‐-ィ ヽ  !‐}__,..ノ  || /-‐ヽ|   -イ,__,.>‐  ハ }
 ''"//ヽー、  ノヽ∧ `ー一'´ / |′ 丿!  , -===- 、  }くー- ..._
  //^\  ヾ-、 :| ハ   ̄ / ノ |.  { {ハ.  V'二'二ソ  ノ| |    `ヽ
,ノ   ヽ,_ ヽノヽ_)ノ:l 'ーー<.  /  |.  ヽヽヽ._ `二¨´ /ノ ノ
/    <^_,.イ `r‐'゙ :::ヽ  \ `丶、  |、   \\'ー--‐''"//
\___,/|  !  ::::::l、  \  \| \   \ヽ   / ノ
0500デフォルトの名無しさん2011/07/20(水) 20:10:21.26
全くLua厨のキモさは天性だな。( ´,_ゝ`)プッ
0501デフォルトの名無しさん2011/07/20(水) 20:18:14.49
アンヘルスクリプト最強
0502デフォルトの名無しさん2011/07/20(水) 20:35:30.86
シナリオのあるゲームならLUAの有用性も分かるんだけど、組み込み家電で活用できる用途ってあるかな?
0503デフォルトの名無しさん2011/07/20(水) 21:19:29.14
>組み込み家電
そんな餌で(ry
0504デフォルトの名無しさん2011/07/20(水) 21:32:43.91
Pornってやつが組み込み家電でも使えなかったっけ?
0505デフォルトの名無しさん2011/07/20(水) 22:07:03.41
確かAcceedが組み込み家電向けの言語だったと思う。
0506デフォルトの名無しさん2011/07/21(木) 00:27:27.81
>>503
いや、すまん。組み込み家電っつーか、組み込み機器でも良いんだけど。
今のところヤマハのルーターぐらいしか応用例知らなくて。
0507デフォルトの名無しさん2011/07/21(木) 08:52:59.70
         \   l´⌒\⌒\ \\ \
           \ ヽ   )  )   \\ \\   
              (   \ \∩___∩ \\ 
           \   \  ⌒⌒| ノ      ヽ  \\      
              \ \   /  ●   ● ト、\ \\\ 
               \  Y |    ( _●_)  ミ\  \\\  
               \ / 彡、_  |∪| ノ   \  \\\
                 (____)―ヽノ' ヽ      ̄ ̄ ヽ\\
                                \,  j  l l .l }
                         Lua!   l (_ノノノノ

0508デフォルトの名無しさん2011/07/21(木) 20:39:48.55
Acceedいいな。まさにLuaとAngelScriptの良いとこ取りだね。
0509デフォルトの名無しさん2011/07/21(木) 20:52:30.12
参考リンクくれ、Acceed
0510デフォルトの名無しさん2011/07/21(木) 21:14:47.47
ぐぐれ。
0511デフォルトの名無しさん2011/07/21(木) 21:21:11.85
無いのか。
0512デフォルトの名無しさん2011/07/21(木) 21:35:15.98
Acceed、何かアダルトビデオのメーカーばっかり引っかかるな
0513デフォルトの名無しさん2011/07/21(木) 21:39:58.68
Acceedすごすぎwこういうの待ってたんだよw
0514デフォルトの名無しさん2011/07/21(木) 21:54:01.01
AcceedのURL貼ってくれ。ゲイビデオしかヒットしない。
0515デフォルトの名無しさん2011/07/22(金) 00:02:37.93
なにかに名前つけるときは検索されたときのこと考えて慎重に付けないとだめだな
仮にAcceedがどんなに良い言語だったとしても検索してゲイビデオが出てきたら普及する前に潰れるわ
0516デフォルトの名無しさん2011/07/22(金) 00:27:44.84
おまいら釣られすぎw
0517デフォルトの名無しさん2011/07/22(金) 00:28:28.81
いや、釣られたのは俺かorz
0518デフォルトの名無しさん2011/07/22(金) 09:19:34.56
オナニー言語イラネ
0519デフォルトの名無しさん2011/07/22(金) 10:32:05.92
やたーオレオレスクリプトできたよー
0520デフォルトの名無しさん2011/07/22(金) 12:28:16.27
>>519
GitHubかBitBucketで公開して
0521デフォルトの名無しさん2011/07/22(金) 15:40:15.33
debug.debug() ってコンソール用なんですかね?
0522デフォルトの名無しさん2011/07/22(金) 15:44:17.66
yes, you can.
0523デフォルトの名無しさん2011/07/22(金) 18:23:03.47
>>522
ありがとうございます。

じゃあ組み込み用途には使えないって事ですね…
0524デフォルトの名無しさん2011/07/22(金) 21:15:38.67
あー、要するに struct lua_Debug を中心としたデバッグインターフェイスを利用して、
アプリでデバッガ用意してねって話なんですね。
これはLuaに限らず、Squirrelでも同じと。
0525デフォルトの名無しさん2011/07/23(土) 08:56:21.91
         \   l´⌒\⌒\ \\ \
           \ ヽ   )  )   \\ \\   
              (   \ \∩___∩ \\ 
           \   \  ⌒⌒| ノ      ヽ  \\      
              \ \   /  ●   ● ト、\ \\\ 
               \  Y |    ( _●_)  ミ\  \\\  
               \ / 彡、_  |∪| ノ   \  \\\
                 (____)―ヽノ' ヽ      ̄ ̄ ヽ\\
                                \,  j  l l .l }
                         Lua!   l (_ノノノノ

0526>>5242011/07/23(土) 09:00:18.66
コンソールベースのデバッガがあれば十分なんで lua.c パクってきて、
アプリが管理してる lua_State* 渡してコンソール画面だしてやる感じにします。

いや〜しかし面白いですねコレ。
0527デフォルトの名無しさん2011/07/23(土) 09:03:26.36
yes, we can.
0528デフォルトの名無しさん2011/07/24(日) 01:04:03.98
> アプリが管理してる lua_State* 渡してコンソール画面だしてやる感じにします。
それが出来る状況ならdebug.debugも可能だと思うw
0529デフォルトの名無しさん2011/07/24(日) 09:13:48.04
ゲームだとゲーム画面内にコンソール描いてるよな。
そんな感じじゃないのかな。
0530デフォルトの名無しさん2011/08/05(金) 06:10:07.59
Luaがスレッドセーフなことを確認しました
0531デフォルトの名無しさん2011/08/05(金) 06:44:55.58
× Luaがスレッドセーフなことを確認しました
○ Luaのリファレンスを一読しました
0532デフォルトの名無しさん2011/08/05(金) 10:15:40.19
lua も squirrel も全然スレッドセーフじゃないぞ
0533デフォルトの名無しさん2011/08/05(金) 10:45:28.69
>>532
だから確認したって。
スレッド毎にステート作ってやればぜんぜんOK。
0534デフォルトの名無しさん2011/08/05(金) 11:01:35.90
それはスレッドセーフとは言わない
0535デフォルトの名無しさん2011/08/05(金) 11:05:32.78
<lua.h>の関数がreentrantだっていうのを翻訳したんだろうな
訳を見て原文を見抜けない人には猫に小判
0536デフォルトの名無しさん2011/08/05(金) 11:14:16.75
>>534
はあ?
0537デフォルトの名無しさん2011/08/05(金) 11:16:17.78
http://lua-users.org/lists/lua-l/2011-07/msg00072.html

Lua states, created with lua_newstate or luaL_newstate are completely
separate and thread safe.
0538デフォルトの名無しさん2011/08/05(金) 11:17:13.87
それぞれの関数そのものは再入可能でスレッドセーフってことで、スレッド毎に完全に独立して動作させることができるCライブラリという意味ではスレッドセーフだな

でもステートと付随するVMの操作を複数のスレッドにまたがって行うことはできないからスクリプト言語としてはスレッドセーフじゃない
0539デフォルトの名無しさん2011/08/05(金) 11:18:45.08
>>538
「ステートと付随するVMの操作」ってなによ
0540デフォルトの名無しさん2011/08/05(金) 11:20:21.50
スレッド毎VMとか管理地獄になるからやめとけ……

メインスレッドだけで動かしてそこに別機構でメッセージパッシングするのが安全安心
0541デフォルトの名無しさん2011/08/05(金) 11:23:34.71
>>540
もう作ったんで。
Luaがスレッド毎VMに耐えることを確認しました。
ちなみにそれほど面倒じゃないです(言語によるのでしょうが)。
0542デフォルトの名無しさん2011/08/05(金) 11:26:59.34
それぞれのスクリプト中から相互にグローバル変数/関数を直接見れないのってすごく面倒じゃね?
0543デフォルトの名無しさん2011/08/05(金) 11:29:18.99
>>542
別に面倒じゃないです。
0544デフォルトの名無しさん2011/08/05(金) 11:31:38.69
うむ、それならいい。がんばれ。
0545デフォルトの名無しさん2011/08/05(金) 22:38:38.78
Lua使ってたらIDEが構文チェックしてくれないからエラー出まくりで
普通にC++使ってるほうがいいって気付いた。
スクリプト言語ってやっぱりCGI以外で存在意義ってないな。
0546デフォルトの名無しさん2011/08/05(金) 22:47:20.08
そうですね。
0547デフォルトの名無しさん2011/08/05(金) 22:51:48.65
普通使う時にIDE側に定義足すだろ
0548デフォルトの名無しさん2011/08/05(金) 22:53:01.73
>>60
そんな時は鉛筆削りで代用してる
0549デフォルトの名無しさん2011/08/05(金) 22:54:05.29
すまん誤爆
0550デフォルトの名無しさん2011/08/05(金) 23:39:00.60
>>533
それは Lua がスレッドセーフなのではなく、
君のプログラムがスレッドセーフなのである。

業界標準に従った用語法を使わないと、書籍や
論文を読むときに自分が困ることになるので、
勝手なオレ用語は改めた方がいい。
0551デフォルトの名無しさん2011/08/06(土) 00:11:44.16
print([[ ]])
print(" ")
print(' ')
print ' '
print " "
いろいろあってどれ使うか迷う
0552デフォルトの名無しさん2011/08/06(土) 01:00:20.80
これといった標準がないときには、自分勝手に決めてしまう性格の方が迷いがないね
0553デフォルトの名無しさん2011/08/06(土) 09:08:54.34
>>550
はいはい。業界君乙。
0554デフォルトの名無しさん2011/08/06(土) 09:10:50.78
Luaはスレッドセーフな運用ができる。これで満足か?
0555デフォルトの名無しさん2011/08/06(土) 09:11:43.39
業界君ってめんどくさい
0556デフォルトの名無しさん2011/08/06(土) 09:14:47.50
>>550
つまりお前のプログラムのバグでスレッドアウトってだけだろ?
Luaのせいにすんなよ
0557デフォルトの名無しさん2011/08/06(土) 09:54:20.58
業界に限らずオレオレ用語君は実際困るんだが
0558デフォルトの名無しさん2011/08/06(土) 09:54:52.31
鉛筆削りで代用できる言語。それがLua
0559デフォルトの名無しさん2011/08/06(土) 10:01:43.94
荒れてるようなのでまとめると
スレッドごとにlua_stateを独立して保持してやれば、スレッド毎に独立して動きます。
こういう意味でLua(のDLL)はスレッドセーフです。
なお、各lua_state間(各スレッド間)で情報共有(グローバルj変数などの共有)が
できるかどうかまでは確認していません。
0560デフォルトの名無しさん2011/08/06(土) 11:28:47.23
スレッドセーフって意味は、複数のスレッドからアクセスして大丈夫かっていう意味だろ。
0561デフォルトの名無しさん2011/08/06(土) 11:49:24.27
>>560
はい
0562デフォルトの名無しさん2011/08/06(土) 11:53:31.69
スレッドセーフにするには、ロックするか
書き込み可の共有変数を無くすか
Luaは後者
0563デフォルトの名無しさん2011/08/06(土) 11:58:08.53
>>562
はい
0564デフォルトの名無しさん2011/08/06(土) 12:00:59.78
共有変数のないライブラリなんかも
「スレッドセーフなライブラリだ」とか普通に使うよなぁ。
業界君の業界ってどこなんだろ?
四次元の世界のプログラマとかか?
0565デフォルトの名無しさん2011/08/06(土) 12:15:10.67
四次元の世界から書き込みご苦労です
0566デフォルトの名無しさん2011/08/06(土) 12:33:46.57
スクリプト言語の実装だと、スレッドセーフかどうか、ってのは同一VMに対する操作に対してを指すのが一般的じゃね?
ruby しかり python しかり。
lua とか squirrel はそもそもスタック操作が atomic じゃないわけで、最初からそういう点でのスレッドセーフを確保するつもりが全く無い実装だよね

VM わけてスレッドセーフなのはあたりまえすぎるというか、そうなってない言語実装とかはずかしくて表にだせないような
0567デフォルトの名無しさん2011/08/06(土) 12:43:36.75
SafeLua
http://sourceforge.net/p/safelua/wiki/Home/
SandBox? TryLuaみたいなサイトでも作るんかな
0568デフォルトの名無しさん2011/08/06(土) 12:45:18.95
何が一般的かはよくわかりませんが、とにかく
Luaはlua_sate毎に別スレッドで動かせることを確認した次第です。
それ以外のことは知りません。
0569デフォルトの名無しさん2011/08/06(土) 13:11:29.76
スレッドセーフでないことの確認はともかく
スレッドセーフであることの確認って
ソースコードチェックする以外にどうやるの?
0570デフォルトの名無しさん2011/08/06(土) 13:21:50.16
>>569
実際に使ってみるとか。
0571デフォルトの名無しさん2011/08/06(土) 13:23:14.44
>>566
RubyやPythonってひとつのプロセスに複数VM持てたっけ?
0572デフォルトの名無しさん2011/08/06(土) 13:39:14.58
例えばCの関数 strtok_r は strtok のリエントラント版でな、
こいつは本質的にはLuaと同じ方法でスレッドセーフを実現してる
0573デフォルトの名無しさん2011/08/06(土) 13:56:53.74
>>569
ストレステストです。
0574デフォルトの名無しさん2011/08/06(土) 14:09:01.86
>>571
グローバルに一つやね。スレッドセーフは GIL で確保する実装

ruby はマルチVMの研究はやってたと思うけど詳しいことは知らない
マルチVMでシームレスに使うには結局メッセージパッシングの機構を
つくりこむ必要があってそこで難航してたんじゃなかったっけか

lua や squirrel はその点は総スルーしてるから、使う側はあきらめるか独自に頭をひねる必要がある
0575デフォルトの名無しさん2011/08/06(土) 14:16:15.19
そろそろ erlang 使いが乱入してこないかしら
0576デフォルトの名無しさん2011/08/06(土) 14:20:57.31
レースコンディションを自身で解消できるものしか
スレッドセーフと呼ばない、というのが業界標準なのか?www
それどこ業界よ?
0577デフォルトの名無しさん2011/08/06(土) 16:59:20.24
>>574
lua_stateが別でも相互に参照し合いたいってことか?
イラネ
そんなマイナーな議論よそでやってくれよ
0578デフォルトの名無しさん2011/08/06(土) 17:02:54.39
Lua鹿使えないSEなんていないんだから、
Luaをコントロールする言語側でロックなり何なりして情報を共有すればいいだけ。
Lua言語ですべてやろうとする馬鹿は消えてほしい
0579デフォルトの名無しさん2011/08/06(土) 17:09:56.18
まとめ
Luaはlua_state毎に別スレッドで動作させることができます。
そういう意味でLuaはスレッドセーフです。
異なるlua_satateで情報を共有できるか否か、というのはまた別の話になりますです。
普通は母体となるC言語なり何なりでロックしてから情報を書き換えるなどすればよいだけなので、
一般的な意味でも、Luaはスレッドセーフであるといえると思います。
0580デフォルトの名無しさん2011/08/06(土) 17:15:36.47
なお、スレッドセーフに関しの Lua Programming Gemsの著者である
Luiz Henrique de Figueiredoのコメント。

http://lua-users.org/lists/lua-l/2011-07/msg00072.html

Lua states, created with lua_newstate or luaL_newstate are completely
separate and thread safe.
0581デフォルトの名無しさん2011/08/06(土) 17:19:02.57
なお、レースコンディションを自身で解消できる言語しか
スレッドセーフと呼ばない、という業界が存在するらしく
話がかみ合わない場合があるので注意。
■ このスレッドは過去ログ倉庫に格納されています