[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/27 01:12 / Filesize : 247 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Lua】組み込み系言語総合 その2【Squirrel】



1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ]
LuaやSquirrelなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合【Squirrel】
pc12.2ch.net/test/read.cgi/tech/1205208141/

■過去スレ
その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html

701 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 14:23:49 ]
>>700
あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。
なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。
(ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・)

あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。

ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便

703 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 15:54:55 ]
xtalの新verが出てる。
デバッガー早くできるといいな。

704 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:06:30 ]
Squirrelの演算子一覧に => ってあって
え!? と思ったら単なるtypoだった・・・

705 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:07:52 ]
ぅあ

706 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 19:09:29 ]
squirrelで
{};hoge
をコンパイラが受け付けないのには何か理由があるの?
疑似BNF見る限り許容されそうなものだけど
ワンライナーだとついテーブルコンストラクタに ; 付けてしまう

707 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:49:00 ]
nscryptみたいな軽量な物で小数点も扱えるのあればなぁ
luaとかは無駄な部分が多すぎて

708 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:00:18 ]
他の部分がNスクで十分なら、多分Nスク作者に要望を投げてみるのが、
その要望の解決にはいちばんいいと思う。

709 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:17:21 ]
>>708
出来るならそうしたいけど
nScript作者はここ最近活動休止中みたいで
そのスクリプトも含め更新と言う物が一切されてないから期待出来ない

だから自分で実装しようとしてるけど
元々Cのみで書かれてないから移植作業がまず大変



710 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:40:00 ]
はてな日記見てみたけど、なんか次世代エンジンに注力してるみたいね。
そのへん追いついてなかった。

711 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:46:52 ]
あ、あと、どう使うつもりか知りませんがライセンス大丈夫ですよね?
Nスクのライセンスは全く見ずに言いますが。

712 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:47:50 ]
>>711
個人利用のみだから問題ないはず、と思う

713 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:48:14 ]
nScriptってWWWCの作者のだよな?
NScripterと話がごっちゃになってね?

714 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:51:05 ]
突っ込もうと思ったら怒涛の勢いでレスが・・・
確かに混同してるな

715 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:53:30 ]
>>713
このことです
ttp://www.nakka.com/soft/ns/

716 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:55:29 ]
あれ、ソースみてるけどフルCでね?
windows.hに依存してるのはあるかもしれんが

717 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:02:33 ]
パイソンとかルビーをゲームに使ってる人はいますか?

718 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:07:10 ]
>>716
フルCに見えるけど一部Winの機能使ってて
手直し必須だと思う

719 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:37:08 ]
スクリプト実行する根っこの部分でWinの機能つかってるから
一部と言うより根本的な修正が必要だなこれ



720 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:09:35 ]
ところでお前ら、この手のスクリプトエンジンに手直し入れる場合、どのぐらいまで手を入れますか?
基本命令や文法とかまで変えたりする?

721 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:10:05 ]
>>717
ノシ IronPython使用中。
1週間ほどあればスクリプト部分はcPythonにも移植出来るかな。
特に問題ないよ。
スクリプト内でマルチスレッド化が普通にできるのが強みだな。

722 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:58:46 ]
>>720
本家バージョンアップの度にパッチ当てるの面倒だから基本的にそのまま
作業を楽にする目的で文法いじるとしたらプリプロセッサとかトランスレータを間にいれるかな
文法変えずに必要な機能が実現できないなら言語の選択に問題があるかと

ライブラリレベルならアーカイブが透過的に扱えるようIOを自作のに差し替えてる

723 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:05:39 ]
誰か>>715のnScriptをCのみで動かせるように
手直ししてくれる人いません?

メモリ管理や足りない型の再定義とかはなんとかなるけど
マルチスレッド処理には詳しくないから
同期処理とある部分の代用関数が分からない


724 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:28:47 ]
そもそもCにスレッドなんて無いような

725 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:55:19 ]
TCP使えるネットワークライブラリでC汎用なのも無いきが

726 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 14:10:06 ]
luaはどうも記述が冗長になる・・。
if ~ then ~ endとか。

「関数先頭でリソース割り当て。割り当て成功してたら
終わりで開放。」見たいなコード書くとフラグ使って
最後でif文みたいな感じになるけど、
C#のIDisposable見たいな機能があると便利かと。
割り当て・開放のコードが集約できるから見やすそう。


727 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:26:27 ]
Cでそういうの書けばいいねん

728 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:54:01 ]
・テーブルに関数をpushする
・テーブルが空になるまで関数をpopして呼び出す
の2つを簡単に出来るようなライブラリを作ればいいと思う

729 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:55:48 ]
>>728
で、それが種々のbinderになるわけですが何か。



730 名前:726 mailto:sage [2009/12/20(日) 18:18:19 ]
きっと欲しいのはこんな感じ
do
 local resource=...
 finaly
  finnalize(resource)
 end
 :
 :
end -- ここでfinalyの内容が自動で呼ばれる。

自動で呼ばれるとなると言語サポートは必須かと。
metaluaあたりで作れるかな?

731 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:25:56 ]
何のためにGCがあると思ってるんだろうか

732 名前:726 mailto:sage [2009/12/20(日) 18:28:56 ]
javaのGCじゃリソース管理できないから
C#はIDisposable入れたんじゃないの?


733 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:33:54 ]
>>732
違うよ。
本来的にアンマネージドなリソースの管理はGCじゃなくてプログラマの責任だから、
プログラマが明示的にDispose()かける仕組みになってるんだよ。

734 名前:726 mailto:sage [2009/12/20(日) 18:44:32 ]
え?
C#はかじった程度しかしらんのでうそ言ってるかもしれんが、
usingとIDisposabeなクラス組み合わせると
リソース開放漏れが(ファイルのクローズとか)が防げますよー
って使い方するんじゃないの?(C++のRAIIみたいな)


735 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/12/20(日) 18:57:38 ]
>>735
よく思いつきますな。理解するのに
上下のブロックを10回ぐらい往復しましたよ・・・。
ただ、複雑になったらそのコードを一年後理解しなす
自身がないかも。

ついでにmetaluaでよろしく ノシ (冗


737 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:04:56 ]
>>734
IDisposableを継承したクラスはusing構文で使うことが推奨されているわけだが、
当然この構文が使えない使い方があるわけで。
(using構文を使うと実用上スタックに載せているのと同じなわけで、ヒープに置きたい場合だってあるだろう、という話)

で、ユーザーが手で作ってホールドしているIDisposableなインスタンスは当然自分で明示的に破棄しないといけない。

738 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 03:50:01 ]
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript 2.18.0!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

739 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:13:06 ]
AngelScriptが2.18.0になってるな



740 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:16:21 ]
ASの本だれか書いてくれ

741 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:39:12 ]
ActionScriptなら

742 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 16:54:21 ]
仮想マシンをいくつもopenするのって良くないですか?

743 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:13:43 ]
同時に動かす必要が無いなら良くないんじゃない

744 名前:デフォルトの名無しさん [2009/12/21(月) 19:21:29 ]
良くないですね

745 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:23:01 ]
>>740
まずは2.18.0のShiftJIS対応版だ…

746 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:10:03 ]
sjis対応なんて激変してない限りいつも同じ手順だろうに

747 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:38:06 ]
AngelScriptはこまめに更新されるから、結構手間なのよ。


748 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:10:33 ]
ShiftJIS<->UTF-8の変換を間に挟むだけなんだから、
一度書いたら別に毎度手間がかかる訳じゃないだろ。

749 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:53:25 ]
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ Lua!!
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ





750 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:25:42 ]
>>748
AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、
そこを毎回毎回直さなきゃならないんだ。

公式に知らせたほうがいいとは思うが英語が苦手でね…

751 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:12:37 ]
とりあえずdiff 取って投げれないの?

752 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:37:03 ]
>>735
こういうの、JavaScriptとかRubyとかやってると思いつくよなw

753 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:38:18 ]
毎回なおすってまさか手でなおしてるんじゃ・・・
バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと

754 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:26 ]
>>751
自分がいじったファイルをリポジトリにコミットって事?

>>753
まさかの毎回手直し。
あと、
>バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事?

質問ばかりですまん。

755 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:01:22 ]
>>754

公式は svn かな。それなら

1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る
2. 自分の更新はそこに任意にコミットする
3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する

これでおおむね安全に手元作業できるはず

svn は以前は外部レポジトリからのマージができなかったので、
手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった

あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。
svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。
この場合、自分の変更分はローカルコミットとして維持する形になる

756 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:26:40 ]
>>755
詳しい説明d。
ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、

>手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする

というやり方になりそう。
ちょっと試してくる。

757 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:38:19 ]
>>756

WIPってなにかと思ったら work in progress か。
まあ、そりゃ svn ってのはそういうものだから^^;

えーと、任意のリリースバージョンならタグうたれてるみたいだから

ttps://angelscript.svn.sourceforge.net/svnroot/angelscript/tags/

からとれるかと。
バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい

758 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 16:40:58 ]
そもそも
英語が苦手とか駄々こねてんじゃねえよクソが
死ねばいいのに

759 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:24:49 ]
ごめん誤爆してた



760 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:30:59 ]
>>759
ということにしたいんですね

761 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:34:46 ]
メインラインにマージしてもらえば今後そのケースで悩む必要は無いというのに
英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな
英語が出来ずともパッチ送るだけで十分なのに

762 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:39:17 ]
そういうのはそう思う人がやればよろし。おしつけはおーぷんそーすの精神に反するのでいくない

763 名前:762 mailto:sage [2009/12/22(火) 17:39:53 ]
ごめん誤爆した

764 名前:762 mailto:sage [2009/12/22(火) 19:33:50 ]
>>763
人を騙るな。まじ気にしなくていいよ>パッチ送るとか

765 名前:762 mailto:sage [2009/12/22(火) 19:38:59 ]
お前こそ誰だよ

766 名前:762 mailto:sage [2009/12/22(火) 20:51:42 ]
何で俺こんなにいるん?

767 名前:762 mailto:sage [2009/12/22(火) 23:13:59 ]
>>762の人気に嫉妬

768 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:16:08 ]
4800円もするpython入門書が古い版でしかもC組み込みについて全然触れてなかったでござる

769 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:33:42 ]
何も文章書かずにパッチだけいきなり送るとか、どんだけ失礼なんだよ。



770 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:41:15 ]
お歳暮だって何も文章書かずにいきなり送りつけてくるだろ。

771 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:58:59 ]
最近お歳暮という日本の習慣を覚えたばかりの外国人の方ですか?

772 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:42:11 ]
つまりパッチにoseiboって書いて送れと

773 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:56:22 ]
おう、てめーらサンタさんディスってんのか

774 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:13 ]
サンタさんはいい子にしかこないけど、
いい子以外にもパッチを送りつけるような真似はいかがなものかと。

775 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:55:19 ]
ASが悪い子だと

776 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:46:07 ]
>>769
gitなんかdiff形式のメール生成して送る機能なかったけ?w

777 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:48:17 ]
まーでも、こういうときってgithubとかbitbucketみたいなサービス使って欲しくはある。
forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、
パッチ送るのも気軽なんだよね。

778 名前:デフォルトの名無しさん [2010/01/04(月) 14:49:54 ]
コムラッドのタカネ終わってるな
namidame.2ch.net/test/read.cgi/venture/1260791115/l50
set.bbspink.com/test/read.cgi/sm/1246009466/l50
set.bbspink.com/test/read.cgi/sm/1249183350/l50

779 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:51:39 ]
オイ俺のコピペ脳、まで読んだ。



780 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 09:15:42 ]
Lua について相談なんですが、
メタテーブルの __newindex を使えば、
テーブルに新しい key を追加するときにフックをかけることができるけど、
同じような感じで、テーブルの既存の key の値を変更するときに、
フックをかけることってできないかな?


781 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 10:36:17 ]
メタテーブルの__indexは調べた?

782 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:26:52 ]
__index は調べたんですが、
キーがすでにテーブルにある場合は __index はなにもしないですよね。
Metatable の index の擬似コードから抜粋:

local v = rawget(table, key)
if v ~= nil then return v end ← キーが存在するならその値を返す。

www.lua.org/manual/5.1/manual.html#2.8


783 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:52:07 ]
単純に、テーブル本体は何も仕事をしないでメタテーブルにすべて丸投げしたい
と考えれば簡単なことなんだけどな。
空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。

いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる
と考えるとややこしくなるよな。

784 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:20:51 ]
確かに! 間に空テーブルをかませばいいんですよね。
ありがとうございました。

785 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:41:10 ]
Lua 5.2.0 work1 出てるね
ファイナルもうすぐかも

786 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:50:02 ]
> ファイナルもうすぐかも
それはない

787 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:12:00 ]
環境周りが結構変わったのかな?
- lexical environmentsの導入(in EXP do BLOCK end)
- setfenv/getfenvがなくなった(debugのはある?)
- 全thread(コルーチン)で環境はひとつのみ?
自作ライブラリは結構見直さないとなー


788 名前:デフォルトの名無しさん mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 10:13:28 ]
lexical environment は、ECMAScript (JavaScript) の with みたいなもんかな。
set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。




790 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 11:19:29 ]
空テーブルをsetfenvするモジュールシステムに慣れてる人なら、
もともと空っぽの環境を破壊されてもほとんど困らないけどね

791 名前:デフォルトの名無しさん mailto:sage [2010/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 mailto:sage [2010/01/13(水) 00:53:12 ]
ごめん激しくうそ言った。
791の例でprintはglobal_fが作られた時点で固定化されているので
一番最後の方法では挿げ替えはできないね(orz

793 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:02:20 ]
Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。
なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど

794 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:45:12 ]
>>792
それであってるんじゃないかな?
print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、
そうでなければグローバル変数として参照されるので、
環境を変えればその影響を受ける。

795 名前:791 mailto:sage [2010/01/13(水) 19:13:03 ]
実際にビルドして試したので「間違い」で正しいかと。
本質的にはスレッドに対するsetfenvと同じで
>94の勘違いと同質な問題。
子供の関数の呼び出しまで影響を受けるとなると
危険極まりないのも事実だし。(トレードオフではあるが)

それよりもpcalやCスタック先からyield可能になったのは大きい。


796 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 07:28:39 ]
あ、ごめんなさい。勘違いしてた。
関数が定義された場所の環境をそのまま引き継ぐってことですよね。
だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、
以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。

797 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:43:54 ]
Luaって

table =
{
element1 = 3
element3 = "str"
func element2() ...... end
}

みたいなことできませんか?

798 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:52:44 ]
事故解決しました。。。。ごめんなさい

799 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:58:28 ]
Lua 5.2 work2キタ━━
ファイナルもうすぐかも



800 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:28:47 ]
URLください






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<247KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef