トップページtech
1001コメント329KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/05/01(土) 01:03:17
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/

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

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

■過去スレ
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0666デフォルトの名無しさん2010/12/17(金) 10:17:22
書いてみて思ったが、Luaのコルーチンだって切りのいいところで呼び出し側に戻しているわけだし、
上の例のDSLと変わらんか・・・

ネイティブスレッドでの動作だったり仮想マシンの中断、復元とはまた違うな
0667デフォルトの名無しさん2010/12/17(金) 18:45:03
1命令ごとにコルーチンから抜けてちょうどいいところで別の処理をすればいいんだよ
0668デフォルトの名無しさん2010/12/18(土) 10:33:34
ロードしたら音声だの文字表示だのが途中から始まるゲームは
なんでこんなことやってのか不思議だったんだが、VMの状態を
保存してるのかな。フラグは分離しとかないバグ取りで死ねそう
なもんだけど。
0669デフォルトの名無しさん2010/12/19(日) 08:32:33
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   
0670デフォルトの名無しさん2010/12/19(日) 09:19:13
LuaでVM保存して再開てどうやるの?
0671デフォルトの名無しさん2010/12/19(日) 11:20:17
基本的に無理です
0672デフォルトの名無しさん2010/12/19(日) 23:00:51
Squirrel 3.0 RC1
0673デフォルトの名無しさん2010/12/19(日) 23:46:30
3.0出たら業界で広めるか
0674デフォルトの名無しさん2010/12/19(日) 23:57:31
ライセンスかわったからちと扱いづらくなったね。うち的には問題ないけど相手の説得がちと面倒。lua と同じになっただけではあるけど
0675デフォルトの名無しさん2010/12/20(月) 11:07:16
>>671
MIT License自体が面倒ってこと?
著作権表示や本許諾表示に抵抗があるってことかな。
0676デフォルトの名無しさん2010/12/20(月) 11:14:15
そそ。頭の固い御仁はまだまだまだいるので。

ミドルウェアとかで金はらえる先ならOKなのにフリー(無償、の意)だと難色を示される不思議
0677デフォルトの名無しさん2010/12/20(月) 12:30:47
675は>>674の間違いでした。ごめん。
>>676
最近ライセンス表示画面を持つコンシューマゲームが増えてきたと思ってたんだけど、
所によっては難しいのかもね。
0678デフォルトの名無しさん2010/12/20(月) 14:15:22
>>677
じゃあたくさん人に使ってもらうためには
いろんなライセンス形態用意しとくのが良いのかな?
0679デフォルトの名無しさん2010/12/20(月) 17:46:32
>>664
>>665
もっと単純で、中断したコルーチン自体の管理の話。
セーブ/ロードについてはセーブできる箇所(通常クリック待ち)に到達した時点で
遷移状態を含めてそのままシリアライズしてるからさほど難しくはない。
(動作中のコルーチンではなくその初期化パラメータを保持したオブジェクトを用意しておく)

コルーチンはなるほどひとつの関数内の処理を中断できるけど、
各Widgetごとにイベントハンドラを定義するならその数だけ増えてしまうし
それらが複合的にアニメーションしたり状態変化したりするのって
そんな単純化出来る話かねえ、と。
0680デフォルトの名無しさん2010/12/20(月) 18:03:06
当初から、UIでの遷移とかの、「保存する必要がない部分」なら便利、って話じゃね?

保存の必要性がある時点で、VMのステートごと保存しないといけないから急に大がかりになる。
0681デフォルトの名無しさん2010/12/20(月) 18:29:17
>>680
うまく伝わらなかったようだ。ごめん。
セーブ/ロードで出入りする情報の話と、
UI遷移の話は別個に考えてほしい。

UIの遷移はオレもひょっとするとコルーチンで書くと楽なんじゃないかとは思ってるんだけど、
コルーチンって結局中断中の状態を変数として外側で持っておかないといけないよね。
じゃないと復帰できないから。

で、コルーチンがひとつしかないならそれでいいんだけど、
実際にはウィジェットの数だけ発生しうるのにどうするんだろう、というわけですよ。
0682デフォルトの名無しさん2010/12/20(月) 18:55:20
コルーチンじゃなくて「トランザクション」って名前にすれば途中で中断しないのか?

どんな名前だろうと、途中で中断しないように作れば、中断する必要はないと思うが。
0683デフォルトの名無しさん2010/12/20(月) 19:18:23
>>681
「そういうところにはコルーチンは別に役に立たないから使わない」、で終了なのではないかと……

「中断中の状態を外側でもっておく必要が無い」ところでだけ使って、それが便利、って話なのに、
その前提条件をはずれた状態で「どうするんだろう」と言われても、その、なんだ、こまる

なお、lua だと ttp://luaforge.net/projects/pluto とかVMまるごと保存してくれるライブラリあるけど、
実際使ったことないのでどのくらい使えるものかは知らない。
保存されるデータサイズ不定だから、それが許容される用途でないと使うのは難しいんではないかと。
0684デフォルトの名無しさん2010/12/20(月) 19:52:50
今話に出ているコルーチンは、スクリプト内部でコルーチンオブジェクトを持たせて実行するやつなのか、
それともスクリプト自体をコルーチンと見て実行するやつなのかどっちなんだろう。

Luaで言うと、前者がcoroutineで作るやつ、後者がグルー関数内でlua_yield呼び出して止めるやつ。
0685デフォルトの名無しさん2010/12/20(月) 20:48:18
どちらでも同じだろ。前者は単にスクリプト側で制御するために口をはやしてるだけ。
たとえば coroutine.yield は中で lua_yield 呼んでるだけ。

スクリプトだけでコルーチン制御するのは、エラーで止まったときの対応とかめんどくさいから俺はやらない。
複数のコルーチンを順次実行できるような処理をシステム(ゲームエンジンとか)側に内包したほうが良いと思う
0686デフォルトの名無しさん2010/12/21(火) 11:00:51
Squirrel 3.0 はクリスマスリリース?

エロイ人出版よろしくお願いします。PDFだとなお嬉しいです。
0687デフォルトの名無しさん2010/12/21(火) 11:06:26
>>683
コルーチンって初期化した段階で別の変数に入れるだろ?
その話をしてるだけなんだけど。
それって中断中の状態を外側で持っているわけだよね。
0688デフォルトの名無しさん2010/12/21(火) 12:00:51
>>687
理解した。根本的なとこで話がずれてた。
確かに個々のコルーチンをそれぞれの場所で実行しようとしたら数が増えると管理しきれなくなるね

対応策としては以下のようなものがあるかと

1. いわゆる「タスクシステム」的な組み方をする

・基底になるオブジェクトに共通的にコルーチンのスレッド変数を持たせる
・それらのオブジェクトを総なめしてコルーチン部を実行するような機構を作る

ゲームなりウィジェット的な処理なりなら、オブジェクトを総なめするような処理は
たいていどこかに一ヶ所はあるはずなので、そこで統一的に実行するようにする。

2. 専用のスレッド実行部に集約させる

コルーチンスレッドを保持した変数は、生成/破棄部で集約して、常に一つのリストに保持させる。
そのスレッドリストをなめて全部のスレッドを1段階だけ実行するような処理を作っておいて、
それを定期的に呼び出すようにする

こうしておくと、スクリプト的には、スレッドは勝手に動いてくれるように見えるので特に処理を気にすることはない。
この処理部分でいわゆる sleep() と、スレッド間の待ち合わせとかも実装できるので、かなり自由度があがる
個別のスクリプトからは完全独立するので、処理は全部Cで書いてエンジン側にうめておくこともできる。

squirrel での実装例としては以下のようなものがある。

・sqrat に sleep 機能を含むスレッド実行集約の例がある。これは登録自体は手動
・ttp://ruriko.denpa.org/201011a.html#0401 が thread実行機構をエンジン内に持つように実装してる。
関数を渡して Thread クラスのインスタンスを生成するだけであとは勝手に動く
0689デフォルトの名無しさん2010/12/21(火) 14:19:03
>>668
詳しい解説ありがとう。
2つに分けて質問してくれてるが、これはほぼ同じ概念を2つの段階で説明してるようなものだな。

ようするにネイティブスレッドがOS側で管理されるように、
コルーチンの実行制御を専用のサブシステムに委託することで
マイクロスレッド的な運用により近づけるということだよね。

うーん。元々各種サブシステムの更新制御をタスクシステム化してるので、
どうやって組み合わせるべきか悩みどころだなぁ。
毎フレーム subsytem.update()が呼び出される仕組み。
タスクは単なるリストではなくて固定の整数値を登録時に運用側が制限する形なので
こういった暗黙的な運用とはやや相性が悪い。

とはいえ、少し改良すればマージして両方扱えるようにすることも可能なような気がしてきたよ。
どうもありがとう。
0690デフォルトの名無しさん2010/12/21(火) 14:20:54
運用側が制限 → 運用側が宣言
0691デフォルトの名無しさん2010/12/21(火) 14:52:49
>>689
最終的にやることは同じなんだけど、処理部を個々の「タスク」に分配するか、一つグローバルにもつか、の差で分けたつもり。一応。

ある案件で、既存の「タスクシステム」に squirrel をつっこんだときは、
グローバルスタイルの squirrelスレッド処理一式を、そのシステムでの
一つの「タスク」としてくみ入れる形で既存の他のタスクとの整合をとった。

個別のタスクと関連した部品部から呼び出すスクリプト群は暗黙に動作することになるけど、
概念的には、「実行中のスクリプトの :suspend() までが、今のフレームで動作する」
となるので、特に他と混乱を起こすことはなかった。

タスクの処理順番を念頭においておく必要があるくらいかな。中途ではさむと混乱するから、
squirrel タスクの実行は先頭、または、最後尾にしておいて、スクリプトはそのタイミングで
動作する、ってのを周知しておく必要はある。
0692デフォルトの名無しさん2010/12/21(火) 15:39:48
>>687
関数でも、オブジェクトでも、コルーチンでも、
変数に入れて管理すれば、全部同じことなのになぁ。

そもそも、
関数はクラスに入れる、関数は変数には入れない
というOOPがキチガイじみている。
0693デフォルトの名無しさん2010/12/24(金) 18:39:32
コルーチンってゲームループ書くのも楽だね
どんどんLuaでやることが増えてもうC++でやることが
描画と衝突判定とファイル解凍ぐらいなんだけどそんなもん?
0694デフォルトの名無しさん2010/12/25(土) 14:58:29
>>693
そんなもんじゃね?(描画と衝突判定とファイル解凍だけになるかはゲームによりけりだと思うが)

速度的にクリティカルな部分やOSとの細かいやり取りは低水準言語で、
楽に書けて実行できる部分はスクリプトでなんていうのは
ゲーム以外でも見かけるよ
0695デフォルトの名無しさん2010/12/25(土) 14:59:40
>>694
そもそもLL系の言語とそのライブラリがそんな感じじゃねーかw
0696デフォルトの名無しさん2010/12/27(月) 04:03:40
自分の開発したC++のプログラムに、プラグイン機能を取り入れる予定でいます。
プラグインはpluginディレクトリにLuaファイルを置いてもらうような形式で、
それで、読み込んだLuaコードに制約を持たせたいと思っています。
指定したファイル以外はファイルアクセス禁止にさせたいんです。できますでしょうか?
例えば、Luaのファイルアクセス系関数を全部無効にして、C++側で用意した独自ファイル操作関数を経由する形はできますか?
06976962010/12/27(月) 04:07:51
あとLuaよくわかってないんですが、
他言語でいうeval()やsystem()なんていう関数も無効にしたいです。。。
0698デフォルトの名無しさん2010/12/27(月) 04:08:42
簡単に出来るよ
06996962010/12/27(月) 05:20:49
どんな感じにやるんでしょうか?
0700デフォルトの名無しさん2010/12/27(月) 05:53:03
nilを代入するだけだよ
print関数を例にすると

lua_State *L=luaL_newstate(L);
//luaL_dostring(L,"print('hello')"); //ng
luaL_openlibs(L);
luaL_dostring(L,"print('hello')"); //ok
luaL_dostring(L,"print=nil");
//luaL_dostring(L,"print('hello')"); //ng
lua_close(L);
0701デフォルトの名無しさん2010/12/27(月) 10:19:37
そんな遠回りな。
lua でも squirrel でもそういった機能はコア機能ではなくライブラリなので、
それらの関数を登録しているところを探して改造したりつぶしたりするだけだろうて。
07026992010/12/27(月) 23:59:04
>>701
Luaソースに手を加えるって事が言いたいのかな?
それやると保守性・拡張性が下がるよ。
0703デフォルトの名無しさん2010/12/28(火) 00:24:21
別にコア機能じゃあるまいし、登録してる部分をコメントアウトするぐらいで保守性さがるってこたーなかろう。
#ifdef にしとけば svn でのマージもまず失敗しないよ。

わざわざ起動時に無駄な登録処理+削除処理がはさまるほうがいやだってほうが多数派だと思う。ここだと。
0704デフォルトの名無しさん2010/12/28(火) 01:29:47
よく分かってない人向けなら>>700の方が簡単そうだな
07056992010/12/28(火) 01:54:02
>>703
コア機能ではなくとも標準ライブラリなんだからそのまま使おうよ
printf関数を潰すのにstdio.hに手を加えたり
oreorestdio.hを用意する人はいないでしょ?

潰したい機能が明確で後々変更することも無いならそれでもいいけど
そうでない場合は、ちょっとした修正のたびにリビルド必須になるよ?
plugin以外の目的でスクリプトを利用したくなったりしたらどうするの?
グローバルなフラグを用意するの?排他も必要になるよ?

pluginという利用特性上
初期化済みのVMをpoolしておけるので
ローディング時のコストなんて気にするものじゃないでしょ
スクリプト言語の利点を生かそうぜ
0706デフォルトの名無しさん2010/12/28(火) 02:50:29
や、lua が組み込み言語でなければ俺もそう思うんだけど・・・
まるごとメモリ上で無駄になるライブラリって気にならない?

>例えば、Luaのファイルアクセス系関数を全部無効にして、C++側で用意した独自ファイル操作関数を経由する形はできますか?

こういう標準ライブラリ使いたくないんだけど的要望に対してはもっとも適切な回答だと思います。はい。
0707デフォルトの名無しさん2010/12/28(火) 04:33:13
>>706
ならないな。
生産性とかパレートの法則って聞いた事ない?
そういったネガティブな理由による削る作業は最終手段だよ。
てか、運用前の段階で標準ライブラリを削るほどカツカツな状況を想定するなら
色々規制しなければ信用ならんようなプラグイン作者に間口を用意する事すらしないよね?
0708デフォルトの名無しさん2010/12/28(火) 09:40:53
まぁメモリが2MBしかない環境とかだったら削りたくなるかもだがな
0709デフォルトの名無しさん2010/12/28(火) 09:41:03
まあ、考え方の違いだねってことで。

俺はこの手の言語の「標準ライブラリ」はサンプルでしかないと思ってるので以下略。
0710デフォルトの名無しさん2010/12/28(火) 10:22:34
まあ、実際ソース見て判断してちょ。

あ、一応。ファイル系のライブラリ(io/file)は、もともと実装側で切り離し可能にはなってる。
system とか相当は load, loadfile, loadstring あたりになるけど、これはベースライブラリの一部なので、
削るか口を起動後つぶすかが必要。
0711デフォルトの名無しさん2010/12/28(火) 11:50:22
ファイルアクセスはダメ
evalもダメ
systemもダメ
もちろんpackageもダメ
その理由がプアな環境だとすると
反復もダメ
テーブルもダメ
stringもダメ
となるが、Luaを選ぶ意味はあるのだろうか?
0712デフォルトの名無しさん2010/12/28(火) 13:22:37
>>711
誰もそんな話はしていない
0713デフォルトの名無しさん2010/12/28(火) 18:41:44
ゲームだと、圧縮&連結したアーカイブファイルから読み込んだりするから、
デフォルトのファイル操作関数が使えなかったりするな。
0714デフォルトの名無しさん2010/12/29(水) 21:50:21
Luaはそもそもその辺りの組み換えを考慮しているような気がするが…
0715デフォルトの名無しさん2010/12/29(水) 21:53:14
>>711
それらが必要に応じて取捨選択できるってことでしょ。

そうでないと組み込み用途とはいえ、こんなにライブラリが貧弱なスクリプト言語使おうと思わないよ
標準のライブラリやオプソのライブラリ組み込んで楽したいなら、組み込みも考慮されてるPythonなり使えばいい

でもLuaを選ぶということは制限された環境だったりあえて制限したいわけだよ
今時ガラケーでさえJava VMが制限されて乗ってんだぞ
0716デフォルトの名無しさん2010/12/30(木) 02:20:18
>>715
701さん登場以降のやり取りは
カッツカツな環境という(質問主は一言も言っていないが)
条件付けがあってのものだよ
0717デフォルトの名無しさん2010/12/30(木) 06:19:53
ゲームに限らないとは思うが、ゲームの組み込み環境だとfopen系列が使えない環境は多い
これに関してはインターフェイスを合わせられるならLua標準ライブラリの関数を上書きしていけると思う
合わせられないなら標準ライブラリを使わず自前関数を使ったり、そもそもスクリプトに直接ファイルアクセスを許さず
実装が管理して、それにアクセスさせたり、とかか。>>713の通り、自前でファイル読み込みを最適化するのがほとんどだろうし。
ただ、Luaがエラー処理に普通にfopen系を使ってたりするんでここらへん頭痛い。これどうにかならんかな。

あとsetjumpも環境によって駄目だったりする。これのほうが頭痛いかもしれん。
0718デフォルトの名無しさん2010/12/30(木) 06:39:54
エラー時に割り込めるのがあったと思った
0719デフォルトの名無しさん2010/12/30(木) 07:22:31
>>717
>fopen系列が使えない環境は多い
ANSI-Cにすら準拠していない環境なのにLuaを組み込むの?
"使えない環境"ではなく"使える立場にない"ってだけじゃない?
0720デフォルトの名無しさん2010/12/30(木) 08:58:46
組込みの環境にはファイルシステムなんてない、ことも多い、
ということすら想像できないの? 馬鹿なの? 死ぬの?
0721デフォルトの名無しさん2010/12/30(木) 11:08:59
>>720
ANSI-Cにすら準拠していない環境だがLuaを組み込んでいる
という実装実績例を出してもらえない?
自分の足りない頭ではペイすると思えないので妄想の域を出ないんだ
0722デフォルトの名無しさん2010/12/30(木) 11:34:52
ゲームコンソールのゲームでLua使ってる例とかあるんだが、
そういう環境で普通にfopenとか使うのが普通とは思えないんだけど。

必死にANSIANSI言ってるけど、言語が標準準拠してるかどうかということと、
ライブラリが全機能フルに使えるかというのは普通分けて考えると思うんだけど。
0723デフォルトの名無しさん2010/12/30(木) 11:36:50
おまえら自分の最初の主張を正しいと言い張るために
曖昧だった前提条件を各人の都合のいいように狭めて議論するのやめなさい
0724デフォルトの名無しさん2010/12/30(木) 13:02:55
>>720
fopenが使えない=非ANSI準拠という前提自体が間違ってるわけだが
0725デフォルトの名無しさん2010/12/30(木) 13:24:11
糞どうでもいい
0726デフォルトの名無しさん2010/12/30(木) 13:52:38
>>722-723
あぁ、やっと理解できたわ。

696の質問内容を前提だと
プラグインによる拡張はOKよ、でも'標準'ライブラリに手を加え下手すりゃバイト単位で削る厳しい環境だよ
プラグインはpluginディレクトリにLuaファイルを置いてもらうような形式、でもfopenは使えないよ
で意味不明だが

前提条件も無く単発で
'標準'ライブラリに手を加え数KB、下手すりゃバイト単位で削る厳しい環境もあるよ
fopenが使えない環境もあるよ
という事なら普通に同意できるな
0727デフォルトの名無しさん2010/12/30(木) 14:00:10
fopenが使えないゲーム機が多いと言うけど、PSP, PS3, xbox ではfopenをサポートしているぞ。
Wii, DSは知らんが、Wiiはサポートしてんじゃないの。
0728デフォルトの名無しさん2010/12/30(木) 14:30:54
>>727
両方サポートしてるよ、ついでにGBAも。
0729デフォルトの名無しさん2010/12/30(木) 14:46:13
初代PSの頃はないようだ。
一応stdio.hとかはついてるみたいだが。
0730デフォルトの名無しさん2010/12/30(木) 16:19:49
・fopenが(標準ライブラリになく)使えない環境
・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境
・fopenが(標準ライブラリにはあるけど大人の事情により)使えない環境

おいお前らどれ前提に話しとるんや
0731デフォルトの名無しさん2010/12/30(木) 16:47:30
>>730

ゲームコンソールについてだから、

>・fopenが(標準ライブラリになく)使えない環境

についてだよ。
0732デフォルトの名無しさん2010/12/30(木) 17:50:55
最近のコンソールは全部

ライブラリとしては存在するけどアプリ内部での使用には耐えない(ほぼデバッグ表示用専用)

だな。
0733デフォルトの名無しさん2010/12/30(木) 18:13:26
まず非同期ファイルロード機構からつくるよね
07347132010/12/30(木) 19:54:40
>・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境 
俺が言ってるのはこれだな。

あと、スクリプトそのものの読み込みや#includeに相当するものでファイルを読み込む際にも、
ライブラリ側でfopen使ってたりするとちょっと困る。
0735デフォルトの名無しさん2010/12/30(木) 21:00:20
無料RPG製作ツール「ロープレジェネレーター」
http://sekisekki.net/index.htm

直感的操作で簡単なゲームが作れます。 簡単に配布可能な状態に出力することができます。
(HSP製のソースコード付きで、スクリプトの知識があれば自由度の非常に高いカスタマイズ
ができます)
他にも仲間預かり機能(100人も)や、仲間の状態/状態異常を細かく設定できたり、
乗り物が作れたり、ゲーム中に画像を差し込んだり、回転やフラッシュなどのエフェクト
なんかも簡単に作れる様です。
移動は矢印キーの他に、キャラがマウスを追っかけたりするとのこと。
戦闘はデフォだとドラクエ系。
他にはオートアクションというのがあってオリジナルシステムの製作に役に立つかも
しれない機能です。これは、マップエディタで設定することで、「マップに入った時・
出た時・一歩歩いた時・戦闘開始前」に自動的に実行されるアクションを設定できる
機能です。
■他にもいろいろ進化中。要望は掲示板へどうぞ。

どんなゲームが作れるかはこれを見れくれ。HSPのカスタマイズはしてないとの事。
「眠られぬ獅子〜序章〜」
http://www.freem.ne.jp/game/win/g02773.html
0736デフォルトの名無しさん2010/12/31(金) 08:16:20
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   
0737デフォルトの名無しさん2010/12/31(金) 20:08:57
あるぇ、DSってfopen使えたっけ。PSPとかは使えるの知ってるけど

>>696 を見るに
・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境
を作りたいからfopenを禁止したいのではないか。理由は
> ライブラリとしては存在するけどアプリ内部での使用には耐えない(ほぼデバッグ表示用専用)
かな?
まぁ上で言われてるLuaのファイルアクセス関連上書きするとかに行き着くけど。
Lua内部で使ってるのは、書き換えるか、お勧めしないが上書きするかとかか・・・できたかうろ覚えだが

しかしこの板ID出ないからめんどくせぇw
0738デフォルトの名無しさん2010/12/31(金) 20:37:34
そもそもLuaって分離できないようなところでfopen使ってたっけ?
grepしてみたけど標準ライブラリとluaL_loadfileくらいでしか使ってなくね?
0739デフォルトの名無しさん2010/12/31(金) 20:50:17
やっぱり、 >>700 の方法がスマートという事でファイナルアンサー。
07407372010/12/31(金) 23:37:06
>>738
おお、なら大丈夫そうかな。間違ったか古い知識ですまない
0741デフォルトの名無しさん2011/01/01(土) 05:51:15
潰すのではなく差し替える例はこんな感じ
--begincode.lua
local _loadfile = loadfile
local permreadlist = {"1.lua","3.lua"}
local canread = function(fname)
  for i=1,#permreadlist do
    if permreadlist[i]==fname then return true end
  end
  return false
end
function loadfile(fname)
  if canread(fname)==true then
    return _loadfile(fname)
  else
    return nil,"No such file or directory"
  end
end

仕様が固まり最終的にはホスト側に落とし込むものだとしても
開発効率は上がるんじゃないかな
packageとか便利だし
0742デフォルトの名無しさん2011/01/01(土) 10:26:36
仮にもLLなんだしソースレベルで潰すのもいいけど
アドホックに言語の機能、上書き差し替えでもいいね
0743デフォルトの名無しさん2011/01/01(土) 18:47:44
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ Lua!!
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

0744 【だん吉】 【1294円】 2011/01/01(土) 20:38:07
あけおめ!
0745デフォルトの名無しさん2011/01/01(土) 21:01:53
サンドボックス化すれ。
0746デフォルトの名無しさん2011/01/05(水) 18:58:49
サンドボックス、略してサンボッ
0747デフォルトの名無しさん2011/01/07(金) 22:15:49
AngelScriptでアプリケーション側からインタフェースをRegisterInterfaceで登録して、
スクリプトでそれを実装したクラスを書いたんだけど、
どうやればこれをC++のクラスと同じように使える?
07487472011/01/08(土) 00:04:24
AngelScriptのクラスをあたかもC++クラスのように使うのは難しそうだ
プロパティを取得するのは簡単にできるみたいだけど。
コンテキストを作成して、オブジェクトとメソッドIDを指定して実行するのは出来るけどあまり賢い方法とは思えない。
GetMethodIdByDeclでメソッドID取得するとオーバーヘッドも心配
何かもっといい方法ない?
07497472011/01/08(土) 00:21:11
タイトル画面とか、オプション画面とか各ステートをスクリプトのクラスでやろうとしたんだけど
AngelScriptでクラスのメソッド呼ぶのは結構難しそうなので諦めた

クラスをスクリプトで記述する代わりに、
XMLに呼び出す関数名とスクリプトのコードそのものを入れる、という方法をフォーラムで見つけた
これでやってみるか
0750デフォルトの名無しさん2011/01/08(土) 01:02:39
>>747
メソッドIDはスクリプト読み込んでコンパイルした直後にでも取得して保存してても大丈夫のはず。
あと、1つのスクリプトファイルを1つのクラスと見て、そのスクリプトの関数を呼び出すメソッドを持つC++のクラスを用意する方法はダメかな?
0751デフォルトの名無しさん2011/01/08(土) 02:02:05
燃料投下?

マイナーだがPicoC
ttp://code.google.com/p/picoc/

Cのサブセットで4000行程度だそうな。修正BSDライセンス。
なんかおもしろそう。
0752デフォルトの名無しさん2011/01/08(土) 02:07:55
パイコック
0753デフォルトの名無しさん2011/01/08(土) 13:34:27
tcc(http://bellard.org/tcc/)と違って多様なCPUに対応してるし
組み込み想定してるから動的生成については用途広そう
0754デフォルトの名無しさん2011/01/08(土) 13:36:24
って、インタプリタなのかー
07557472011/01/08(土) 23:27:42
>>750
メソッドIDはインタフェースのが使えるみたい
ただ、その場合は実行時に線形探索で実装されたメソッドを探すみたいだが。

速度はとりあえず度外視でいいか・・・。
コンテキストはオブジェクトごとに作ることにしよう
0756デフォルトの名無しさん2011/01/09(日) 17:28:16
Luaもインタプリタだろうが
0757デフォルトの名無しさん2011/01/09(日) 21:02:51
lua はコンパイラだべ。動的言語ではあるけど。
0758デフォルトの名無しさん2011/01/09(日) 23:01:44
Pythonもコンパイラと言い出しそうだなおい
0759デフォルトの名無しさん2011/01/09(日) 23:02:49
仮想コードにコンパイルして逐一実行しようががコンパイラはコンパイラ
お前の定義だとJavaやC#もインタプリタになるだろうが
0760デフォルトの名無しさん2011/01/09(日) 23:07:50
構文解析の結果のASTをそのまま実行するのがインタプリタなの?
じゃあASTを少し実行しやすい形に変換してから実行するのはどっち?
どこまで変換したらインタプリタからコンパイラになるの?w
無意味な議論ですよ
0761デフォルトの名無しさん2011/01/09(日) 23:10:54
cint http://root.cern.ch/drupal/content/cint
これもC++のインタプリタだな
古いしデカいし重いが
0762デフォルトの名無しさん2011/01/10(月) 00:01:40
lua はバイトコードをファイル出力してそれを読み込んで実行できるからわりがっつりコンパイラじゃね?
コンパイラ部切り離してつかえるし
0763デフォルトの名無しさん2011/01/10(月) 12:39:08
luaとかJavaはコンパイラとインタプリタの併用だよな?
0764デフォルトの名無しさん2011/01/10(月) 13:59:30
というか、中間言語でなく
純コンパイル言語なスクリプト言語って、
それこそDS位のチープな環境じゃないと役に立たないんじゃね?
0765デフォルトの名無しさん2011/01/10(月) 15:28:06
>>764
JavaScriptの実装はJIT可が流行りだし、luaも欲しいぞ。
■ このスレッドは過去ログ倉庫に格納されています