【Lua】組み込み系言語総合 その2【Squirrel】
at TECH
[前50を表示]
700:デフォルトの名無しさん
09/12/17 11:05:57
>>696
記述自体はそれであってるけど、sq_setreleasehook するのは sq_setinstanceup が成功したのを確認した後でしょう。
終了時あぼんは、そりゃどっかプログラムが悪いんだろうとしか言えない。
その b->getGraphics() でとった Graphics が勝手に独自に解放されて大丈夫な構造で作られて
ないのなら setreleasehook してはダメ、って、&つけてるってことはメンバ変数か。それはダメかも
C++で管理を単純化するために、親が責任もって解放してるので、子オブジェクトは
ポインタ参照したあともそのまま放置したのでOK、という書き方は実際よくあって、
そういったものをsquirrel に移すときは、子オブジェクトにポインタ渡してオブジェクトとして
作るけど sq_setreleasehook はしないという書き方にする必要がもちろんある。
親が先に死んだ状態で子をさわるとポインタ腐ってるのでクラッシュするけど
それはそういうもの。squirrel は機構は提供してくれるけど、自動で判断してくれるわけでは
ないから、あくまで C++ 的に破綻しないように注意して書く必要がある。
そういうのいやならオブジェクトを全体的にリファレンスカウント
方式とかで管理するようにするしかない。
そして循環参照トラップにはまるw
701:デフォルトの名無しさん
09/12/17 11:44:13
循環参照嫌うなら弱参照系ないしはGCの実装が必要
もっとも、squirrel 自体がリファレンスカウントもGCも弱参照ももってるから、
既存ライブラリを持ってくるのではなく最初から書くのなら、C++ 側を
squirrelの機構にべったりのっかるように書くという考え方もある。
個別のオブジェクトはごく単純にバインドするようにして、C++ 側でオブジェクトの親子構造を持つ場合は、
C++そのもののポインタではなく、squirrel のオブジェクトを一旦作ってそれを HSQOBJECT で持つようにする。
さらには、配列や辞書が必要なら、STL とかを使うのではなく、squirrel の array / dictionary を使う。
C++ 側で元のオブジェクトを参照する場合にも squirrel の機構を経由する必要があるので一手間増えるけど、
squirrel に値を返す時は持ってる HSQOBJECT を sq_pushobject するだけになるからとても簡単になるし、
オブジェクトの寿命管理も squirrel 側になるから、いつ誰が破棄しても安心
702:デフォルトの名無しさん
09/12/17 14:23:49
>>700
あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。
なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。
(ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・)
あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。
ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便
703:デフォルトの名無しさん
09/12/18 15:54:55
xtalの新verが出てる。
デバッガー早くできるといいな。
704:デフォルトの名無しさん
09/12/18 16:06:30
Squirrelの演算子一覧に => ってあって
え!? と思ったら単なるtypoだった・・・
705:デフォルトの名無しさん
09/12/18 16:07:52
ぅあ
706:デフォルトの名無しさん
09/12/18 19:09:29
squirrelで
{};hoge
をコンパイラが受け付けないのには何か理由があるの?
疑似BNF見る限り許容されそうなものだけど
ワンライナーだとついテーブルコンストラクタに ; 付けてしまう
707:デフォルトの名無しさん
09/12/19 13:49:00
nscryptみたいな軽量な物で小数点も扱えるのあればなぁ
luaとかは無駄な部分が多すぎて
708:デフォルトの名無しさん
09/12/19 14:00:18
他の部分がNスクで十分なら、多分Nスク作者に要望を投げてみるのが、
その要望の解決にはいちばんいいと思う。
709:デフォルトの名無しさん
09/12/19 14:17:21
>>708
出来るならそうしたいけど
nScript作者はここ最近活動休止中みたいで
そのスクリプトも含め更新と言う物が一切されてないから期待出来ない
だから自分で実装しようとしてるけど
元々Cのみで書かれてないから移植作業がまず大変
710:デフォルトの名無しさん
09/12/19 14:40:00
はてな日記見てみたけど、なんか次世代エンジンに注力してるみたいね。
そのへん追いついてなかった。
711:デフォルトの名無しさん
09/12/19 14:46:52
あ、あと、どう使うつもりか知りませんがライセンス大丈夫ですよね?
Nスクのライセンスは全く見ずに言いますが。
712:デフォルトの名無しさん
09/12/19 14:47:50
>>711
個人利用のみだから問題ないはず、と思う
713:デフォルトの名無しさん
09/12/19 14:48:14
nScriptってWWWCの作者のだよな?
NScripterと話がごっちゃになってね?
714:デフォルトの名無しさん
09/12/19 14:51:05
突っ込もうと思ったら怒涛の勢いでレスが・・・
確かに混同してるな
715:デフォルトの名無しさん
09/12/19 14:53:30
>>713
このことです
URLリンク(www.nakka.com)
716:デフォルトの名無しさん
09/12/19 14:55:29
あれ、ソースみてるけどフルCでね?
windows.hに依存してるのはあるかもしれんが
717:デフォルトの名無しさん
09/12/19 15:02:33
パイソンとかルビーをゲームに使ってる人はいますか?
718:デフォルトの名無しさん
09/12/19 15:07:10
>>716
フルCに見えるけど一部Winの機能使ってて
手直し必須だと思う
719:デフォルトの名無しさん
09/12/19 15:37:08
スクリプト実行する根っこの部分でWinの機能つかってるから
一部と言うより根本的な修正が必要だなこれ
720:デフォルトの名無しさん
09/12/19 17:09:35
ところでお前ら、この手のスクリプトエンジンに手直し入れる場合、どのぐらいまで手を入れますか?
基本命令や文法とかまで変えたりする?
721:デフォルトの名無しさん
09/12/19 17:10:05
>>717
ノシ IronPython使用中。
1週間ほどあればスクリプト部分はcPythonにも移植出来るかな。
特に問題ないよ。
スクリプト内でマルチスレッド化が普通にできるのが強みだな。
722:デフォルトの名無しさん
09/12/19 17:58:46
>>720
本家バージョンアップの度にパッチ当てるの面倒だから基本的にそのまま
作業を楽にする目的で文法いじるとしたらプリプロセッサとかトランスレータを間にいれるかな
文法変えずに必要な機能が実現できないなら言語の選択に問題があるかと
ライブラリレベルならアーカイブが透過的に扱えるようIOを自作のに差し替えてる
723:デフォルトの名無しさん
09/12/20 02:05:39
誰か>>715のnScriptをCのみで動かせるように
手直ししてくれる人いません?
メモリ管理や足りない型の再定義とかはなんとかなるけど
マルチスレッド処理には詳しくないから
同期処理とある部分の代用関数が分からない
724:デフォルトの名無しさん
09/12/20 02:28:47
そもそもCにスレッドなんて無いような
725:デフォルトの名無しさん
09/12/20 04:55:19
TCP使えるネットワークライブラリでC汎用なのも無いきが
726:デフォルトの名無しさん
09/12/20 14:10:06
luaはどうも記述が冗長になる・・。
if ~ then ~ endとか。
「関数先頭でリソース割り当て。割り当て成功してたら
終わりで開放。」見たいなコード書くとフラグ使って
最後でif文みたいな感じになるけど、
C#のIDisposable見たいな機能があると便利かと。
割り当て・開放のコードが集約できるから見やすそう。
727:デフォルトの名無しさん
09/12/20 16:26:27
Cでそういうの書けばいいねん
728:デフォルトの名無しさん
09/12/20 17:54:01
・テーブルに関数をpushする
・テーブルが空になるまで関数をpopして呼び出す
の2つを簡単に出来るようなライブラリを作ればいいと思う
729:デフォルトの名無しさん
09/12/20 17:55:48
>>728
で、それが種々のbinderになるわけですが何か。
730:726
09/12/20 18:18:19
きっと欲しいのはこんな感じ
do
local resource=...
finaly
finnalize(resource)
end
:
:
end -- ここでfinalyの内容が自動で呼ばれる。
自動で呼ばれるとなると言語サポートは必須かと。
metaluaあたりで作れるかな?
731:デフォルトの名無しさん
09/12/20 18:25:56
何のためにGCがあると思ってるんだろうか
732:726
09/12/20 18:28:56
javaのGCじゃリソース管理できないから
C#はIDisposable入れたんじゃないの?
733:デフォルトの名無しさん
09/12/20 18:33:54
>>732
違うよ。
本来的にアンマネージドなリソースの管理はGCじゃなくてプログラマの責任だから、
プログラマが明示的にDispose()かける仕組みになってるんだよ。
734:726
09/12/20 18:44:32
え?
C#はかじった程度しかしらんのでうそ言ってるかもしれんが、
usingとIDisposabeなクラス組み合わせると
リソース開放漏れが(ファイルのクローズとか)が防げますよー
って使い方するんじゃないの?(C++のRAIIみたいな)
735:デフォルトの名無しさん
09/12/20 18:46:57
これでどうだ
call_with_finally = function (block)
local t, n = {}, 0
block(function (f)
n = n + 1
t[n] = f
end)
for i = n, 1, -1 do t[i]() end
end
call_with_finally(function (finally)
local resource = ...
finally(function ()
finalize(resource)
end)
:
:
end)
736:726
09/12/20 18:57:38
>>735
よく思いつきますな。理解するのに
上下のブロックを10回ぐらい往復しましたよ・・・。
ただ、複雑になったらそのコードを一年後理解しなす
自身がないかも。
ついでにmetaluaでよろしく ノシ (冗
737:デフォルトの名無しさん
09/12/20 19:04:56
>>734
IDisposableを継承したクラスはusing構文で使うことが推奨されているわけだが、
当然この構文が使えない使い方があるわけで。
(using構文を使うと実用上スタックに載せているのと同じなわけで、ヒープに置きたい場合だってあるだろう、という話)
で、ユーザーが手で作ってホールドしているIDisposableなインスタンスは当然自分で明示的に破棄しないといけない。
738:デフォルトの名無しさん
09/12/21 03:50:01
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript 2.18.0!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
739:デフォルトの名無しさん
09/12/21 15:13:06
AngelScriptが2.18.0になってるな
740:デフォルトの名無しさん
09/12/21 15:16:21
ASの本だれか書いてくれ
741:デフォルトの名無しさん
09/12/21 15:39:12
ActionScriptなら
742:デフォルトの名無しさん
09/12/21 16:54:21
仮想マシンをいくつもopenするのって良くないですか?
743:デフォルトの名無しさん
09/12/21 17:13:43
同時に動かす必要が無いなら良くないんじゃない
744:デフォルトの名無しさん
09/12/21 19:21:29
良くないですね
745:デフォルトの名無しさん
09/12/21 21:23:01
>>740
まずは2.18.0のShiftJIS対応版だ…
746:デフォルトの名無しさん
09/12/22 00:10:03
sjis対応なんて激変してない限りいつも同じ手順だろうに
747:デフォルトの名無しさん
09/12/22 00:38:06
AngelScriptはこまめに更新されるから、結構手間なのよ。
748:デフォルトの名無しさん
09/12/22 07:10:33
ShiftJIS<->UTF-8の変換を間に挟むだけなんだから、
一度書いたら別に毎度手間がかかる訳じゃないだろ。
749:デフォルトの名無しさん
09/12/22 07:53:25
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
750:デフォルトの名無しさん
09/12/22 09:25:42
>>748
AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、
そこを毎回毎回直さなきゃならないんだ。
公式に知らせたほうがいいとは思うが英語が苦手でね…
751:デフォルトの名無しさん
09/12/22 10:12:37
とりあえずdiff 取って投げれないの?
752:デフォルトの名無しさん
09/12/22 10:37:03
>>735
こういうの、JavaScriptとかRubyとかやってると思いつくよなw
753:デフォルトの名無しさん
09/12/22 10:38:18
毎回なおすってまさか手でなおしてるんじゃ・・・
バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
754:デフォルトの名無しさん
09/12/22 11:34:26
>>751
自分がいじったファイルをリポジトリにコミットって事?
>>753
まさかの毎回手直し。
あと、
>バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事?
質問ばかりですまん。
755:デフォルトの名無しさん
09/12/22 12:01:22
>>754
公式は svn かな。それなら
1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る
2. 自分の更新はそこに任意にコミットする
3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する
これでおおむね安全に手元作業できるはず
svn は以前は外部レポジトリからのマージができなかったので、
手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった
あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。
svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。
この場合、自分の変更分はローカルコミットとして維持する形になる
756:デフォルトの名無しさん
09/12/22 12:26:40
>>755
詳しい説明d。
ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、
>手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
というやり方になりそう。
ちょっと試してくる。
757:デフォルトの名無しさん
09/12/22 12:38:19
>>756
WIPってなにかと思ったら work in progress か。
まあ、そりゃ svn ってのはそういうものだから^^;
えーと、任意のリリースバージョンならタグうたれてるみたいだから
URLリンク(angelscript.svn.sourceforge.net)
からとれるかと。
バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい
758:デフォルトの名無しさん
09/12/22 16:40:58
そもそも
英語が苦手とか駄々こねてんじゃねえよクソが
死ねばいいのに
759:デフォルトの名無しさん
09/12/22 17:24:49
ごめん誤爆してた
760:デフォルトの名無しさん
09/12/22 17:30:59
>>759
ということにしたいんですね
761:デフォルトの名無しさん
09/12/22 17:34:46
メインラインにマージしてもらえば今後そのケースで悩む必要は無いというのに
英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな
英語が出来ずともパッチ送るだけで十分なのに
762:デフォルトの名無しさん
09/12/22 17:39:17
そういうのはそう思う人がやればよろし。おしつけはおーぷんそーすの精神に反するのでいくない
763:762
09/12/22 17:39:53
ごめん誤爆した
764:762
09/12/22 19:33:50
>>763
人を騙るな。まじ気にしなくていいよ>パッチ送るとか
765:762
09/12/22 19:38:59
お前こそ誰だよ
766:762
09/12/22 20:51:42
何で俺こんなにいるん?
767:762
09/12/22 23:13:59
>>762の人気に嫉妬
768:デフォルトの名無しさん
09/12/22 23:16:08
4800円もするpython入門書が古い版でしかもC組み込みについて全然触れてなかったでござる
769:デフォルトの名無しさん
09/12/22 23:33:42
何も文章書かずにパッチだけいきなり送るとか、どんだけ失礼なんだよ。
770:デフォルトの名無しさん
09/12/23 02:41:15
お歳暮だって何も文章書かずにいきなり送りつけてくるだろ。
771:デフォルトの名無しさん
09/12/23 02:58:59
最近お歳暮という日本の習慣を覚えたばかりの外国人の方ですか?
772:デフォルトの名無しさん
09/12/23 07:42:11
つまりパッチにoseiboって書いて送れと
773:デフォルトの名無しさん
09/12/23 07:56:22
おう、てめーらサンタさんディスってんのか
774:デフォルトの名無しさん
09/12/23 13:52:13
サンタさんはいい子にしかこないけど、
いい子以外にもパッチを送りつけるような真似はいかがなものかと。
775:デフォルトの名無しさん
09/12/23 15:55:19
ASが悪い子だと
776:デフォルトの名無しさん
09/12/25 21:46:07
>>769
gitなんかdiff形式のメール生成して送る機能なかったけ?w
777:デフォルトの名無しさん
09/12/25 21:48:17
まーでも、こういうときってgithubとかbitbucketみたいなサービス使って欲しくはある。
forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、
パッチ送るのも気軽なんだよね。
778:デフォルトの名無しさん
10/01/04 14:49:54
コムラッドのタカネ終わってるな
スレリンク(venture板)l50
スレリンク(sm板)
スレリンク(sm板)
779:デフォルトの名無しさん
10/01/04 15:51:39
オイ俺のコピペ脳、まで読んだ。
780:デフォルトの名無しさん
10/01/06 09:15:42
Lua について相談なんですが、
メタテーブルの __newindex を使えば、
テーブルに新しい key を追加するときにフックをかけることができるけど、
同じような感じで、テーブルの既存の key の値を変更するときに、
フックをかけることってできないかな?
781:デフォルトの名無しさん
10/01/06 10:36:17
メタテーブルの__indexは調べた?
782:デフォルトの名無しさん
10/01/06 11:26:52
__index は調べたんですが、
キーがすでにテーブルにある場合は __index はなにもしないですよね。
Metatable の index の擬似コードから抜粋:
local v = rawget(table, key)
if v ~= nil then return v end ← キーが存在するならその値を返す。
URLリンク(www.lua.org)
783:デフォルトの名無しさん
10/01/06 11:52:07
単純に、テーブル本体は何も仕事をしないでメタテーブルにすべて丸投げしたい
と考えれば簡単なことなんだけどな。
空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。
いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる
と考えるとややこしくなるよな。
784:デフォルトの名無しさん
10/01/06 12:20:51
確かに! 間に空テーブルをかませばいいんですよね。
ありがとうございました。
785:デフォルトの名無しさん
10/01/11 00:41:10
Lua 5.2.0 work1 出てるね
ファイナルもうすぐかも
786:デフォルトの名無しさん
10/01/11 18:50:02
> ファイナルもうすぐかも
それはない
787:デフォルトの名無しさん
10/01/12 01:12:00
環境周りが結構変わったのかな?
- lexical environmentsの導入(in EXP do BLOCK end)
- setfenv/getfenvがなくなった(debugのはある?)
- 全thread(コルーチン)で環境はひとつのみ?
自作ライブラリは結構見直さないとなー
788:デフォルトの名無しさん
10/01/12 03:37:11
こうですか?わかりません
local x = 1 do
local y = 2 do
・・・
end
end
in {x = 1} do
in {x = x, y = 2} do
・・・
end
end
789:デフォルトの名無しさん
10/01/12 10:13:28
lexical environment は、ECMAScript (JavaScript) の with みたいなもんかな。
set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。
790:デフォルトの名無しさん
10/01/12 11:19:29
空テーブルをsetfenvするモジュールシステムに慣れてる人なら、
もともと空っぽの環境を破壊されてもほとんど困らないけどね
791:デフォルトの名無しさん
10/01/12 21:19:47
破壊的なのは「グローバルな関数の環境を変えてしまう」って
とこじゃないの?setfenvする場合たいてローカル関数
をつくったうえで行う場合がほとんどだし。
function global_f() ~~~ end
に対してglobal_fの挙動を変えたいがために(たとえば
global_f内で呼び出しているprintの挙動を変える)
setfenv(global_f,~~)とはやるのは危険だし。
(ほかスレッドでの呼び出しも影響を受ける)
in { print=function(...) ~~ end } do
global_f()
end
とできるからそのほうが安全・・・ってのが
使いどころなのかな?
792:791
10/01/13 00:53:12
ごめん激しくうそ言った。
791の例でprintはglobal_fが作られた時点で固定化されているので
一番最後の方法では挿げ替えはできないね(orz
793:デフォルトの名無しさん
10/01/13 01:02:20
Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。
なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど
794:デフォルトの名無しさん
10/01/13 09:45:12
>>792
それであってるんじゃないかな?
print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、
そうでなければグローバル変数として参照されるので、
環境を変えればその影響を受ける。
795:791
10/01/13 19:13:03
実際にビルドして試したので「間違い」で正しいかと。
本質的にはスレッドに対するsetfenvと同じで
>94の勘違いと同質な問題。
子供の関数の呼び出しまで影響を受けるとなると
危険極まりないのも事実だし。(トレードオフではあるが)
それよりもpcalやCスタック先からyield可能になったのは大きい。
796:デフォルトの名無しさん
10/01/14 07:28:39
あ、ごめんなさい。勘違いしてた。
関数が定義された場所の環境をそのまま引き継ぐってことですよね。
だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、
以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。
797:デフォルトの名無しさん
10/01/14 18:43:54
Luaって
table =
{
element1 = 3
element3 = "str"
func element2() ...... end
}
みたいなことできませんか?
798:デフォルトの名無しさん
10/01/14 18:52:44
事故解決しました。。。。ごめんなさい
799:デフォルトの名無しさん
10/01/15 06:58:28
Lua 5.2 work2キタ━
ファイナルもうすぐかも
800:デフォルトの名無しさん
10/01/15 08:28:47
URLください
801:デフォルトの名無しさん
10/01/24 11:27:15
lua5.1.dllがノートンでウィルス扱いされるな
802:デフォルトの名無しさん
10/01/24 11:46:33
なにそれこわい
803:デフォルトの名無しさん
10/01/24 18:24:53
そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。
誤検出なのかな?
804:デフォルトの名無しさん
10/02/03 00:46:56
皆luaスクリプトの暗号化はどうやってるん?
リファレンスマニュアル探したけど、それらしい物が無かったんだが…
805:デフォルトの名無しさん
10/02/03 00:53:24
Luaってシリアライズできなかったっけ
806:デフォルトの名無しさん
10/02/03 01:12:18
lua_load/lua_dumpで自前で暗号化するくらしかできんよね
807:デフォルトの名無しさん
10/02/03 08:55:04
暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル
って手順ではダメ?
808:デフォルトの名無しさん
10/02/03 10:27:02
Python人気ねーな。luaより断然コード書きやすいのに。遅いけど
809:デフォルトの名無しさん
10/02/03 12:43:27
>>808
>>4
810:デフォルトの名無しさん
10/02/03 12:46:04
Luaがもうちょっとキモくない文法ならいいんだけどなぁ
811:デフォルトの名無しさん
10/02/03 12:49:10
文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか
812:デフォルトの名無しさん
10/02/03 13:02:55
たった数十kbくらいのサイズで
Cライクな文法が使える超軽量な組み込みないかな
LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
813:デフォルトの名無しさん
10/02/03 18:35:51
asじゃあかんの
814:デフォルトの名無しさん
10/02/03 21:16:11
Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら
たとえばSDLとか
ところで、Windows x64向けにビルドしてみたけど
> print(2^63 - (2^63+1))
でなぜか0が返ってくる
> print(2^31 - (2^31+1))
なら1になるけど
ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる
どこがおかしいのかわからん
815:デフォルトの名無しさん
10/02/03 21:57:11
整数も浮動小数点で計算するからだそうだ‥‥
64bit integerに対して64bit doubleじゃ精度足りないっての
パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
816:804
10/02/03 21:57:40
>>805->>807
アドバイスありがとう。
luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
817:デフォルトの名無しさん
10/02/04 15:53:15
>>811
Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、
トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が
文章化されてなかったりするするんだよな。
>>812
小さくはないが...elastiCは?
URLリンク(www.elasticworld.org)
818:デフォルトの名無しさん
10/02/04 19:12:28
Luaスクリプトってバインダなしで使い物になるレベル?
819:デフォルトの名無しさん
10/02/04 19:41:20
何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。
820:デフォルトの名無しさん
10/02/04 21:35:40
mingw ,gcc を前提としてるバインダが多い様な気がして
lua手を出しにくいのです。。。
821:デフォルトの名無しさん
10/02/04 21:52:42
lua51.libとlua5.1.libって何が違うんだろう
822:デフォルトの名無しさん
10/02/04 21:53:06
それは気のせいないし思い込みでは……
823:デフォルトの名無しさん
10/02/04 21:57:42
.so を makefile でつくる、という事例にちょくちょく
遭遇しまうまう・・・orz
824:デフォルトの名無しさん
10/02/04 22:02:22
バインダはLuaではなくバインダという言語である!!
825:デフォルトの名無しさん
10/02/04 22:04:46
$(CC) を $(CL) とか代えて、pkg-config はそのままでも
nmake -f makefile でビルドできるもんなんだろうか・・・
826:デフォルトの名無しさん
10/02/05 00:11:51
pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ
827:デフォルトの名無しさん
10/02/05 00:39:23
nmakeには、一から書き直して食わしてる
必要なobjぐらいなら写せるだろ
828:デフォルトの名無しさん
10/02/05 00:52:13
それ全然lua関係ないじゃん
必要なc/cppファイルひろって Makefile 書き直すなり
Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。
そんな難しいもんじゃない。
829:デフォルトの名無しさん
10/02/05 11:59:44
>>828
こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして
フォーラムに投げてみたら、いらないって言われた……。
830:デフォルトの名無しさん
10/02/05 18:05:55
オレはCMakeで固まろうとした
831:デフォルトの名無しさん
10/02/06 12:14:44
luaのuserdataとlightuserdataの違いって
userdata
・lua側でアロケート
・lua側でデアロケート(GC)
・Cには参照のみが渡される
・Cからは寿命が分からない
lightuaserdata
・C側でアロケート
・C側でデアロケート
・luaには参照のみが渡される
・luaからは寿命が分からない
これ以外になんか有りますか?
それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
832:デフォルトの名無しさん
10/02/06 12:41:41
meta tableの有無も違ってたかも
833:デフォルトの名無しさん
10/02/06 14:15:34
>>831
これは心の贅肉をそのまま箇条書きにしたみたいで面白いな
考え方としてはとりあえず
lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単
そうすると、整数とuserdataを比較するのは無意味だとわかる
834:デフォルトの名無しさん
10/02/06 21:32:49
|Д゚)<バインダが面倒な人向けにいいもの置いておきますね
|Д゚)つ[AngelScript]
|ミ サッ [AngelScript]
835:デフォルトの名無しさん
10/02/06 21:47:45
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
836:デフォルトの名無しさん
10/02/06 23:25:21
>>832,833
レスどうもです
メタテーブルの有無は重要ですね
いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました
しかしlightuserdataは使い道がわからず・・・
837:デフォルトの名無しさん
10/02/07 10:50:27
lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。
838:デフォルトの名無しさん
10/02/07 14:36:10
lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの?
ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
839:デフォルトの名無しさん
10/02/07 15:41:29
C++のオブジェクトとLuaのオブジェクトが混在するのか・・・
C++/CLIならもっとすごいことになるな
840:デフォルトの名無しさん
10/02/07 17:14:33
C++のオブジェクトをスクリプトで操作する感じかな。
例えばスクリプトで
SetSpeed(1,20)
とかいうような関数があった場合、C++側でlightuserdataを取り出し、
//lightuserdataからObjectのポインタを取り出す
Object *lpObject=(Object*)GetLightUserData(L);
//Objectを操作する
lpObject->SetSpeed(x,y);
って感じの処理をするグルー関数を用意する。
841:デフォルトの名無しさん
10/02/07 18:22:00
lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz
userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・
C++側で
tableを作る
tableにインスタンスへのポインタをlightuserdataで格納
tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする)
さらにtableを積んで__gcフィールドにデリータを格納
最初のテーブルにメタテーブルとして設定
最初のテーブルを返す
という感じでやってるんだけどLua側で__gcが呼ばれてくれない
mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・
こっちがDLL
URLリンク(codepad.org)
こっちがLua
URLリンク(codepad.org)
842:デフォルトの名無しさん
10/02/07 18:44:41
userdataとlightuserdataは全く別物。用途が違う。
パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
843:デフォルトの名無しさん
10/02/07 19:23:56
>>841
そういうことができなくなってる分軽いわけなんだが……
844:デフォルトの名無しさん
10/02/07 19:31:07
じゃあlightuserdataは何に使うんだろう
コールバック的な使い方でしょうか
845:デフォルトの名無しさん
10/02/07 19:44:12
だから主にC側で作ったインスタンス(のポインタ)の受け皿だって
846:デフォルトの名無しさん
10/02/07 19:51:50
>>844
てか、マニュアルにもCのポインタそのものだって書いてあるだろう。
Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。
例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。
処理する時には、必ずCの関数をいちいち呼び出すのを前提として、
「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。
これの使い方が直感的にわからない人がいるってのが驚きだった^^;
847:デフォルトの名無しさん
10/02/07 20:54:46
わからない人というか、深読みする人もたまにいるな。
ひどくなると「それはただの××だよ」と言われると反論してくる。
「お前はそうやって分かったつもりになってるだけだ」とか。
848:デフォルトの名無しさん
10/02/07 21:05:07
lightuserdataはテーブルのキーとして使う。
自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。
ちなみに、この時のテーブルはweak tableにしておくといい。
ということを初めて知った時は目から鱗だった。
849:デフォルトの名無しさん
10/02/07 22:40:47
何かLuaって面倒くさいな(´ω`)
850:デフォルトの名無しさん
10/02/07 23:14:16
ひたすら軽量さが売りの言語って感じだなあ。
851:デフォルトの名無しさん
10/02/07 23:22:51
ところで848のテクニック?のサンプルソースとかどっかでダウンロードできないかな?
852:デフォルトの名無しさん
10/02/07 23:50:34
>>841みたいにuserdataの方にクラスのインスタンスのポインタを格納して
Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831
みるとuserdataはLua側でGCかかるの?
853:デフォルトの名無しさん
10/02/08 00:40:38
URLリンク(codepad.org)
うーんこんな感じですかね?
ポインタをキーにという発想はすごい便利そうな予感がしますね
しかしグルーコード内のエラー処理とかってどうすればいいんだろう
C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか
854:デフォルトの名無しさん
10/02/08 07:40:28
>>852
「C++側」と「Lua側」をきっちりと分離したいんだな。
組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。
855:デフォルトの名無しさん
10/02/08 10:48:05
Luaって速度が同じぐらいで、文法が素直な組み込みスクリプトが作られたらあっという間に駆逐されそう
856:デフォルトの名無しさん
10/02/08 11:02:47
>>855
作られてないから駆逐されてない訳で
857:デフォルトの名無しさん
10/02/08 11:04:23
もともとマイナーな分野なのに亜流が既にいくつも出ていてそれができないってことは
実際のところLuaのバランスが優れているってことでしょ
858:デフォルトの名無しさん
10/02/08 12:13:32
罠を避けるのが上手い。
静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・
859:デフォルトの名無しさん
10/02/08 12:58:59
文法重視で速度気にしてない人は squirrel 使ってるし普通に棲み分けになってんじゃね?
860:デフォルトの名無しさん
10/02/08 13:04:33
自分がLua選んだ理由は日本語の資料が一番多かったからだな。
次点の理由はスタティックリンクできたから。
861:デフォルトの名無しさん
10/02/08 19:55:29
文法が嫌いとかいうやつって、
自分の英語ができないのは分法を教えるからって口だろ
862:デフォルトの名無しさん
10/02/08 20:54:28
まぁ855の言うことが真ならSquirrelによってあっという間に駆逐されてるはずだな。
863:デフォルトの名無しさん
10/02/08 20:56:42
>>861
逆だよ。
文法ができないから英語できないんだよ。
864:デフォルトの名無しさん
10/02/08 21:00:44
>>863
>861が何を言ってるのか分かってるの?w
865:デフォルトの名無しさん
10/02/08 21:12:14
俺スクリプトをLuaのVM用のバイトコードにコンパイルすればいいじゃん
866:デフォルトの名無しさん
10/02/08 21:19:01
yieldをライブラリとして提供するのは実装の幅を狭めてると思う
867:デフォルトの名無しさん
10/02/08 23:28:24
>>862
>>347みる限り速度はでLua>>>>Sq
868:デフォルトの名無しさん
10/02/08 23:34:53
はじめて日が浅いけど L とか -1 が乱舞する
C拡張に馴染む日はくるんだろうか俺・・・
869:デフォルトの名無しさん
10/02/08 23:37:30
>>868
俺は2日で拡張できるようになったぞ
870:デフォルトの名無しさん
10/02/09 09:34:09
>>347では速度がLuaより早いにも関わらず日本ではあまり使われていないGameMonkey。
ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。
日 本 語 資 料 皆 無 だ け ど な
871:デフォルトの名無しさん
10/02/09 11:26:11
>日本語資料
月並みなことを言うと
因果関係ではなく相関関係ならあるかもしれない
872:デフォルトの名無しさん
10/02/09 11:32:07
Pawnも文法はシンプルに見えるが流行らないのはやっぱり何かが足りないんだろうな
873:デフォルトの名無しさん
10/02/09 14:25:57
足りないというよりはLuaの情報量や実績やユーザ数を
代えられるほどのものではないということだろう
874:デフォルトの名無しさん
10/02/09 16:13:12
Luaってゲーム以外で使われてますか?
875:デフォルトの名無しさん
10/02/09 16:40:55
>>874
SciTEとか
876:デフォルトの名無しさん
10/02/09 17:04:31
apacheとかwiresharkの拡張に地味に使われてたりする
もともとゲーム向けってわけじゃないしね
877:デフォルトの名無しさん
10/02/09 17:50:35
Schemeが以外と流行らなかったな
878:デフォルトの名無しさん
10/02/09 17:56:04
>>874
TextAdept
URLリンク(caladbolg.net)
半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ
iconv で読み書きし内部は UTF-8 なので、日本語も使用可
879:デフォルトの名無しさん
10/02/09 21:54:30
>>874
tokyotyrantでLua知ったよ
880:デフォルトの名無しさん
10/02/10 14:33:21
URLリンク(dev.pocoo.org)
URLリンク(www.frykholm.se)
URLリンク(coderay.rubychan.de)
プロジェクト管理ツール を作ろう
Redmin, Retrospectiva, Trac
基本組み込み用途だよね、とツールを作る用途で
移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・
881:デフォルトの名無しさん
10/02/10 17:47:01
lua5.1のDLL版を使ってるんですが、グルーコードの呼び出し規約は__cdeclでいいんでしょうか?
それとも__stdcallにしたほうがいいですか?
882:デフォルトの名無しさん
10/02/10 20:55:07
>>881
たぶん__cdeclだけど仮に間違っていたとしても
name manglingの違いで簡単に見分けられるような気がする
883:デフォルトの名無しさん
10/02/10 20:57:16
DLLを使う側の言語の規約に合わせるんだ
Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな
884:デフォルトの名無しさん
10/02/10 22:45:42
>>882
>>883
thxです
さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね
885:デフォルトの名無しさん
10/02/11 14:50:36
Programming in Lua携帯するにはしんどいな
PDFで売ってくれりゃいいのに
886:デフォルトの名無しさん
10/02/11 15:59:41
ばらして持ち歩けよ
887:デフォルトの名無しさん
10/02/11 16:49:25
組み込んで歩けよ
888:デフォルトの名無しさん
10/02/11 18:52:41
lua で連想配列形式のテーブルの要素数を調べる方法ある?
配列形式だったら #tbl で、出来るみたいだけど・・・。
889:デフォルトの名無しさん
10/02/11 20:14:39
userdata型に型情報を与えて
BOOL isHoge(lua_State *, index);
の形で使いたいんですが
luaのほうで予め提供されてる方法はありますか?
それとも、自分で独自にマップするものなんでしょうか?
890:デフォルトの名無しさん
10/02/11 20:46:48
>>888
pairsやnextかな
891:デフォルトの名無しさん
10/02/11 21:04:58
nextだとnilが設定されたフィールドでハマるので
pairsを使った方がいいんじゃまいか
892:デフォルトの名無しさん
10/02/11 23:23:44
luabashがすばらしすぎる。
bashにluaインタプリタ機能追加してbashの拡張ができる&
bashが生きている間luaインタプリタも生きているのでlua変数を
保持し続ける。これ重要。
ファイル操作が多いとやっぱりシェルスクリプトが楽だけど
コマンド間の結果の連携を環境変数orファイル書き出しで
実装するのはかったるい時に大活躍な予感。
893:デフォルトの名無しさん
10/02/14 01:40:15
組み込み用途以外でLua使おうなんて思わんな
汎用的に使うには標準ライブラリ貧弱だし
thenとかdoとか書くの面倒だし
894:デフォルトの名無しさん
10/02/14 02:40:47
低レベルな質問で申し訳ないのですが
wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか?
Generateで書き出した.hファイルにある
virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); }
の{ event.Skip(); }をコメントアウトすることで
出来なくも無いのですが
ヘッダファイルの行頭に
// PLEASE DO "NOT" EDIT THIS FILE!
とありますし後々修正があったときに困りそうです。
// Virtual event handlers, overide them in your derived class
このコメントが鍵のような気もするのですが正直意味が分かりません・・・
895:デフォルトの名無しさん
10/02/14 03:09:57
誤爆ってる、失礼しました
896:デフォルトの名無しさん
10/02/14 11:30:21
/ヽ /ヽ
':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つ Lua!
`:; ,;'
`( /'"`∪
897:デフォルトの名無しさん
10/02/15 16:13:25
自作型で__gcでC側のリソースを開放してるんだが
__gcをうっかり書き換えてしまわないように
メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?
898:デフォルトの名無しさん
10/02/15 19:19:53
__gcということはユーザーデータか。ならばスクリプト側からはメタテーブル自体の変更はできない。
さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。
ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。
899:デフォルトの名無しさん
10/02/15 21:52:18
C++でRAIIをうっかり忘れてしまうレベルだ
初期化以外でsetmetatable()を使うのか?
900:デフォルトの名無しさん
10/02/15 22:33:58
>>898
__metatableというのがあったのか
というかユーザデータはもともと変えられないって知らなかったorz
レスthxでした
>>899
metatableをうっかり書き換えるのはクライアントで、クラスじゃない
RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題
そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
901:デフォルトの名無しさん
10/02/15 23:37:24
>>900
なにが別次元だ
ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
902:デフォルトの名無しさん
10/02/19 02:15:03
(◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )
903:デフォルトの名無しさん
10/02/19 20:31:33
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
904:デフォルトの名無しさん
10/02/21 15:46:38
(´・ω・`)
905:デフォルトの名無しさん
10/02/22 16:32:07
LuaInterface 使ってる?
906:デフォルトの名無しさん
10/02/22 16:55:48
(`・ω・´)
907:デフォルトの名無しさん
10/02/22 17:51:50
ルアのmodule(name)のnameが被ったらどうなるの?
908:デフォルトの名無しさん
10/02/22 20:06:58
name ru houkei
909:デフォルトの名無しさん
10/02/25 02:06:10
local foo = function ()
local c = 0
return function ()
c = c + 1
return c
end
end
f1 = foo()
f2 = foo()
この場合f1とf2に渡される情報はcと関数の参照だけ?
それともcを含めて関数まるごとコピーされちゃったりする?
910:デフォルトの名無しさん
10/02/25 08:44:16
クロージャとしては別々だけどコードはもちろん共有
911:デフォルトの名無しさん
10/02/25 08:54:10
UpValとProtoの参照
それとenvの参照
912:デフォルトの名無しさん
10/02/26 02:47:27
なんかロベルトさんがLua5.2のグローバルとか環境まわりの仕様変え始めたような。lua-l参照。
913:デフォルトの名無しさん
10/02/26 14:12:12
バージョンアップは無能レベルに到達するまで止まらない
でも5.2はまだリリースされてないから止めようと思えば止められるけど
914:デフォルトの名無しさん
10/03/03 04:05:04
イエルサリムスキー教授の翻訳本にuserdataのメタテーブルはLuaからCを出しぬいて手出しすることはできないから安全、みたいなことが書いてあるんだけど
ud = create_ud()
getmetatable(ud).__gc = nil
のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?
915:デフォルトの名無しさん
10/03/03 08:33:03
>>914
保守的GCって知ってるか
解放すべきかどうか疑わしいときは、解放しないほうが安全
916:デフォルトの名無しさん
10/03/03 11:12:19
>>915
今ググって知りました
しかし、保守的GCの話は>>914の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?
917:デフォルトの名無しさん
10/03/03 11:20:30
Squirrelに興味があるやつは見ておけ。
よく考えられてるサンプルだと思う。
URLリンク(ruriko.denpa.org)
918:デフォルトの名無しさん
10/03/03 18:44:23
>>914
userdataはsetmetatableはできないがgetmetatableはできる。
よってその例のようなアクセスはできる。
禁止したいなら__metatableを適切な値に設定するといい。
919:デフォルトの名無しさん
10/03/03 19:47:36
安全とは禁止することと見つけたり・・・
920:デフォルトの名無しさん
10/03/07 11:27:59
coroutineの利点がいまいちわかんね
state:update()の戦略の方がコスト低いしわかりやすいと思うんだが
921:デフォルトの名無しさん
10/03/07 12:48:09
利点がわかんないなら
君には不要って事なんだよ
無理して使う必要ない
922:デフォルトの名無しさん
10/03/07 15:01:14
自分の理解している範囲の外に利点があることだって普通にあると思うけど。
923:デフォルトの名無しさん
10/03/07 15:08:48
複数回に分けて動かさないといけない処理を継続的な処理として実装可能になる。
結果として同期処理の不要な軽量スレッド的な実装ができるようになる。
924:デフォルトの名無しさん
10/03/07 15:46:16
コルーチンは、ゲームで「アイテムを取った直後に一定時間白くなる」という処理を書くときとか便利だな。
925:デフォルトの名無しさん
10/03/07 16:04:54
>>921
むちゃくちゃな論理展開わろた^^
>>922
ですよね
>>923
複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う
コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね
926:デフォルトの名無しさん
10/03/07 16:07:46
Stateパターンが「普通」?
Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?
927:デフォルトの名無しさん
10/03/07 16:23:51
>>925
どうしてもできないから、で使ってる人はいないよ。
機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、
全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。
State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な
挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。
最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、
後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。
遷移図をそのまま if や while やら使って書き起こすだけだけになるからね
コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、
表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、
State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4274日前に更新/247 KB
担当:undef