トップページtech
1002コメント341KB

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

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

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

■前スレ
【Lua】組み込み系言語総合 その5【Squirrel】
http://toro.2ch.net/test/read.cgi/tech/1321063450/
■過去スレ
その4 http://hibari.2ch.net/test/read.cgi/tech/1301414458/
その3 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/
0012デフォルトの名無しさん2013/03/19(火) 20:54:19.77
なぜluaを使うのですか?
0013デフォルトの名無しさん2013/03/19(火) 21:21:41.59
>>12
小さくて密度の高い事は美しいことだから。
0014デフォルトの名無しさん2013/03/19(火) 23:18:07.76
スタックダンプが快感
0015デフォルトの名無しさん2013/03/20(水) 05:44:19.66
テーブルの威力がすごすぎるから
0016デフォルトの名無しさん2013/03/20(水) 07:12:07.39
めたたbぇ
0017デフォルトの名無しさん2013/03/20(水) 09:54:07.19
luaを使うことを強いられているんだ!
0018デフォルトの名無しさん2013/03/20(水) 14:50:07.03
luaにはC#のLINQやPythonのリスト内包表記は無いんですか?
0019デフォルトの名無しさん2013/03/22(金) 15:29:50.19
metatableってクソじゃないか?
コードを難解にするだけじゃん
0020デフォルトの名無しさん2013/03/22(金) 17:52:56.00
確かにリスト内包表記は可読性を著しく損なう糞だな。
0021デフォルトの名無しさん2013/03/22(金) 19:55:31.63
>>20
あれほど簡潔なものはないとおもうが?
0022デフォルトの名無しさん2013/03/22(金) 20:16:28.69
論点をずらすなよ
0023デフォルトの名無しさん2013/03/22(金) 21:49:15.12
metatableはクソって話だったな
0024デフォルトの名無しさん2013/03/22(金) 23:37:53.28
めたたbぇprpr
0025デフォルトの名無しさん2013/03/23(土) 00:31:02.17
たとえば DATETIME というクラスを定義したときに
演算子をメタテーブルで与える。
これはC++のoperatorとかRubyの def 演算子()
に該当するなんのへんてつもないただの定義でないのん?
0026デフォルトの名無しさん2013/03/23(土) 00:32:36.87
そもそもoperator再定義自体が下品で破廉恥な行為だ
0027デフォルトの名無しさん2013/03/23(土) 00:53:51.29
せやな
0028デフォルトの名無しさん2013/03/23(土) 09:28:32.81
確かに
0029デフォルトの名無しさん2013/03/23(土) 17:16:41.74
リスト内包表記はいいものだ
0030デフォルトの名無しさん2013/03/23(土) 17:50:15.62
あっそ
0031デフォルトの名無しさん2013/03/23(土) 19:47:34.80
Luaにはなぜないのだろうね
0032デフォルトの名無しさん2013/03/23(土) 21:38:19.50
クロージャとコルーチンで同じことできるし…
0033デフォルトの名無しさん2013/03/24(日) 09:41:18.14
内包表記のためにそんなもん使うのは大袈裟だろ
0034デフォルトの名無しさん2013/03/24(日) 16:32:17.84
内包表記っぽいものを作るのにコルーチンは使わんだろ
generatorじゃないんだから
0035デフォルトの名無しさん2013/03/24(日) 16:35:10.57
pythonはジェネレーターだよ
0036デフォルトの名無しさん2013/03/24(日) 16:48:46.24
いいね
0037デフォルトの名無しさん2013/03/24(日) 17:42:15.18
>>35
ん?
pythonの内包表記は即座にリストとして展開されるよ
[ x ** 2 for x in range(10) if x%2 == 0 ] みたいに角かっこで書くやつね
( x ** 2 for x in range(10) if x%2 == 0 ) みたいに丸かっこで書くとgenerator式になる
0038デフォルトの名無しさん2013/03/24(日) 17:46:46.83
Luaは関数の末尾呼び出しを最適化してくれるのがいいね
0039デフォルトの名無しさん2013/03/24(日) 18:13:24.43
そんなんどこでもやってますよ・・?
0040デフォルトの名無しさん2013/03/24(日) 18:34:00.43
JVM!JVM!
0041デフォルトの名無しさん2013/03/24(日) 19:27:34.14
Luaはとにかく組み込みやすいのがいい。
逆に言えばLuaだけで何でもできると思ってる奴はアフォ
0042デフォルトの名無しさん2013/03/24(日) 20:05:41.56
メタテーブルとcoroutineもすき
0043デフォルトの名無しさん2013/03/24(日) 20:12:10.70
>39
関数型言語では当たり前だけど、pythonとかメジャーなスクリプトではスタックがあふれるだろ?
0044デフォルトの名無しさん2013/03/24(日) 20:15:13.57
単なる末尾呼び出しの最適化は最適化の中でも初歩の初歩だしやってないわけないと思う・・・んだけどなあ
0045デフォルトの名無しさん2013/03/24(日) 20:31:15.66
Luaで真似事しようとするとこんな感じ?

function LC(f)
 local t = {}
 for x in coroutine.wrap(f) do
  table.insert(t, x)
 end
 return t
end

-- rangeの実装は省略
local t = LC(function () for x in range(10) do coroutine.yield(x ^ 2) end end)
0046デフォルトの名無しさん2013/03/24(日) 20:32:18.04
最適化の理論とかはよく知らんけど
pythonの関数呼び出しは単純にC言語のコールスタックに依存してるので、どんどん積み上がっていくよ
0047デフォルトの名無しさん2013/03/24(日) 20:33:56.31
>>45
これはキモイな
やはりpythonには勝てないか
0048デフォルトの名無しさん2013/03/24(日) 20:43:35.17
Pythonはlambdaとdefが異なるのがガン。
Luaは区別無し。名前の無いfunctionがlambda
0049デフォルトの名無しさん2013/03/24(日) 20:57:01.13
>45
やるとしたらそんな感じだろうね
でも、内包表記って言うよりはmapみたいな雰囲気になっちゃうよね

内包表記って数学の集合みたいに宣言的に記述できるってところがメリットのひとつだからなぁ
数学だとこんな感じ? S = { x^2 | x ∈ N, x < 10, x mod 2 = 0 }
やっぱり言語としてサポートしないとつらそう
0050デフォルトの名無しさん2013/03/24(日) 21:05:14.50
>>48
すごく同意
pythonのlambdaは中途半端だね

Luaは文法がコンパクトですっきりしていて、すごく便利って感じではないが
でもコルーチンをサポートしてたり、末尾呼び出し最適化してたりで
ちょうどいい塩梅
0051デフォルトの名無しさん2013/03/24(日) 21:14:17.85
しかし内包表記がないと一行が数倍にふくれあがるし見た目も悪い
0052デフォルトの名無しさん2013/03/24(日) 21:27:46.25
単なるシンタックスシュガーだからパーサを弄ればできそうだけど
lispのリーダーマクロっぽいのほしいな
0053デフォルトの名無しさん2013/03/24(日) 21:31:07.63
有志でlua#つくろうず
0054デフォルトの名無しさん2013/03/24(日) 21:33:14.06
mrubyでいいじゃん
もっと欲張るならPythonも比較的組み込みやすい
0055デフォルトの名無しさん2013/03/24(日) 21:59:26.75
mrubyの実行速度ってどんなもん?
なおrubyも内包表記はない模様
0056デフォルトの名無しさん2013/03/24(日) 22:59:45.74
Luaとの比較だと、スクリプト自体の実行速度はちょっと遅めだけど誤差レベル
実行時のメモリのフットプリントが数倍くらい多い
APIがスタックベースじゃないため拡張は幾分書きやすいけど
そのせいでネイティブとの行き来が増えると実行コストは大きくなる傾向がある
JITはまだ実用レベルじゃない

みたいな感じ(俺調べ)

Luaに取って代わるかは知らんけど、二番煎じ処理系(Sq*とかxta*とか)は駆逐できそうな感じではある
0057デフォルトの名無しさん2013/03/25(月) 00:06:08.81
mrubyの問題は .cのソースコードの行数でLuaの1.5倍ある。
1万6千行に対し二万四千行。
んで、LuaのソースコードはCでもC++でも
どちらでもコンパイル可能なので
Luaの関数の内部からC++のライブラリが使える
(ただしthrowが外側に貫通してはいけないけどね)
yaccとかも不要。
なんというか、最近のbisonとかは内部でm4使ってるとか
いろいろとめんどくさい仕様に改悪されてるから助かるw
0058デフォルトの名無しさん2013/03/25(月) 03:30:49.12
Luaも確かv3.0くらいまではyacc使ってたんだけどね

今のパーサはシンプルな手書き再帰下降でLL(2)だから
内包表記の対応は難しいんじゃないかな
0059デフォルトの名無しさん2013/03/25(月) 07:51:15.04
内包表記みたいなのの解析は、luaの場合パーサがLLかLRかよりも
構文木を介さず直接コード生成してるところが逆にネックになりそう
0060デフォルトの名無しさん2013/03/25(月) 17:54:00.04
Luaのソースコード見てみたら他の言語に比べて超短いな
全部でこれだけかよってびっくりしたわ
これなら個人で解析出来るな、今日から読んでみるわ
0061デフォルトの名無しさん2013/03/25(月) 21:59:44.09
パーサいじるんなら
ついでに「:」か「.」を別の記号に変えたくなるけどね
0062デフォルトの名無しさん2013/03/26(火) 01:13:30.00
metaluaみたいにluaのパーサー上書きする方法はあるみたいだぞ。
luajitでは動かないみたいだが。
0063デフォルトの名無しさん2013/03/27(水) 21:52:23.47
パーサー弄ってわざわざ「->」演算子を追加した事があるな俺
0064デフォルトの名無しさん2013/03/28(木) 08:20:38.05
記念していつもの
lua-5.2.2
http://www1.axfc.net/uploader/so/2847097
0065デフォルトの名無しさん2013/03/28(木) 08:36:16.34
おめ
0066デフォルトの名無しさん2013/04/02(火) 21:46:57.64
AngelScript|Д`)<AngelScript2.26.2記念カキコ
0067デフォルトの名無しさん2013/04/02(火) 22:04:23.95
おめ
0068デフォルトの名無しさん2013/04/02(火) 22:09:38.32
>>64

依存関係がMSVCRT.DLLってことはMingW?
0069デフォルトの名無しさん2013/04/02(火) 22:16:19.20
いいえ
0070デフォルトの名無しさん2013/04/02(火) 22:26:09.11
んん VC6?
0071デフォルトの名無しさん2013/04/02(火) 22:27:32.44
いいえ
0072デフォルトの名無しさん2013/04/02(火) 23:20:37.81
てかコンパイル環境とか書いてないと
DLLって公開する意味あるの?
不整合とか気にするジャン。
0073デフォルトの名無しさん2013/04/02(火) 23:24:16.56
いいえ
0074デフォルトの名無しさん2013/04/03(水) 00:02:33.52
そうすっと たとえばEXEのランタイムと
DLL側のランタイムでデータフォーマットや
整列条件違ったら困ったことにならないの?
0075デフォルトの名無しさん2013/04/03(水) 00:15:02.91
そういえばSquirrelだけ記念カキコがない
0076デフォルトの名無しさん2013/04/03(水) 00:31:33.85
はい
0077デフォルトの名無しさん2013/04/03(水) 01:20:18.06
Luaの場合はヘッダに構造体定義してるのがlua_Debugくらいだし
DLLの境界問題出にくいけどな

ちゅーかどこぞの馬の骨が捨て置いたバイナリに喰いつく暇があったら
自分のプロジェクトにLuaのソースコード突っ込んだ方が建設的かと
0078デフォルトの名無しさん2013/04/03(水) 01:22:27.16
はい
0079デフォルトの名無しさん2013/04/03(水) 20:17:59.94
Luaはなぜ早いのですか?
中の妖精さんと高額契約したのですか?
0080デフォルトの名無しさん2013/04/03(水) 21:11:29.32
       /|
       |/__
       ヽ| l l│<ハーイ
       ┷┷┷
0081デフォルトの名無しさん2013/04/03(水) 21:37:47.94
コアにVMを置いて中間コードを実行していること
(この方式は他も追従し追いつかれつつある)
VMがレジスタマシンであること
設計の合理性
(整数演算の切捨てなど、ボトルネックの分析が良かった)
JITなど速い方式の実装も行われている

かな
0082デフォルトの名無しさん2013/04/03(水) 21:55:44.63
整数演算がボトルネックというのが分かりません
doubleのほうが百万倍遅いじゃないですか気持ち的に
0083デフォルトの名無しさん2013/04/03(水) 22:05:29.72
うん、だからその理屈だと整数演算を切り捨ててはいけないんだけど
Luaはそれを切り捨てたのよ。
それでもベンチマーク成績は高かった。
つまり、演算以外の部分が問題だったわけね。
0084デフォルトの名無しさん2013/04/03(水) 22:11:56.98
doubleそれほど遅くないよ。割り算を除けばせいぜい2倍位じゃないの?
intとdoubleの変換が遅かったりして。
0085デフォルトの名無しさん2013/04/03(水) 22:14:30.36
doubleの処理は、今時のそこそこのデスクトップマシンと、
そこいらへんにたくさんあるARMとで、天と地ほどの差があるなw
0086デフォルトの名無しさん2013/04/03(水) 22:16:23.31
整数演算がないと困るのはビット演算
が5.2でライブラリが追加されたからそれもほぼ解消
0087デフォルトの名無しさん2013/04/03(水) 22:19:25.09
>>83
浮動小数演算がボトルネックにはならなかったって話と、整数演算が
ボトルネックだったって話は関係ないじゃん。
0088デフォルトの名無しさん2013/04/03(水) 22:28:42.34
その辺のことはこのあたりかな
http://lua-users.org/wiki/FloatingPoint
0089デフォルトの名無しさん2013/04/03(水) 22:31:35.75
そもそも誰も「整数演算がボトルネック」なんて話してないし
0090デフォルトの名無しさん2013/04/03(水) 22:52:19.88
整数演算がボトルネックといっているのではなく、
浮動小数点演算の遅さは実は問題ではなかったという判断
だから整数演算いらんというデザイン
0091デフォルトの名無しさん2013/04/03(水) 22:53:39.83
速くなればなるほど問題が表面化するというわけだな
0092デフォルトの名無しさん2013/04/03(水) 23:01:32.81
JIT版の実装が良くなればたぶんね
0093デフォルトの名無しさん2013/04/03(水) 23:14:14.82
>>89
つまり、整数演算切り捨てたこととLuaが速いことは関係ないってことだろ。
>>81はボトルネックと言っているが。
0094デフォルトの名無しさん2013/04/03(水) 23:25:40.76
>>81はLuaが速い一因として設計の合理性を挙げていて
整数演算がボトルネックとは言ってないし
>>83>>90のフォローもそれを補強していると思うんだが
読解力がないのならしょうがない
0095デフォルトの名無しさん2013/04/03(水) 23:31:28.29
言語仕様そのものが速さ目的で設計されてるってのもあるんでないか
ローカル変数をわざわざ指定しなきゃならんとか
書く側からすれば面倒な仕様だけど多分これだとGCがやりやすいんだろうなとか
ソース見たわけじゃないから分からんけどね
0096デフォルトの名無しさん2013/04/04(木) 20:48:23.65
AngelScript|Д`)<みんなでtemplate触ろうぜ
0097デフォルトの名無しさん2013/04/04(木) 20:55:01.09
Squirrel |Д`)<Squirrel 3.0.4記念カキコ
0098デフォルトの名無しさん2013/04/05(金) 20:50:30.10
Squirrel更新か!?
と思ったのに!
0099デフォルトの名無しさん2013/04/10(水) 01:40:40.27
AngelScriptにDelegate対応が来てた
0100デフォルトの名無しさん2013/04/12(金) 20:39:39.69
今度のはfuncdefとかの関数ポインタが無くなってデリゲートに置き換わるのか。
0101デフォルトの名無しさん2013/04/13(土) 06:03:24.53
どんどん実務向きじゃなくなってくな
0102デフォルトの名無しさん2013/04/13(土) 10:14:35.22
出たよ実務厨
0103デフォルトの名無しさん2013/04/13(土) 12:50:15.63
AngelScript、C++もどきからC#もどきになっていっちゃうのかな
0104デフォルトの名無しさん2013/04/13(土) 16:49:05.32
同じC#もどきならTypeScript使いたい
JSとの互換性をある程度制限したサブセットならluaのVMで動かせるんじゃないか
0105デフォルトの名無しさん2013/04/13(土) 21:56:15.10
V8じゃダメなのかな。
0106デフォルトの名無しさん2013/04/13(土) 23:11:15.34
V8ってサイズでかいし不安定だし組み込むのめんどくさい
0107デフォルトの名無しさん2013/04/13(土) 23:24:25.01
エンジンだけに
0108デフォルトの名無しさん2013/04/14(日) 08:39:34.90
http://www.infoq.com/jp/news/2013/04/eclipsecon-2013
EclipseのM2M開発環境

> EclipseはArduinoとRasberry Piデバイスの開発のチュートリアルを提供している。
> これには組み込みLuaランタイム(Mihini)とLuaの開発環境(Koneki)のセットアップ方法も含まれている。

Luaがセンサーネットワークの世界に旅立っていった。
0109デフォルトの名無しさん2013/04/14(日) 08:43:24.10
栗鼠月天使
0110デフォルトの名無しさん2013/04/14(日) 10:19:21.31
ぅあってお仕事ではどんな場面でちゅかうんですか?
0111デフォルトの名無しさん2013/04/14(日) 10:23:03.29
ぅあきねんぱぴこ
0112デフォルトの名無しさん2013/04/15(月) 14:31:12.59
AngelScriptのデリゲートって
オブジェクトのインスタンスとメソッドから関数ポインタを作る機能のようだ
普通の関数もクラスメソッドも関数ポインタに代入できる

3.0では値型のオブジェクトは使えなくなって
参照型のオブジェクトのみになるらしい
そうなるといっそうC#やJavaっぽくなる
■ このスレッドは過去ログ倉庫に格納されています