【Lua】組み込み系言語総合 その6【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/03/10(日) 15:10:32.28使われるプログラミング言語についてのスレッドです
まとめ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/
0503デフォルトの名無しさん
2014/08/12(火) 22:38:29.15ID:wYq/8Bw70504デフォルトの名無しさん
2014/08/12(火) 23:01:41.48ID:XJm7PWEzhttps://teachme.jp/contents/16546
見る限りリモートデバッグも出来るようだから
そっちの環境を作るのが先かもね
0505デフォルトの名無しさん
2014/08/25(月) 10:39:27.72ID:BL3IV/EG組み込みの文字列、配列、連想配列に std::string, vector, map を
そのまま使っているほどには、C++のクラスをバインドするには親和性が高そう。
比較的、型の扱いが厳密なのが特徴かな。 クロージャは無いかも。
0506デフォルトの名無しさん
2014/08/25(月) 18:26:32.35ID:eFSdMsqd0507デフォルトの名無しさん
2014/08/25(月) 19:18:08.37ID:8RrIpfE5割とオーソドックスな文法だね
defでの関数定義時に、annotationとguardを設定できるのはちょっと面白い
(いまいち使い道は思いつかない)
バージョン5.3まで行ってる割にはドキュメントが弱そうに(個人的には)見えるけど
それだけシンプルって事なのか、それともdoxygenの使用にこだわっているせいなのか
0508デフォルトの名無しさん
2014/08/25(月) 21:14:31.71ID:wLUoTrN4C++による仮想コードでスクリプトのドキュメントを生成していて、
doxygenの中にスクリプトとC++ APIの両方が書かれているみたい。
ただ、":=" と "=" の動作の違いとか、基本的なことが書かれてない気がする。
割り切った設計はなかなか面白いのだけど、いろいろと惜しいな。
0509デフォルトの名無しさん
2014/08/26(火) 09:41:08.11ID:laXhI8kBFunction Definition ::= [annotation + CR/LF] "def" identifier "(" [arg ("," arg)*] ")" [":" guard] block
annotation ::= ???
CR/LF ::= ???
identifier ::= ???
arg ::= ???
guard ::= ???
block ::= ???
訳わからん
0510デフォルトの名無しさん
2014/08/26(火) 12:16:11.13ID:c1R9OiEG関数定義のシンタックスが書いてあるだけだぞ。
annotation: meta-annotation on function, currently used as documentation. Optional.
identifier: name of function. Required.
args: comma-delimited list of parameter names. Optional.
guards: guarding statement that act as a prerequisite for the function. Optional.
{ }: scoped block as function body. Required.
0511デフォルトの名無しさん
2014/08/26(火) 21:00:26.29ID:CrpVQ0Deこれが訳分からんならお前には色々と難しいな
0512デフォルトの名無しさん
2014/08/26(火) 21:58:18.18ID:laXhI8kB非終端記号混じりで定義するなら
それらの定義もしっかりやれよって話
>>511
俺には無理
annotation
1行目のみ#までの空白タブは読み捨てるが2行目移行は読み捨てない
Annotationとキーワード"def"がある行の間に空行はいくら入ってもいいが空白行やコメントは不可
こんなソース見なきゃ分かんねーよ
0513デフォルトの名無しさん
2014/08/27(水) 06:44:36.56ID:4iKpxsh4確かにannotationは説明不足だな
他のコメントは // でも /* */ でもいいのに、ここは # のみだし
複数行の扱いとか、get_annotation() で先頭の # が除外されないのも微妙
マニュアルがどうこう以前に、annotationの仕様がこなれていないんじゃないかな
「関数の直前のコメントは、その説明とみなす」というアイデアは嫌いじゃないが
0514デフォルトの名無しさん
2014/08/27(水) 07:39:39.64ID:3/KZIqq30515デフォルトの名無しさん
2014/08/27(水) 07:50:51.23ID:EpvBGjSy0516デフォルトの名無しさん
2014/08/27(水) 09:13:33.41ID:6IT+XF7c競争原理が鬱陶しいなら競争をやめればいい
0517デフォルトの名無しさん
2014/08/27(水) 15:44:42.46ID:4iKpxsh4多少複雑なことをやろうとすると segfault で落ちる。
GCがC++任せ(参照カウント)なのに、オブジェクトの生存期間の制御が甘いようだ。
良いバインダではあるけど、良いエンジンではないな。
0518デフォルトの名無しさん
2014/08/28(木) 13:22:05.82ID:wsbnD5TY0519デフォルトの名無しさん
2014/09/01(月) 03:56:01.22ID:ruMjAUJpいいよ
寂れてるし。
0520デフォルトの名無しさん
2014/09/07(日) 20:51:30.64ID:ppGxj2XK0521デフォルトの名無しさん
2014/09/07(日) 21:16:45.63ID:V4yJXxP40522デフォルトの名無しさん
2014/09/08(月) 08:36:00.81ID:YMBZ0Z5D> auto touchっていうアプリのスクリプトがLua言語でちんぷんかんぷんで。
> ここで質問してもいい?
>
> 492 自分:デフォルトの名無しさん[sage] 投稿日:2014/08/12(火) 02:55:05.48 ID:QZJQGyIx
> >>491
> いいよ
> 寂れてるし。
> 518 名前:デフォルトの名無しさん[sage] 投稿日:2014/08/28(木) 13:22:05.82 ID:wsbnD5TY
> >>495と同じようにauto touchで動かすLuaの質問してもいいかな?
>
> 519 自分:デフォルトの名無しさん[sage] 投稿日:2014/09/01(月) 03:56:01.22 ID:ruMjAUJp
> >>518
> いいよ
> 寂れてるし。
0523デフォルトの名無しさん
2014/09/08(月) 08:43:07.21ID:YMBZ0Z5D0524デフォルトの名無しさん
2014/09/09(火) 08:11:02.05ID:2JmvO9sZ0525デフォルトの名無しさん
2014/09/13(土) 13:49:43.66ID:HQ53r6lEクロージャをなくして関数束縛とラムダに分離したらRubyよりも手軽に使えそう。
0526デフォルトの名無しさん
2014/09/13(土) 14:34:10.13ID:xYGMnmOJというか規模から考えて現状でもRubyより手軽に使えるはずだし
ちょっと文法変えた程度じゃ手軽さの関係は変わらんだろう
ついでに文法だけならもっとマシな言語いくらでもあるだろ
Luaは処理系実装・実績を含めて初めて評価される類だと思う
0527デフォルトの名無しさん
2014/09/13(土) 14:59:46.23ID:2mQgH8ds0528デフォルトの名無しさん
2014/09/13(土) 15:33:20.77ID:y8nlksus一般業務なら Battery Included な環境のほうが便利なんじゃないか?
組み込み言語のライブラリの貧弱さは、サンドボックス内で使われるからこそ許される(し、好まれる)のでは。
0529デフォルトの名無しさん
2014/09/13(土) 17:15:36.86ID:CqCzoC9Oつまり宣言の内容より位置に意味があるから省略できない
0530デフォルトの名無しさん
2014/09/13(土) 17:22:33.96ID:xYGMnmOJ配慮しなくてもいいような
0531デフォルトの名無しさん
2014/09/13(土) 17:39:51.70ID:y8nlksusLuaではlocalを省略するとグローバル変数になるから、位置以前の問題では。
>>530
C++だと変数の宣言位置によって、そのコンストラクタが走るタイミングが変わるぞ。
0532デフォルトの名無しさん
2014/09/13(土) 17:40:19.61ID:CqCzoC9Oこれが大成功してしまったから
位置の考え方は間違ってないと思う
0533デフォルトの名無しさん
2014/09/13(土) 17:58:11.94ID:xYGMnmOJC++でもコンストラクタが走るタイミングで結果が変わるコードは
クソに分類されると思うが
菱形継承がタブーなのを見れば明らか
>>532
構造化プログラミングで考える「位置」は
階層で十分であって「行」ではないような
0534デフォルトの名無しさん
2014/09/13(土) 18:13:48.15ID:2iAULK/tfunction宣言ってそもそもクロージャの作成と変数への代入のシンタックスシュガーに過ぎないんじゃなかったっけ?
0535デフォルトの名無しさん
2014/09/13(土) 18:52:34.79ID:y8nlksusコンストラクタにも実行コストがあるから、必要になるまでは遅らせるのが常識。
例えばその変数の初期化前に分岐があるような場合。
また、ロック/アンロックに RAII を使うようなイディオムは、当然ながら「コンストラクタが走るタイミングで結果が変わる」。
もちろん、Luaではコンストラクタのような自動的に実行されるコードはないから関係ないが。
あと、この文脈では菱形継承はまったく関係ない。
話がC++への批判に摩り替わっていないか?
0536デフォルトの名無しさん
2014/09/13(土) 19:14:15.92ID:xYGMnmOJ極端な例として菱形継承を挙げただけだよ
とりあえずここLuaと愉快な仲間たちのスレなんで
0537デフォルトの名無しさん
2014/09/13(土) 19:15:15.01ID:CqCzoC9O関係ないかもしれないけど
関数束縛が代入の構文糖である言語は
前方参照をすると失敗する場合がある
0538デフォルトの名無しさん
2014/10/03(金) 07:43:15.70ID:lGjxzjS9\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0539デフォルトの名無しさん
2014/10/11(土) 11:25:02.83ID:9ZTN9fQflua.eっていう拡張子のものがいくつかあって開けない
ググッてもわからないんだけどlua.eの形のものは何なんだろう
見れるエディタも教えてもらえるとありがたい
0540デフォルトの名無しさん
2014/10/11(土) 11:30:28.22ID:9ZTN9fQf0541デフォルトの名無しさん
2014/10/12(日) 05:12:57.70ID:94OdN8X7( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0542sage
2014/10/12(日) 13:45:43.55ID:i7kDtML/local function main()
NUM_DATA = 10
x = {9,4,6,2,1,8,0,3,7,5}
function BubSort(x,n)
for i=1,i<=n do--エラー
for j=n,j>i do
if(x[j-1] > x[j+1]) then --前の要素が大きかったら
x[j],x[j-1] = x[j-1],x[j]--交換
end
end
end
end
function ShowData(x,n)
for i,v in pairs(x) do
print(v)
end
end
--s print("ソート前")
ShowData(x,NUM_DATA)
print("\n\n")
BubSort(x,NUMDATA)
-- print("\nソート後\n")
ShowData(x,NUM_DATA)
end
main()
と書いた時に7行目でattempt to compare two nil valuesと出てしまいます
解決策がありましたらご享受していただけないでしょうか
0543デフォルトの名無しさん
2014/10/12(日) 14:10:33.80ID:UZYaSt7F0544542
2014/10/12(日) 14:32:29.24ID:i7kDtML/'for' limit must be a number
と出ました 自分のほうでもいろいろ試してみます
回答ありがとうございました
0545デフォルトの名無しさん
2014/10/12(日) 14:40:16.19ID:UZYaSt7F↓
BubSort(x,NUM_DATA)
0546542
2014/10/12(日) 14:48:18.55ID:i7kDtML/ありがとうございます、今度は八行目で
attempt to compare number with nil
で出ました、、何度もすみません 自分でも試行錯誤してみます
0547デフォルトの名無しさん
2014/10/12(日) 14:59:53.88ID:UZYaSt7Fif(x[j-1] > x[j+1]) then
↓
for j=n,i+1,-1 do
if(x[j-1] > x[j]) then
0548542
2014/10/12(日) 15:02:46.29ID:i7kDtML/に書き換えました
0549542
2014/10/12(日) 15:06:31.21ID:i7kDtML/0550デフォルトの名無しさん
2014/10/12(日) 20:01:27.77ID:e2Gzikyq俺が勝手に褒めておいてやるよ
ただ、プログラミング言語だけでなく日本語でも会話して欲しい
0551デフォルトの名無しさん
2014/10/13(月) 01:38:05.54ID:B15n5qdAmrubyを組み込んでみた
肝心のLuaとの比較だけどLuaもrubyも素人の俺には
よくわんないっていう
ただスクリプトでのゲーム開発ってのは楽しいな
0552デフォルトの名無しさん
2014/10/17(金) 23:51:55.26ID:9a/zPdtMプログラミング言語のくせになんでネットワークライブラリ必須なんだよ。
0553デフォルトの名無しさん
2014/10/18(土) 06:17:24.91ID:0zghehpUデフォルトでネットワーク処理を持っているのを期待するのはさすがに酷だ
0554デフォルトの名無しさん
2014/10/20(月) 02:20:43.02ID:9ZZuBDyz本家は5.3αまで進んだのに
0555デフォルトの名無しさん
2014/10/20(月) 07:51:24.76ID:887X5tQi/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0556デフォルトの名無しさん
2014/10/20(月) 14:01:39.85ID:XKh/BlSi単に分散が売りの一つだからでは?
トラブってるなら環境明記するといいよ
0557デフォルトの名無しさん
2014/10/20(月) 14:28:44.63ID:YmKa11RJ0558デフォルトの名無しさん
2014/10/24(金) 22:05:25.23ID:LtvHolRf0559デフォルトの名無しさん
2014/10/31(金) 08:02:57.83ID:b+WwLJWx- Basic UTF-8 library
- Bitwise operators
- Integers
0560デフォルトの名無しさん
2014/10/31(金) 21:03:36.77ID:tMdLNX3k5.2以降からすでに文字列にバイナリデータが入るからUTF8を保持できる
stringのソース斜め読みした感じだとあんまし変化ない
Windows版とかにするにはかなり手を入れないといけないね
0561デフォルトの名無しさん
2014/11/02(日) 22:58:25.53ID:uPMt2D9i手が入ったのはutf8モジュール。 例えば string.len() はバイト数だが、utf8.len() は文字数になる。
「Windows版」がutf16を指すなら、適当にエンコード変換して、別の文字列かuserdataで保持するのは簡単。
もし、内部のcharをwchar_tに変更する改造する意味なら、確かに手間がかかる。
0562デフォルトの名無しさん
2014/11/02(日) 23:54:52.14ID:TF4Q/5Ab0563デフォルトの名無しさん
2014/11/03(月) 00:57:50.97ID:ZMCFj896という曖昧な前提で申し訳ないけど
1文字==1文字型の表現できず可変長になるから
結局sjis,utf8を扱うのと同じでメリットないんだよね
A/Wだけでなく8/DなどAPIレベルで対応しないとどうにもならないんじゃないかな
間違えてたらすまん
0564デフォルトの名無しさん
2014/11/03(月) 02:05:27.09ID:7uHWyuXV変換結果をGCの管理情報と関連付けてキャッシュすれば
最小限の回数になるので問題はない。
http://sourceforge.jp/projects/lua-naka/
あとはutf8というクラスやfile関係検討して
どの程度の手間が掛かるか検討だね
beta外れるまで待ったほうがいいかどうかとね。
0565デフォルトの名無しさん
2014/11/03(月) 03:29:16.31ID:ZMCFj8960566デフォルトの名無しさん
2014/11/03(月) 08:35:18.03ID:7uHWyuXVXP以降のWindowsのUNICODEは16bitの可変長。
1文字==1文字になってしまうのはそのライブラリが対応できてないだけ。
対応できてなければ、たとえばフォントの名前が文字化けするとか
変なところで不具合が発生する。
ダウンロードしたファイルの中身にどんな言語が使われているか
予想できない時代だしねえ。
0567デフォルトの名無しさん
2014/11/03(月) 09:03:59.77ID:gXKeHKY3あんまり使いどころがないんだよなぁ。
0568デフォルトの名無しさん
2014/11/03(月) 09:44:26.28ID:TIQQD+z7WCHARだからマルチバイト文字だし、ダウンロードしたファイルの中身はどうしようもないのは同じだけどな!
0569デフォルトの名無しさん
2014/11/03(月) 11:48:44.03ID:T6nh4Wfvマルチバイトのまま処理するのでだいたい事足りるけど、
絵文字ニーズがでてきてしまって困ってる
サロゲートペアとかをシンプルに処理できる手頃で小さめなライブラリどっかにないかな
0570デフォルトの名無しさん
2014/11/04(火) 09:05:41.39ID:bzlUuRTbサロゲートペアってUTF-8なら、単なる「バイト数が多いマルチバイト1文字」じゃなかった?
UTF-8を適切に扱えるライブラリを探せば良いのでは?
UTF-16ベースで、1文字=1wcharで処理するものはダメだね。
0571デフォルトの名無しさん
2014/11/04(火) 09:14:34.96ID:lCpWe+1kWINAPIまたはWINDOWSアプリに渡す場合だけ変換するってのが無難だろう。
0572デフォルトの名無しさん
2014/11/04(火) 12:26:39.85ID:JSkttuhxそれが正式な仕様なんだけど、
世の中にはUTF16をべたにUTF8展開しただけ、
というファイルがあふれてて、UTF-8的に二文字になってることのが多くていかんともしがたいのん
0573デフォルトの名無しさん
2014/11/04(火) 13:23:26.98ID:99dxtSJ/0574デフォルトの名無しさん
2014/11/04(火) 16:39:35.13ID:8lAd+EdW0575デフォルトの名無しさん
2014/11/04(火) 18:02:59.37ID:OadM+d9h0576デフォルトの名無しさん
2014/11/04(火) 18:40:40.27ID:lCpWe+1kWindowsのwstringと互換だからホストから見て扱いやすいという判断でないの?
Windows用のC++のランタイムがサロゲート対応できてないわけだし。
それはそれとして
自分的にはUTF16とUTF8の変換はコストが低いと考えている。
なんでかというと、マルチバイトのアプリケーションが末尾AのAPIを呼んだ時に
カーネル側での変換の対象になっていると考えるし、
それでいて今まで問題になっていないから。
0577デフォルトの名無しさん
2014/11/05(水) 07:35:22.74ID:9E/cXL42Windows氏ね
0578デフォルトの名無しさん
2014/11/05(水) 14:55:13.19ID:C/jbA3HR0579デフォルトの名無しさん
2014/11/05(水) 17:30:58.35ID:5alChkxaただ、既存のコマンドとかの整合性が問題。
0580デフォルトの名無しさん
2014/11/05(水) 17:32:35.49ID:9E/cXL42Windows氏ね
0581デフォルトの名無しさん
2014/11/05(水) 21:07:16.47ID:pM6wUNVX特定のプラットフォームに「氏ね」言う奴がマルチプラットフォーム語るか。
0582デフォルトの名無しさん
2014/11/05(水) 21:42:16.61ID:5alChkxaMacユーザーは宗教で使っている。
Linux/bsdユーザーはソースコードを蹂躙するために使っている。
0583デフォルトの名無しさん
2014/11/05(水) 23:18:38.50ID:hGDSCPPHよっぽど実際的な問題だと思うんだが
0584デフォルトの名無しさん
2014/11/05(水) 23:28:46.45ID:5iseFbl10585デフォルトの名無しさん
2014/11/06(木) 11:07:16.22ID:ElrQPnL20586デフォルトの名無しさん
2014/11/06(木) 11:37:03.69ID:5j6hC+wL0587デフォルトの名無しさん
2014/11/06(木) 12:48:03.08ID:QHCs9rG10588デフォルトの名無しさん
2014/11/06(木) 16:09:06.32ID:M2Yo7uIT0589デフォルトの名無しさん
2014/11/06(木) 16:14:45.84ID:pZw/zM7a0590デフォルトの名無しさん
2014/11/06(木) 22:56:57.44ID:Lo7NS+Dzここらへんは5.4とかからかなあ。
そうするとC++でコンパイルしつつ外付けで
boost_regex.matchというような関数を用意しろって感じかなあ。
↓これだもんね。
static int singlematch (MatchState *ms, const char *s, const char *p,
const char *ep) {
if (s >= ms->src_end)
return 0;
else {
int c = uchar(*s);
switch (*p) {
case '.': return 1; /* matches any char */
case L_ESC: return match_class(c, uchar(*(p+1)));
case '[': return matchbracketclass(c, p, ep-1);
default: return (uchar(*p) == c);
}
}
}
0591デフォルトの名無しさん
2014/11/07(金) 07:19:30.78ID:m1y+JxyjUTF-8だからこそsinglematchでもなんとか実用になるんじゃないかな?
utf8.charpattern も一応は用意はされているし。
もちろん、string.reverseとか使えないのもあるけど。
0592デフォルトの名無しさん
2014/11/07(金) 08:11:23.32ID:TOsxLUmk日本人は余計なことばかりしやがるよな、とかいわれてんだろうな
0593デフォルトの名無しさん
2014/11/07(金) 12:46:24.98ID:s2pGHogx0594デフォルトの名無しさん
2014/11/08(土) 17:07:11.07ID:OPiyaoeS0595デフォルトの名無しさん
2014/11/12(水) 00:46:15.46ID:0RjVbG4l他に画像を探す方法はないでしょうか?
0596デフォルトの名無しさん
2014/12/10(水) 00:35:14.86ID:If47AJ4g0597デフォルトの名無しさん
2014/12/10(水) 09:29:30.82ID:5IiOJn2a開発チームのルールの面で使わせないケースはありそうだ
0598デフォルトの名無しさん
2014/12/11(木) 12:44:17.85ID:vUqbLqkUboostが使えない環境じゃなくて、色々な都合でboost使っちゃダメな環境があるわけか…
0599デフォルトの名無しさん
2014/12/15(月) 08:18:50.09ID:njR4rCHR0600デフォルトの名無しさん
2014/12/19(金) 02:51:01.25ID:ouKpIS27c#のnamespaceやstaticなクラスをバインドするにはどうすればいいのでしょうか?
関数であれば以下のように登録できたのですが、
lua.Globals["Log"] = (Action<string>)UnityEngine.Debug.Log;
UnityEngineのようなnamespaceを渡し、
script内で UnityEngine.GameObject.Find("obj")
みたいに使いたいのですが
0601デフォルトの名無しさん
2014/12/22(月) 00:19:17.53ID:ZmRaQmm9ざっと眺めてみたけど
その程度の事は同じように出来る
ただ
foo()
foo(int)
foo(string)
などのオーバーロードはどうするのかが疑問
動的に型チェックして振り分けてとかだと正直使い物にならないと思う
0602デフォルトの名無しさん
2014/12/22(月) 01:19:08.37ID:D1rmXNgC使いながらマニュアル読んで使い方が分かってきました。
オーバーロードに対応してないクラスは扱うことができませんでした。
いくつか制約があるようです。
C#のオブジェクトを簡単にluaから使えるのかと思ったら、
そう簡単にはいかないのですかね。
そういうのはラッパークラスを用意して、
MoonSharpを意識した設計しないといけないようです。
つい新しいものに手を出したけど、他のC#系のluaはどんな感じなのかしら
■ このスレッドは過去ログ倉庫に格納されています