トップページ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
0002デフォルトの名無しさん2011/03/30(水) 01:01:25.89
■関連してるかもしれないスレ
Io Language
http://pc11.2ch.net/test/read.cgi/tech/1201100624/
2 part forth
http://pc11.2ch.net/test/read.cgi/tech/1073673931/
●●●●TCL/TKなら俺に聞け 2●●●●
http://pc11.2ch.net/test/read.cgi/tech/1177998764/
ECMAScript デス 3
http://pc11.2ch.net/test/read.cgi/tech/1190160481/
各種ライブラリ紹介スレ2(ゲ制作)
http://pc11.2ch.net/test/read.cgi/gamedev/1177886529/
Eclipse統合M31【Java/C++/Ruby/Python/Perl】
http://hibari.2ch.net/test/read.cgi/tech/1295886572/
「コンパイラ・スクリプトエンジン」相談室15
http://hibari.2ch.net/test/read.cgi/tech/1296214398/
Garbage Collection (GC)について語るスレ
http://pc11.2ch.net/test/read.cgi/tech/1141646850/
0003デフォルトの名無しさん2011/03/30(水) 01:01:46.40
■参考URL
□Lua
ttp://www.lua.org/ (本家)
ttp://lua-users.org/ (lua-users)
ttp://luaforge.net/ (LuaForge)
ttp://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html(5.1マニュアル和訳)
Lua言語の紹介
ttp://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html
入門Luaプログラミング
ttp://www.amazon.co.jp/dp/4797342722/

□Lua as an Effect File Format for OpenGL
ttp://prideout.net/blog/?p=1

□Squirrel
ttp://www.squirrel-lang.org/ (本家)
ttp://sourceforge.net/projects/squirrel/
ttp://sourceforge.net/projects/sqplus/ (SqPlus)
ttp://sourceforge.net/projects/squirrelsh/ (Squirrel Shell)
ttp://wikiwiki.jp/lua/?Squirrel_Lang%2Ftoc(wiki内2.1マニュアル和訳)

□AngelScript
ttp://www.angelcode.com/angelscript/

□Xtal(ゲーム向け。スタックを意識しなくていい?)
ttp://d.hatena.ne.jp/xtalco/
ttp://code.google.com/p/xtal-language/
ttp://blog.livedoor.jp/dankogai/archives/50836939.html

□elastiC
ttp://www.elasticworld.org/
0004デフォルトの名無しさん2011/03/30(水) 20:57:01.71
0005デフォルトの名無しさん2011/03/30(水) 23:21:49.59
スレ立て乙
0006デフォルトの名無しさん2011/04/01(金) 22:15:31.63
前スレに、コルーチンの呼び出しは自分でやらないとダメって書いてあったけど
AngelScriptのcreateCoRoutineって、戻り値ないよね
どうやって実行タイミング合わせるの?
0007デフォルトの名無しさん2011/04/02(土) 23:18:22.11
AddOnのContextMgrを使ってる場合の事かな?
あれでコルーチンする場合は、呼び出し元のスクリプトが終了した後にスクリプト内で呼び出された関数を別Contextで呼び出すってやってたはずなので、
元スクリプトの処理終了後に内部で呼び出した関数を実行する感じになってたはず。

イメージ的には、元スクリプトを呼び出すと、同時にコルーチンの分も処理するって感じ?
Luaとかのコルーチンとはちょっと違うかな。
0008デフォルトの名無しさん2011/04/04(月) 13:07:52.13
Luaで

A = {X = 10}
B = {X = A.X + 10}

というテーブルが二つあって
A.X = A.X + 1とやれば
B.Xもポインタというか遅延評価みたいな形で
勝手に1増えるようにはできないでしょうか?
0009デフォルトの名無しさん2011/04/04(月) 18:15:26.81
>>8
A = {X = 10}
B = {}
setmetatable(B,{
__index = function(t,k)
if k=="X" then return A.X+10 end
end,
__newindex = function(t,k,v)
rawset(t,k,v)
if k=="X" then A.X = t[k] - 10 end
end})

print(A.X,B.X) -- 10 20
A.X = A.X + 1
print(A.X,B.X) -- 11 21
B.X = B.X + 1
print(A.X,B.X) -- 12 22
001082011/04/04(月) 21:02:21.75
>>9
ありがとうございます。
CとかRubyとかオブジェクト指向も関数型も色々な言語触ったけど、
このメタテーブルっていうやつは難しいですね…
サイト見るとメソッドみたなものって書いてるけど使い勝手が違う感じですし。
関数の : と . の呼び出しの違いもなかなか理解できないし、
簡単な言語だと思ってたけど意外と難しいLua…orz
0011デフォルトの名無しさん2011/04/04(月) 23:20:23.21
Luaを作った人は宣言的な言語が嫌いなんだと思う。
だから、宣言が好きな人には難しい。
0012デフォルトの名無しさん2011/04/06(水) 11:20:39.58
親クラスから派生し、
小クラスの関数内から
親クラスの同名関数を呼ぶには
どうしたらいいでしょうか?

C++でいう、仮想関数内から、
親の関数を呼びたい感じです。
0013デフォルトの名無しさん2011/04/06(水) 11:45:31.80
squirrel の話なら 単純に親クラス名::メソッド名() でOK。コンテキストが bindenv() されてないメソッドはそのまま this で動作する
0014デフォルトの名無しさん2011/04/06(水) 11:54:01.30
>>12
言語が何かわからないとどうしようもないだが。
ここはLua専用スレじゃないからね。

しかし、かのアイマス2もLua採用してたのかー。
これはこれからもLua全盛が続きそうだなー。
0015デフォルトの名無しさん2011/04/06(水) 12:02:24.77
>>13
>>14
すみません、Luaです。
宜しくお願いします
0016デフォルトの名無しさん2011/04/06(水) 12:06:40.56
lua にはクラスは無いので問題が意味をなさないよ。疑似クラスとして使ってるならどういった構造で記述してるか書かないと誰も答えられない
0017デフォルトの名無しさん2011/04/06(水) 14:39:41.83
お勉強でゲームプログラミングやってんだけどCとLuaのバランスがわからん
Luaのほうが大分大きくなる(というかこれからなりそうな)んだけど普通こんなモンなのかな
0018デフォルトの名無しさん2011/04/06(水) 14:46:21.79
描画処理とかサウンド処理とかの基本機能>C
ゲームのロジックとか>とりあえずLuaで書いて作業。パフォーマンスが気になるところは仕様FIXしてから機能をCに置き換えていく

ってやりかたにおちつく人が多いんじゃないかな
001962011/04/06(水) 22:37:54.89
>>7
やっぱり良く分からない・・・
作成したコルーチンが実行されるのは、作成元のスクリプトの呼び出しが終わって、
次にContextMgrのExecuteScriptsが呼ばれたときみたい
キャラクターごとにコルーチンを1個作ってアニメーションさせようと思ったんだけど、
こんな使い方はできない?
0020デフォルトの名無しさん2011/04/07(木) 01:03:38.89
Luaで配列の長さを求める # 演算子を使おうとすると
unexpected symbol near `#'
と怒られてしまいます。
もしかしてバージョンが古いのでしょうか?
Lua 5.0.3です。
0021デフォルトの名無しさん2011/04/07(木) 01:12:03.00
#演算子は5.1からだった気がする
0022デフォルトの名無しさん2011/04/07(木) 01:13:15.12
>>20
http://sugarpot.sakura.ne.jp/yuno/html/lua5_manual_ja.html
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
%と#は5.1からみたいね
0023デフォルトの名無しさん2011/04/07(木) 01:33:35.81
なぜ長さで#なのだろう
0024デフォルトの名無しさん2011/04/07(木) 01:39:03.26
>>21,22
ありがとう、ありがとう、普通に#使ってる例が多かったのでまさかと思って
しまいました。
さて、5.1入れるかな。。。
0025デフォルトの名無しさん2011/04/07(木) 09:08:27.00
>>23
the number of ってことじゃね?
シェルスクリプトとかでも使ってるし

0026デフォルトの名無しさん2011/04/07(木) 09:25:34.94
>>23
http://www.weblio.jp/content/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9E%E3%83%BC%E3%82%AF

ハッシュマークとは、一般的に、番号を記す際に用いられる記号である。番号記号と呼ばれることが多い。
ハッシュマークは番号の前に置かれ、続く数字が番号であることを示す。

だってよ
0027デフォルトの名無しさん2011/04/07(木) 18:29:33.65
Lua5.1以降でMBC対応したのってありませんよね?
0028デフォルトの名無しさん2011/04/07(木) 23:19:07.27
>キャラクターごとにコルーチンを1個作ってアニメーションさせようと思ったんだけど、 
>こんな使い方はできない? 
できるよ。
ただ、AngelScriptのサンプルのCoroutineだとちょっと面倒かも。
あれはコルーチンというよりスレッドに近いし。
Luaみたいにコルーチンオブジェクトがあって、そいつをメソッド呼び出しとかできると楽なんだけどね。

Coroutine c;
c.SetFunc(〜);

c.Execute();

って感じで、一時停止したコルーチンの続きを実行させるときにメソッド呼び出すようにすれば楽。
0029デフォルトの名無しさん2011/04/08(金) 07:04:36.65
   ∧_∧  / ̄ ̄ ̄ ̄
  ( ・∀・) <  Lua!!
⊂/  9)  \____
q(   /
  >  >

0030デフォルトの名無しさん2011/04/09(土) 22:50:49.63
>>28
うーむ
じゃあ、Luaみたいな使い方が出来るようにアドオンを改造してみるかな
回答ありがとう
0031デフォルトの名無しさん2011/04/13(水) 20:12:24.88
LuaでGifファイルの編集がしたいのでバイナリで読み込んで処理したいのすが
io.openのモードの後ろにbを付ければバイナリで開けることはわかったんですが、
戻り値が文字列なのでどうすれば『先頭の何ビットを取る』などのバイナリ操作ができるのかがわかりません。
解説しているサイトが見つからないのでそういったバイナリ操作がまとめられたサイトなどがあれば教えて欲しいです。
0032デフォルトの名無しさん2011/04/13(水) 21:04:45.40
そうか、苦手なのか
http://fallabs.com/mikio/tech/promenade.cgi?id=100
補うべく、pack、unpack、split、strstr、codecなどのユーティリティも搭載しているので、簡単なデータ処理なら一切他のライブラリに頼ることなく実現できる。

こういう機能のある、拡張ライブラリ使うなら
lpackというライブラリはどうかな。
http://d.hatena.ne.jp/eggman/touch/20080207/1202423141

使わないとこうなる。
http://d.hatena.ne.jp/eggman/touch/20080205/1202251800

ネット関連で使ってるひとが少ないから、細かいtips記事にしている人も少ないな。
0033デフォルトの名無しさん2011/04/13(水) 21:53:59.11
>>32
説明不足ですみません…。それも見たのでが配布ソフトのスクリプト言語で
Luaを使っているので、Cで書かれたライブラリは読み込めない状態です…。

バイナリ計算のand,or,notなどは自作できましたので、できなくて困っているのは
『文字列の何ビット目から何ビット目までを整数(ビット列)で切り出す』という操作です。
0034デフォルトの名無しさん2011/04/13(水) 22:32:59.26
>>33
一旦テーブルにつめちゃったほうが扱いやすいんじゃないの?

function Hoge(fname)
local t = {}
local f = io.open(fname,"rb")
if not f then return nil end
local data = f:read("*a")
for b in string.gmatch(data,".") do
table.insert(t,string.byte(b))
end
f:close()
return t
end

t = Hoge("hoge.bin")
0035デフォルトの名無しさん2011/04/14(木) 09:07:51.56
>>34
文字コードを取り出すのはstring.byteでしたか。
これに気づいていませんでした。ありがとうございます。
0036デフォルトの名無しさん2011/04/14(木) 09:51:35.56
ウラシマで申し訳ないが、そういやGIFのライセンス問題って決着ついたんだっけ?
0037デフォルトの名無しさん2011/04/14(木) 09:56:30.70
あの特許はもう期限切れのはず
0038デフォルトの名無しさん2011/04/14(木) 12:00:05.59
ですな http://www.itmedia.co.jp/news/articles/0406/21/news021.html
Unisys の 1985 年の LZW についての特許は失効
0039デフォルトの名無しさん2011/04/14(木) 14:22:04.13
luaでディレクトリのファイル一覧を取得したいのですが、
os.execute("dir") > Dir.txt
でプロンプトの内容をテキストファイルに保存してファイルを開く方法しか思いつきませんでした。
直接プログラムで読み込む方法はないでしょうか?
0040デフォルトの名無しさん2011/04/14(木) 14:41:38.59
プログラムで読みこむライブラリを C でつくって組み込めば良いだけでは

無い機能はさっくり作るって発想ができない人は lua は不幸になるだけなので使わないほうがいいですよ
0041デフォルトの名無しさん2011/04/14(木) 14:50:34.37
>>33じゃねえの
0042392011/04/14(木) 15:08:49.74
33ですよ。スレタイからしてC開発者限定で場違いですねサーセン。

>>40
その不幸になる言語でスクリプト組まざるおえないユーザーですみません。
0043デフォルトの名無しさん2011/04/14(木) 15:26:14.08
自分が不幸になるのは完全にluaのせいだといわんばかりだなw


>>40 はちょっと頭の切り替えしたほうがいいんじゃない?
くらいのことを言ってると思うんだけど
0044デフォルトの名無しさん2011/04/14(木) 15:39:24.39
その配布ソフトとやらがC実装ライブラリのインポートを任意で禁止してるならご愁傷様としか...
本当にrequireやpackage.loadlibに該当するAPIを用意してないのか怪しいもんだけどねえ
0045デフォルトの名無しさん2011/04/15(金) 01:40:03.82
ROのホムンクルスAIとか?
0046デフォルトの名無しさん2011/04/15(金) 09:35:51.52
>>43
Cが使えない環境って言うんだから
しょうがないさ。
>>33
組み込まれた物を使う側じゃなくて、
組み込みを用意して使う側がおおいから
名前に、33付けてた方がイイかもね。
0047デフォルトの名無しさん2011/04/15(金) 11:53:58.80
その配布ソフトってなんなんだろう。実は拡張の口がある、とかあったりしないかね
0048デフォルトの名無しさん2011/04/15(金) 14:23:04.94
本気で助けが必要なら某ソフトとかかかないで、ちゃんと名前出すべきなのかもねぇ
0049デフォルトの名無しさん2011/04/15(金) 16:15:11.42
Linuxと同じ
カーネルしか作らない有能な怠け者は反感を買う
0050デフォルトの名無しさん2011/04/15(金) 19:12:56.70
ファイルの一覧をあらかじめテキストファイルにでも書いておくしかないねぇ。
0051デフォルトの名無しさん2011/04/16(土) 05:16:14.98
一般のツールで拡張の口が閉じられてるってのはちょっと考えにくいんだよなぁ。そんな腐ったツールは窓から投げ捨てろ

内製ツールなら、こんなところで聞くよりも組み込んだプログラマにまず文句を言いに言ったほうが早い

あとはゲームとかの類での制限つき環境……だけどその状況でファイル一覧とったり、GIFパースしたりをする理由が謎
0052デフォルトの名無しさん2011/04/16(土) 11:00:01.89
WindowsならDLLインジェクションとかで
横取りすればいけるんじゃね
ウィルス扱いされるかもしらんけど
0053デフォルトの名無しさん2011/04/17(日) 20:53:28.99
>>52
ウィルスと勘違いする対策ソフトはいくつかあるみたい。
DirectInputの初期化とかでも「ウィルスだ!」とか勘違いするし。
0054デフォルトの名無しさん2011/04/19(火) 23:16:39.95
lua_Stateをクラスのメンバにし、staticメンバ関数をlua_registerで登録しています。
この関数にthisを渡したい場合、どのように書くのが定石ですか?
0055デフォルトの名無しさん2011/04/19(火) 23:41:13.94
lua_setuserdataとか?
0056デフォルトの名無しさん2011/04/20(水) 05:10:49.47
>>54
それだけの情報だと状況次第としか言いようがないな
0057デフォルトの名無しさん2011/04/20(水) 23:29:46.82
>>39
io.popenとか
0058デフォルトの名無しさん2011/04/21(木) 00:10:52.42
AngelScript、デフォルト引数が実装されるのか
0059デフォルトの名無しさん2011/04/21(木) 02:49:01.91
デフォルト引数ってなんか使い道あるの?
0060デフォルトの名無しさん2011/04/21(木) 07:54:36.60
   ∧_∧  / ̄ ̄ ̄ ̄
  ( ・∀・) <  Lua!!
⊂/  9)  \____
q(   /
  >  >

0061デフォルトの名無しさん2011/04/21(木) 21:59:26.06
>>59
普段はほとんど変更しないけど、時々異なるフラグを設定するような関数とかに使うと便利、ってぐらいじゃないかね。
必須ってわけじゃないけど。
0062デフォルトの名無しさん2011/04/21(木) 22:26:50.81
>>59
C++にだってデフォルト引数はあるだろ。
改めて質問するようなことなのかねえ。
0063デフォルトの名無しさん2011/04/22(金) 00:06:46.93
C++の場合はデフォルト引数よりもオーバーロードの方がお勧め。
本当はより汎用的なパターンマッチングが良いんだけど、C++だと面倒だからなあ。
0064デフォルトの名無しさん2011/04/22(金) 00:08:09.01
関数をラップすればいいだけだから要らないと思ったんだよ
0065デフォルトの名無しさん2011/04/22(金) 00:44:39.45
デフォルト引数は使う必要がない人も多いかと。
DirectXとか使ってると、特殊な場合以外はフラグはデフォでOKなのが多いから便利だよ。
0066デフォルトの名無しさん2011/04/24(日) 20:59:44.12
Tclと比べたメリット・デメリットは何ですか?
組み入れではなく単体で使うならGUIの構築が楽なTclに軍配があがりそうですが、
それ以外にはどんなことがありますでしょうか?
0067デフォルトの名無しさん2011/04/24(日) 22:27:02.59
>>66
何と比べてるの?
主語が抜けてる。
0068デフォルトの名無しさん2011/04/24(日) 22:41:21.52
>>67
失礼しました。
主語はLuaです。
Luaスレと勘違いしてたんです。
0069デフォルトの名無しさん2011/04/25(月) 00:22:41.13
>>68
オレ自身はLuaユーザーじゃないので大雑把な話しかできないけど、
C関数をスクリプト中で使いやすいのはどちらも同じ。

Tclは原則文字列ベースでしか処理できないけど
Luaは数値、文字列、リスト、テーブルが使える。

Tclはスクリプトエンジンでもかなり遅いほうだけど、
LuaはブラウザのJavascriptに迫る速度。

Tclは言語構文としてはオブジェクト指向対応で
止まってるようなものだけど、
LuaはJIT対応やコルーチン対応など、
流行の技術もある程度押さえられている。

こんなところかな。
0070デフォルトの名無しさん2011/04/25(月) 01:45:57.13
>>66
Tclはウィジェット形式のアプリには向くがゲームには向かない。GTKとかWindowsAPI(DirectX不使用)とかでゲームを作ってるのと同じ。
0071デフォルトの名無しさん2011/04/25(月) 01:49:32.65
あと、メインがどっちかっていう問題もあるな。組み込みスクリプトは簡単に組み込める。Tclを組み込みスクリプトとして使えるようにすれば物好きが使うんでないかな
0072デフォルトの名無しさん2011/04/25(月) 01:59:22.82
tcl は最初から組み込み用だべ
半導体関係のツールまわりでは事実上の標準
0073デフォルトの名無しさん2011/04/25(月) 07:31:00.03
組み込みはTclも簡単にできる
言語として構文の拡張性が高いのもTcl
構文の拡張性が高けりゃ良いってもんじゃないと教えてくれるのもTcl
0074デフォルトの名無しさん2011/04/25(月) 22:05:57.35
現在では、Tclがその本来の使い方から離れて、組み込み言語ではなく
Tkとセットで独立した汎用言語として利用されることが普通になっています。
将来的にはそれと同じことがLuaにも起こらないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています