1 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 15:10:32.28 .net] LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合 その5【Squirrel】 toro.2ch.net/test/read.cgi/tech/1321063450/ ■過去スレ その4 hibari.2ch.net/test/read.cgi/tech/1301414458/ その3 hibari.2ch.net/test/read.cgi/tech/1272643397/ その2 pc12.2ch.net/test/read.cgi/tech/1243210301/ その1 pc12.2ch.net/test/read.cgi/tech/1205208141/ プログラミング言語 Lua その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
855 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:25:35.42 ID:kiMIo1Bf.net] “という名前のファイルをio.openで開こうとすると開けないのですがどうやったら開けるようになりますか?
856 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:37:15.49 ID:kiMIo1Bf.net] 開けました
857 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 11:05:43.19 ID:S+FF32wm.net] スレチかもですがJavaScriptエンジンのスレがないのでお邪魔させてくだちい。 googleのJavaScriptエンジンv8をVS2015のレガシーなC++でビルドして VS2015のC++/CLIでリンクして実行するとヒープ破壊のエラーが出て落ちます。 (デバッガでトレースが始まる前の段階で落ちているので追跡しようがありません) v8::V8そのものへの参照を全てコメントアウトすると落ちずにmain関数に入ってきます。 何か特殊な設定か対処の類が必要なのでしょうか? それともC++/CLIがダメ子ちゃんなのでしょうか?
858 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 11:49:11.85 ID:Byvmq8tF.net] >>846 その組み合わせは使ったことは無いが、もしネイティブC++で問題ないなら 2種類のGCを持つ環境が競合しているんだろうな v8 の代わりに Chakra JsRT なら、MS同士だから実績があるかもしれない
859 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 22:46:48.41 ID:S+FF32wm.net] >>847 gc回りの机上でのコード追跡に挫折しました・・・ v8のコードを一切コールしなくても、v8::V8回りがリンクされるだけでダメっぽいです。 CRT回りの静的変数の初期化の時点でヒープ破壊のエラーが発生してしまうので (ソースをちょっといじるだけでエラーの種類が変わるのでここで書いても意味がないと判断) ChakraCoreをいじってみます、レスありがとうございました。
860 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 23:22:32.65 ID:Byvmq8tF.net] 自分も最新の情報は持っていないけど、今や組み込みJSも結構な数があるっぽい https://en.wikipedia.org/wiki/List_of_ECMAScript_engines WindowsオンリーならChakraで十分 速度がいるならv8だけど、巨大で複雑な部類だとは思う Duktapeやv7はLua感覚で使えそうだけど、品質や実績はよくわからない
861 名前:デフォルトの名無しさん mailto:sage [2016/03/21(月) 00:04:57.23 ID:jBN/3X9x.net] こんなにあったんだ・・・ けどv8ですらまだドキュメントやサンプルが多い方だったんですね。 (Isolateの実装で殆どがコンパイルに通らなくなった様ですが) ChakraCore一つとってみても例えば var userobj = new Userobj(); NativeGlobalFunc( userobj ); を実現する道筋の調査に一苦労、 1時間調べてもオブジェクトの作り方すらまだ確信が持てていない状態・・・ 片っ端から調べ直して出直してきます。
862 名前:デフォルトの名無しさん [2016/03/27(日) 14:51:27.25 ID:WUzBhCSW.net] luaってなんでC++系の文法真似なかったん? 吐き気がする気持ち悪い・・・ 結局教育機関が作る言語はどれも学生脳の自慰言語ばっかかよ
863 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 15:03:16.21 ID:9eGj+oKv.net] >>851 Lua 1.1 は 1994年。そのころはPascal系もまだ元気だったんだ。 自然淘汰の結果として死滅しただけで、最初から未来が見えてたわけじゃない。 今なら、LuaのVMやAPIを真似たJavaScript実装 (>>849 ) や 先行き不安なSquirrelなど、自分で組み込むなら選択肢はある。 使う側ならどうしようもないが。
864 名前:デフォルトの名無しさん [2016/03/27(日) 15:12:37.47 ID:WUzBhCSW.net] >>852 おとなしくうっすいトランスレータ書くわ
865 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 15:18:28.87 ID:Pr6yzqXD.net] C++に近いといえばgcjがある 公式のJavaよりもC++に近いが彼らが負けを認めることはないだろう 負けを認めない相手と張り合うのは時間の無駄
866 名前:デフォルトの名無しさん [2016/03/27(日) 21:30:21.55 ID:H7mb6W0C.net] mytable.test とテーブルの要素にアクセスした時に 定義されていなければ{}を返すようにメタを設定することはできますか?
867 名前:デフォルトの名無しさん [2016/03/27(日) 21:46:25.71 ID:xKhiQxW2.net] >>855 luaの話? であれば__newindexで{}返す関数を設定すればいい
868 名前:デフォルトの名無しさん [2016/03/28(月) 01:39:38.42 ID:WtaHq3/v.net] 何かうまくいかないから今度またやろう。。
869 名前:デフォルトの名無しさん [2016/03/28(月) 03:40:07.32 ID:zJAWFm4u.net] __indexじゃないかな $ lua Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > pp = require 'pl.pretty' > mytable={1, 2, 3} > pp.dump(mytable.test) nil not a table > setmetatable(mytable, {__index=function() return ({}) end}) > pp.dump(mytable.test) { }
870 名前:デフォルトの名無しさん [2016/03/28(月) 04:37:20.45 ID:OzjTEsq7.net] >>857 すまん。 >>858 せやったな。 __newindexは代入したときに無かったらや。
871 名前:デフォルトの名無しさん mailto:sage [2016/03/28(月) 12:35:11.30 ID:K6EkYblL.net] nil のメタテーブルって設定できたっけ? Safe Navigation Operator 的な動作なら、そっちのほうが良いかもしれない。
872 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 08:03:28.46 ID:MvqxUS0K.net] >>851 プログラマーではない人をターゲットにしていたからだよ。 つまり英語をある程度知ってる人なら内容を理解できるようにってこと。 パスカルを真似ったってよりも日本語ベーシックみたいなものかな。
873 名前:デフォルトの名無しさん [2016/03/30(水) 10:21:33.98 ID:PJ1J1ZJR.net] C++というかC言語は構文的には美しくないからな 普及してるからそれが普通に見えるだけで
874 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 10:50:30.01 ID:IKaSwJOV.net] Luaって ( ) と { } が無いだけで、後はほぼJavaScriptと感じたけどなぁ Swiftも { } は使うけど ( ) が無いから気持ち悪いんだろうか?
875 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 11:35:11.53 ID:mjOFe187.net] 引数と戻り値が可変長だから local i, j = f(x, ...) int i=0, j=0; のような文法をそのまま採用するのは無理
876 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 13:09:07.35 ID:MvqxUS0K.net] もし i==1 そのとき x=2 そのほか x=3 おわり うごけ x=x+1 まで x < 10 おわり
877 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 13:44:09.05 ID:UL6gISrg.net] >>862 そんなノリで「ならおまえが作れよ」でObjective Pascalやら○言語やら 色々出たし確かに文脈としてはCよりマシだったけど結局普及しなかったしな 一旦普及しちまうとIA64やらOSXやら互換性を捨てたモンが代替に成り上がるのは難しいね 過去のソースの流用だけじゃなくてコーダーの慣れとかの問題も含めて >>865 ぴゅう太だっけか 今なら[ #define もし if( ] [ #define おわり ) ]とかで凌げるのかね?
878 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 23:36:59.47 ID:/8cK4WLw.net] Squirrel 3.1 stable
879 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 01:03:50.28 ID:zQkq4gxf.net] もし 私 が イケメン なら あなた は モテる 違うなら あなた は 爆発 おわり
880 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 02:59:26.18 ID:nACjm5l+.net] >>863 {}の変わりにdo endがあるでしょう
881 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 20:47:53.62 ID:nkzU0v9F.net] >>867 1年またぎで RC1 が正式リリースになったのか うっひょーー
882 名前:デフォルトの名無しさん mailto:sage [2016/04/01(金) 06:14:44.27 ID:rWTRiDhV.net] RC1からリリースまでの間に一体何があったのか 間が空くと細かいとこ忘れがちだしちょいと心配なリリースではある
883 名前:デフォルトの名無しさん [2016/04/07(木) 01:07:47.63 ID:dZYAORAr.net] 下記のように、関数群に対して値型の変数を与えるとします。 functionA(value) functionB(value) functionC(value) この時に、値渡しでなく参照渡しにする方法はありますか? 戻り値で返してもらうとかしないと駄目でしょうか?
884 名前:デフォルトの名無しさん mailto:sage [2016/04/07(木) 01:37:09.92 ID:m5Wmq6v/.net] >>872 総合スレだから言語を明記してね Luaだとすると参照渡しはない 戻り値か、テーブルで渡して中身を書き換える 具体的な用途が決まってるなら別解もあるかも
885 名前:デフォルトの名無しさん [2016/04/07(木) 01:49:59.00 ID:dZYAORAr.net] 失礼、総合でしたか。 言語はluaです。 returnを書き忘れそうなんで、 下記みたいなゲッターセッターのクロージャ渡すことにします。 後で拡張するのも楽そうだし。 ありがとうございます。 local value function getter_setter(val) if val != nil then value = val end return value end
886 名前:デフォルトの名無しさん [2016/04/07(木) 23:57:49.14 ID:s1RKY7Zg.net] >>874 変な理由だな。returnを忘れるぐらいだったら代入とかクロージャの呼び出しを忘れる心配もしなければならなくない?
887 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 00:31:02.22 ID:NMv2dsC8.net] >>874 参照渡しの主な用途は、複数の返値か、変数の入れ替えだと思うんだが Luaだと自然な記述でどちらも書けるから必要になったことはないなぁ その例なら value = val or value みたいな書き方もできるし
888 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 09:00:43.43 ID:QHM1+lud.net] >>875 必須じゃないからreturnいらないし、呼び出し忘れたってかまわないです。 ただ、生存期間中は使いたい場合があるのです。
889 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 09:05:33.22 ID:Awm5dteq.net] そもそも基本的なところから勘違いしてるに一票
890 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 10:02:48.01 ID:NMv2dsC8.net] 他人が見たら首をかしげるようなスパゲティ・コードになってそう
891 名前:デフォルトの名無しさん [2016/04/08(金) 11:47:10.88 ID:tJM0u/og.net] >>879 もうなってるでしょ >>877 の説明読んでも何言ってるのかさっぱりわかんないし
892 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 18:15:07.93 ID:QKtAKDZQ.net] err = f() if err ~= nil then return err end これを参照渡しのように f(seterr) と書くのは合理的だと思う 人間がみんな合理的に行動すればコミュ力は重要ではないかも
893 名前:デフォルトの名無しさん [2016/04/08(金) 21:19:50.62 ID:ZsT2Hxo0.net] >>881 どう合理的なんだ? seterrのエラーチェックしてないからイコールなコードでもないしどういう利点が有るのか説明してよ。 r=assert(f()); のような書き方出来なくなるし
894 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 21:32:21.04 ID:QKtAKDZQ.net] インクルードガードのように、中に入ってから#ifndefすれば、外でしなくてもよい
895 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 22:34:01.66 ID:NMv2dsC8.net] >>883 日本語でおk JavaScript でいう Promise の reject ハンドラのような意図か? Luaは例外処理 (try-catch) が書き難いから、その手の用途なら必要性は理解できる。
896 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 01:02:16.06 ID:EFL/mBbR.net] catchした変数がすぐ消えてなくなるのが困る 何もしないで続行するのは自由だからそれでいいけど 後で念のため再度エラーチェックする自由も欲しい
897 名前:デフォルトの名無しさん [2016/04/09(土) 02:22:04.50 ID:u1ofpue+.net] 何言ってるのか俺には理解不能だわ…
898 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 07:21:19.22 ID:FoBfIIvs.net] 理解できないのはそういう場面に出くわしたことがないからかと思われ。
899 名前:デフォルトの名無しさん [2016/04/09(土) 07:34:56.67 ID:u1ofpue+.net] >>887 そうかもな、どういう場面か具体的なコードで示してくれるとありがたい 合理的なコードならありふれてるよね? あと例外は複雑になりやすいからGoとかでも例外は排除して多値でエラー返すようにしてる
900 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:25:05.90 ID:WDrzc2Wm.net] >>888 むしろLuaもGoも複数の返値を持てることがポイントだと思う。 { 本来の返値, エラー? } のペアを返すという発想で、合理的。 「例外」という別口をわざわざ用意しなくて良くなった。 ただ、All or Nothing のトランザクション等、処理事にエラー値の確認が面倒というのも想像できる。 その場合、Luaの流儀なら >>882 の assert のように、エラー値を例外ジャンプに変換する関数で包むべきなんだろうな。
901 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:38:40.76 ID:FoBfIIvs.net] 多値で返すのは当然いいのだけれども、 関数が関数テーブルに構造化されている場合、多値を返すと他の関数と戻り値の仕様がごちゃごちゃになってくるので、引数のレベルで疎結合にしておきたい。
902 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:50:59.47 ID:EFL/mBbR.net] Luaがマイナーすぎるおかげで「合理的ならありふれてる」は嘘だとわかった 嘘だとわかる場面に出くわした
903 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:01:44.19 ID:WDrzc2Wm.net] >>890 関数テーブルに構造化されていると言うなら、 引数や返値含め、全ての関数は同じ型であるべきだろう。 それぞれが違うなら、それは構造化ではなく寄せ集めだ。動的型言語に甘えてる。
904 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:19:31.93 ID:l8xjVqJC.net] 値を返す関数で失敗時に例外を飛ばすのは、それを呼ぶ側では成功時の記述しか しなくていいという理由が大きいと思うが。 タプルを返せるのはステータスを参照型の引数に返すよりは合理的だとは思うが 例外の代用になるかというとそれはちょっと違うと思う。
905 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:23:54.21 ID:WCRIlqKI.net] Windows APIみたいに GetLastError 的なものを用意した方が簡単じゃね。 いずれにせよtry-catch-fainalyは標準で欲しいな
906 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:43:40.75 ID:EFL/mBbR.net] >>893 失敗時の記述が不要というのはexitでもできる スレッドがあるならスレッドを止めてもいい なので本当の理由は、プロセスやスレッドの起動・再起動が遅すぎるからじゃないか
907 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 11:18:07.50 ID:8JT9QS2I.net] 化石並の言語体系に何を求めているのやら というかオプソなんだし気に入らないなら修正すりゃええやん 他と互換性なくていいならやりたい放題なんだし、 その修正を公開してメジャーになったとしたらバックポートしてくれるかも知れんでよ
908 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 11:28:03.33 ID:WDrzc2Wm.net] >>894 旧来の書き方がしたいならばその通りなんだが、 非同期処理が一般的になってきた昨今では、最良かどうかは分からない。 tryブロック内で処理が同期的に完了するとは限らないから。 タプル返しも、error/pcallも、rejectハンドラ渡しもできるから、現状のLuaで十分汎用性はある。 せいぜい構文糖のためにパーサを改造したくなるくらい。
909 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 12:43:02.89 ID:FoBfIIvs.net] >>892 ただのトレードオフ。 どこを重視するかは自由。
910 名前:デフォルトの名無しさん [2016/04/09(土) 13:38:58.58 ID:u1ofpue+.net] >>890 引数にしたら引数の仕様がごちゃごちゃになってくると思うんだけど。 引数を受け取るだけの関数を渡せとなるなら尚更
911 名前:デフォルトの名無しさん [2016/04/09(土) 14:08:41.76 ID:u1ofpue+.net] >>891 別にluaに限定する必要ないよ 引数で返すのが合理的に見えるコードであれば C言語みたいに返値を一つしか返せないからって理由なのは無意味だから外して欲しいけど。 >>893 何もしなかったらそのままアプリが終了するだけじゃん 個人的にはtry catchは要らないかな。Goが例外無くしたのと同じ理由で
912 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 08:27:07.88 ID:k7zVs+aP.net] >>900 確かにGo的なのでいいかもな。 ttp://www.geocities.jp/m_hiroi/golang/abcgo15.html 足りないのはdeferとrecoverかな? deferは__gcメタテーブル使えばできそうだけど標準で欲しいな。 recover はわからん。
913 名前:デフォルトの名無しさん [2016/04/11(月) 08:58:49.07 ID:WTwt1caF.net] >>901 deferのようなものは例外とは関係無いところが理由で欲しいね 途中returnでclose書くの面倒とかそういう所で gcに任せてたらいつ実行されるかわからんし recoverはpcallでいいんじゃないかな
914 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 09:29:17.60 ID:AFQC7gKw.net] try catch は大域脱出に使うから、無くすなら別途機構が欲しいやね
915 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 10:19:40.88 ID:UaC8pXHz.net] >>902 Luaのソースを読んでると スコープを抜けるタイミングでクロージャのupvalueを閉じる処理があるから その辺りを改造すると、スコープ終了時に何かする機能が追加できる気がした。
916 名前:デフォルトの名無しさん [2016/04/12(火) 00:55:24.80 ID:JDMXFvBX.net] PC版は今日発売のdarksouls3もLua使ってるのな
917 名前:デフォルトの名無しさん mailto:sage [2016/04/12(火) 01:26:42.97 ID:fKt10c2M.net] たしかクソ1の頃からLuaのクレジットあったぞ
918 名前:デフォルトの名無しさん [2016/04/13(水) 22:16:47.11 ID:PD+aqUpV.net] しかもLuaJITじゃなくて本家Luaなんだな 負荷が高いものはCやC++で書けばいいしやっぱ速度はそれ程重要じゃないのな
919 名前:デフォルトの名無しさん mailto:sage [2016/04/13(水) 22:23:51.85 ID:7YNUgm8C.net] なにかのエディタで補完を効かすことはできますか? 例えば、メッセージテーブルみたいなのをloadfileで読み込んで使いたいです。 MSG.PLEASE_INPUT_ANY_KEY
920 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 08:00:44.86 ID:PaNxRcDi.net] >>904 スコープというのはブロック単位のことだと思うんだけど 確かにブロック単位でdeferができれば便利ですな。 個人的にはdeferという単語はイマイチだけど
921 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 08:31:22.32 ID:PaNxRcDi.net] それとも goto で十分なんだろうか
922 名前:デフォルトの名無しさん [2016/04/14(木) 12:08:10.65 ID:z7Vrjvws.net] >>910 何か勘違いしてない?
923 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 17:46:31.38 ID:PaNxRcDi.net] >>911 なぜ勘違いしてると感じたの?
924 名前:デフォルトの名無しさん [2016/04/15(金) 00:30:26.65 ID:MuKGbCph.net] >>912 突然gotoが出てきたから
925 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 04:18:23.81 ID:+t9YcmSi.net] 頭で思ったことを全て言語化してないから唐突な感じになる でも思ったことをそのまま喋ったら明らかな失言や暴言や嘘も増える 脅迫や詐欺みたいな発言を連発するよりは、少し意味不明な方がマシじゃないか
926 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 07:45:58.29 ID:Hp4CXrU7.net] >>913 だってさ、たとえば ::finally:: というラベルを作って、 if エラー発生 then goto finaly end とかやればいっしょじゃね?
927 名前:デフォルトの名無しさん [2016/04/15(金) 08:24:11.24 ID:uS8f5f96.net] >>915 全然違う。それだと途中でreturn出来ないし、しないように注意しなければいけない。 コーデイング規約でreturnはfinallyラベルの後の一つだけにするって定めるつもり? それに後処理が必要になるものはそのすぐ近くにそれを書きたいもの。
928 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 08:41:49.74 ID:+t9YcmSi.net] 1. finallyに行きたくなければreturn出来る 2. 行きたくない人などいるはずがないからreturn出来ない
929 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 09:10:31.83 ID:9cTSD0EJ.net] >>915 「エラー処理をどうするか」なら良いのだけれど、話の流れは 「エラー処理を忘れないようどうするか」だったと思うんだ。 Luaに限れば、必ず後始末したい場合は pcall が必須なのがメンドイ。
930 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 09:56:06.34 ID:Hp4CXrU7.net] returnの話も、pcallの話も全て理解できるよ。 ただそういうのは織り込み済みの上で gotoで足りると中の人は考えてるのかもしれないなぁ、ということ。 これって勘違いというほどのもの?
931 名前:デフォルトの名無しさん mailto:sage [2016/04/16(土) 15:05:29.04 ID:ls9rc/e1.net] そもそもエラー復帰処理を組み込み言語側に書かせるべきなのだろうか? 例えばホスト側が「文字列を丸ごとファイルに書き出す」機能を公開すれば スクリプト側で「失敗したらファイルを閉じて削除して〜」などと考えず済む。 汎用言語なら細かい粒度のAPIのほうが小回りが利くけど 所詮組み込み言語なんだから「どのように」ではなく「何をしたい」単位で記述させたほうが良い。
932 名前:デフォルトの名無しさん [2016/05/01(日) 13:23:19.66 ID:tKi6j9CT.net] 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません 0
933 名前:デフォルトの名無しさん [2016/05/15(日) 09:01:08.96 ID:WYUaDR6g.net] luabindオリジナルは更新止まってて5.2すら使えないしfork多すぎてどれ使えばいいか解らん
934 名前:デフォルトの名無しさん mailto:sage [2016/05/15(日) 12:38:52.61 ID:llz61aSC.net] プログラマなら自分で作っちゃいなYO! 車輪の再発明?知らんな!
935 名前:デフォルトの名無しさん [2016/05/15(日) 12:41:10.00 ID:WYUaDR6g.net] >>923 それだと意味が無いんですよ
936 名前:デフォルトの名無しさん mailto:sage [2016/05/15(日) 12:42:54.01 ID:ZVMufeYJ.net] 自分の1年前のバインダ引っ張り出したら目を背けたくなるコードで 結局リファクタリングしたなんてこともあったな 効率はともかく他人のコードのリファクタリングも結構勉強になるし とりあえず無難そうなのを選んで落としてデッドコピーしてみたら?
937 名前:デフォルトの名無しさん [2016/05/15(日) 13:13:01.22 ID:WYUaDR6g.net] 色々なlua binder使ったときのベンチマーク書いててluabind使うこと自体が目的なんですよね なので、ぱっと見修正量多いから自分で修正したくないしメンテもしたくないから何処かから引っ張ってこれるのが理想なんですけど 欲を言えば5.1以降全部に対応してたらいいんですが…
938 名前:デフォルトの名無しさん [2016/05/15(日) 13:30:11.07 ID:iV9cVQst.net] kaguyaが使いやすそう
939 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 15:46:15.62 ID:WJtZW0Wv.net] autotouchで音ゲーマクロを組みたいと思ってるんですが タップからタップまでをusleepで停止させると後半になるにつれ目的の時間から遅れてしまいます もちろん処理にかかる時間をはusleepから引いています 処理を停止させる命令はusleepの他にはないでしょうか 遅れる原因が何故だか分かりますか?
940 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 16:16:50.99 ID:awF8sDTJ.net] >>928 とりあえず >>716 に似たような質問があるな。 「目的の時間」と「処理にかかる時間はusleepから引いて」あたりを 詳しく説明してもらわないとコメントのしようがないと思う。 現状の処理が適切かわからないし、むしろ音ゲー側の時間がずれている恐れも。 [] [ここ壊れてます]
942 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 16:37:01.75 ID:WJtZW0Wv.net] >>929 過去にあったんですね、遡ってみます os.clockでタップ処理にかかる時間を計ってusleepの停止時間からマイナスしてます
943 名前:デフォルトの名無しさん [2016/05/17(火) 17:11:06.80 ID:aW8j1xwW.net] >>930 前にも書いたけどos.clockは実際の経過時間ではなくプログラムが使ったCPUの時間を返す sleepとかで待ってる間は増えないし、例えばそのプログラムで二つのコアが100%使われてる場合は実時間の二倍増える Cのclock関数で実装されていて、それはLinuxだとclock_gettimeのCLOCK_PROCESS_CPUTIME_IDの返す値が使われてる。
944 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 17:24:24.06 ID:WJtZW0Wv.net] >>931 タップ処理ににかかる時間を計るのに使ってます 問題の待機時間には使ってないです コアが2つ使われてたら2倍っていうのは気になりますが前半は目的のタイミングでタップされているので問題ないですかね…
945 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 17:54:24.20 ID:awF8sDTJ.net] >>932 タップ処理にかかった実時間とCPU時間が等しい保証が無いという意味。 君が欲しいのは「実時間」だが、os.clockは「CPU時間」だから加減算できない。 身長と体重の値を足すようなもの。 (Luaからデフォルトで使える) 標準Cだけだと1秒より良い精度は無理と言われてる。 stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c | There is no ANSI C function that provides better than 1 second time resolution autotouch APIに高精度タイマーは用意されてないかな? Lua から clock_gettime 等を呼ぶモジュールを加えるのも難しいか? なお、Windowsのclockは(あえて)実時間を返すようだ。誤解が多い原因かもしれない。 https://msdn.microsoft.com/library/4e2ess30.aspx | The elapsed wall-clock time since the start of the process | Note that this is not strictly conformant with ISO C99
946 名前:デフォルトの名無しさん [2016/05/17(火) 20:04:41.45 ID:aW8j1xwW.net] >>933 補足サンキュー しかしCPU時間返されてもベンチマークぐらいしか使い道ないよね。 でも文句はそれしか用意してない標準Cに言うんだ。Luaは高い移植性のために標準Cから外れる物は極力実装しないんだ
947 名前:デフォルトの名無しさん mailto:sage [2016/05/18
] [ここ壊れてます]
948 名前:(水) 08:00:35.07 ID:6L3zAH6b.net mailto: そもそもCPUがきっちりTSS(スレッドってかタスク)への突入から離脱までに使った時間を コア毎に記録する機能でも積んでなきゃ、 目安になりそうな計測をして加算し続けるくらいしか現実的な手段ないからね マルチメディアタイマ動かすスレッドを裏側に置いてポーリングするか 別のコンテキストでタイマのタイムアウト毎にスクリプト起動するとかしかないんじゃないかな (メインのスレッドと同じコンテキストで実行しちゃダメだよ) [] [ここ壊れてます]
949 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 09:46:49.35 ID:k2SHVqf6.net] clockってプロセッサ使用時間で課金していた時代の名残じゃねーの? 名前に騙されて、古代の課金処理を現代のプログラムで使うからおかしくなるんだよ
950 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 15:47:48.90 ID:bch1M3Ro.net] 返事が遅れてしまいすみません 皆さんありがとうございます autotouchのAPIになさそうです autotouchでclock_gettime使ってみます
951 名前:デフォルトの名無しさん mailto:sage [2016/05/25(水) 01:28:46.05 ID:PQF3VaRV.net] この業界に限り車輪の再発明はさほど問題でない あーだこーだ探したり高いライセンスを払うより 1から自分で作ったほうが速い場合も多々ある
952 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 10:31:37.40 ID:lpov0tDn.net] メモリが潤沢な環境でのゲーム向けに0から作れば 組み込みを意識してVM自体をなるべくROMにおいやったり 定数になるべくデータを追いやったりしてRAMやスタックの消費量抑えたりみたいな細工をする事無く 素直でわかりやすく、高速なコード書き放題だもんな
953 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 10:49:26.89 ID:LqK2D4Ix.net] 自分で作ったほうが速い場合は少ないだろうが 自分で作ったほうが早い場合はありそうだな
954 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 18:41:47.35 ID:iZpcR2mh.net] ハード面も自分でカスタマイズできるのが最善だけど なかなかそうはいかないよね
955 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 22:46:21.63 ID:kkdzC4Pz.net] FPGAがCPUみたいにソケット化して1個単位で買えるようになったらいいなぁ
956 名前:デフォルトの名無しさん [2016/05/27(金) 03:25:00.38 ID:fvoGjXwU.net] スレ間違えてない?
957 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 20:56:31.07 ID:J6Jy3eBO.net] mrubyの事はココでおk? gr-sakura2ボードが新たに発売されたんでmrubyやろうと思ったら、ライブラリとかv2なっててどうしようかと。 mruby入りスケッチビルド通ったんで焼いてもだんまりだわ。デバッグする方法あるのかな(汗
958 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 22:16:27.31 ID:ItE+il1R.net] mrubyはここでもいいと思うが gr-sakuraは別の意味の組み込みじゃなかろうか
959 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:17:30.66 ID:Cceun6yB.net] Lua 5.3.3 released Luaのメンテナンス・ポリシーだと最新版しかバグ修正されないのね 最近見つかった昔からあるバグでも5.3しか修正版が出ない diff形式で公開されているから自分でどうにかしろってことか
960 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 15:13:34.60 ID:1jTwDXeQ.net] どこかのOSみたく互換性無視ってわけじゃないし
961 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 10:50:09.10 ID:8vn3zKAG.net] グローバル関数ではなく、メンバー関数をc#から呼ぶにはどうしたらいいでしょうか? function Hoge return{ Foo=function end }; end みたいなクラスです
962 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 10:50:57.07 ID:8vn3zKAG.net] NLuaを使っています
963 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 17:55:08.38 ID:XziS+43H.net] 使ってないからよくしらんけど var foo = ... foo["Foo"](); とかでいけるんじゃない?
964 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:00:29.69 ID:8vn3zKAG.net] >>950 キャストしてCall呼び出したらいけました
965 名前:デフォルトの名無しさん mailto:sage [2016/07/16(土) 14:37:12.17 ID:ClCwwHut.net] CRuby使いだがインタプリタごと配布するにはでかすぎるのでLua5.3.3とmruby1.2.0を試してみた ひとまずデバッグ用にバイナリ文字列をHexダンプするコードを書いてみる Lua5.3.3(UPX圧縮後で250,064 Byte) path = "C:/Windows/system32/calc.exe" f = io.open(path, "rb") f:seek("set", 0) b = f:read(512) f:close() io.write("\"" .. path .. "\" / " .. string.len(b).."Byte Dump...\n") i = 1 l = "" repeat w = string.sub(b, i, i + 15) for c in string.gmatch(w, ".") do l = l .. string.format("%02X ", string.unpack("B", c)) end l = l .. string.rep(" ", 3 * (16 - string.len(w))) l = l .. " " l = l .. string.gsub(w, "[^\x20-\x7e]", ".") l = l .. "\n" i = i + 16 until string.len(b) + 16 < i io.write(l)
966 名前:デフォルトの名無しさん mailto:sage [2016/07/16(土) 14:41:48.88 ID:ClCwwHut.net] ・・・mrubyの方が403で張れないんだけどw
967 名前:デフォルトの名無しさん [2016/07/19(火) 21:09:20.86 ID:5Ru68Qww.net] require("hoge"); func=function()end; と hoge={ func=function()end }; の違いって何ですか?
968 名前:デフォルトの名無しさん [2016/07/19(火) 22:10:30.90 ID:Uci7C8fw.net] 言語が書かれてないけどLuaということにして話を進めると 上 hogeというモジュールを読み込む funcというグローバル変数に何もしない関数を代入する 下 funcという何もしない関数をもつテーブルを作成しhogeというグローバル変数に代入する
969 名前:デフォルトの名無しさん [2016/07/19(火) 22:35:55.44 ID:5Ru68Qww.net] つまりモジュールが読み込まれると、 func=function()end; hoge={func=func}; をするって事?
970 名前:デフォルトの名無しさん [2016/07/19(火) 22:51:15.91 ID:Uci7C8fw.net] require(’module_name’)としたとき何を行うかはその読み込んだモジュールしだい 最近のものはグローバル環境を汚すのを嫌って勝手に代入せずテーブルを返すのが推奨されているから module=require(’modname’) って書く
971 名前:デフォルトの名無しさん [2016/07/19(火) 22:54:48.00 ID:5Ru68Qww.net] >>957 何となく分かった気がする ありがとう
972 名前:デフォルトの名無しさん [2016/08/02(火) 15:28:41.79 ID:vpqNpIG1.net] 継承って local self=BaseClass.new(); self.hoge=0; return setmetatable( self, { __index = Class } ); でいいんでしょうか? 色々な方法が書いてあってどれをすればいいか分かりません
973 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:42:21.39 ID:rXn2IC8I.net] >>959 色々な方法があるから、使うフレームワークが推奨する方式に従うべき 特にそういう縛りがなければ自分で考えてみてもいいが 汎用性が高いのはJavaScriptと同じ方式だとは思う
974 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:00:37.77 ID:qJ2YHFft.net] その色々な方法ごとに新しい言語を作るのが普通 一つの言語で色々やってるのは珍しいが効率は良い
975 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 08:06:53.16 ID:8fjgpLNn.net] 効率は悪いだろう? 開発者間で連携もしづらい まぁLuaだと組み込み環境ごとに全く別の言語だと思ったほうが良いんだろうけど
976 名前:デフォルトの名無しさん [2016/08/04(木) 09:23:50.33 ID:Mm46IUtm.net] https://www.lua.org/pil/16.2.html 本家に書いてあるやん
977 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 20:01:15.52 ID:aMt1KCpE.net] >>963 お手本を作ってクローンさせる方式だね 一般的なクラスとインスタンス方式にこだわりがなければLuaらしいやり方だ
978 名前:デフォルトの名無しさん [2016/08/05(金) 22:47:51.66 ID:K6ts8EaK.net] 継承のやり方は分かりました ありがとうございます もう一つあるんですが、動的に引数を指定したり複数の戻り値を返したりすることは出来ますか? hoge(1,2,3)と通常は呼び出す物をhoge({1,2,3})と呼び出したり、 return 1,2,3; を return {1,2,3} のように配列を使って動的に指定したいです
979 名前:デフォルトの名無しさん [2016/08/05(金) 23:10:53.81 ID:K6ts8EaK.net] unpackで出来ました すみません
980 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 15:28:57.81 ID:BDiBxktH.net] luaL_requiref(L, ...) の次にlua_pop(L, 1) を入れるのはなぜですか?
981 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 17:19:18.70 ID:LCNVy+4G.net] >>967 luaL_requirefはロードしたモジュールをスタックに残すから それをスタックから取り除いている LuaのC APIはスタックを意識する必要がある マニュアルにある [-0, +1, e] のような箇所で説明されている
982 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 07:51:02.13 ID:O603KyWm.net] >>968 ありがとうございます。 スタックから取り除いても大丈夫(モジュールは使える)ということなのでしょうか? もしそうならスタックに積まれるのはなぜなのですか?
983 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:07:28.83 ID:A/8rNEYu.net] >>969 Luaの疑似コードだと local m = require("module") m = nil のような動作だと考えてくれ。 moduleが何かを返すタイプならスタックに積まれた m を使うことになるだろうし グローバル変数を追加するタイプなら取り除いても(グローバル経由で)使えるだろう。
984 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:22:57.78 ID:9ixLGi86.net] >>970 よく分かりました。ありがとうございました。
985 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 18:19:09.71 ID:GHpvw+VU.net] 少しスレタイとは離れるかもしれないんだけど、開発環境について教えて欲しい 今まではメモ帳(付属のじゃないよ)だけで一つか複数のファイル開いてシコシコ書いてたんだけど、 数百から千くらいのファイル群のゲームの解析というか関数なんかの検索に、メモ帳では太刀打ちできなくて困ってます 出来たら沢山開けるメモ帳的な簡易的な物が良いんだけど、OSにインスコして、関連付けもしてくれちゃって・・・っていうのはむしろ要らない、アーカイブ展開したらすぐ使えるのがいいです よろしくお願いします。
986 名前:デフォルトの名無しさん [2016/09/08(木) 18:46:36.03 ID:2gFs3OWY.net] VSCodeおすすめ OS非依存だからwin以外でも使える
987 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 19:45:27.86 ID:oP5NpzJh.net] Atom.io
988 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 21:07:48.97 ID:GHpvw+VU.net] 即レスありがとうございます。試してみます
989 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 21:43:20.24 ID:++lP9HIx.net] Luaで書かれたPHPインタプリタってないかな
990 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 00:03:26.44 ID:mCfQwN8m.net] なんでそんな無駄なことするの
991 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 01:31:15.83 ID:1lwBEIiL.net] >>977 FlashAirでPHPを実行できないかなーとか考えた
992 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 06:33:19.86 ID:URrhv4S0.net] ライブラリの比重が大きな言語に対して構文解釈だけができても嬉しくない
993 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 09:08:02.15 ID:CKZv9HiE.net] あってもFlashAirは内部メモリが小さいから無理っぽい
994 名前:デフォルトの名無しさん [2016/09/10(土) 10:14:04.84 ID:32Nzsdc+.net] FlashAirってLua動かせるのかよ
995 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:14:30.12 ID:1lwBEIiL.net] >>980 そうか、残念 >>981 最新モデルのW-03のみだけどLuaインタプリタを内蔵している FlashAir Developers - APIガイド - Lua機能 ttps://flashair-developers.com/ja/documents/api/lua/ FlashAirのプログラミングにも使えるしCGIとしても使える
996 名前:デフォルトの名無しさん [2016/09/10(土) 13:27:13.60 ID:32Nzsdc+.net] >>982 ただのPCに転送できるSDカードと思ってたわ よくあのサイズで内臓出来たな…技術凄い
997 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:51:44.5
] [ここ壊れてます]
998 名前:9 ID:1lwBEIiL.net mailto: >>983 興味があるなら>>982 のWebサイトのドキュメント→本の中にあるFlashAir Doujinshi 2を読んでみると良いよ 電子工作メイン(FlashAirのプログラミング)だけど裏話の他Luaによるプログラミング例がいくつか載っている [] [ここ壊れてます]
999 名前:デフォルトの名無しさん [2016/09/10(土) 14:08:02.65 ID:32Nzsdc+.net] コルーチン使えないのか ゲームじゃないからなくてもいいだろうけど
1000 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 21:52:55.71 ID:URrhv4S0.net] Luaのコルーチンってそんなにメモリ喰うイメージないけどな 変数空間を共有してるから増分はコールスタック程度しかないはずだが
1001 名前:デフォルトの名無しさん [2016/09/10(土) 22:08:42.97 ID:IwLF9FUl.net] C#の場合はコンパイル時に普通のクラスになるけどLuaはコルーチンをVMが対応しているん?
1002 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 22:55:58.05 ID:URrhv4S0.net] C#とは違うね。Lua VMはコルーチンを動かす処理そのものだから メインスレッド = グローバル変数テーブル + コルーチン でできてる
1003 名前:デフォルトの名無しさん [2016/09/10(土) 23:32:04.82 ID:IwLF9FUl.net] >>988 糖衣構文ではなかったのか 何故かコルーチン関係がキーワードじゃなくてメソッドだし
1004 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 23:56:31.17 ID:8JrnwUlq.net] LuaでOO的なコーディングをする場合にメソッド内でローカル変数って使えないんですかね? >type test.lua CLASS = { new = function() x = 0 return setmetatable({}, {__index = CLASS}) end, func1 = function() print(x) end } obj = CLASS.new() obj.func1() この場合のxはインスタンス変数ですよね? >luajit test.lua 0
1005 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 07:08:55.54 ID:8q78VamI.net] >>990 その書き方だとグローバル変数の x を見にいってる Luaはselfを省略できないから { ..., func1 = function(self) print(self.x) end } にするか、もしくは { } の外で : を使う function CLASS:func1() print(self.x) end ところで次スレも同じタイトルでいいの? LuaはともかくSquirrelは今や…
1006 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 18:50:26.73 ID:eYdYUvGQ.net] じゃあmrubyで
1007 名前:987 mailto:sage [2016/09/22(木) 03:54:45.83 ID:Ru9TIBDm.net] >>991 Luaのデフォルトのスコープはグローバルなんか・・・ というかこの統一性がない仕様はすっきりしないなぁ string.to_number_ulong = function(self) ←これは意図したとおりに使える 〜 end number.to_binary_ulong = function(self) ←これはnumberが無いと怒られて動かない 〜 end 5.1だとビット演算がないからこのような変換も手間だし
1008 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 06:26:50.65 ID:t8yALPnl.net] >>993 その例から「意図」が読み取れないから何とも言えない 統一性がない仕様もなにも、自分で定義している関数に不満を漏らす意味がわからない >>990 も CLASS = { ... } はあくまで連想配列の定義だから 連想配列要素の定義中に兄弟要素の変数を参照しないのは言語に限らず当たり前だぞ
1009 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 13:55:49.27 ID:62PEa5hX.net] 5.1はdoubleとintを使い分けるよりintを捨てた方が統一性があると判断したんだな だからビット演算がない 同様に、連想配列とオブジェクトを統一するためオブジェクトを捨てる でも連想配列とdoubleのどっちかを捨てるのは無理だからそこは統一性がない
1010 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:25:23.06 ID:t8yALPnl.net] 意味がわからん ビット演算は5.3で採用されたし、doubleとintはスクリプトからは意識されない 連想配列と統一するために捨てたオブジェクトとは何のことだ? 連想配列とdoubleの統一性のなさとは何だ?メタテーブルがあり演算子の定義もできるのに
1011 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:41:12.52 ID:62PEa5hX.net] ほんとオブジェクトって何のことだろうね 意味がわからんから捨てる
1012 名前:987 mailto:sage [2016/09/22(木) 14:44:50.84 ID:Ru9TIBDm.net] >>994 判りにくくてスマン。
1013 名前:number.to_binary_ulongは定義自体が出来ないです >type test.lua string.to_number_ulong = function(self) --←これは定義できる --(略)4バイトの文字列をunsigned longに変換するコード end number.to_binary_ulong = function(self) --←これは定義できない --(略)unsigned longを4バイトの文字列に変換するコード end s = "\226\167\100\53" print(s:to_number_ulong()) --バイナリ文字列を数字に変換(意図した動作) n = 895789026 print(n:to_binary_ulong()) --こんな感じで使いたい。数字をバイナリ文字列に変換 >luajit test.lua luajit: test.lua:4: attempt to index global 'number' (a nil value) stack traceback: test02.lua:4: in main chunk [C]: at 0x004020e0 リファレンスマニュアルがショボいためにググってばっかりで捗らん・・・ [] [ここ壊れてます]
1014 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:27:10.87 ID:62PEa5hX.net] 歴史的に、演算子といえばnumberの演算子しかなかった 昔の言語にはstringの演算子がなかったからstringには関数が必要 numberにはあまり必要なかった その影響で string.* という関数は色々あるが number.* は一個もない
1015 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:31:44.15 ID:t8yALPnl.net] >>998 ああそういう意味か "string" は文字列型のメタ __index にも登録してあるから、それでいける | The string library ... also sets a metatable for strings ... "number" は初期設定では存在しないが、自分で定義して lua_setmetatable (in C) なり debug.setmetatable (in Lua) で 数値型のメタ __index として登録すれば、やりたかった動作になるだろう このあたりは伝統的にnumberのメソッドよりも、mathモジュールやstring.formatで賄うことが多かったから仕方ない ホスト側の作成者の美的センスで適当に改造すべき箇所なんだろうな
1016 名前:987 mailto:sage [2016/09/22(木) 16:31:47.44 ID:Ru9TIBDm.net] >>1000 ありがとう。リファレンスマニュアルにも使用例がないので 試行錯誤してこんな感じになった。まぁ動けばいいか >type test.lua number = {} debug.setmetatable(0, {__index = number}) number.to_binary_ulong = function(self) --(略)unsigned longを4バイトの文字列に変換するコード end n = 1684234849 print(n:to_binary_ulong()) >luajit test.lua abcd
1017 名前:987 mailto:sage [2016/09/22(木) 18:13:01.03 ID:Ru9TIBDm.net] >>996 の >メタテーブルがあり演算子の定義もできる を見て思うところがあったのでリファレンスマニュアルを見たけど__addくらいしか書いていなくて何を定義できるのか判らない ググってみるとメタテーブルチュートリアル的なのが出てくるけど[]とか[]=とかの定義は出来ないっぽい? これを定義できると配列みたいな動作をするオブジェクトの使い勝手が良くなるんだけどな
1018 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 18:24:14.43 ID:t8yALPnl.net] 新スレ echo.2ch.net/test/read.cgi/tech/1474536226/l50
1019 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています