【Lua】組み込み系言語総合 その4【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/03/30(水) 01:00:58.93使われるプログラミング言語についてのスレッドです
まとめ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
0604デフォルトの名無しさん
2011/08/08(月) 19:58:01.99ありがとうございます
いままで知らなかったのが嘘の様なほどの基本なんですね
0605デフォルトの名無しさん
2011/08/08(月) 20:38:51.81なんで?サイズが大きくなるから?
0606デフォルトの名無しさん
2011/08/08(月) 21:27:29.26AngelScript|Д`)ジー
0607デフォルトの名無しさん
2011/08/08(月) 21:29:24.91BNF記法でイコールみたいな感じらしい
0608デフォルトの名無しさん
2011/08/08(月) 22:37:40.900609デフォルトの名無しさん
2011/08/09(火) 07:59:00.89コーディング時間が長くなるとかより、コード解析速度ダウンのほうが痛いから。
0610デフォルトの名無しさん
2011/08/09(火) 17:50:24.150611デフォルトの名無しさん
2011/08/09(火) 18:55:10.81フツーにあるし
http://code.google.com/p/android-scripting/
0612デフォルトの名無しさん
2011/08/09(火) 22:10:48.62X = if Y < 0 then -1 else 1 end みたいに。
あとメタテーブルがあるんだから演算子は必ず代入しないといけないのもやめてほしい
Table + {1,2,3} とか
0613デフォルトの名無しさん
2011/08/09(火) 22:13:14.72この論理がどう繋がってるのかわからんのだが
0614デフォルトの名無しさん
2011/08/09(火) 22:28:57.95要は3項演算子が欲しいんだろ?
0615デフォルトの名無しさん
2011/08/09(火) 23:01:07.790616デフォルトの名無しさん
2011/08/09(火) 23:14:02.07でいいんじゃなかったっけ
0617デフォルトの名無しさん
2011/08/10(水) 00:10:49.21Ruby脳なんだよ
0618デフォルトの名無しさん
2011/08/10(水) 00:17:16.810619デフォルトの名無しさん
2011/08/10(水) 00:21:33.230620デフォルトの名無しさん
2011/08/10(水) 00:26:46.590621デフォルトの名無しさん
2011/08/10(水) 01:10:41.77f(x and g(y) or z)
自己責任で適当な f, g を選ぶ
0622デフォルトの名無しさん
2011/08/10(水) 01:27:08.330623デフォルトの名無しさん
2011/08/10(水) 02:03:13.96true and false or true
0624デフォルトの名無しさん
2011/08/10(水) 02:14:37.63ソレダ
真のときの返値が偽値のときにおかしくなるんだな
0625デフォルトの名無しさん
2011/08/10(水) 08:53:45.480626デフォルトの名無しさん
2011/08/10(水) 11:40:58.81Schemeでは(call/cc (lambda (k) (or (and x (k y)) z)))
0627デフォルトの名無しさん
2011/08/10(水) 19:26:22.15今のPythonには、そもそも三項演算子がある
ちょっと珍しい書法だが
条件が真の際の返値 if 条件式 else 条件が偽の際の返値
0628デフォルトの名無しさん
2011/08/10(水) 20:59:09.92F(条件、真、偽)とかじゃ駄目なの?
0629デフォルトの名無しさん
2011/08/10(水) 21:24:49.300630デフォルトの名無しさん
2011/08/10(水) 21:28:05.19それだと返値に関数が指定されたとき
関数に全く副作用が無く、かつ
呼ばれることによるオーバーヘッドが気にならない程度の小さい関数ならば良いが
呼ばれることによって何らかの状態が変わってしまうものや
呼ぶことによって大量の処理が動く場合はマズいことになる
0631デフォルトの名無しさん
2011/08/10(水) 22:03:12.74今さら気がついたんだけど1行でも動くんだな。関数なんか書かなくていいっすね
もっとリファレンスきちんと読み直してくるわ
0632デフォルトの名無しさん
2011/08/10(水) 22:39:02.20スピードって、複合代入やインクリメントの話?
0633628
2011/08/10(水) 22:48:23.43もうほっといてくれー(ノ_・。)
0634デフォルトの名無しさん
2011/08/13(土) 06:59:24.230635デフォルトの名無しさん
2011/08/13(土) 07:55:39.27結局、Basicにチン毛が生えた程度の誰得言語だなLua。
0636デフォルトの名無しさん
2011/08/13(土) 07:58:33.32??
0637デフォルトの名無しさん
2011/08/13(土) 08:38:05.84http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#2.2
> 数値 は実数 (double) を表現する。 (しかし数値の内部表現としてfloatやlongなど他の型を使うよう
> Luaインタプリタをビルドし直すのは簡単である。ファイル luaconf.h を参照。)
0638デフォルトの名無しさん
2011/08/13(土) 08:46:12.16http://boinc.oocp.org/benchmark.php
> Intel x86 プロセサでは、単精度でも倍精度でも速度の差はあまりありません。
http://lua-users.org/wiki/FloatingPoint
(単精度で用意したAngelScriptとかSquirrelのプログラムと比較しないと意味ないだろうけど)
数値計算ループ自体は他のスクリプト言語より速いしLuaJITならかなり速い。
http://shootout.alioth.debian.org/u32/benchmark.php?test=mandelbrot&lang=all
http://luajit.org/performance_x86.html
ゲームみたいなフレーム単位のリアルタイム処理やってると固定小数点演算とかライブラリ使うみたいだし、
シビアでいろいろ大変ですね。
http://www2.muroran-it.ac.jp/circle/mpc/front/old1/program/algorithm/fixedpoint/index.html
0639デフォルトの名無しさん
2011/08/13(土) 08:55:52.88ループしてるよ!
0640デフォルトの名無しさん
2011/08/13(土) 11:08:49.020641デフォルトの名無しさん
2011/08/13(土) 14:10:24.86/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0642デフォルトの名無しさん
2011/08/13(土) 20:44:27.380643デフォルトの名無しさん
2011/08/13(土) 21:08:55.040644デフォルトの名無しさん
2011/08/17(水) 00:13:26.24かといってLuaは整数、少数で変数分けてないからfloatにすると精度がきついので
固定少数を検討することになる
ところで蒸し返すようで悪いんだが、Luaはスレッドセーフではないよね?
リエントラントに作ってあって、アプリ実装者がやりやすいように作ってあるだけで
LuaGemsの人はState分離したらスレッドセーフにできるよって言ってるだけだし、
いや、規制で書き込めなくて、過去スレで何回かスレッドセーフではないって言われてるのに
なんか理不尽な流れだなーと思って眺めてたんだ。オレオレ君が間違った認識持って帰る分には
いいんだけどね
0645デフォルトの名無しさん
2011/08/17(水) 00:15:17.220646デフォルトの名無しさん
2011/08/17(水) 00:33:01.210647デフォルトの名無しさん
2011/08/17(水) 00:35:37.68同一のstateとそれから派生した state は別スレッドからは扱えない。スレッド毎に作る分には問題ない
事実は単にこれだけ。
0648デフォルトの名無しさん
2011/08/17(水) 05:04:41.03それに対して「僕はこうだとおもいまーす」はブログに書いといてください
0649デフォルトの名無しさん
2011/08/17(水) 08:38:38.61Luaはstate単位でスレッドセーフ。
それをもってスレッドセーフでないというのは単なる言葉遊び。好きにしろ。
0650デフォルトの名無しさん
2011/08/17(水) 08:41:27.32Do not confuse Lua threads with OS threads.
By Luiz Henrique de Figueiredo
0651デフォルトの名無しさん
2011/08/17(水) 08:50:19.38そんな間違いをしてる人はこの話の流れで一人もいないぞ
0652デフォルトの名無しさん
2011/08/17(水) 13:33:36.16いいわけで、大した問題ではない。
一つのStateを複数のスレッドから使う場合も、Mutexでアクセス権を付与すれば
いいだけだし、そもそもそんな使い方をする状況もあるのか怪しい。
複数走らせてるLuaStateから同じC変数にアクセスする必要性ならわかるが、
それはLuaがスレッドセーフになってるかは関係ないケースだし。
スレッドセーフ厨の人は、どういう状況を想定してるんだろ?
0653デフォルトの名無しさん
2011/08/17(水) 15:01:51.00「インスタンスを分ければスレッドセーフです」って言ってるようなもんだよな。スレッドセーフ君
0654デフォルトの名無しさん
2011/08/17(水) 15:26:57.48「スレッドごとにスクリプトを走らせたい」ってのが第一義の目的として、
単純には state 複数で実現できるのはわかった上で、それだとグローバル変数を
簡単に共有できないから「一つのState を使いたい」って要望がでてくるんだと思われ。
その要望自体は皆理解はできると思う
で、一つのStateを複数のスレッドから使おうとした場合、確かにスクリプトの呼び出しとか
の部分だけを整理して Mutex で固めてしまうのは簡単なんだけど、
「スクリプトが複数スレッドで動いてる」って状況だと、そのスクリプト自体が lua/squirrel の
内部処理を自分のAPIつかっていろいろ呼び出してしまってるので、その操作も
全部精査した上で適切にロックする処理を全部の箇所に足す必要があります。
「付与すればいいだけ」なんだけど、その場所がかなり多くて調べるのもうまく動くかチェックするのも大変。
lua も squirrel もスタック操作がステートフルなので、APIをロックするだけではダメだからね。
俺はそんな作業頼まれても絶対やりたくないので、聞かれたら
「lua も squirrel も単一State の操作はスレッドセーフにできないからやめとけ」って説明します。
0655デフォルトの名無しさん
2011/08/17(水) 15:35:57.260656デフォルトの名無しさん
2011/08/17(水) 15:46:11.04それはLuaの実態がStateであると捉えるか、VM関数群であると捉えるかで
変わるんじゃない。
C標準関数みたいに内部変数が使いまわされてるのが混ざってないのだから、
マルチスレッドでの使用は一応考慮されて設計してるのでしょ。
0657デフォルトの名無しさん
2011/08/17(水) 15:48:59.44lua や squirrel でやる物好きは、なかなかいないと思うけど、誰かが作ったら使う人はいるんじゃね?
0658デフォルトの名無しさん
2011/08/17(水) 15:52:20.26そんなことしなくてもコルーチンと併用して、VMが一時停止したときだけ
ロック解除すれば良いかと。
それ以前にグローバル変数はLua上で管理しない方がてっとり早いだろうけど。
0659デフォルトの名無しさん
2011/08/17(水) 15:54:16.80lua_newthreadがまさにそれじゃね
0660デフォルトの名無しさん
2011/08/17(水) 16:03:24.61コルーチンベースでのVMまるごとロックならそもそもスレッド全くわける必要がないような……
>>659
あれはコルーチン用のステート生成なので、親stateともども別スレッドから同時にはさわれません
0661デフォルトの名無しさん
2011/08/17(水) 16:04:19.31PythonやRubyはいけるの?
初耳
0662デフォルトの名無しさん
2011/08/17(水) 16:11:47.34そうだよね。
だからなおさら1Stateを複数スレッドで〜という状況がありえないと思う。
0663デフォルトの名無しさん
2011/08/17(水) 18:30:49.46その要望自体理解できないが。
単に設計ミスじゃね。何でもかんでもLuaに頼る必要なかんべ。
0664デフォルトの名無しさん
2011/08/17(水) 18:33:13.35それの何が問題かをいってくれないと。
インスタンス単位でスレッド単位で十分なクラスなんだからそれでいいじゃん。
LuaもState単位でスレッドセーフが保障されていれば十分。
それ以上を望むのは馬鹿とマニアだけ。
0665デフォルトの名無しさん
2011/08/17(水) 18:34:24.23Do not confuse Lua threads with OS threads.
By Luiz Henrique de Figueiredo
0666デフォルトの名無しさん
2011/08/17(水) 18:36:47.79「グローバル変数を共有とかお馬鹿な設計はやめとけ」の間違いだろ?
Lua様のせいにしてんじゃねぞ、こら
0667デフォルトの名無しさん
2011/08/17(水) 18:47:37.03Luaはlua_state毎に別スレッドで動作させることができます。
そういう意味でLuaはスレッドセーフです。
異なるlua_satateで情報を共有できるか否か、というのはまた別の話になりますです。
普通は母体となるC言語なり何なりでロックしてから情報を書き換えるなどすればよいだけなので、
一般的な意味でも、Luaはスレッドセーフであるといえると思います。
0668デフォルトの名無しさん
2011/08/17(水) 18:58:47.61言い方の問題じゃね?
「vectorはスレッドセーフである」とか普通は言わないでしょ
0669デフォルトの名無しさん
2011/08/17(水) 19:11:08.78スレッド運用可能程度で。
0670デフォルトの名無しさん
2011/08/17(水) 19:15:17.29馬鹿だと思われるから気をつけた方が良いよ
0671デフォルトの名無しさん
2011/08/17(水) 19:18:32.78CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
他の実装だと、MacRuby は既に GIL 無しになってて、実際に複数スレッドで同時にスクリプトが走る。
あとは Rubinius もたしか開発ブランチでは GIL 排除してる。
CPython は GIL 排除は目標にあがってたけどまだ実現はしてなかったはず
Jython と JRuby はJava上の実装だけど完全に複数スレッド対応ずみ
>>663
「スクリプトだけでなんでもやる」的なスクリプト言語では、現実に求められてる要望だよ。
マルチコア時の性能がかなり上がるからね。
もっとも、俺も Lua でする必要はさっぱり無いと思う。適材適所やね
0672デフォルトの名無しさん
2011/08/17(水) 20:01:03.74AngelScript|Д`)<boost::threadと組み合わせて複数のスクリプト動かした時は問題なかったけど。
0673644
2011/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> >>661
> CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
それで良しとするならLuaでも同じじゃないの?
countフックしてスイッチングするだけじゃん
0675デフォルトの名無しさん
2011/08/18(木) 10:20:35.12という本の
Enhanced Coroutines in Lua
という記事で、Lua のコルーチンをネイティブスレッドに対応させる拡張が紹介されてます。
ソースコードだけダウンロードできます。
使った事ないけど。
0676デフォルトの名無しさん
2011/08/18(木) 15:18:24.60多分この中でお前だけ話を理解できてない。
0677デフォルトの名無しさん
2011/08/22(月) 22:05:23.49http://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.820679デフォルトの名無しさん
2011/08/22(月) 22:28:51.39┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
0680デフォルトの名無しさん
2011/08/23(火) 14:24:57.18( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0681デフォルトの名無しさん
2011/08/23(火) 20:53:31.84これがsuspendで一時停止させたスクリプトの状態まで保存してくれるとなるとすげぇ便利なんだけどなぁ…
今度調べてみよう。
0682デフォルトの名無しさん
2011/08/26(金) 14:17:09.170683デフォルトの名無しさん
2011/08/26(金) 18:59:01.22┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
0684デフォルトの名無しさん
2011/08/31(水) 21:00:58.75同じメタテーブルを設定したテーブルのXとYがあって、
X = X + Y と X = Y + X を区別するために、
今、呼び出されているメタテーブルがXとY、どちらのメタテーブルか、
判定する方法はないでしょうか?
同じメタテーブルを設定しているので、getmetatableでも判定できないので困ってます。
0685デフォルトの名無しさん
2011/09/01(木) 00:41:00.580686デフォルトの名無しさん
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.32http://s.journal.mycom.co.jp/news/2011/09/01/079/
効果は言語によって違うのだろうけど、LuaJITなどに移植し易い機能だったら、
patch対応出来るのだろうか
0688デフォルトの名無しさん
2011/09/04(日) 13:20:09.35詳細項目みると単純ループや数値計算まわりで、LuaJITの最適化済みの得意分野になるので、あんまり期待できないかも。
0689デフォルトの名無しさん
2011/09/04(日) 16:12:14.33482 :名無しさん@初回限定:2007/09/10(月) 02:39:05 ID:+7lLhCDw0
2chで調べ物をしたい時は「教えてください」って書いても
なかなか教えてもらえない。
そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。
0690デフォルトの名無しさん
2011/09/04(日) 21:07:22.31この板でもっと流行らせるべき
0691デフォルトの名無しさん
2011/09/06(火) 00:38:09.21webGLもあるしどうなるかな
0692デフォルトの名無しさん
2011/09/07(水) 20:36:46.82普通にバイナリにコンパイルしてDLLかなんかにするっていう
そんな魔法のようなことできませんか?
0693デフォルトの名無しさん
2011/09/07(水) 21:28:07.120694デフォルトの名無しさん
2011/09/08(木) 09:02:27.07ネイティブバイナリにするのが重要なのか、DLLにするのが重要なのか、
どちらなのかでアプローチが変わると思う。
0695デフォルトの名無しさん
2011/09/08(木) 20:57:31.40ひどい…そんな風に言わなくたっていいじゃない!
>>694
配布形式は全部バイナリで、
開発中はVMにDLL読み込ませて呼び出し〜みたいにできたらいいなぁ。
ということで両方知ってたら教えてください。
0696デフォルトの名無しさん
2011/09/08(木) 21:04:45.620697デフォルトの名無しさん
2011/09/08(木) 21:40:20.80単体でコンパイルして意味があるのかよくわからん。
0698デフォルトの名無しさん
2011/09/08(木) 22:48:17.38DLLにLuaを埋め込めばいいのでは?
0699デフォルトの名無しさん
2011/09/09(金) 09:50:27.31ネイティブの速度が必須とかじゃなきゃ、698の言うとおり
Luaを丸ごとDLLにすれば良いだけじゃ。
配布形式は全部バイナリでというのは、スクリプトが別ファイルになってるのが
嫌なのだろうか?
もしそうならスクリプトのソースをバイナリに埋め込めばいい。
0700695
2011/09/09(金) 22:00:26.22…現状で遅いんで、ちょっとでも早くならないかなと思って聞きました…。
0701デフォルトの名無しさん
2011/09/09(金) 22:57:30.61どの部分が遅いのかテストしてみたら?
なんかよう分からんけどLuaは遅いという理由だと
全部Cで書けとしか言えない
0702デフォルトの名無しさん
2011/09/10(土) 00:10:13.570703デフォルトの名無しさん
2011/09/10(土) 06:44:17.73適材適所。
0704695
2011/09/10(土) 07:21:42.29ムリポ ナイポですかね。理解した。
■ このスレッドは過去ログ倉庫に格納されています