14/08/25 19:18:08.37 8RrIpfE5.net
>>504
割とオーソドックスな文法だね
defでの関数定義時に、annotationとguardを設定できるのはちょっと面白い
(いまいち使い道は思いつかない)
バージョン5.3まで行ってる割にはドキュメントが弱そうに(個人的には)見えるけど
それだけシンプルって事なのか、それともdoxygenの使用にこだわっているせいなのか
512:デフォルトの名無しさん
14/08/25 21:14:31.71 wLUoTrN4.net
>>506
C++による仮想コードでスクリプトのドキュメントを生成していて、
doxygenの中にスクリプトとC++ APIの両方が書かれているみたい。
ただ、":=" と "=" の動作の違いとか、基本的なことが書かれてない気がする。
割り切った設計はなかなか面白いのだけど、いろいろと惜しいな。
513:デフォルトの名無しさん
14/08/26 09:41:08.11 laXhI8kB.net
マニュアル酷いなぁ
Function Definition ::= [annotation + CR/LF] "def" identifier "(" [arg ("," arg)*] ")" [":" guard] block
annotation ::= ???
CR/LF ::= ???
identifier ::= ???
arg ::= ???
guard ::= ???
block ::= ???
訳わからん
514:デフォルトの名無しさん
14/08/26 12:16:11.13 c1R9OiEG.net
ん? そこは数少ない「訳わかる」ところじゃないのか?
関数定義のシンタックスが書いてあるだけだぞ。
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.
515:デフォルトの名無しさん
14/08/26 21:00:26.29 CrpVQ0De.net
>>508
これが訳分からんならお前には色々と難しいな
516:デフォルトの名無しさん
14/08/26 21:58:18.18 laXhI8kB.net
>>509
非終端記号混じりで定義するなら
それらの定義もしっかりやれよって話
>>510
俺には無理
annotation
1行目のみ#までの空白タブは読み捨てるが2行目移行は読み捨てない
Annotationとキーワード"def"がある行の間に空行はいくら入ってもいいが空白行やコメントは不可
こんなソース見なきゃ分かんねーよ
517:デフォルトの名無しさん
14/08/27 06:44:36.56 4iKpxsh4.net
>>511
確かにannotationは説明不足だな
他のコメントは // でも /* */ でもいいのに、ここは # のみだし
複数行の扱いとか、get_annotation() で先頭の # が除外されないのも微妙
マニュアルがどうこう以前に、annotationの仕様がこなれていないんじゃないかな
「関数の直前のコメントは、その説明とみなす」というアイデアは嫌いじゃないが
518:デフォルトの名無しさん
14/08/27 07:39:39.64 3/KZIqq3.net
イラネ
519:デフォルトの名無しさん
14/08/27 07:50:51.23 EpvBGjSy.net
Lua原理主義者さん鬱陶しいな・・・
520:デフォルトの名無しさん
14/08/27 09:13:33.41 6IT+XF7c.net
ライバルにストレスを与えるのは当たり前だ
競争原理が鬱陶しいなら競争をやめればいい
521:デフォルトの名無しさん
14/08/27 15:44:42.46 4iKpxsh4.net
>>504
多少複雑なことをやろうとすると segfault で落ちる。
GCがC++任せ(参照カウント)なのに、オブジェクトの生存期間の制御が甘いようだ。
良いバインダではあるけど、良いエンジンではないな。
522:デフォルトの名無しさん
14/08/28 13:22:05.82 wsbnD5TY.net
>>494と同じようにauto touchで動かすLuaの質問してもいいかな?
523:デフォルトの名無しさん
14/08/29 14:42:44.60 xFSbaFifS
便乗で(・_・;
autotouchの拡張関数のfindimageのソースコードが知りたいんですが、
何処かみえる場所に置いてないですかね。
プログラムに組み込まれちゃってるんかな。
自分で書いた関数だと遅くて遅くて。
524:デフォルトの名無しさん
14/08/29 14:50:56.97 xFSbaFifS
間違えました。findcolorです
525:デフォルトの名無しさん
14/09/01 03:56:01.22 ruMjAUJp.net
>>517
いいよ
寂れてるし。
526:デフォルトの名無しさん
14/09/07 20:51:30.64 ppGxj2XK.net
と言っても質問なしw
527:デフォルトの名無しさん
14/09/07 21:16:45.63 V4yJXxP4.net
もしかしたら行間を読み取ってダメだって言われたと思ったのかもしれない
528:デフォルトの名無しさん
14/09/08 08:36:00.81 YMBZ0Z5D.net
> 491 名前:デフォルトの名無しさん[] 投稿日:2014/08/12(火) 02:19:26.71 ID:Hfmn/cHa [1/5]
> auto touchっていうアプリのスクリプトがLua言語でちんぷんかんぷんで。
> ここで質問してもいい?
>
> 492 自分:デフォルトの名無しさん[sage] 投稿日:2014/08/12(火) 02:55:05.48 ID:QZJQGyIx
> >>490
> いいよ
> 寂れてるし。
> 518 名前:デフォルトの名無しさん[sage] 投稿日:2014/08/28(木) 13:22:05.82 ID:wsbnD5TY
> >>494と同じようにauto touchで動かすLuaの質問してもいいかな?
>
> 519 自分:デフォルトの名無しさん[sage] 投稿日:2014/09/01(月) 03:56:01.22 ID:ruMjAUJp
> >>517
> いいよ
> 寂れてるし。
529:デフォルトの名無しさん
14/09/08 08:43:07.21 YMBZ0Z5D.net
同じ文面でスルーされるってのはちと悲しかった
530:デフォルトの名無しさん
14/09/09 08:11:02.05 2JmvO9sZ.net
2度あることは3度ある!
531:デフォルトの名無しさん
14/09/12 14:58:08.94 y2znSXEd0
countTimer(180)
↑こんな感じで記述するだけで、たとえば180秒ごとに戻り値がtrueになるようなfunctionないでしょうか?
もしくは、
countTimer(A,180)
などと、先頭にID名を書くことで、別々のタイマーとして動作するようなものがほしいのですが。
532:デフォルトの名無しさん
14/09/13 13:49:43.66 HQ53r6lE.net
Luaの文法は組み込みじゃなくてLLとしても十分使えると思うんだよなぁ。
クロージャをなくして関数束縛とラムダに分離したらRubyよりも手軽に使えそう。
533:デフォルトの名無しさん
14/09/13 14:34:10.13 xYGMnmOJ.net
LLとして利用するのにコンセンサスがいるのか?
というか規模から考えて現状でもRubyより手軽に使えるはずだし
ちょっと文法変えた程度じゃ手軽さの関係は変わらんだろう
ついでに文法だけならもっとマシな言語いくらでもあるだろ
Luaは処理系実装・実績を含めて初めて評価される類だと思う
534:デフォルトの名無しさん
14/09/13 14:59:46.23 2mQgH8ds.net
localの宣言はLLじゃないな。
535:デフォルトの名無しさん
14/09/13 15:33:20.77 y8nlksus.net
「LLとして使う」ってどういう文脈なんだろう?
一般業務なら Battery Included な環境のほうが便利なんじゃないか?
組み込み言語のライブラリの貧弱さは、サンドボックス内で使われるからこそ許される(し、好まれる)のでは。
536:デフォルトの名無しさん
14/09/13 17:15:36.86 CqCzoC9O.net
local宣言はブロックの途中から終わりまでのスコープを作る
つまり宣言の内容より位置に意味があるから省略できない
537:デフォルトの名無しさん
14/09/13 17:22:33.96 xYGMnmOJ.net
宣言した位置で意味が変わるようなコードはクソだから
配慮しなくてもいいような
538:デフォルトの名無しさん
14/09/13 17:39:51.70 y8nlksus.net
>>531
Luaではlocalを省略するとグローバル変数になるから、位置以前の問題では。
>>532
C++だと変数の宣言位置によって、そのコンストラクタが走るタイミングが変わるぞ。
539:デフォルトの名無しさん
14/09/13 17:40:19.61 CqCzoC9O.net
gotoは行き先の名前を考えるけど構造化プログラミングは位置を考える
これが大成功してしまったから
位置の考え方は間違ってないと思う
540:デフォルトの名無しさん
14/09/13 17:58:11.94 xYGMnmOJ.net
>>533
C++でもコンストラクタが走るタイミングで結果が変わるコードは
クソに分類されると思うが
菱形継承がタブーなのを見れば明らか
>>534
構造化プログラミングで考える「位置」は
階層で十分であって「行」ではないような
541:デフォルトの名無しさん
14/09/13 18:13:48.15 2iAULK/t.net
「クロージャを関数束縛とラムダに分離」ってどういう意味?
function宣言ってそもそもクロージャの作成と変数への代入のシンタックスシュガーに過ぎないんじゃなかったっけ?
542:デフォルトの名無しさん
14/09/13 18:52:34.79 y8nlksus.net
>>535
コンストラクタにも実行コストがあるから、必要になるまでは遅らせるのが常識。
例えばその変数の初期化前に分岐があるような場合。
また、ロック/アンロックに RAII を使うようなイディオムは、当然ながら「コンストラクタが走るタイミングで結果が変わる」。
もちろん、Luaではコンストラクタのような自動的に実行されるコードはないから関係ないが。
あと、この文脈では菱形継承はまったく関係ない。
話がC++への批判に摩り替わっていないか?
543:デフォルトの名無しさん
14/09/13 19:14:15.92 xYGMnmOJ.net
コンストラクタが走るタイミングが読めない
極端な例として菱形継承を挙げただけだよ
とりあえずここLuaと愉快な仲間たちのスレなんで
544:デフォルトの名無しさん
14/09/13 19:15:15.01 CqCzoC9O.net
>>536
関係ないかもしれないけど
関数束縛が代入の構文糖である言語は
前方参照をすると失敗する場合がある
545:デフォルトの名無しさん
14/09/15 10:09:15.73 pkGLa0w7x
Luaの質問専用スレってないのかな。
546:デフォルトの名無しさん
14/10/03 07:43:15.70 lGjxzjS9.net
\ l´⌒\⌒\ \\ \
\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
547:デフォルトの名無しさん
14/10/11 11:25:02.83 9ZTN9fQf.net
luaを知るのに既存のスクリプトをいくつかみてるんだけど
lua.eっていう拡張子のものがいくつかあって開けない
ググッてもわからないんだけどlua.eの形のものは何なんだろう
見れるエディタも教えてもらえるとありがたい
548:デフォルトの名無しさん
14/10/11 11:30:28.22 9ZTN9fQf.net
スマン・・独自ソフトで暗号化されてるだけだったわ
549:デフォルトの名無しさん
14/10/12 05:12:57.70 94OdN8X7.net
∧_∧ / ̄ ̄ ̄ ̄
( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
550:sage
14/10/12 13:45:43.55 i7kDtML/.net
長文失礼します あるサイトを参考にしてソートプログラムを書いているのですが
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 compar
551:e two nil valuesと出てしまいます 解決策がありましたらご享受していただけないでしょうか
552:デフォルトの名無しさん
14/10/12 14:10:33.80 UZYaSt7F.net
for i=1,n do
553:542
14/10/12 14:32:29.24 i7kDtML/.net
回答ありがとうございます。 試してみたところ7行目で
'for' limit must be a number
と出ました 自分のほうでもいろいろ試してみます
回答ありがとうございました
554:デフォルトの名無しさん
14/10/12 14:40:16.19 UZYaSt7F.net
BubSort(x,NUMDATA)
↓
BubSort(x,NUM_DATA)
555:542
14/10/12 14:48:18.55 i7kDtML/.net
ケアレスミスごめんなさい;;
ありがとうございます、今度は八行目で
attempt to compare number with nil
で出ました、、何度もすみません 自分でも試行錯誤してみます
556:デフォルトの名無しさん
14/10/12 14:59:53.88 UZYaSt7F.net
for j=n,j>i do
if(x[j-1] > x[j+1]) then
↓
for j=n,i+1,-1 do
if(x[j-1] > x[j]) then
557:542
14/10/12 15:02:46.29 i7kDtML/.net
for j=n,j>i doをfor j=n,j>i,-1 do
に書き換えました
558:542
14/10/12 15:06:31.21 i7kDtML/.net
解決しましたありがとうございます!!
559:デフォルトの名無しさん
14/10/12 20:01:27.77 e2Gzikyq.net
すんごい優しい人がいるなあw
俺が勝手に褒めておいてやるよ
ただ、プログラミング言語だけでなく日本語でも会話して欲しい
560:デフォルトの名無しさん
14/10/13 01:38:05.54 B15n5qdA.net
cocos2d-xで素直にLua使うのもなんか悔しかったから
mrubyを組み込んでみた
肝心のLuaとの比較だけどLuaもrubyも素人の俺には
よくわんないっていう
ただスクリプトでのゲーム開発ってのは楽しいな
561:デフォルトの名無しさん
14/10/17 23:51:55.26 9a/zPdtM.net
juliaがembedできると聞いて試してみようと思ったが、なんか面倒くさい。
プログラミング言語のくせになんでネットワークライブラリ必須なんだよ。
562:デフォルトの名無しさん
14/10/18 06:17:24.91 0zghehpU.net
並列実行、数値計算が売りでFortranを比較対象にしている言語に
デフォルトでネットワーク処理を持っているのを期待するのはさすがに酷だ
563:デフォルトの名無しさん
14/10/20 02:20:43.02 9ZZuBDyz.net
luajitっていつまで5.1で足踏みするんだろ
本家は5.3αまで進んだのに
564:デフォルトの名無しさん
14/10/20 07:51:24.76 887X5tQi.net
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
565:デフォルトの名無しさん
14/10/20 14:01:39.85 XKh/BlSi.net
>>555-556
単に分散が売りの一つだからでは?
トラブってるなら環境明記するといいよ
566:デフォルトの名無しさん
14/10/20 14:28:44.63 YmKa11RJ.net
juliaって面白そうだけどスレとか建ってないのかな
567:デフォルトの名無しさん
14/10/24 22:05:25.23 LtvHolRf.net
Lua 5.3.0 (beta) released
568:デフォルトの名無しさん
14/10/31 08:02:57.83 b+WwLJWx.net
The big features for Lua 5.3 are:
- Basic UTF-8 library
- Bitwise operators
- Integers
569:デフォルトの名無しさん
14/10/31 21:03:36.77 tMdLNX3k.net
正規表現マッチャとか手が入ってない
5.2以降からすでに文字列にバイナリデータが入るからUTF8を保持できる
stringのソース斜め読みした感じだとあんまし変化ない
Windows版とかにするにはかなり手を入れないといけないね
570:デフォルトの名無しさん
14/11/02 22:58:25.53 uPMt2D9i.net
>>563
手が入ったのはutf8モジュール。 例えば string.len() はバイト数だが、utf8.len() は文字数になる。
「Windows版」がutf16を指すなら、適当にエンコード変換して、別の文字列かuserdataで保持するのは簡単。
もし、内部のcharをwchar_tに変更する改造する意味なら、確かに手間がかかる。
571:デフォルトの名無しさん
14/11/02 23:54:52.14 TF4Q/5Ab.net
_TCHAR「きたわよ」
572:デフォルトの名無しさん
14/11/03 00:57:50.97 ZMCFj896.net
windowsのwchar_tは2byte固定じゃなかった?
という曖昧な前提で申し訳ないけど
1文字==1文字型の表現できず可変長になるから
結局sjis,utf8を扱うのと同じでメリットないんだよね
A/Wだけでなく8/DなどAPIレベルで対応しないとどうにもならないんじゃないかな
間違えてたらすまん
573:デフォルトの名無しさん
14/11/03 02:05:27.09 7uHWyuXV.net
んんと、UTF-8からUTF-16の変換のコストは低く、
変換結果をGCの管理情報と関連付けてキャッシュすれば
最小限の回数になるので問題はない。
URLリンク(sourceforge.jp)
あとはutf8というクラスやfile関係検討して
どの程度の手間が掛かるか検討だね
beta外れるまで待ったほうがいいかどうかとね。
574:デフォルトの名無しさん
14/11/03 03:29:16.31 ZMCFj896.net
話が通じてないな
575:デフォルトの名無しさん
14/11/03 08:35:18.03 7uHWyuXV.net
>>568
XP以降のWindowsのUNICODEは16bitの可変長。
1文字==1文字になってしまうのはそのライブラリが対応できてないだけ。
対応できてなければ、たとえばフォントの名前が文字化けするとか
変なところで不具合が発生する。
ダウンロードしたファイルの中身にどんな言語が使われているか
予想できない時代だしねえ。
576:デフォルトの名無しさん
14/11/03 09:03:59.77 gXKeHKY3.net
きっちりUTF-16に対応したところで、BMP以外はろくにフォントも用意されてないから
あんまり使いどころがないんだよなぁ。
577:デフォルトの名無しさん
14/11/03 09:44:26.28 TIQQD+z7.net
SquirrelならコンパイルオプションだけでWCHARに対応できるぞ!
WCHARだからマルチバイト文字だし、ダウンロードしたファイルの中身はどうしようもないのは同じだけどな!
578:デフォルトの名無しさん
14/11/03 11:48:44.03 T6nh4Wfv.net
ゲーム程度なら昔の流儀でmblen とか作って
マルチバイトのまま処理するのでだいたい事足りるけど、
絵文字ニーズがでてきてしまって困ってる
サロゲートペアとかをシンプルに処理できる手頃で小さめなライブラリどっかにないかな
579:デフォルトの名無しさん
14/11/04 09:05:41.39 bzlUuRTb.net
>>572
サロゲートペアってUTF-8なら、単なる「バイト数が多いマルチバイト1文字」じゃなかった?
UTF-8を適切に扱えるライブラリを探せば良いのでは?
UTF-16ベースで、1文字=1wcharで処理するものはダメだね。
580:デフォルトの名無しさん
14/11/04 09:14:34.96 lCpWe+1k.net
基本内部処理はUTF-8オンリーでやって、
WINAPIまたはWINDOWSアプリに渡す場合だけ変換するってのが無難だろう。
581:デフォルトの名無しさん
14/11/04 12:26:39.85 JSkttuhx.net
>>573
それが正式な仕様なんだけど、
世の中にはUTF16をべたにUTF8展開しただけ、
というファイルがあふれてて、UTF-8的に二文字になってることのが多くていかんともしがたいのん
582:デフォルトの名無しさん
14/11/04 13:23:26.98 99dxtSJ/.net
というかそれはUTF-8とは言わないことになっとるw
583:デフォルトの名無しさん
14/11/04 16:39:35.13 8lAd+EdW.net
そういうことになってるけど、実際使われてるのはそうだよね。たぶんだいたいJavaが悪い
584:デフォルトの名無しさん
14/11/04 18:02:59.37 OadM+d9h.net
で、Luaで何がしたいの?
585:デフォルトの名無しさん
14/11/04 18:40:40.27 lCpWe+1k.net
内部文字コードをUCS2にしてしまえば、
Windowsのwstringと互換だからホストから見て扱いやすいという判断でないの?
Windows用のC++のランタイムがサロゲート対応できてないわけだし。
それはそれとして
自分的にはUTF16とUTF8の変換はコストが低いと考えている。
なんでかというと、マルチバイトのアプリケーションが末尾AのAPIを呼んだ時に
カーネル側での変換の対象になっていると考えるし、
それでいて今まで問題になっていないから。
586:デフォルトの名無しさん
14/11/05 07:35:22.74 9E/cXL42.net
マルチプラットフォームならUTF8やろね。
Windows氏ね
587:デフォルトの名無しさん
14/11/05 14:55:13.19 C/jbA3HR.net
Windows、UTF8がデフォの文字コードになればかなり楽になりそうだな。
588:デフォルトの名無しさん
14/11/05 17:30:58.35 5alChkxa.net
コンソールに関してはUTF8化も不可能ではないらしい。
ただ、既存のコマンドとかの整合性が問題。
589:デフォルトの名無しさん
14/11/05 17:32:35.49 9E/cXL42.net
「楽さ」ではなく気になるのは「速さ」では?
Windows氏ね
590:デフォルトの名無しさん
14/11/05 21:07:16.47 pM6wUNVX.net
>>580
特定のプラットフォームに「氏ね」言う奴がマルチプラットフォーム語るか。
591:デフォルトの名無しさん
14/11/05 21:42:16.61 5alChkxa.net
WindowsユーザーはWindowsが好きで使っているわけではない。
Macユーザーは宗教で使っている。
Linux/bsdユーザーはソースコードを蹂躙するために使っている。
592:デフォルトの名無しさん
14/11/05 23:18:38.50 hGDSCPPH.net
サロゲートペアなんかよりUnicode正規化の方が
よっぽど実際的な問題だと思うんだが
593:デフォルトの名無しさん
14/11/05 23:28:46.45 5iseFbl1.net
濁点を分割するOSXは死んでほしいよね
594:デフォルトの名無しさん
14/11/06 11:07:16.22 ElrQPnL2.net
辞書順の文字列比較さえできないlocaleの実装がクソなLinuxは死んで欲しいよね
595:デフォルトの名無しさん
14/11/06 11:37:03.69 5j6hC+wL.net
サロゲートなんとか「シフトなんとかがやられたようだな・・・」
596:デフォルトの名無しさん
14/11/06 12:48:03.08 QHCs9rG1.net
マルチプラットフォーム目指すと全ての環境に死ねって思うようになる悲劇
597:デフォルトの名無しさん
14/11/06 16:09:06.32 M2Yo7uIT.net
つまり日本語が敗戦とともに氏ねばよかったんだよ
598:デフォルトの名無しさん
14/11/06 16:14:45.84 pZw/zM7a.net
志賀直哉かよ
599:デフォルトの名無しさん
14/11/06 22:56:57.44 Lo7NS+Dz.net
UTF8対応はリテラルと基本操作だけ。
ここらへんは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);
}
}
}
600:デフォルトの名無しさん
14/11/07 07:19:30.78 m1y+Jxyj.net
>>593
UTF-8だからこそsinglematchでもなんとか実用になるんじゃないかな?
utf8.charpattern も一応は用意はされているし。
もちろん、string.reverseとか使えないのもあるけど。
601:デフォルトの名無しさん
14/11/07 08:11:23.32 TOsxLUmk.net
欧米の2chでは、濁点だの絵文字だの
日本人は余計なことばかりしやがるよな、とかいわれてんだろうな
602:デフォルトの名無しさん
14/11/07 12:46:24.98 s2pGHogx.net
濁点で余計なことしたのは外人やで
603:デフォルトの名無しさん
14/11/08 17:07:11.07 OPiyaoeS.net
余計なことをする原因は八方美人
604:デフォルトの名無しさん
14/11/12 00:46:15.46 0RjVbG4l.net
autotouchで画像を探してタップさせたいのですが、上にあるfindImageを使ってもうまくいかないです。
他に画像を探す方法はないでしょうか?
605:デフォルトの名無しさん
14/12/10 00:35:14.86 If47AJ4g.net
LuaとかSquirrel、AngelScriptが使える環境で、boost使えない環境ってあるのかな?
606:デフォルトの名無しさん
14/12/10 09:29:30.82 5IiOJn2a.net
ソフトウェア環境の問題で使えないケースは少ないだろうが
開発チームのルールの面で使わせないケースはありそうだ
607:デフォルトの名無しさん
14/12/11 12:44:17.85 vUqbLqkU.net
>>600
boostが使えない環境じゃなくて、色々な都合でboost使っちゃダメな環境があるわけか…
608:デフォルトの名無しさん
14/12/15 08:18:50.09 njR4rCHR.net
Lua 5.3.0 (rc0) released
609:デフォルトの名無しさん
14/12/19 02:51:01.25 ouKpIS27.net
moonsharpというluaを入れてみたんですが、
c#のnamespaceやstaticなクラスをバインドするにはどうすればいいのでしょうか?
関数であれば以下のように登録できたのですが、
lua.Globals["Log"] = (Action<string>)UnityEngine.Debug.Log;
UnityEngineのようなnamespaceを渡し、
script内で UnityEngine.GameObject.Find("obj")
みたいに使いたいのですが
610:デフォルトの名無しさん
14/12/22 00:19:17.53 ZmRaQmm9.net
>>603
ざっと眺めてみたけど
その程度の事は同じように出来る
ただ
foo()
foo(int)
foo(string)
などのオーバーロードはどうするのかが疑問
動的に型チェックして振り分けてとかだと正直使い物にならないと思う
611:デフォルトの名無しさん
14/12/22 01:19:08.37 D1rmXNgC.net
>>604
使いながらマニュアル読んで使い方が分かってきました。
オーバーロードに対応してないクラスは扱うことができませんでした。
いくつか制約があるようです。
C#のオブジェクトを簡単にluaから使えるのかと思ったら、
そう簡単にはいかないのですかね。
そういうのはラッパークラスを用意して、
MoonSharpを意識した設計しないといけないようです。
つい新しいものに手を出したけど、他のC#系のluaはどんな感じなのかしら
612:デフォルトの名無しさん
14/12/22 01:19:52.78 D1rmXNgC.net
× オーバーロードに対応してないクラスは扱うことができませんでした。
オーバーロードに対応してませんでした。
613:デフォルトの名無しさん
14/12/26 08:14:14.37 aFXoC3vZ.net
Lua 5.3.0 (rc2) released
614:デフォルトの名無しさん
15/01/03 21:35:53.41 x6OMspk0.net
Lua 5.3.0 (rc3) released
615:デフォルトの名無しさん
15/01/03 22:19:20.82 FqikSySO.net
更新内容に少しでも触れてくれると嬉しいんだけど・・・
616:デフォルトの名無しさん
15/01/03 23:14:01.09 KF2R3l6f.net
RCの段階で特筆に値する更新なんてないだろ
というかあったら困る
617:デフォルトの名無しさん
15/01/04 02:23:10.16 AdLaa9R2.net
5.3楽しみどすね
618:デフォルトの名無しさん
15/01/04 06:44:30.95 FkvmMkr7.net
RCでの更新はコンパイル警告を無くした、とかばっかり。 安定してるんじゃないかな。
新C-APIの lua_rotate() が地味に便利。
619:デフォルトの名無しさん
15/01/04 08:29:47.65 LjhOLja4.net
>>609
>>562
620:デフォルトの名無しさん
15/01/08 07:02:44.50 HB0/eqgI.net
Lua 5.3.0 (rc4) released Happy New Year!
621:デフォルトの名無しさん
15/01/13 08:21:09.63 rG5Z7jyu.net
Lua 5.3.0 released ? Happy New Year!
622:デフォルトの名無しさん
15/01/14 08:19:11.90 G/8s1bPT.net
おめでとうございます。
623:デフォルトの名無しさん
15/01/19 13:17:04.98 i0MAuzuq.net
Windows系なら JsRT でブラウザ無しの js が使えるな。 node.js でもいいけどさ。
組み込みも js で十分な気がしてきた。
624:デフォルトの名無しさん
15/01/19 19:23:58.96 ax3bxEw/.net
JsRTではどうやってCからスクリプト内の変数とか操作するの?
625:デフォルトの名無しさん
15/01/19 20:11:10.33 i0MAuzuq.net
node.js と比べるのはおかしいな。比べるなら v8 単体か。
>>618
ハンドル (voidポインタ) 経由。 グローバル変数のテーブルもCから操作できる。
API は v8 と似ているけど、さらに簡略化されている感じ。
Luaとは違ってスタック操作を意識する必要は無い。 Cスタックを舐める系のGCっぽい。
C関数や、生データをファイナライザ付きでスクリプトに登録もできるし、
スクリプトの変数をCからキープしたいときの AddRef() もある。
後発なだけあって、いい感じに整理されているように見えるよ。
626:デフォルトの名無しさん
15/01/19 22:22:42.69 XVOLeUIA.net
スタック操作は不要で参照カウントは必要という案は何回も聞いた
みんなLuaと比較した情報は出すけど何個もある代案同士で比較した情報がまだ出ない
だからまだ時期が悪いかなと思う
627:デフォルトの名無しさん
15/01/20 06:19:15.63 MIZOkYTq.net
スタック操作は覚えることが少ないから習得が早くて便利だけどね
628:デフォルトの名無しさん
15/01/20 07:11:39.79 Qwim/1/Y.net
LuaのC APIへの不満って、スタック操作と、スクリプトオブジェクトの寿命延長 (luaL_ref)
の2つが大きいいんじゃないの? 止められるんなら止めたいでしょ。
もちろん、Luaはスタック操作が明示的だからこそ、移植性が高いんだけど。
>>620
参照カウントはあくまでCからのキープ用で、スクリプト内だけならマーク&スイープ系のGCのはず。
629:デフォルトの名無しさん
15/01/20 17:48:36.34 MIZOkYTq.net
奇しくも自分で述べてるように、
スクリプト側からは死んでるようにみえる値を
C側では使ってるから生きてるよ、ということにするには
参照カウントよりもLuaL_refの方が考え方として分かりやすいと思うけど。
630:デフォルトの名無しさん
15/01/20 18:44:09.44 GWZYH+JO.net
スクリプトオブジェクトの寿命延長って?
Luaは知らないけど
V8ではC++関数のスコープから抜けた時点でJavaScriptのオブジェクトを解放出来るようになっている
だからV8ではC++関数内で使ったオブジェクトが中々解放されなくなるという事はない
関数を終えてもずっと保持したい場合はPersistentにコピーするようになっている
631:デフォルトの名無しさん
15/01/20 18:56:01.81 MIZOkYTq.net
いや、つまり嫌いと思う人は嫌い、好きと思う人は好きというだけの話。
632:デフォルトの名無しさん
15/01/20 19:33:29.39 Qwim/1/Y.net
確かに大した差ではなかったな。
自分はどうもオブジェクトそのものではなくCookieを保持している感に戸惑ったが、
気になるならラッパーを一枚噛ませば十分だしな。
633:デフォルトの名無しさん
15/01/22 18:40:30.34 dZXZ9W3g.net
整数型がデフォルトになったからより速くなったな
634:デフォルトの名無しさん
15/01/22 19:34:31.74 QfKlzsaM.net
JsRTで遊んでみているが、
IDispatchをVARIANT経由でJavaScript側に公開できることがわかった。
COMの資産を手間無く使えるので、その手の再利用が必要な場合は便利かもしれない。
なお、WebBrowserコントロールが使っていると思われるスクリプト環境はさすがに取得できないようだ。
無理やり連携されるなら window.external を介してこれも IDispatch 経由でやり取りすることになる。
悪くない。 Microsoft も .NET とか捨てて、JsRTとTypeSciptで行けばいいんじゃないかな・・・?
635:デフォルトの名無しさん
15/01/26 19:41:40.28 +446Cocf.net
Squirrel 3.0.7 stable
Squirrel 3.1 RC1
Released January 10, 2015
さっき気付いた。
636:デフォルトの名無しさん
15/01/26 20:46:44.47 5nfZyfP4.net
lua5.3の日本語マヌエルマダー?
637:デフォルトの名無しさん
15/01/26 21:34:59.26 Sajs+zmm.net
言い出しっぺの法則
638:デフォルトの名無しさん
15/01/28 05:31:27.96 SR5teQWH.net
俺が翻訳するかもしれないからあと100年くらい待ってくれ
639:デフォルトの名無しさん
15/01/28 23:18:45.09 arg2MK+/.net
「日本語マニュアル出ないかなー」と言いながらずっと使ってるとそのうち英語でも普通に読めるようになって必要なくなる罠。
640:デフォルトの名無しさん
15/01/29 08:12:30.79 FQssNh0T.net
5.3対応の書籍マダー?
641:デフォルトの名無しさん
15/01/29 08:16:42.32 vMBFyrLx.net
「マニュアルだけじゃわからんなー」と言いながらずっとソースコードを読んでいるとそのうち先にソースにあたるようになって書籍が必要なくなる罠。
642:デフォルトの名無しさん
15/01/29 08:43:48.85 FQssNh0T.net
それらで得た知識を書籍にして印税生活をするにだ
643:デフォルトの名無しさん
15/02/01 00:18:48.30 ARaZzTfJ.net
android版のautotouch使い物にならんなあ
lua部分はともかく独自追加した所のデバッグやってるんだろうか
findimage使った瞬間に落ちる、サンプルのスクリプトを使っても落ちる…
644:デフォルトの名無しさん
15/02/03 08:45:44.97 AqPQb7sP.net
このスレで既に紹介されたか知らないけど
ObjectScript
URLリンク(github.com)
URLリンク(objectscript.org)
URLリンク(www.codeproject.com)
Luaっぽい作りで構文はC/JavaScript系で、Squirrelとキャラが被ってる。
単純な整数計算ベンチの速度だと Lua : Squirrel : ObjectScript = 3 : 2 : 1 (遅い) くらい。
実行バイナリのサイズは Lua : Squirrel : ObjectScript = 2 : 3 : 4 (でかい) くらい。
安定性や採用事例はよくわかんない。ちなみにCachéとは何の関係も無い。
645:デフォルトの名無しさん
15/02/04 06:17:03.56 Eqb0TJqD.net
CoreCLR がオープンソースになったけど簡単に組み込めたりするのかな
646:デフォルトの名無しさん
15/02/07 10:47:45.90 3mcYxCt2.net
perlのkeysみたいなの 無いの?
647:デフォルトの名無しさん
15/02/07 11:10:55.67 kuZAKFeA.net
>>640
Luaの話? いちおう組み込み系全般のスレなので……
標準では用意されていない。 言語機能系の追加ライブラリを使えば良いんじゃない?
まぁ、自作しても for ループを廻せば済むけど。
- stdlib : URLリンク(lua-stdlib.github.io)
- Underscore.lua : URLリンク(mirven.github.io)
648:デフォルトの名無しさん
15/02/08 11:46:47.96 8cE0HyuH.net
Lua書く時のエディタって何使ってるの? Lightroomのプラグイン書きなんだけど。
649:デフォルトの名無しさん
15/02/08 12:28:55.31 5UGjVIn5.net
URLリンク(lua-users.org)
650:デフォルトの名無しさん
15/02/08 17:36:40.20 zqGmBD5H.net
Intypeってのはどうなん?
651:デフォルトの名無しさん
15/02/16 22:29:33.28 JBQ+Owrp.net
luaでファイル保存の時に日付.txtみたいに自動でするのはどうすればいいですか?
652:デフォルトの名無しさん
15/02/16 22:40:47.19 yzFhOePD.net
>>645
Luaからファイルを作っているなら os.date(書式) .. ".txt" でファイル名を生成すれば良いのでは
653:デフォルトの名無しさん
15/02/16 23:48:51.20 JBQ+Owrp.net
出来ました、ありがとうございます。
654:デフォルトの名無しさん
15/02/19 19:51:04.59 Qw0v9eHu.net
Luaって存在今日知った。
自作計算プログラム用のスクリプトとしてTclを組み込んで使ってきたけど、
Luaってもう仕様安定してるの?
浮動小数点の実装はちゃんとバイナリ?
655:デフォルトの名無しさん
15/02/19 20:22:48.55 YKDWyqEz.net
>>648
本体の仕様は概ね安定している。 他の言語と比べてもそれほど差は無いと思う。
Lua 5.3 では、普通にビルドすると、浮動小数点は double、整数は int64 になる。
内部的な値の表現は タグ + union { double; int64; void* } という素直な実装だよ。
正規表現だけは注意がいるかもしれない。 文字の並びを ( ) で扱えない。
自分は C++ regex を使う別実装を自前で追加してる。
656:デフォルトの名無しさん
15/02/21 12:07:52.58 ftMcKIol.net
>>649
ありがとう。
awkみたいな実数=文字列みたいなダサ実装じゃないか、さすがに。
ちょっと活用を検討してみます。
657:デフォルトの名無しさん
15/02/23 19:05:53.37 PUEtXCiM.net
AngelScript|Д`)<AngelScript2.30.0記念カキコ
メモリ管理の改良とか、キャスト用メソッドの登録方法が変わったとか色々変更あるっぽい。
658:デフォルトの名無しさん
15/02/23 23:12:44.33 2B41jSVI.net
(´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
659:sage
15/03/17 22:57:10.71 yVREPXol.net
flashairいじってる人いる?
660:デフォルトの名無しさん
15/03/17 23:14:59.23 Wb8shGuw.net
>>653
AS3は組み込めないだろ・・・
661:650
15/03/17 23:25:25.06 yVREPXol.net
まあまあ^^;
luaでio.writeでSDカードに書き込めるかと思いきやなんか挙動が怪しい・・
662:デフォルトの名無しさん
15/04/11 22:52:38.83 L0A+zZu9.net
連想配列の要素数を返す関数(table.maxn)みたいなものってありますか?
tbl[]
tbl[ "a" ] = data1
tbl[ "b" ] = data2
tbl[ "c" ] = data3
#tblやtable.maxn(tbl)をやっても「0」が帰ってきてしまいます。
ハッシュの場合、格納されている要素数を返すものはないのですかね
ざっと検索して調べた感じそれっぽいのはありませんでした
663:デフォルトの名無しさん
15/04/11 22:59:40.53 L0A+zZu9.net
table.maxn(tbl)
テーブルtblの持つ要素のキーのうち、正の数値(FIXNUM)であるものの中で最大のものを返します。
tblが正の数値(FIXNUM)のキーの要素を持たない場合は0を返します。
ってかかれてるからpairsで回して数取得するようなやり方しかないかもなあ・・。
664:デフォルトの名無しさん
15/04/11 23:05:44.47 L0A+zZu9.net
とりあえずこんなかんじで回避することにしました
何か他により良いやり方があれば教えて下さい
function get_hash_count( hash )
local cnt = 0
for key, value in pairs(hash) do
cnt = cnt + 1
end
return cnt
end
665:デフォルトの名無しさん
15/04/12 00:40:05.35 eLW2DJDr.net
>>658
それが一番速いと思います
luaのテーブルは厳密な要素数を追跡してないのよ
値をスカスカに配置して列挙時に存在チェックする
666:デフォルトの名無しさん
15/04/12 02:22:26.48 ubi9S/wo.net
>>659
ありがとうございます
luaの仕様的に他に良い方法はないのですね
667:デフォルトの名無しさん
15/04/25 21:53:05.10 udlJJGWW.net
>>1
組み込み系言語ってファームウェア用かと思ったwww
668:デフォルトの名無しさん
15/04/27 08:43:41.87 9sNRGOg0.net
質問失礼します。
ソフトにLuaを組み込んでユーザーにLuaスクリプトを作ってもらおうと思っています。
そのLuaスクリプトを他のユーザーにばらまかれるとセキュリティ上危なくなるので困っています。
Luaで書けるファイルIOやネット上のダウンロードなど、危なそうな機能だけ無効化したいのですが可能でしょうか?
分かる方、よろしくお願いします。
669:デフォルトの名無しさん
15/04/27 09:18:48.10 18wKNGsP.net
>>662
・不必要な標準モジュールは組み込まない。
・モジュールの中に不必要な関数がある場合は同名の関数を作ってオーバーライドしてしまう。
670:デフォルトの名無しさん
15/04/27 09:20:47.53 18wKNGsP.net
同名の関数を作る、というよりファンクション型の変数に代入し直すというのが正しいか
671:デフォルトの名無しさん
15/04/27 11:51:04.49 RhUk/Sb2.net
io系 file系 debug系、os.systemなどをlua本体のソースから外す。
requireのうち、c系dll読み込みも外す。
672:デフォルトの名無しさん
15/04/27 14:01:37.37 9sNRGOg0.net
>>663
>>665
塞ぎ忘れたらとんでもない事になりそうですね。。。
がんばってみます。
ありがとうございました。
673:デフォルトの名無しさん
15/04/27 18:39:19.42 RhUk/Sb2.net
Luaは本体のcソースの段階で、追加したり削除されたりすることを念頭において
作られてるので、めちゃくちゃ簡単に追加や削除ができるよ。
やり始めたらあまりに簡単でびっくりするとおもう。
最悪上記の消したいlua関数のregisterの処理だけl***lib.c系からコメントアウトした上で、
luaインタプリタを本体アプリにスタティックリンクするだけで、それなりに仕組みを深く理解している人以外はイタズラしにくくなる。
674:デフォルトの名無しさん
15/04/27 20:13:20.63 ByjLANN5.net
-- preload.lua
io = nil
...
とかを用意して
ユーザースクリプトを読む前にdofile
中身が決まったらdostringでハードコードする
ってのが簡単
675:デフォルトの名無しさん
15/04/27 23:36:05.71 V1hm5/yh.net
5.2以降は意図的に読み込まないと標準ライブラリとは使えないよ。
Ubuntuとかはまだ5.1だったりするのかな
676:デフォルトの名無しさん
15/05/03 17:51:04.86 R+xSVf6m.net
>>668
わざわざそんなことするより、読み込み部コメントアウトした方が
簡単だろw
モジュール単位、関数単位で、1行ずつ「追加・削除はご自由に」って
感じで全部列挙されてんだから。
677:デフォルトの名無しさん
15/05/03 18:10:07.04 IVZoCitV.net
殺したい関数型変数に新しい関数を代入するだけだってばさ。
何でわざわざ改造せねばならんの?
678:デフォルトの名無しさん
15/05/03 18:16:54.02 hj7OiJXS.net
まあまあ
Lua処理系を勝手に改造できる(してもいい)環境でないとそもそもできないね
679:デフォルトの名無しさん
15/05/04 07:02:11.02 Sl6NKpln.net
lua処理系を全く改造しないって無理がないかなぁ?
exit とかが数箇所入ってる時点で
組み込みで等でコンパイル済ライブラリを
そのまま使うのは怖すぎると思う。
680:デフォルトの名無しさん
15/05/04 07:28:47.12 ZL3JUBSp.net
改造前提だろう
requireもマルチバイト文字を含むパスを扱えないし (win環境)
本体と比べてライブラリの品質は良くない
681:デフォルトの名無しさん
15/05/04 07:51:01.81 sbqo/+Tp.net
混乱するので659への回答と他の話題は分けていただけると助かります
682:デフォルトの名無しさん
15/05/04 08:38:47.22 Sl6NKpln.net
>>675
だから、
ソースとか全部自由になるのなら、ベストはC層で
・不要なライブラリのロードを消す。
・package.cpath を消す。 or requre 自体不要なら消す。
・ソースから本体アプリにLuaごろスタティックリンク
これがデフォルトよりサイズも小さくスピードもアップする上に、
いたずらの可能性も限りなく0
LuaでnilにしたのをCへdostringで=といったのは、
一部を手抜きで代替するという案であって
決してベストなものではない。
スピードが遅くなったり実行ファイルにゴミは残るが、
そういう手の抜き方もあるよ、という話。
683:デフォルトの名無しさん
15/05/04 22:44:21.04 qi4175C9.net
autotouchhでゲームのリセマラマクロ作ってるんですけど
iosのアプリ固有ID?
//var/mobile/Containers/Data/Application/********/Documents
の********の部分の取得方法がわからなくて困ってます。
プログラミング自体初心者で一月ほど調べてるけどよくわからない言葉だらけで・・・
何かアドバイスくださいm(__)m
684:デフォルトの名無しさん
15/05/04 23:07:02.98 8Z+6LqT8.net
お前向いてないからもうやめとけ
685:デフォルトの名無しさん
15/05/04 23:17:09.78 qi4175C9.net
そんなに簡単なんですか・・・
すみません・・・
最後に是非教えてください
686:デフォルトの名無しさん
15/05/05 12:42:12.67 KszErmBE.net
AppInfoってアプリ入れてみ
これでわかんなかったら本当にやめろ
687:674
15/05/06 08:00:28.72 uYsfVS/M.net
いや、調べ方はわかるん
688:です、コードでどうすればいいかがわからないんです。 マクロ自体は完成しているんですが、アップデートとかのたびに変わるみたいで 手作業で書き直してるんでそれをどうにかできればなと......
689:デフォルトの名無しさん
15/05/06 11:08:53.11 /KG0Gdz0.net
ios固有なのか、そのアプリ固有なのか、
luaに依存する処理なのか?
なんとなくスレ違いの部分で悩んでいる感がある
文字列やファイルの処理ではないんだろ?
690:デフォルトの名無しさん
15/05/06 11:18:37.36 iq3C3Ifp.net
>>681
URLリンク(qiita.com)
これじゃねーの?
691:デフォルトの名無しさん
15/05/06 14:09:18.09 Om2we3tL.net
>>681
そのフォルダ名はアプリの構成かわるときにランダムに決定されるので、そのアプリ自身以外からは基本的には特定できない仕組みになってる
Data/Application/*** の下に、なにかしらアプリを特定できるような情報が入ったファイル(たぶんInfo.plistとか)があるだろうから、それを全部探索して読み込んで目的のアプリを探す、以外の方法は無い
692:デフォルトの名無しさん
15/05/06 15:34:43.00 uYsfVS/M.net
>>684
そうなんですね、ありがとうございます。
どこかに情報ないかといろんなファイルをtextで開いてたのですが見つからないはずですね
ありがとうございました。
693:デフォルトの名無しさん
15/05/16 00:11:08.39 yj1J+1ps.net
定義したあるテーブルのメソッド一覧を取得することはできますか?
player = {}
function player:Attack()
end
function player:Jump()
end
上記のような定義があり、
"Attack"と"Jump"のキーとその関数をペアで取得したいのですが
694:デフォルトの名無しさん
15/05/16 00:33:56.90 nBVK7qH/.net
Lua自体にはメソッドという分別は無いので関数かどうかで判断するだけだな
for k,v in piars(player) do
if type(v) == "function" then
printf(k, v)
end
end
695:デフォルトの名無しさん
15/05/16 00:48:49.46 yj1J+1ps.net
お~
できました~
かゆいところにきちんと手が届いてくれていい言語ですねぇコレ
ありがとうございます。
696:デフォルトの名無しさん
15/05/18 06:50:19.69 QWumnvsF.net
すう様はきちんと考えながら英語を喋ってるよ。
あれはカンペとかじゃない。
697:デフォルトの名無しさん
15/05/19 14:34:42.08 dht99EFe.net
Luaで悩んでいます。ご教示お願いいたします。
下記のようなテキストの入った複数の配列があり、
tbl01={"a","b","c"}
tbl02={"d","e","f"}
tbl03...
ストリング型のstrという変数に"tbl"という文字列が入っています。
やりたいことは、文字列型の値を何とか加工してtblの要素にアクセスしたいんです。
str[1]
とするとエラーが出ますし・・・(まあそうですよね)
強引にtable型に型変換できないかな?とか悩んでいます。
文字列しか受け取れない場合、複数ある配列にアクセスするには
どのようにすればよろしいでしょうか?
詳しい方教えてください。お願いします!
698:687
15/05/19 14:37:23.12 dht99EFe.net
↑すみません、間違えました。
strの中に入っている文字列は"tbl"ではなく"tbl01"としています。
いずれにせよ無理ですが…
699:デフォルトの名無しさん
15/05/19 16:19:59.83 Nw+B6083.net
>>690
string.sub() or .byte()
1文字ずつ処理するのはC系に比べて苦手。
代わりに正規表現が使えないか要検討。
700:デフォルトの名無しさん
15/05/19 16:23:48.21 26zc2bnI.net
微妙にエスパー能力が必要な質問だが、こういうことけ?
local function getTableByName(name)
local tables = {
tbl01 = {'a', 'b', 'c'},
tbl02 = {'d', 'e', 'f'},
}
return tables[name]
end
local str = 'tbl01'
local t = getTableByName(str)
print(t[1])
701:デフォルトの名無しさん
15/05/19 16:28:09.88 Nw+B6083.net
>>690
違うな。質問の意図を取り違えていたかも?
str[1]の代わりになるのは >>692 だが、
元々の目的が「変数に入っている変数名を経由したアクセスがしたい」ならば _G を使う:
str = "tbl01"
assert(_G[str] == tbl01)
tbl01 等がグローバル変数、ローカル変数、他テーブルの要素で処理が違うものになるから、これでダメならまた聞いてくれ。
702:デフォルトの名無しさん
15/05/19 22:19:05.65 dht99EFe.net
>>692
>>693
お二方、ありがとうございます!
エスパーみたいな質問になってしまいましたね。すみません。
実現したいことの詳細をより細かく記載します。どうしても実現したいので。もう3日悩んでます。
ゲームを制作しています。
ゲームエンジンからluaを呼んでluaで処理させることができるのですが、
ゲームエンジンの仕様でlua側に渡せる値が文字列のみです。
luaで何をしたいかというと、上記のように大量にテーブルを作って中身も代入しておきます。
すべて文字列のデータです。
ゲームエンジン側から①文字列②テーブル名の二つの値を渡します。(もちろん両方文字列でしか渡せません)
その二つの値がlua側に渡ったら、②を使ってテーブルを探し、①を使ってそのテーブルの中に
①と同じ文字列があるか比較します。
文字列があったら1を返して、なかったら2を返す…ということを実現したいのです。
>>690の例で行くと、ゲームエンジンから①"a"と②tbl01をもらって、lua側のtbl01をforで回して
探していけばいいや…と思っていました。しかし、
strにtbl01が入っていたとして、
for i=1 , table.maxn(str) , 1 do
…なんてことをすると、文字列なのでエラーが返ってきますorz
いろいろ試してみてstr[i]なんてことまでやってみる始末。もちろん動
703:かないですが。 そもそもluaって動的に型を決めてくれるので明示的にこちらから「こいつはtable型だよ!」 って指定できないんですね。(java使っている者でして…) 説明不足なら捕捉します。後出し申し訳ありません。何卒よろしくお願いいたします。
704:デフォルトの名無しさん
15/05/19 22:35:28.81 UWcSl4nD.net
>>695
table型だよって指示できないもなにも、変数strの中身はあくまでstringなんだから、Javaで同じことやる場合でもHashTableかなんか使うよね?
つまり、>>694 がやりたいことなんじゃないの?
table.maxn(_G[str]) でできると思うよ
705:デフォルトの名無しさん
15/05/19 23:29:17.09 dht99EFe.net
>>696
やりました!!!
要素にアクセスできましたーー!
そのまま文字列一致の判定をして、フラグ1が返ってきました。
これでゲームの核の部分が作れました。
そもそも_Gの使い方を間違ってました…
しかしLuaって色々弄って思ったのですが想像以上に柔軟なんですね。
お三方、親身に教えてくださってありがとうございます。
706:デフォルトの名無しさん
15/05/25 21:08:36.02 sCH5oSB/.net
質問失礼します。
OSX 64bit Unity という環境で Lua を使用しています。
Windowsでは正常に動くのですが、OSX 64bit で動かすと LuaDLL.luaL_newstate(); で null が返ってきて困っています。
パッケージを見ると Mac (x86 only) と明記してありました。
OSX 64bit でも動かしたいのですが、どうやれば良いでしょうか?
707:デフォルトの名無しさん
15/05/25 21:17:17.45 WFHyWYJ8.net
64bitなdllを別途準備しないとダメじゃね?
708:695
15/05/25 21:18:45.04 sCH5oSB/.net
>>699
そうですよね。。。
makeは通ったんで、頑張ってみます!
709:695
15/05/28 19:45:28.97 52beXCpy.net
詰まりました。。。
LuaJIT-2.0.2を利用しているのですが、OSX用のuniversal binaryで出力する方法が分かりません。
Luaの速さに全体重を乗っけてるんで、今更別の言語への切り替え等は考えられません。
分かる方、ぜひ教えてください。
710:デフォルトの名無しさん
15/05/29 01:55:02.89 p/ahFCvT.net
個々にビルドした場合はlipoというツールで合体させるらしい?
URLリンク(www.google.co.jp)
711:デフォルトの名無しさん
15/05/29 02:07:51.90 p/ahFCvT.net
luajitではなく、luaならhomebrewとかみるとuniversalのオプションがあるね。
brew install lua --universal
>698も根が深そうな。。。
URLリンク(www.google.co.jp)
URLリンク(gist.github.com)
712:デフォルトの名無しさん
15/05/29 02:13:23.25 p/ahFCvT.net
とおもったけど、普通に64bitになっていた。
URLリンク(github.com)
$ lipo -info /usr/local/opt/luajit/bin/luajit
Non-fat file: /usr/local/opt/luajit/bin/luajit is architecture: x86_64
713:デフォルトの名無しさん
15/05/29 09:55:09.44 2a3TZL/2.net
>>702-704
ありがとうございます!
LuaJITの32bit版ライブラリと64bit版ライブラリを出力して、lipoというソフトで合体という事ですよね?
試行錯誤してみます!
714:695
15/05/29 15:29:21.86 2a3TZL/2.net
>>698も根が深そうな。。。
まさにコレでした。
問題は2つあったんですね。
もうお手上げです。
とりあえず勉強になりました。
ありがとうございました。
715:695
15/05/30 02:16:04.85 WJHjPFg2.net
ちょっとレスにミスったんで、訂正
>>703
>698も根が深そうな。。。
↑まさにコレでした。
716:デフォルトの名無しさん
15/09/14 16:28:17.35 SxkHJw7D.net
最新のsnes9xでluaを読み込む方法を教えてください
URLリンク(pastebin.com)を動作させたいです
717:デフォルトの名無しさん
15/09/30 15:13:43.25 gLrxUsPl.net
Nekoって一応プログラミング言語だったのか
Haxeのプログラムを動かすVMとだけ思ってた
URLリンク(en.wikipedia.org)(programming_language)
718:デフォルトの名無しさん
15/09/30 15:57:26.40 2TkwnPLU.net
新進気鋭のプログラミング言語「Neko」ってなに?
URLリンク(news.mynavi.jp)
719:デフォルトの名無しさん
15/10/06 22:32:11.35 uxUTfTFS.net
受ける会社大丈夫?
下記の条件が全て当てはまる会社にご注意下さい。
・IT系 in tokyo
・「社名 労基」でググると過去の2chスレが出てくる
・転職会議で2.5点
720:デフォルトの名無しさん
15/10/21 00:53:22.02 Kl04gCQo.net
Ravi
URLリンク(github.com)
lua5.3互換、静的型付け追加、jit
721:デフォルトの名無しさん
15/10/21 01:29:46.09 +L1p2dWm.net
きみのためなら死ねる。Ravi!
722:デフォルトの名無しさん
15/11/02 08:39:42.03 LHJrrN+c.net
FlashAirにLuaが組み込まれてた
723:デフォルトの名無しさん
15/12/07 06:26:50.82 sv1H4v2t.net
duktapeはどうなん?
使ってる人いる?
724:デフォルトの名無しさん
15/12/08 17:05:55.06 yVFhtqC/.net
スマホのマクロアプリのスクリプトがLuaのコードで書かれてるんだけどusleep関数を使うと徐々にズレてくるんだが正確に待機させる事ってできます?
命令としてはタップ、待機、タップの繰り返しなんだけども10回目くらいで目に見えて遅れてる
usleep自体正確じゃなく、1回ズレると以後ズレた地点から待機時間が計算されるからその繰り返しになっていると思う
os.clockで開始時間計って目的のタップまでの待機時間を計算していくしかないかなと思ってるんだけどいかんせん700回以上を計算して行くのは心が折れるので何か方法があれば教えて下さい
725:デフォルトの名無しさん
15/12/08 17:52:14.14 V92FzyIA.net
>>716
luaに限った話じゃないが
次に目を覚ましたい時刻までの差分だけ寝れば?
726:デフォルトの名無しさん
15/12/08 18:05:12.63 yVFhtqC/.net
>>717
os.clockでタップさせたいタイミング全ての時間を取得するって事ですか?
727:デフォルトの名無しさん
15/12/08 18:45:35.86 V92FzyIA.net
>>718
「全ての時間」ってのがよくわからないな。キリのいい間隔ではだめなのか?
例えば 200ms おきにタップしたいなら、
ベース時刻から 0, 200, 400, 600ms …の経過で処理するんでしょ?
で、200ms の処理の際に時計を見て、実際には 205ms の時刻なら、次は 400 - 205 = 195ms だけ寝る。
何かしら負荷がかかって 400ms の時刻に近すぎたり過ぎたりしたら
スキップするなり、数回間隔を狭めて調整する処理も要るかも。
728:デフォルトの名無しさん
15/12/08 23:00:53.20 yVFhtqC/.net
>>719
一定間隔ではないんですよね
止める時間はだいたい4パターンのうちどれか
タップした時の時間と目的の時間を比較する方法があれば良いんですが
一定間隔ズレているなら良いですが徐々に少しずつ遅れているなら結局700回を全て調整していくしかないわけですよね…
コツコツ頑張ります
729:デフォルトの名無しさん
15/12/09 01:20:52.01 uEc6NdFX.net
【 オンラインTCGエディター 】 >>1
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っており
730:ながら、 当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。 既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。 バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。 マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。 WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。 設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみて。 個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。 ↓ エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。 ↓ 遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。 なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・ バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。 ↓ 各社TCGを再現するテストプレイ ⇒ 更に改良や修正。 ↓ 機能制限した下位版を5万円以上で発売 + デュエリ-グ用に改造した上位版でサーバー稼動=営業開始。 ↑ 下位版の改造および商用利用には、別途で当社との契約が必要。 さ~て、製作ベンダー見つけよっと!ww(クス http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
731:デフォルトの名無しさん
15/12/30 01:11:18.19 TU1EcnmS.net
初心者ですがLuaのサイト行ってダウンロードしたんですけど
インストール出来ません
アドバイスを御願いします(´・ω・`)
732:デフォルトの名無しさん
15/12/30 01:46:15.47 LbvdgCkv.net
>>722
URLリンク(luabinaries.sourceforge.net)
733:デフォルトの名無しさん
15/12/30 05:57:27.20 47mVpj3E.net
>>720
local start_usec = sysyem_usec();
~色々やる~
usleep(sleep_time - (sysyem_usec() - start_usec));
これだけの話じゃないの?
ちなみにos.clockはprogramが使用したCPU時間だからCPUが寝てる間は増えないよ
734:デフォルトの名無しさん
15/12/30 18:30:13.07 Sj5i/aUt.net
>>722
OSがワカランけど
ソースをコンパイルするなら
tar zxvf lua-5.3.2_Sources.tar.gz
cd lua53
make linux or
make macosx or
make mingw or
make posix or
make solaris or
make install
735:デフォルトの名無しさん
16/01/07 20:02:10.72 lAIllFG+.net
Luaは組み込みが簡単だっていうけど
Javaの呼び出しAPI使う方がずっと簡単じゃん
Javaなら書くのにEclipseとか使えるし
736:デフォルトの名無しさん
16/01/07 21:06:07.28 YzB9fcaP.net
コンパイル型の言語を組み込んで何がしたいんだ?
737:デフォルトの名無しさん
16/01/08 08:07:50.80 QEjOaegz.net
「組み込みが簡単」の意味を誤解してるに一票
738:デフォルトの名無しさん
16/01/11 03:28:28.16 Va0MVjV0.net
じゃあJavaをアプリケーションに組み込んでみなよ
739:デフォルトの名無しさん
16/01/11 04:05:21.99 Va0MVjV0.net
luaのスタック操作APIが面倒というのならbind用ライブラリ一杯ある
URLリンク(lua-users.org)
それ使うとJNIが面倒と思えるぐらい便利なのあるよ
740:デフォルトの名無しさん
16/01/11 04:14:11.05 0EvHa66G.net
静的型付きの組み込み言語ってないの?
実行時コンパイルできるやつ
741:デフォルトの名無しさん
16/01/11 04:27:46.70 Va0MVjV0.net
>>731
それってエラーになるの結局実行時だしIDEがサポートしないとメリットなくない?
742:デフォルトの名無しさん
16/01/11 05:37:06.41 0EvHa66G.net
すまん言葉が足りなかった。
そうじゃなくて、実行時コンパイル「も」できるやつと言いたかった。つまり実質Evalを捨ててない静的型付き言語。
というかIDEサポートなくたってメリットあるだろ・・・コンパイル時に型エラー出るじゃん
743:デフォルトの名無しさん
16/01/11 07:27:44.99 H4zd5jav.net
>>712みたいなLLVMバックエンドの奴なら
744:デフォルトの名無しさん
16/01/11 07:39:28.66 H4zd5jav.net
いやそんなの組み込むのは無理か、間違い
745:デフォルトの名無しさん
16/01/11 09:54:45.69 EOECSf3M.net
>>733
JavaScriptを組み込んでTypeScriptで書く
IDEサポートも VisualStudio なり VisualStudio Code なりがある
v8なりJsRTが使える環境なら性能面でもかなり良い選択だと思う
746:デフォルトの名無しさん
16/01/11 17:05:44.51 if9kJcKP.net
>>736
v8をアプリに組み込むのは手間だし(クロスプラットフォームを考えると尚更)
altJs系の言語はeval出来るって要件満たしてない
747:デフォルトの名無しさん
16/01/12 15:56:16.83 pvMT9PCj.net
jsのエンジンってposix系のapiってあるの?
commonjsのnode組み合わせたり必要なんだよね?
v8意外にもあるみたいだけど。
URLリンク(mattn.kaoriya.net)
748:デフォルトの名無しさん
16/01/12 15:58:08.09 pvMT9PCj.net
cljsだとeval出来るようだ。
749:デフォルトの名無しさん
16/01/15 01:33:01.12 9hWfybeU.net
>>733
AngelScript|Д`)ノ<静的型付き言語と聞いて。Anyもあるよ!
750:デフォルトの名無しさん
16/01/19 20:51:03.31 0e0GcKQy.net
PSLってのはどうよ?
俺はスクリプト言語に静的型はそれ程魅力無いと思ってるし実績あるからLuaでいいやってなってるけど
751:デフォルトの名無しさん
16/01/24 13:23:45.64 xtpCszE9.net
>>58
Lua の文法って簡単なんだなーと思って試しにパーサを書いてみてたんだけど、
マニュアルの BNF 通りだと左再帰になってるから無限ループに陥ってしまった。
間接的な左再帰だから俺のへぼい知識では除去できなかった。
実際に Lua の実装では再帰下降してるっぽいからなんとかしてるんだとは思うけど、
左再帰を除去した文法規則の表とかってどっかにないかな?
ソースコード読むしかない?
752:デフォルトの名無しさん
16/01/31 02:54:56.98 kn/5LVuq.net
Lua使ってる人binderは何使ってる?
そんなもん要らん!標準のstack APIで充分だ!って人もどれくらい居るんかな
753:デフォルトの名無しさん
16/01/31 11:34:52.69 Pw2nI7hG.net
わしはstack形にすっかり慣れた
754:デフォルトの名無しさん
16/01/31 23:47:27.75 kn/5LVuq.net
慣れても面倒くさいものは面倒くさくね?
C++のオブジェクトをLuaから使えるようにするだけでもやりたくなくなる
755:デフォルトの名無しさん
16/02/02 07:57:29.11 lmUWOHWt.net
英語より面倒な日本語にもすっかり慣れたしなんとかなるもんだよ
756:デフォルトの名無しさん
16/02/03 23:36:18.56 8yWl5BHB.net
Lua ってパッチ当てないと日本語つかわれへんの?
21世紀にもなってなんでや。
757:デフォルトの名無しさん
16/02/04 00:44:14.34 lRklN/w3.net
>>747
utf8ならそれなりに使える
21世紀にもなってSJISは使ってないんだろ?
とはいえファイル名はOSネイティブの文字コードが要るとか
幾つか注意点や手を入れたくなる所はあるが
758:デフォルトの名無しさん
16/02/04 01:00:10.15 Jx1/Vtha.net
>>747
使えるけど?
759:デフォルトの名無しさん
16/02/04 23:42:25.61 wmCOjGkS.net
SJIS使ってないなんて都合が良いことありえないw
Winだと何しても所詮SJISから逃れることはできん。
むしろSJISに対応してないプログラムの方が大問題だ。
760:デフォルトの名無しさん
16/02/04 23:52:14.71 wmCOjGkS.net
>>747
今の言語だと、ソースをマルチバイトで記述しようが、utf8で記述しようが、
マルチバイト書いたソースから、utf8で書いたクラス呼ぼうが、
変換などソースのどこを探しても1行たりとも表れないのが常識なんだけれども
Luaは変換だらけ。
761:デフォルトの名無しさん
16/02/05 00:44:16.88 FMLvAXOG.net
string型をバイナリ配列として利用しようとするコードが存在する限りもう無理ぽ
762:デフォルトの名無しさん
16/02/05 01:33:38.19 XGMa0UOY.net
swigでsample.iに
typedef struct {
int a;
int b[4];
}hoge_t;
int hogehoge(hoge_t * test);
と書いて swig -lua sample.i 実行で吐き出されるグルー関数を使う場合
luaの記述は
test = require "xxx"
test_t = hoge_t()
test. a =10
result = hogehoge(test_t )
とかすればよいのですが、
test.b[1]=3とか
test.b[2]=4とかするとグルー関数でパラメータチェックで弾かれます。
構造体のポインタ渡しで構造体の中に配列がある場合は
LUA側でどんな記述をすればいいのだろう?
763:デフォルトの名無しさん
16/02/05 01:35:33.28 XGMa0UOY.net
間違えた↑訂正
test_t = hoge_t()
test_t. a =10
result = hogehoge(test_t )
とかすればよいのですが、
test_t.b[1]=3とか
test_t.b[2]=4とかするとグルー関数でパラメータチェックで弾かれます。
構造体のポインタ渡しで構造体の中に配列がある場合は
LUA側でどんな記述をすればいいのだろう?
764:デフォルトの名無しさん
16/02/05 06:22:46.35 pWou2Qho.net
>>750
ANSI 版の API を使ってるやつこそクソ。
正直言って A 付きの Windows API は全部廃止してもいいくらいだ。
UNICODE 版の API 使えよ。
765:デフォルトの名無しさん
16/02/05 08:17:19.47 ToPlCIrz.net
>>755
Luaの話ならstringはchar固定でwchar_t等に変更するのは本体の改造が要る。
Luaのstringは、byte-arrayという名前のほうが適切だと言える。
不適切な変換はしないが、「UTF8として解釈するならutfモジュールを使え」というスタンス。
同様に、SJISに対応したいなら自分でsjisモジュールを作ることになる。
Windowsがsetlocale("UTF8")をサポートしていないのが面倒の原因なんだよな。
他のOSならできるから、もうみんなUTF8に統一して満足しちゃってる。
766:デフォルトの名無しさん
16/02/05 15:39:47.51 brMGa4PB.net
いち早くUnicode()に対応したはいいけど2バイトに収まりきらず、固定長じゃなくなってメリットが何もなくなった上に
他のプラットフォームは軒並みUTF-8になってしまって孤立してしまったが互換性のためにSJISを捨てられないWindowsさん
MSVCで設定とかでUTF-8版のCライブラリ(中でUTF-16に変換するような)を使えるようにしてくれたらいいような気もするんだけど何か問題あるんだろうか
767:デフォルトの名無しさん
16/02/05 16:03:19.95 TvHQKkN9.net
ラテン語圏のやつらが作る言語はいつもこう。
768:デフォルトの名無しさん
16/02/05 19:16:06.06 brMGa4PB.net
ははっ、
RubyのWindowsでの日本語対応がマトモだったと思ってる?
769:デフォルトの名無しさん
16/02/05 19:54:12.16 Jcxd0Fsw.net
Windows切るだけで解決する
770:デフォルトの名無しさん
16/02/05 20:10:36.21 pWou2Qho.net
Windows の API を UTF-8 にすべきだったとは思わんのだよな。
UTF-8 を基本にしてしまうと ASCII コードの範囲内で使う分には対応してようがいまいが使えちゃうから、
対応してない部分が顕在化し難いまま混在してわけわからんようになるのが見えてる。
その点、 UTF-16 と ASCII (ANSI) が混ざったらすぐ発覚する。
771:デフォルトの名無しさん
16/02/05 20:32:40.84 brMGa4PB.net
>>761
へぇ
Windows以外はわけわからんようになってるという主張でございますか?
772:デフォルトの名無しさん
16/02/05 21:00:24.37 I7CO4PTN.net
主要なコードもUTF8じゃなく、OS内部もUTF8じゃなく、標準入出力もUTF8じゃなく、あげく、UTF8にしても世界の文字の一部しか対応できないので
いうような利点はないってことでしょ。
utf8にしても、実際の運営としてはASCIIのような運営範囲なんでしょ?w
773:デフォルトの名無しさん
16/02/05 21:04:55.16 ToPlCIrz.net
>>761 の真意はよくわからんが
char (1 byte) にしか対応していないコードや製品が氾濫するのは困るが
wchar_t (2 byte) にしか対応していないものなら許容できるってニュアンスか?
それもサロゲートペアができて破綻したけどな。
絵文字のせいで目にする機会も無いではないし。
774:デフォルトの名無しさん
16/02/05 21:28:04.79 brMGa4PB.net
>>763
何言ってるのかよくわからんけど
>>UTF8にしても世界の文字の一部しか対応できないので
表現できる範囲はUTF-16も同じなんだが、それもダメって言ってるんだよね?
ってことはつまりSJISとかそれぞれのエンコーディングで適切な処理を行えってこと?
俺はUTF-8のコードポイントの区切りかたは知ってるけど、
他の言語の専用エンコーディングどころか
SJISのコードポイントの区切り方すら知らないわ、
それをプログラミング言語作る人にしかも日本語とかまったく使わない海外の作者に強いるとかできないっすわ。
775:デフォルトの名無しさん
16/02/05 21:36:38.36 TvHQKkN9.net
そんなもん自慢話にもならん。誰それ構わず噛み付いてアホか。
776:デフォルトの名無しさん
16/02/05 21:53:39.03 brMGa4PB.net
誰が自慢話してるんだ?
777:デフォルトの名無しさん
16/02/05 23:17:47.52 AF25xcuE.net
妥協も多いけど現実的だったオリジナルのUnicodeが、世界中のあらゆる文字をひとつのコードで
表現するという無謀な目標を掲げた10646と合流してごみ溜めのようになった。
そんなのに付き合って苦労するのはバカらしいから、基本多言語面だけサポートしてサロゲートペアは
トーフ扱いするのが現実的。どうせろくにフォントも無いし。
778:デフォルトの名無しさん
16/02/05 23:26:52.29 pWou2Qho.net
>>762
コードページの概念を捨てられないという主張。 そりゃ全部 UTF-8 に出来ればベストだとは思うよ。
でも捨てられない以上、下手に混ざってわけわからんようになるよりは混ざったらすぐわかる方がマシって話。
779:デフォルトの名無しさん
16/02/05 23:56:37.35 wLhOEYBg.net
各国のコンソールのコードページも65001じゃないし、65001じゃ
日本語もまともに表示できないわけで。
逆にプログラミング言語ごときが数十億人が使ってる現実的な各文字コードを押しのけて
utf8に全文書統一しろ、今すぐしろとか言っても、相手にされんよ。
780:デフォルトの名無しさん
16/02/06 00:27:48.85 /BZKOehd.net
Unicodeで表現できない文字って少なくとも日本では名前に変体文字使ってる数%がごねてるだけでしょ
数十億人とか盛りすぎ
781:デフォルトの名無しさん
16/02/06 00:47:56.49 /BZKOehd.net
というかSJISには割り当てられててUnicodeで割り当てられてない文字ってあるの?
>>768
最近の携帯電話使ったことないのかい?
>>770
Windows内部はUnicodeで扱ってるからコンソールもUnicodeで表現できない文字は表示できませんよ
WindowsのコンソールをCP65001にしてもまともに表示できないのは実装がタコなだけ
あとメジャーな携帯電話のOSはどちらもUnicodeですけどこれは本当に数十億人が使ってますよ
782:デフォルトの名無しさん
16/02/06 02:13:32.99 bnndf23C.net
iOSは消滅確実だが、Androidは十分残りそうだなぁ。
実装がカスとかいったところで、モノ生産してるデスクトップ85%から占めてるてるものを
否定して見ない振りしてもしょうがない。
逆にビューワー(携帯)なんか資産性がないからどうでもいいよ。
783:デフォルトの名無しさん
16/02/06 03:04:06.56 /BZKOehd.net
話をどこへ持っていきたいのかよくわからんけど元々は、
WindowsがUTF-8をまともにサポートすべきかっての論点だと思ってたけど。だからいまの実装を見ないふりもなにもないよ。
MicrosoftがWindowsでUTF-8をちゃんとサポートししようとしても今と変わらずクソ実装になるって主張じゃないよね?
>逆にビューワー(携帯)なんか資産性がないからどうでもいいよ。
プログラムを動かすのは大多数が持ってるビューワーなわけで、それこそ否定して見ないふりしてどうすんのよ。
今はサーバーはLinuxで携帯はiOS or Androidなわけで、プログラムを実行する環境全体を見るとWindowsなんて少数派だよ。
784:デフォルトの名無しさん
16/02/06 08:26:37.09 X7qr0C1S.net
OSのネイティブ (C言語) では UTF-16 (Windows) と UTF-8 (それ以外) があるけど
今主流の言語 (Java, C#, Swift/Obj-C, JavaScript) のレベルでは
ほぼ UTF-16 に統一された印象があるんだが、この認識は間違っているだろうか?
ファイル入出力では文字コード変換をするのは前提として。
OSうんぬんより、むしろ文字列型がUTF-16でない言語が問題な気がする。
785:デフォルトの名無しさん
16/02/06 12:03:30.10 BlYk2woR.net
結局こういう面倒な問題はグレーにしてるLuaが勝ち組
786:デフォルトの名無しさん
16/02/06 14:43:17.15 8fDg9LDU.net
>(Java, C#, Swift/Obj-C, JavaScript)
その辺の言語はUTF-8が産まれる前からある言語だからな
SwiftはUTF-16じゃないし(もちろん扱えるけど)、goは基本UTF-8
787:デフォルトの名無しさん
16/02/06 15:15:51.79 su9E+X74.net
Ruby ソースコードはコメントで指定、文字列型は内部にエンコーディング情報を持ってる
python 内部表現はデフォルトucs4(WindowsだけUTF-16)
php よく知らんけどググってみる限り統一されてなさそう
というわけでUTF-16に統一されてるわけじゃないよ。
788:デフォルトの名無しさん
16/02/06 15:22:16.66 22sNDRQR.net
結局のところ、このスレ的にはC言語の整合がとれてないのが困りどころよな
wchar_t をいまさら統一とは言わないけど、なんか統一した別枠の仕様を標準化してほしい
789:デフォルトの名無しさん
16/02/06 15:44:17.53 22sNDRQR.net
あ、C/C++の規格的にはもう11で統一されてたのか
char16 _t がutf-16、char32_tがutf-32で固定の組み込み型。u"" U"" でそれぞれリテラル指定も可能
ただし全部これに対応したライブラリーは整備されてないので、
実情はあんまかわらん模様
790:デフォルトの名無しさん
16/02/06 15:52:48.40 22sNDRQR.net
アプリ内部はchar16_tかchar32_tでかいて、
OS依存処理は分離した上で、winはwchar_t がutf-16だからそのままワイド系の関数やapi使って、
unix系はwchar_tは信頼できないから、c16rtomb かc32rtomb でmbに変換して対応、が、C11以降の正しい書き方ってことかな
791:デフォルトの名無しさん
16/02/06 22:02:21.26 iW4Rvogm.net
ここ何のスレだっけ…?
792:デフォルトの名無しさん
16/02/06 22:11:19.39 +jWWiLZa.net
組み込み言語だろ。流れには沿ってるよ
793:デフォルトの名無しさん
16/02/07 00:18:29.86 LSSjhAu+.net
>>780
だからUTF-8に統一すりゃいいのにって話に戻るわけだ
794:デフォルトの名無しさん
16/02/07 00:48:50.94 4QXOAnIu.net
言語処理系がSJISソースコードを処理できるか(5C問題)と、言語やOSの内部文字コードの話がたまに混ざる。
795:デフォルトの名無しさん
16/02/07 03:59:45.36 LSSjhAu+.net
SJISでソースコード書くやつなんて今時いないよね?
それに誰もそんな話してないよね?
796:デフォルトの名無しさん
16/02/07 20:56:40.56 8pvMtac5.net
utf-8サポート入ったlua5.3以降の話だったのね。
以前(5.1/5.2)はsjisパッチがあったりしたので、そっちの話も出てたのかとおもった。
797:デフォルトの名無しさん
16/02/07 23:13:24.81 vQROT1hb.net
>>786
今でもマルチバイトのソースコードは山盛りだよ。
最も使用頻度が多いVSがデフォルトSJISだぞ。
そんな現実すら知らずにプログラマやってて
本気で言ってるな、周りが全く見えてない能無し。
798:デフォルトの名無しさん
16/02/07 23:15:09.52 jiomZ/W6.net
たまに文字列リテラル内の文字コードが書かれた文字コードに依存する糞処理系とかあるしな・・・
799:デフォルトの名無しさん
16/02/07 23:22:01.52 vQROT1hb.net
utg8に依存してるmrubyとかなw
800:デフォルトの名無しさん
16/02/07 23:44:00.61 LSSjhAu+.net
>>788
それはWindowsでしか動かないプログラムを書くお前の環境特有の話
それに気が付いてないなら
>周りが全く見えてない能無し。
自己紹介おつ
>>790
組み込み言語なら現実的な選択でしょ
多種多様なエンコーディングに対応するためにOSとか巨大な外部ライブラリに依存するほうが糞
801:デフォルトの名無しさん
16/02/08 00:07:53.29 0XuKQtD5.net
だいたいMicrosoft傘下になったゲームスタジオのWindows10アプリ移植版が
日本語ユーザー名だとエラーになるっていう体たらくだよ。
完全にSJISがMicrosoft自身の足も引っ張ってる
802:デフォルトの名無しさん
16/02/08 00:20:53.72 +/8cbHLD.net
そういうのはマルチバイトエンコーディングを適切に扱わずにUS-ASCIIしか想定して
なかったという類の問題でしょ。UTF-8だったとしてもやらかす奴はやらかす。
803:デフォルトの名無しさん
16/02/08 00:48:05.85 0XuKQtD5.net
>>US-ASCIIしか想定してなかった
違うよ。日本語表示も(他の言語の表示も)できてる。予想だけど内部ではUTF-8で処理してんだろうよ。
ここまで書けば多数の人は何を指してるのかわかるだろうから具体的なゲーム名は言わないけど
そのゲームは
PC版(Java) → スマートフォンへの移植版(ネイティブアプリ版) → Windows10アプリ版
と移植されていったわけ、スマートフォンではUTF-8がデファクトスタンダードだから当然の結果だね。
で、Windows10版もUTF-8文字列をそのままファイル操作のAPIへ渡してしまったんだろうね
>>UTF-8だったとしてもやらかす奴はやらかす。
とはいってもSJISを"適切に扱う"ということと比べたら屁みたいなもん
それにこのゲームでの問題の適切な解決策はSJISを適切に使うではなくWindowsのみUTF-16へ変換してwide版のAPIを呼び出すだ。
804:デフォルトの名無しさん
16/02/08 01:08:11.78 B1wV/kIt.net
文字コード総合スレ Part10 [転載禁止]©2ch.net
スレリンク(tech板)
どうしてもここで語りたいなら言語と処理系を限定しろ
話が発散する
805:デフォルトの名無しさん
16/02/08 03:55:04.72 9ZhGg5zu.net
システムのファイル名・ユーザー名などは、
半角英数字のみを使う
外人は日本語でのテストなどをやっていないから、
日本語などを使ったら、バグる
SEの常識だろ。日本語など、
誰もメンテナンス・テストしていないものを、
システムで使うのはおかしい
Linux・Macなんか、ファイル名に半角スペースがあっても、バグる
806:デフォルトの名無しさん
16/02/08 07:43:55.20 stcXIyTr.net
ドイツ語でもバグるよ
807:デフォルトの名無しさん
16/02/08 08:08:27.71 +/8cbHLD.net
スマートフォンでUTF-8がデファクトスタンダードってなんのことを言っているのやら。
iOSやAndroidのプログラミングしたことないのかね?
808:デフォルトの名無しさん
16/02/08 09:04:21.92 rq38tdFU.net
AndroidもiOSも代表的なutf-16環境だな
809:デフォルトの名無しさん
16/02/08 09:17:28.34 5blmn2mR.net
扱わないといけない文字コードは4種類ある。
1. プログラム中の文字列型
2. OSのAPI
3. ソースコード
4. 入出力ファイル
4については、対応が必要なぶんの変換モジュールを用意すればよいだけ。
3については、1に決め打ちするのが楽だが、4があるなら変換して読み込めばいい。
で、Windows対応を謳うには以下のどちらかが必須。
・setlocale で 1=2 という環境に限定し、1に対してmblen等の適切な処理をする
・1=ユニコード (UTF-8/16/32は問わない) として 2=W系API を使う
Luaの実装はどちらでもないので、「Windows対応が完全ではない」と評価するのが妥当。
Squirrelなら後者になるようコンパイルできるので、この件に関しては問題ない。
他の環境はわからないが 1=ユニコード なら後者を満たしていると期待できそう。
810:デフォルトの名無しさん
16/02/08 11:43:28.74 M0j0fnEJ.net
Squirrel って最近聞かないと思ったら1年前の最新リリースから止まってるのかよ
811:デフォルトの名無しさん
16/02/08 11:52:01.97 5blmn2mR.net
>>801
そう。だから「この件に関しては」と書いた
他の要素、将来性などは……
812:デフォルトの名無しさん
16/02/08 14:05:07.38 rq38tdFU.net
>>800
windowsの cランタイムのsetlocale が utf-8 に対応さえしてくれれば悩む必要無いのにねぇ
813:デフォルトの名無しさん
16/02/08 22:35:54.46 jpNGf5dG.net
>>798
>>799
上に載っかってるJavaとObjective-Cしか使ったことないの?
NSStringはUTF8Stringで、JNIではGetStringUTFCharsでUTF8の文字列を取れるけどUTF1 文字列で直接取得する方法ないぞ。
クロスプラットフォームの為にCやC++を扱うならUTF8にするのが常識
814:デフォルトの名無しさん
16/02/09 00:41:57.31 W9OWY02z.net
>>804
デファクトって言うなら主要開発環境でみないと駄目じゃろ
815:デフォルトの名無しさん
16/02/09 07:41:05.80 Wb20B9c6.net
>UTF1 文字列で直接取得する方法ないぞ。
UTF-16のtypoだろうが、NSStringならcharacterAtIndexとか、JNIならGetStringCharsとか。
816:デフォルトの名無しさん
16/02/09 07:54:13.04 OaLyyuyL.net
>>804
NSStringはそのままUTF16だからgetCharactersでunicharでとれるな
UTF8用の処理は低層のUnixとのやりとりのためのものだし、その層ではutf-8が必要なのはもちろんだけど、それをAndroidやiOSの標準かのように言うのはおかしいと思うな
817:デフォルトの名無しさん
16/02/09 08:14:07.29 DpNg1xio.net
UTF16なら固定長で行ける!という勘違いをしてる
外人は多いよ。
818:デフォルトの名無しさん
16/02/09 10:53:46.23 dd4nRHCa.net
>>807
ユニコードでさえあれば、内部のUTF表現まで気にする必要はないんじゃ?
特に文字列型がimmutableなら、複数の表現をキャッシュしても問題なさそうだし
>>808
日本人でも多くないか?
新しく言語を設計できるなら、CharはUTF-32であるべきだとは思う
819:デフォルトの名無しさん
16/02/09 12:19:21.81 +sr/gpA9.net
charのサイズがintのサイズに近づけばintの配列を使う人も出てくるんじゃないの
それにluaがpythonに近づけばpythonを使う
820:デフォルトの名無しさん
16/02/09 12:28:04.23 OaLyyuyL.net
>>809
話の流れはutf8がデファクトかどうか、です
実際にはutf16のが主流だろって指摘
外部はutf8でいいとして、内部で使うなら今後はやっぱ32だな。少なくともサロゲートペアの罠は回避できるし
821:デフォルトの名無しさん
16/02/09 14:09:36.45 +sr/gpA9.net
sjisとutf16とutf32って、まるでxpとvistaと7みたいだね
822:デフォルトの名無しさん
16/02/09 17:44:02.58 zKyrJnIK.net
>>809
それって言語の問題無の? 標準ライブラリで吸収できない?
823:デフォルトの名無しさん
16/02/10 08:02:28.26 2QwVjJmi.net
Web系の主流がutf8なのは確か
824:デフォルトの名無しさん
16/02/10 12:03:00.48 ShaMeiRT.net
iOS もAndroidもC言語文字列を扱うAPIはwideでもそれ以外の整数型の配列でもなくconst char*のutf-8だけどな
iOSはCore*とかAndroidはC用API自体少ないけどAAssetManagerとかAStorageManagerとか
825:デフォルトの名無しさん
16/02/10 13:05:28.92 D1g79far.net
だから、どの部分か限定しないと意味がないって
>>800 の分類なら 1 (文字列型) はUTF-16の言語もあるけど
低レイヤのC言語APIを含む、2,3,4 (API/ソース等) はUNIX系ならUTF-8ってだけだろ
ほとんど全員の言っていることは正しいよ
で、互換性や過去のしがらみがない場合、文字列型のあるべき姿が
SJIS等の個別エンコードを触れるべきなのか、
UTF-8/16/32のどれかに見えるべきなのかは、また別の話
Luaを改造してUTF-32 Luaを作ってくれてもいいんじゃよ
826:デフォルトの名無しさん
16/02/12 08:59:17.26 w1PVoXoh.net
>>816
>UTF8用の処理は低層のUnixとのやりとりのためのものだし、
の反論として書いただけなんだけどね
今から言語作るならUTF-32にすべきって人もいるけど俺はそうは思わないな、最近でた言語のgoも基本UTF-8だしswiftの文字列型も内部表現は21bitだし(UTF-32に近い物ではあるけど)ね。
goはコードポイント単位で扱いたい場合は32bit配列に変換するイメージ
文字列をfor rangeで回すとコードポイント単位で取れたりと扱いやすくはなってるけどね
(ソースコードのエンコーディングはUTF-8一択だと思ってるのでどうでもいいです)
冗談につっこむのもアレだけどUTF-32版のluaって何をUTF-32にするんだろうか。
string型?lua5.3からのutf8でstringを簡単にコードポイント単位で扱えるんだからstring自体をUTF32にする必要そんなに無いと思うけど
827:デフォルトの名無しさん
16/02/12 09:29:05.34 whWT7zC/.net
>>817
「文字列型のエンコーディング」の話をする場合、
内部の保持方法なのか、文字単位で扱う場合の見え方なのかで祖語があったかも。
私見だが、内部表現は言語本体の開発者だけが知っていれば良いもので、
使う側は文字単位でしか扱えなくて構わないと思ってる。
UTF-8で保持して、文字を要求されるとUTF-32で返す実装ももちろんアリだ。
UTF-32 Luaもそんなイメージだった。
UTF-8での保持が前提だから、WindowsではUTF-16へ変換してW系のAPIを使えるし
長さ, substr, 正規表現 等は、バイトではなく文字数で指定させる。
828:デフォルトの名無しさん
16/02/12 11:00:48.21 x5lzfsVs.net
>>817
UNIXとのやりとり≒C言語の文字列処理APIだから反論になってなくて同じこと言ってるだけだと思う
go言語は従来的な言語での「内部コード」相当は結局のところ32bitってことだよね
コンバートを言語仕様に組み入れて使いやすくしたところは偉いけど、複雑で面倒とも言える
829:デフォルトの名無しさん
16/02/12 13:17:26.15 w1PVoXoh.net
>>819
中身Javaで書かれたAndroidのフレームワーク使うのがUnixとのやり取り?C言語だったらUnixとのやりとりなん?
センセーWin32を使うのもUnixとのやり取りに入りますかー?
>go言語は従来的な言語での「内部コード」相当は結局のところ32bitってことだよね
言ってる意味がわからん…。簡単32bitに変換できたら内部コードは32bit?
C++でも関数一つで変換出来るけどC++の内部コードは32bit相当になれますか?
ちなみにgoでlen(string)したらUTF-8でのbyte数返るよ。
830:デフォルトの名無しさん
16/02/12 15:01:37.11 XlZH7QFA.net
確率的に考えるとサロゲートペアは "\r\n" よりマシだが
無料ソフトがすごすぎて誰も確率やコスパの話をしない
831:デフォルトの名無しさん
16/02/12 22:39:27.60 Bbm2lPXR.net
>>820
s/UNIX/C言語ベースのOSのAPI/でいい?
内部コードは以下のながれ
・今つくるなら32bitだろってのは「文字列型」の内部表現の話
・従来の多くの言語での文字列型は、長さ=文字数を期待してつくられた(実際は破綻したけどそれはさておく)
・go言語でも、文字数=長さで処理したい場合は、32bitなruneにするんだから発想は同じだよね?
832:デフォルトの名無しさん
16/02/13 01:24:52.89 M5U5EIyy.net
>>822
だからC言語ベースのOSのAPI ってくくりだとUTF-8をまともに扱えないWin32も入るでしょ?何が言いたいのか全く解らんのだけど
GoのruneはあくまでもUnicodeのコードポイントが入るサイズの整数(int32)の配列であって文字列型では無いと思うけど。その配列をそのまま文字列として出力できないしね
833:デフォルトの名無しさん
16/02/13 01:55:35.83 24vNB1dv.net
>>823
お互いさっぱりだね。
元の�
834:bは、スマホでデファクトなのはutf16じゃろってだけの話だよ runeはあきらかに他の言語の「文字列型」を想定したものだと言ってるだけだよ。言葉遊びしたいわけじゃない
835:デフォルトの名無しさん
16/02/13 05:49:29.94 M5U5EIyy.net
>>824
だからgoの文字列型はstringだろ。そこに異論がある?
runeは文字列からコードポイントの配列を取るだけ。
そんなもん他の言語、Luaにすら5.3からあるわ
スマホがUTF-16がデファクトってのも上に乗っかってるJavaとObjective-C(Swift除く)だけ使うならそうだろうよ。
でも一番最初の話はスマホへゲームを移移植するときの話 でAndroidもiOSでも動かす場合はUTF-8がデファクトスタンダードだって話をしてたんだ。それをUTF-16だろってツッコミ入れられたから反論してるだけで最初から俺はJavaとかObjective-Cは話の外にあんの
836:デフォルトの名無しさん
16/02/13 07:08:29.64 tl7vIPkr.net
なんだ、最初の奴がまだ頑張ってたのかよw
>AndroidもiOSでも動かす場合はUTF-8がデファクトスタンダード
とりあえずこれ、まともに根拠を示せてないんだけど。
837:デフォルトの名無しさん
16/02/13 07:42:00.73 6QXsiJCA.net
OSの話はスレ違い
その上で動作する組み込み言語の話をせよ
838:デフォルトの名無しさん
16/02/13 12:35:56.00 AxbgYY0v.net
何がスタンダードでもいいけど
UTF16は中途半端感が半端ないよな
839:デフォルトの名無しさん
16/02/22 21:10:17.21 6cWcowj1.net
mrubyも仲間に入れて良いですか?
840:デフォルトの名無しさん
16/02/23 00:28:29.80 liQI2ylD.net
良いと思います
841:デフォルトの名無しさん
16/02/23 10:19:51.72 kQ/gcKij.net
Luaについての質問
目的:C++で実装したクラス(lua クラス バインド でggって出てきたページを参考に作成)を
Luaでnewしてインスタンスを生成、それを更にC++で実装した
全く別の独立した静的関数にそのまま渡してその関数内でインスタンスへの変更処理を行う
実装:関数の引数にluaのソースのtestclass:new()によって生成したインスタンスを指定すると
C++側からはlua_Stateのスタック経由でユーザデータで渡ってくると仮定して実装してみた
結果:C++で実装したクラスのlua側から生成したインスタンスの稼動は正常な模様。
しかし、そのインスタンスをC++の関数で参照する際、
肝心のインスタンスを取得する際に実行しているluaL_checkudata()にてエラー発生、
エラー出力は "bad argument #-2 to 'lua側に公開しているメソッド名'( expected, got userdata"。
ステップインしてみるとlauxlib.c(309)、luaL_testudata()内のlua_rawequalの結果の判定にて
/* value is a userdata with wrong metatable */ とコメントされている箇所でNULLが返されている。
(#-1にはluaのソースでの [クラス名]:new() のコロン使用での暗黙の第一引数が
842:入っている?憶測) 備考:簡単なスタックダンプで見る限りではユーザデータしか積まれていない様に見える。(主観) 徹夜してまで追跡しても方法わからず、何か勘違いや問題点があったら教えてくらはいおながいします
843:デフォルトの名無しさん
16/02/23 12:27:23.57 UPC5owG9.net
>>831
(★ expected, got userdata
のエラーメッセージで、正確な★の値を確認してほしい。
luaL_checkudata は引数 tname の文字列で型チェックをするのだが、
luaL_newmetatable や luaL_setmetatable で登録したものと一致しているだろうか?
844:デフォルトの名無しさん
16/02/23 16:36:12.58 liQI2ylD.net
>>831
それはbinderの質問だな
binderは何を使ってるの?
その問題が再現する最小のコードを作って作者に質問すりゃいいよ
英語が苦手ならここでもいいけど解決する保証はできん
845:デフォルトの名無しさん
16/02/23 21:28:17.51 kQ/gcKij.net
レスくれたのに遅れてごめね、潰れてた
>>832
Luaでnew()したC++のクラスのインスタンスを受け取る関数で実行してるとこで
void * const pv = luaL_checkudata( pluastate, -1, "TestClass" );
にするとそのまま(hoge expected, got userdata)になっちゃった
C++のクラスのテーブル作ってるとこのlua_setglobal( pluastate, "TestClass" );と同じでもダメだし
もちろんC++側でのクラス名でも変わらず
>>833
binderはざっくり検索した範囲だと大きかったりboost必須だったり
更新してなかったりで将来に不安が残る感じで何も使ってないの、アメリカ語は㍉~
クラスのテーブル作るとこで型名を明示的に指定してやったりしないといけないのかな
きっとthisの値を生で吐き出すメソッド実装してそれを関数に渡せば何とかなるんだろうけど
そういう力技あんまし使いたくないし後々すんごく気持ち悪くなりそうな・・・
846:デフォルトの名無しさん
16/02/23 21:43:48.82 kQ/gcKij.net
連投すまぬ、>>833をヒントに検索したらlua_typename()なる関数を発見、スタックに積まれてる引数に
CString str = lua_typename( pluastate, -1 );
してみたんだけど "no value" になった、lua_type()は相変わらずユーザデータ
念の為luaのソースで引数を数値にしてC++の関数でluaL_checkinteger()に入れ替えると
正しく整数がそのまま流れてくるから位置は間違ってない可能性が高いと思ってる(憶測)
メタテーブルと言っても所詮(?)はユーザデータだし、
ユーザデータ作る時にlua_setglobal()の前後で明示的に型名を指定してあげないとダメなのかな?
847:デフォルトの名無しさん
16/02/23 21:50:32.63 UPC5owG9.net
>>834
エラーメッセージを加工しないでくれ。
luaL_checkudata( pluastate, -1, "TestClass" );
の呼び出しで
hoge expected, got userdata
の表示はありえない。hoge はどこから来たんだ?
「Luaでnew()した」だとどこが悪いのか切り分けられないから
まずは、Luaスクリプトを使わず、C APIのみで作成と取得を試してはどうか?
気になるのは lua_setglobal("TestClass") と書いていること。
luaL_checkudata の tname 引数は luaL_*metatable 系で使った
C側の内部的な文字列であり、Lua側に公開した変数名ではないぞ?
848:デフォルトの名無しさん
16/02/23 21:51:06.03 liQI2ylD.net
>>834
そうなんか。
まあ俺も使ってたbinderに不満があってオレオレbinder作っちゃったから人の事言えないけど
classや関数一つ一つスタックで操作するのはミスしやすいしお勧めしないよ。
classの登録
luaL_newmetatable(L, "TestClass");
~stackの一番上にtableが入ってるのでそれに対してメンバーの登録処理が続く。
newの中
void *storage = lua_newuserdata(L, sizeof(TestClass));
new(storage) TestClass();
luaL_setmetatable(L, "TestClass");
引数の受け取り
TestClass* ptr = static_cast<TestClass*>(luaL_checkudata( L, 1, "TestClass" )); //1個めの引数
849:デフォルトの名無しさん
16/02/23 22:01:41.19 liQI2ylD.net
>>835
メタテーブルはユーザーデータではないぞ
ユーザーデータにメタテーブルって形で普通のテーブルを設定できるだけでメタテーブル自体はtable型
ユーザーデータはテーブル参照されると、そのユーザーデータに設定されているメタテーブルを参照して
値があればそれを返す
>>836
hogeは察するにlua側の関数名だろ
850:デフォルトの名無しさん
16/02/23 22:03:44.40 liQI2ylD.net
連投すまんが
lua_typename( pluastate, -1 );
この第二引数はスタックのindexではなくlua_typeで返る値
851:デフォルトの名無しさん
16/02/23 22:50:47.99 kQ/gcKij.net
>>836
すまない、hogeからもう一度TestClassやluaTestClass、その他の定義
色々試し直してたら不一致になってしまった
LuaからC++、C++からLuaは既に成功していて、C++からC++も既に成功というか
OpenCVの亜種とFreeBSDのlibの一部をLuaに機械的な手作業でバインドしようとしてるから
その辺りの実績は問題ない・・・筈
>>837
凄いヒントをありがとう、今までnewの後にluaL_setmetatable()はしてなかった
けど単純に追加しただけじゃダメらしい、相変わらず同じメッセージが出力されて失敗する
>>838>>839
メタテーブルの認識を間違えてたんだ、それとlua_typename()の第二引数・・・
勉強し直して再確認して出直してくる
OpenCVの亜種とBSDのlibのヘッダのインクルードやらリンクやらでソース丸々アップとか難しい状態
文字でしかやりとりできない、もどかしくてごめんね、みんなありがとう
852:デフォルトの名無しさん
16/02/23 23:12:34.76 liQI2ylD.net
たぶんちゃんとメタテーブルを設定できてないんだと思うよ。
luaL_setmetatable はスタックの一番上の値に対して引数で与えた名前のメタテーブルを設定する
メタテーブルの名前はluaL_newmetatableで作った時のもの。
URLリンク(www.lua.org)
ここにstack dumpのサンプルコードがあるからそれで出力して色々なタイミングのスタックの状態を
printfデバッグすりゃいいんじゃないかな
Lua5.3以降ならluaL_newmetatableした時にそのテーブルに__nameが設定されるから
例えば上記URLのstackDumpで
case LUA_TUSERDATA:
if (luaL_getmetafield(L, i, "__name") == LUA_TSTRING)
{
printf("userdata:%s", lua_tostring(L, -1));
lua_pop(L, 1);
break;
}
ってするとユーザーデータに設定されているメタテーブルの名前も一緒に出力できる
853:デフォルトの名無しさん
16/02/23 23:30:00.22 kQ/gcKij.net
>>841
一発でわかった、ありがとう、ありがとう、そして一番のキーワードは>>837のluaL_setmetatable()
目的:C++で実装したクラス(lua クラス バインド でggって出てきたページを参考に作成)を
Luaでnewしてインスタンスを生成、それを更にC++で実装した
全く別の独立した静的関数にそのまま渡してその関数内でインスタンスへの変更処理を行う
問題:割愛
原因:Lua側でのいわゆるクラスの型情報であるグローバル変数の実体の作成時に、
クラスのテーブルの作成にもユーザデータ共通のメタテーブルの作成にもlua_newtable()を使用していた
対処:
正しく(?)は、メタテーブルの作成の際にはluaL_newmetatable()を使用するべき
憶測(言い訳?):
メタテーブルであるべきところをネットのサンプル通りに普通(?)のテーブルで実装してしまった為、
単純なC++からLua、LuaからC++のやりとりでは不都合が出なかっただけだと思われる
長文かつサンプルの提示なしの質問に長々と付き合ってくれてありがとうございました、無事解決しました
854:デフォルトの名無しさん
16/02/24 08:09:28.85 4eLJNqm5.net
おまえらすげぇな
855:デフォルトの名無しさん
16/03/08 07:25:35.42 kiMIo1Bf.net
“という名前のファイルをio.openで開こうとすると開けないのですがどうやったら開けるようになりますか?
856:デフォルトの名無しさん
16/03/08 07:37:15.49 kiMIo1Bf.net
開けました
857:デフォルトの名無しさん
16/03/20 11:05:43.19 S+FF32wm.net
スレチかもですがJavaScriptエンジンのスレがないのでお邪魔させてくだちい。
googleのJavaScriptエンジンv8をVS2015のレガシーなC++でビルドして
VS2015のC++/CLIでリンクして実行するとヒープ破壊のエラーが出て落ちます。
(デバッガでトレースが始まる前の段階で落ちているので追跡しようがありません)
v8::V8そのものへの参照を全てコメントアウトすると落ちずにmain関数に入ってきます。
何か特殊な設定か対処の類が必要なのでしょうか?
それともC++/CLIがダメ子ちゃんなのでしょうか?