【Lua】組み込み系言語総合 その2【Squirrel】 at TECH
[2ch|▼Menu]
[前50を表示]
350:デフォルトの名無しさん
09/10/28 15:51:52
おなじくリス使いの俺涙目(笑)

まあ、リスはわかりやすいからいいんだよ!とか言ってみる。
でも Pawn の性能は魅力だな。とりあえず組み込みテストして
みてよさそうなら、静的スクリプト言語としての併用もかんがえてみよう

351:デフォルトの名無しさん
09/10/28 15:53:37
まあなんとかとかんとかはトレードオフってやつだな

352:デフォルトの名無しさん
09/10/28 18:03:22
Pawnはスクリプト内で日本語文字列を扱わなくてもいいならいいかも

353:デフォルトの名無しさん
09/10/28 18:17:32
リスのバグ発見。

setdebughookを仕掛けた状態で_callメタメソッドをコールすると死ぬ。(SQVMでぬるぽ発生)

ちなみにdebughook関数の中身を空にしても同様です。
公式フォーラムの垢を紛失してしまったので誰か報告たのむ
URLリンク(squirrel-lang.org)


function debughook(event_type, sourcefile, line, funcname) {
 local fname = funcname ? funcname : "unknown";
 local srcfile = sourcefile ? sourcefile : "unknown";
 ::print(::format("%s:%d: [DEBUGHOOK:%c] %s\n", srcfile, line, event_type, fname));
}
::setdebughook(debughook);
class FOO {
 function test() { ::print("FOO::test()\n"); }
 function _call(orig_this) { ::print("FOO::_call()\n"); }
};
local foo = FOO();
foo.test();
::setdebughook(null);
foo();
::setdebughook(debughook);
foo(); // Segmentation fault (core dumped)


354:デフォルトの名無しさん
09/10/28 18:39:16
>>353
すんまそ、環境を書いてなかった。
Squirrel 2.2.3 stable
VisualC++, cygwin, Linux, 何れでも発生。
Squirrel 3はまだ試していません。

355:デフォルトの名無しさん
09/10/29 12:22:06
Pawn Language Guide っていうドキュメントみてみたけど、無名関数がつくれないっぽいね。
だとするとクロージャが作れないから、ちょっと不便かな。
状態遷移とかの記述に特化しているようだし、UnrealScript に似ているかも。


356:デフォルトの名無しさん
09/10/29 17:27:53
347のリンク先見て思ったが、GameMonkeyが何気に性能いいな。

357:デフォルトの名無しさん
09/10/29 20:25:50
>>353
拙い英語ですが報告しておきました。
temp_regがメタメソッドコール前にhookで使われるのが一因っぽいです。


358:デフォルトの名無しさん
09/10/30 04:54:40
Squirrel フォーラムに代理の報告をしてもらえるなら、 sq_mem.cpp をはじめ
メモリ確保失敗についてまったく考慮してないのを修正してくれ、と頼んでみて
もらえまいか?

組み込み言語としてリソースの乏しい環境で使うことを考えれば、メモリ確保が
失敗しないなどという前提で組まれるとツライものがある。

359:デフォルトの名無しさん
09/10/30 04:56:12
s/sq_mem/sqmem/

360:デフォルトの名無しさん
09/10/30 04:57:50
なんで自分で報告しないのん?

361:デフォルトの名無しさん
09/10/30 05:00:20
残念ながら英語で会話ができる自信がない。
リファレンスマニュアルを読む程度ならなんとかなるんだけど。

362:デフォルトの名無しさん
09/10/30 05:20:40
パッチ作って送れば英語できなくてもだいじょぶじゃないかな。
here is a patch for memory allocation error
とか一文だけ書いとけば通じると思う。

363:デフォルトの名無しさん
09/10/30 05:42:29
うーん。問題はコード全体に散らばってるんで、まずは全体的な方針をはっきり
決めてからじゃないとマズイ感じ。

sq_malloc や sq_realloc がいくつかのマクロを通して間接的に使われてるんだけど、
どれも呼び出し元で NULL が返ってくることが考慮されてない。

典型的なのは配列伸ばすのに p = SQ_REALLOC(p,oldsize,newsize) してるところ。
NULL 返したら元の領域がリークするうえに後続のコードでは確保成功したものとして
余裕でアクセスしてくる。

最初は、C++だからsqmem.cppの関数から例外投げろってことかと思ったんだけど、
呼び出し側で例外の発生も考慮されてないからまた別の理由でリークするし。

364:デフォルトの名無しさん
09/10/30 10:21:32
AngelScriptでマルチバイト文字列を使おうとする場合の不具合も報告したほうがよさそうなんだけどなぁ…

365:353
09/10/30 14:26:46
>>357
ありがとう!!

366:デフォルトの名無しさん
09/10/30 17:39:48
>>364
なんか不具合あるの?
AngelScript試してみようと思ってるんで気になる
UTF8扱いたいんだ

367:デフォルトの名無しさん
09/10/30 17:48:06
>>366
ライブラリをビルドする際にプリプロセッサでAS_DOUBLEBYTE_CHARSETを定義するんだけど、
それやるとビルドでエラーが出ちゃう。
しかもマルチバイト文字かシングルバイト文字かを判定するやり方もマズい。

最新版出るたびに毎回そこ修正してるよ。

368:デフォルトの名無しさん
09/10/30 19:04:19
それは本家に報告してあげればみんな幸せに

369:デフォルトの名無しさん
09/10/30 23:19:35
>>367
ソース弄ってみるよ

370:デフォルトの名無しさん
09/10/31 00:09:14
>>221
それ新しい版では修正されてたと思った。


371:デフォルトの名無しさん
09/10/31 10:39:11
AngelScriptでUTF8を使う場合、ソースの修正なくても、

asIScriptEngine *lpEngine=asCreateScriptEngine(ANGELSCRIPT_VERSION);
lpEngine->SetEngineProperty(asEP_SCRIPT_SCANNER, 1);

みたいな感じでエンジンの設定すれば大丈夫だったと思う。

372:デフォルトの名無しさん
09/11/01 23:04:23
あら、ありがと

373:デフォルトの名無しさん
09/11/02 06:54:37
AngelScript2.17.2で試してみた
UTF8はデフォルトでサポートしてるっぽく読めたんでDLしたまんまビルド
static const char* scriptString =
"void hellow()"
"{"
" Print( \"hellow world\" );"
" Print( \"UTF8テスト\" );"
"}";
とりあえずこれOKだった
ホストへstd::stringで渡せたり楽だわあ

374:デフォルトの名無しさん
09/11/02 13:25:04
次の更新でUTF16もサポートするみたいなことが書いてあるね

375:デフォルトの名無しさん
09/11/03 16:16:50
>>374
それできたらShitJIS対応の改造しなくて済むな。

376:デフォルトの名無しさん
09/11/04 10:58:55
Linuxでx64運用してるんだが、ファイルをHDD中でコピーするだけでファイルが壊れてしまう状態になって、
パーツを電源も含めて色々入れ換えてみたところ、
SATAケーブルをノイズに強いタイプに変更したら改善した。

残念ながら完全には直ってないようだけど、十分実用レベルには戻った。
資金に余裕ができたらHDD買い足してパーティションを作り直そう……。

377:デフォルトの名無しさん
09/11/04 10:59:54
おっと。スレ違いスマン。

378:デフォルトの名無しさん
09/11/07 09:41:07
pawnダウンロードして、マニュアル読みながらcmake使ってVC++用のプロジェクトファイル作るところまではできたんですが…
プロジェクト開いても、なんかファイル構成がよくわからないです。
もしかしてこれ、コンパイラとVMが別のプロジェクトファイルになっているんでしょうか?
luaみたいに、単純にヘッダファイルとlibファイルだけが欲しいんですが…
もしかしてDLLしかない??

379:デフォルトの名無しさん
09/11/07 16:02:52
>>378
pawnについていいなと思い試してみたはいいものの
詳しく使おうとするにつれてファイル構成が?で
投げ出した俺と同じ状態だね
確かにあれはわかりにくい

380:デフォルトの名無しさん
09/11/08 02:12:15
>>371
asEP_SCRIPT_SCANNER の設定で何がどう変わるのか AngelScript 2.17.2 の
ライブラリのソースを見てみたけど、単に 'あ' みたいなUTF-8の文字リテラルが
正しく読めるようになるだけっぽい。
"あいう" みたいな文字列リテラルは設定に関係なく1バイトずつ読んで処理してる。

ただし AS_DOUBLEBYTE_CHARSET プリプロセッサを有効にしてビルドしたライブラリで
asEP_SCRIPT_SCANNER の設定が 0 だと、マルチバイト文字を考慮する。
>>367が言っているように判定方法がマズいからShift_JISの半角カタカナを渡すと
おかしな挙動になるだろうけど。

あと AngelScript 2.17.2 での asEP_SCRIPT_SCANNER の既定値は 1 っぽい。

381:デフォルトの名無しさん
09/11/09 16:15:58
となると、マルチバイト判定用のコールバック関数を登録できるような改造した方がいいのかな。
2箇所いじれば大丈夫っぽいし。

382:デフォルトの名無しさん
09/11/10 04:57:26
>>381
Xtalはそんな感じのことをやってますね。
初期化関数に渡す Setting クラスインスタンスの ch_code_lib メンバに
文字コードクラス(例:SJISChCodeLib)のインスタンスを渡すことで好きな
文字コードを選択できるようになってます。
SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。

383:382
09/11/10 05:09:58
> SJIS, EUC, UTF8, UTF16, UTF32 の文字コードクラスは標準で用意してある模様。
…とはいっても別に内部で文字コード変換をしてくれるわけじゃないから、
Windowsのマルチバイト文字セットで使うなら基本的にSJISを選ぶことになるだろうけど。

Unicode文字セットで使うなら、XtalライブラリをUnicode文字セットでビルドして、
文字コードクラスは指定しない(=デフォのまま)ことで正しい挙動になりそう。
もちろんその場合のスクリプトはUnicodeで書く&渡す。

連投&AngelScriptと直接は関係ない話でゴメン。

384:デフォルトの名無しさん
09/11/10 09:30:35
試してないけどソース見る限り、UTF-16用の文字コードクラス使うと、
文字列長取得時にサロゲートペアのことも考慮してるようだ

他の文字コード用のも、一文字進めるとか比較とかも変えられるようにはしているようではあるが、
今のところ文字単位での文字列長取得しか違いはないようだ

385:デフォルトの名無しさん
09/11/11 11:02:15
AngelScript、TCHARとかにも対応できて、Unicodeとマルチバイトのどっちでもビルドできるようにしたいが、
かなりの大部分を修正しないとダメだなぁ…
Squirrelは最初から対応してるみたいだけど。

386:デフォルトの名無しさん
09/11/11 22:18:49
// .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。これをビルドするためには
// ダウンロードしてきたPawnのソースに含まれている amx.c, amx.h, amxaux.c, amxaux.h, amxcons.c, amxcore.c をプロジェクトに追加しておく
#include "amx.h"
#include "amxaux.h"
#include <stdio.h>
extern "C" AMX_NATIVE_INFO console_Natives[];
extern "C" AMX_NATIVE_INFO core_Natives[];
int main(int argc, char *argv[]) {
 AMX amx;
 cell ret = 0;
 if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1);
 if (amx_Register(&amx, console_Natives, -1)) exit(1);
 if (amx_Register(&amx, core_Natives, -1)) exit(1);
 if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1);
 printf("%ld\n", (long)ret);
 aux_FreeProgram(&amx);
 return 0;
}


387:デフォルトの名無しさん
09/11/11 22:20:25
Pawnコンパイラのビルド方法
--
CMakeダウンロードする
CMakeインストールする
CMake起動する
"Browse Source"をクリックし、実行環境をビルドするなら<pawn>\source\amxを指定する。Pawnコンパイラをビルドするなら<pawn>\source\compilerを指定する
"Browse Build"をクリックし、適当な出力フォルダを指定する(以下、<out> と表現する)
"Configure"をクリックし、VisualC++ネイティブを選択する。エラーが起きても、もう一度 ConfigureをクリックするとGenerateボタンが有効になる。
"Generate"をクリックしてファイルを生成する
<out>にVC++用のプロジェクトファイルができている
ソースに<pawn>\source\compilerを指定した場合、<out>にはpawnc.slnができている。それをVCで開いてビルドする。
..\bin\pawn.icoが存在しませんとかエラーがでたら、該当場所に適当なアイコンファイルを入れておく。
<out>\Debugにpawnc.dllとpawncc.exeができている。それがコンパイラ。


388:デフォルトの名無しさん
09/11/11 23:56:32
Goのビルドが早いらしいので期待age

389:デフォルトの名無しさん
09/11/12 00:07:43
URLリンク(jp.techcrunch.com)

390:デフォルトの名無しさん
09/11/12 13:31:44
そのGoって組み込みじゃないんじゃ・・・・

391:デフォルトの名無しさん
09/11/12 17:18:47
ゴルーチン

392:デフォルトの名無しさん
09/11/12 23:59:48
URLリンク(golang.org)

There is a “foreign function interface” to allow safe calling of
C-written libraries from Go code. We expect to use SWIG to
extend this capability to C++ libraries.

There is no safe way to call Go code from C or C++ yet.

組み込みまだ出来なさそう。あとは、luaみたいに使える方向性があるか分からない。
現在の対応はdarwinのx86/x86_64とlinuxのx86/x86_64/armとnative clientのような気がする

393:デフォルトの名無しさん
09/11/13 00:23:26
you ain't gonna need it

394:デフォルトの名無しさん
09/11/13 11:03:02
GCサポートとあるけどc++好きにはウケナイ気がする
GC無しでc++的にガチガチに使えるなら使いたい
c++は0xも控えてるしGoは微妙な位置に落ち着きそう

395:デフォルトの名無しさん
09/11/13 11:47:27
そういや0xって後50日くらいで終了するんだなぁ

396:デフォルトの名無しさん
09/11/13 12:51:11
C++0xはコンセプトを捨てて再調整中で、まだ時間がかかるようだ
最近はC++1xと呼ばれている・・・

397:デフォルトの名無しさん
09/11/13 12:52:17
っていうか検索しにくさでDに勝負挑んでんの? って感じのネーミングなんだが……。

398:397
09/11/13 13:00:17
あ、ごめんなさい誤爆。Dスレに投げたつもりだった……。

399:デフォルトの名無しさん
09/11/13 18:49:47
Squirrelの画像検索のしにくさよりはましだろ

400:デフォルトの名無しさん
09/11/13 19:04:49
16進数だと思って欲しいだって
びょーん?さんのお知らせ

401:デフォルトの名無しさん
09/11/14 02:54:01
で、誰かPawnつかってみた? 激高速ぽいし、静的型付けで余計なバグも少なそうだし、かなり使えそうだけど…


402:デフォルトの名無しさん
09/11/14 21:13:23
>>388
GoはLinuxとMacにしか対応していません。

403:デフォルトの名無しさん
09/11/15 21:54:06
この手の組込スクリプトエンジンをShiftJIS対応させる場合、基本的にWindows用に組んじゃって大丈夫なのかな。
Unicode対応させる場合はWindowsだけじゃダメだよね?

404:デフォルトの名無しさん
09/11/15 23:22:05
修正を公開するつもりが無いならどうしたって構わないよ
#ifで切り分けるくらいはしておけばいいんじゃないか

#if (defined WIN32)
 実装
#else
 naiyo!!
#endif

これならWindows以外で使いたい人が中を見て、流用できそうならそうすることも出来るだろう

405:デフォルトの名無しさん
09/11/15 23:56:52
thx!

406:デフォルトの名無しさん
09/11/16 00:09:23
>>404
上手くいけば公開しようかなと思ってる。
ただ、Windowsでしかプログラム組んでないんで、Linuxでもちゃんと動くようにするための技法とかさっぱりわからないんだ。

ちなみにShiftJIS対応は簡単だけど、Unicode対応はソースあちこちいじらないとダメなんで無理かも…

407:デフォルトの名無しさん
09/11/16 07:08:38
UTF-8でもなければUCS2やUTF16でもなく、UNICODEと言っている時点で、
何にも分かってないのが丸わかりだからやめておけ。

408:デフォルトの名無しさん
09/11/16 08:00:11
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つLua!
  `:;      ,;'
   `( /'"`∪


409:デフォルトの名無しさん
09/11/16 08:10:51
ぅあたんおはよう

410:デフォルトの名無しさん
09/11/16 10:48:18
しかし、今時ShiftJISはねえなあw

411:デフォルトの名無しさん
09/11/16 11:48:04
WindowsだとまだShiftJIS現役だしなぁ…

412:デフォルトの名無しさん
09/11/16 13:12:23
WindowsのNTFSのファイル名とかUTF-8にする方法ある?

413:デフォルトの名無しさん
09/11/16 13:25:40
それ以前に一つ確認しておくが、NTFSのファイル名のエンコードがどうなっているのかは理解しているのか?

414:デフォルトの名無しさん
09/11/16 14:27:33
ICUとか無駄にでかいのを勧めてみる
そういう話じゃないんだろうけど、Windows依存の話はもう勘弁しておくれなんし

415:デフォルトの名無しさん
09/11/16 14:56:21
ファイル名ってUNICODEじゃなくてmbcsだろ
mbcsにUTF-8そのまま突っ込んでもファイルは出来るが
望みのものにはならない訳で


416:デフォルトの名無しさん
09/11/16 15:05:36
URLリンク(www-06.ibm.com)

417:デフォルトの名無しさん
09/11/16 17:13:46
>>415
Windowsは内部的には全部 Unicode で NTFS もUnicode。
Win32 API的には、Uincode な API と MBCS な API が両方同時に存在していて任意に選んで使う。

原理的にはエンコードが UTF-8 な Locale を指定すれば MBCS なAPIでそのまま使えるはずだが、
あいにくそんなロケールは定義されてない。もっとも、UTF-8 から Unicode へは単純に変換できるので、
Unicode な API をラッピングして使えば良いだけなので自前プログラム上で問題になることは特にはない。
自分のプログラムで文字列を char ベースで扱ってるなら、MFC の CString のような char <-> wchar_t 変換
対応したクラスを作ってAPI に渡す時はそれを介するようにしておけば良い

一般的にこの手の組み込み言語の場合「Unicode対応 」ってのはワイドキャラ化のこと。変換は全部入出力部で
処理してしまって、内部は全部 char ではなく wchar_t で処理を行うようにする。英数字もひらがなかたかな
漢字も同じ「1文字」として扱えるので、もろもろ概念や処理が楽になる。そのかわりメモリを喰らう。
Windows だと、Unicode な APIがあるのでこれで作業するのが定番。
UNIX 系OSは、Unicode API は存在してないので、API に渡す必要がある部分(ファイル名など)は
逆にMBCS に変換する必要があってそれなりに面倒だったりするが、これが C言語系における正道

「SJIS対応」だとパーサの類をいじって、\ とかの特殊文字のエスケープ対応を行う対応になる。
また、文字列系のクラスに、専用の mblen とか mbsubstr とかSJISとして1文字単位で扱える
専用の処理を足さないと実用上困る。正規表現系をまじめに対応とかすると死ねる。
「UTF-8対応」や「EUC対応」はASCII 的に安全な文字コードなのでパーサ部は通常いじる必要がないが、
文字列処理用に専用の命令系を足さないと実用性が低いのは SJIS対応と同じ。

古いプログラムを wchar_t 化するのは大変だけど、Unicode は扱いたい、といった場合にUTF-8 対応が行われる。

418:デフォルトの名無しさん
09/11/16 17:18:13
ファイル名の場合、NFDにも注意ね

419:デフォルトの名無しさん
09/11/16 17:23:01
>>418
OSX はさっさと直せよと思う。まじで

420:デフォルトの名無しさん
09/11/16 18:20:29
Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです
サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。
少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない
(おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう)
もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・

421:デフォルトの名無しさん
09/11/16 19:20:13
書かれてる事の意味が解らないままレスする人多すぎ
ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ

422:デフォルトの名無しさん
09/11/16 22:46:16
>>420
落ち着いて考えるんだ。
組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある?
まあ、議論自体は有意義だとは思うが。

423:デフォルトの名無しさん
09/11/16 22:52:23
素直にTRONコードを使え

424:デフォルトの名無しさん
09/11/16 23:33:37
とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。
Squirrelはデフォでいけたが。

425:デフォルトの名無しさん
09/11/17 10:17:44
知れば知るほどVSなんぞ捨てた方がマシ
UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど)
Windows環境で作業しなきゃならんなら
gcc、devc++、エディタ、こんだけでいいよ

426:デフォルトの名無しさん
09/11/17 10:23:35
>>425
お前……VisualStudioまともに使いこなせてないだけだろ?
UTF-8 BOM付きなんて使う機会ほとんどないぞ。

427:デフォルトの名無しさん
09/11/17 10:28:50
VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。
つまりどっちも扱える。

428:デフォルトの名無しさん
09/11/17 10:47:43
IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、
文字コードの認識に失敗する。

429:デフォルトの名無しさん
09/11/17 11:18:43
URLリンク(msdn.microsoft.com)
BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ
IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?

430:デフォルトの名無しさん
09/11/17 23:42:08
Squirrel 2.2.4 stable来てるね
3.0もbeta1になった

431:デフォルトの名無しさん
09/11/18 09:19:38
おー、Squirrelのバージョンアップまじか
色々バグ修正されてるのかな
BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ

432:デフォルトの名無しさん
09/11/19 04:33:19
>>429
WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能
Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。

コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない
BOM つけると今度は gcc がこけるんだぜ……

433:デフォルトの名無しさん
09/11/19 10:47:44
LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する
サンプルはどこかにないでしょうか?

434:デフォルトの名無しさん
09/11/19 11:56:04
グローバル環境を空のテーブルに置き換えるのって
普通にできんかったっけ?

435:デフォルトの名無しさん
09/11/19 12:37:17
じゃあこんな感じで良いのかな?

Lua_State *L;

〜 一回load、callして使用 〜

lua_newtable(L);
lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される?

lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき?

〜 Lにまたloadして再利用 〜

436:デフォルトの名無しさん
09/11/19 18:16:26
426の読解力に溜息が出るよ

437:デフォルトの名無しさん
09/11/20 08:36:36
>>429
UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか?
よくわからんな

438:デフォルトの名無しさん
09/11/20 08:45:59
そもそも文字列はハードコーディングするべきじゃない。
外部リソースとして、入出力時にコードを調整すればいいだけのこと。

439:デフォルトの名無しさん
09/11/20 08:49:56
print loadstring(0x34d3a6b8);

こんなプログラミングが歓迎されるんですね

440:デフォルトの名無しさん
09/11/20 09:00:17
>435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。
グローバル環境テーブル全体に対する操作関数って無いのでは?

441:デフォルトの名無しさん
09/11/20 09:34:40
>>438
スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな?
だとすると、何に変換するのがいいんだろう。UTF16?

442:デフォルトの名無しさん
09/11/20 09:47:54
スクリプトファイルは基本UTF-8、
ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。

443:デフォルトの名無しさん
09/11/20 11:51:20
>>437
その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。
非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。

全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
一番無難な選択だと思うけどね。

俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する
機能さえついてくれればあまり問題ない。

もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で
過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。

444:デフォルトの名無しさん
09/11/20 12:26:22
>>437
「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。
日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある

>>438
なにが一番困るって、ファイル名中の「コメント」

コメントに日本語つかうな?ごもっとも(苦笑)



445:デフォルトの名無しさん
09/11/20 12:27:06
ファイル名中じゃねえ、ファイル中

446:デフォルトの名無しさん
09/11/20 12:31:33
>>443
> 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が
> 一番無難な選択だと思うけどね。

この上の記述はわかるし、それはよくわかるんだが、
実際はBOM付きでトラブることが多くて、俺は折れたわw
BOMなしで上手く行くようにすべき

447:デフォルトの名無しさん
09/11/20 12:44:29
あ、437 のいってること完全によみちがえてたや。すまん。

動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。

既存エンコードと混在したのを自動判定する必然性は別にないんだから、
ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。
MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな

448:デフォルトの名無しさん
09/11/20 12:56:28
>>443
もう手遅れ
MSがいまだにSJISを強行している時点で終わってる

449:デフォルトの名無しさん
09/11/20 13:38:56
SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、
なんでそんなに視野が狭いんだろう?

ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。

450:デフォルトの名無しさん
09/11/20 13:40:42
BOM無しで

451:デフォルトの名無しさん
09/11/20 13:58:43
thx!
おまいあたまいいな

452:デフォルトの名無しさん
09/11/20 14:03:05
>>449
L"日本語" って正しく通る?

453:デフォルトの名無しさん
09/11/20 14:12:51
ロケール変えて見た
こりゃええわw
まともなアプリと糞アプリの違いが一目瞭然になったw

454:デフォルトの名無しさん
09/11/20 14:16:50
やっぱりコマンドプロンプトは糞のままだったw

455:デフォルトの名無しさん
09/11/20 14:23:06
URLリンク(boost.cppll.jp)
このサイトが初めてエンコード選ばなくても
日本語で文字化けせずに表示されましたw
ほんとうにありがとうございましたw

456:デフォルトの名無しさん
09/11/20 14:24:23
日記はチラ裏で

457:デフォルトの名無しさん
09/11/20 14:41:12
>>455
ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。

458:デフォルトの名無しさん
09/11/20 14:42:25
>>454
cmd.exeはフォントを日本語にすれば治る
cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない

しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね
本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな
mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね
正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな

459:デフォルトの名無しさん
09/11/20 14:47:32
>>457
ああごめん
ここのことね
URLリンク(boost.cppll.jp)


460:デフォルトの名無しさん
09/11/20 14:50:07
スレ違い

461:デフォルトの名無しさん
09/11/20 17:39:18
質問どうぞ

462:デフォルトの名無しさん
09/11/20 20:08:17
>>440
lua_replace(L, LUA_GLOBALSINDEX)
ならどう?

463:デフォルトの名無しさん
09/11/21 08:14:53
>>462
できました!
ありがとうございます

464:デフォルトの名無しさん
09/11/21 09:04:14
Luaのテーブルってキーを使ってアクセスするようになってますが、
キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?

465:デフォルトの名無しさん
09/11/21 09:14:26
for k,v in pairs(t) do hoge(k,v) end

466:463
09/11/21 09:49:37
>462 でグローバル環境を空にはできましたが、
これだけだと再使用ができないような?
このあとlua_openlibsを使っても標準ライブラリが使用できません。
Lua_Stateをcloseせずに再使用するのは大変みたいですね。

467:デフォルトの名無しさん
09/11/21 10:09:26
>>465
thx
pairsやnextでなめれるんですね

468:デフォルトの名無しさん
09/11/21 10:14:16
lua_openlibは副作用でレジストリにも変更加えるからじゃね?
走らせたいチャンクを一旦スタックに積んで
そいつの環境を置き換えるのはどう?

469:デフォルトの名無しさん
09/11/21 10:56:34
>>468
具体的なやり方が今一思いつきません。
load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?

470:469
09/11/21 11:03:04
そもそもスクリプト側で使ったグローバル"変数"だけ初期化して
ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の
コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと
考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて
ないので、選択的に変数だけで消すのに無理がある気が・・・


471:デフォルトの名無しさん
09/11/21 11:04:51
何でデフォの宣言がglobalなんだろうかね・・・

472:デフォルトの名無しさん
09/11/21 11:52:21
>>469
いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。

luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで
どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて
グローバル環境に委譲してしまうって感じでどうか。

これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので
グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。

コード書いて検証したわけじゃないのでうまくいくかは知らんw

473:デフォルトの名無しさん
09/11/21 13:01:22
--ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける
local metatable = { __index = _G }
local chunk = loadfile(filename)
local environment = {}
setmetatable(environment, metatable)
setfenv(chunk, environment)
--Cを使えばなんでもできるので、ダイナミックリンク禁止
environment.require = function() end
environment.package = {}
return chunk()

474:469
09/11/21 13:11:20
>>473
なるほど、こうやるのですか。
ありがとう!

475:デフォルトの名無しさん
09/11/22 10:32:35
ゲーム内にN個のオブジェクトが存在する。
それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。
オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。
オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので)
で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして
lua関数を呼び出し、テーブルを更新させる。

というのをやりたいのですが、N個のテーブルを作るのが「?」です。
テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、
どこかの操作で勝手にPOPされたり、消えたりしませんかね??


476:デフォルトの名無しさん
09/11/22 12:35:08
>>475
そういう用途のためにレジストリとリファレンスの機構が存在する。

1. 任意のオブジェクト(この場合はテーブル)を作る
2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。
  オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。
リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える
3. 使いたい場面(この場合は引数として渡す時)では、
lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う
4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる

N個つくるならこんなかんじで
// テーブル確保
int table[N];
for (int i=0;i<N;i++) {
lua_newtable(state);
table[i] = luaL_ref(state, LUA_REGISTRYINDEX);
}
// 例えば table[0] をわたして関数を呼ぶ
lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得
lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ
lua_call(state, 1, 0); // 引数1戻り値無し
// テーブル解放
for (int i=0;i<N;i++) {
luaL_unref(state, LUA_REGISTRYINDEX, table[i]);
}

ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して
保持できる。概念としてはこっちのがシンプル。


477:デフォルトの名無しさん
09/11/23 03:18:07
ぶった切りすいません

luaは組み込みに最適だと思うんですが、
lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか?

もしできるなら、教えてください。
ぐぐっても探すことができなかったので・・・

478:デフォルトの名無しさん
09/11/23 04:22:36
自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います

479:デフォルトの名無しさん
09/11/23 05:02:50
言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく
そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第
そういう用途なら○○ツクールやHSPにしておきなさいな

480:デフォルトの名無しさん
09/11/23 08:23:05
厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?

481:デフォルトの名無しさん
09/11/23 09:34:33
自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、
単独exeに出来るだろ。

482:デフォルトの名無しさん
09/11/23 10:12:43
>>477
その用途なら、Pythonじゃね?

483:デフォルトの名無しさん
09/11/23 12:08:15
I think so.

484:477
09/11/23 16:28:01
みなさん、レスありがとうございます。

どうしてもluaでゲームを開発しなくてはいけない状況なのです。
ウィンドウの表示がわからないため、苦戦しています。
どの参考書を読んでも書いてなくて。

別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?

485:デフォルトの名無しさん
09/11/23 16:30:06
>>484
なんでできないと思うの?

486:デフォルトの名無しさん
09/11/23 16:38:15
>>485
レスありがとう

みんなやってないし、コマンドプロンプト上か
ほかの言語に組み込むだけのものかと思いまして・・・

487:デフォルトの名無しさん
09/11/23 16:46:43
URLリンク(aims.dna-softwares.com)
こことか見てみ
Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる

それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて
いったいどんな大見得切ったんだよ

488:デフォルトの名無しさん
09/11/23 16:53:23
参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した?
あくまで組み込みスクリプトなんだよ?
ウィンドウズを表示するという関数を組み込んでもらって、
Luaにインターフェース提供してもらわないとprintやscanすらままならないよ
ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ

489:デフォルトの名無しさん
09/11/23 17:00:01
レスありがとう

正直、大学のゼミでこの言語を使うということに決めたんです
いくつもある言語から選んで、luaを選んだのは自分だけ。
頼る人もいないので、本とネットで勉強してるかんじです。

>>487
サンプルをdlして参考にしていますが、難しい。
もっとじっくり読んでみます。

>>488
用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・
やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

490:デフォルトの名無しさん
09/11/23 17:11:31
明日、学校でごめんなさいして
もっと詳しくて質問できる奴のいる言語で
最初からやり直す方がましのような気がする。

491:デフォルトの名無しさん
09/11/23 17:13:36
>>490
それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ

492:デフォルトの名無しさん
09/11/23 17:17:17
それでここきてなんとかしようなんてあますぎる

493:デフォルトの名無しさん
09/11/23 17:18:29
C側とのデータのやり取りがめんどいから余り良い言語とは・・・

494:デフォルトの名無しさん
09/11/23 17:26:23
>>489
> やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。

Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。
もともとそうやって使う言語だろうに。

「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。

495:デフォルトの名無しさん
09/11/23 17:26:36
Luaの言語を理解して使えるようになる手間を1とすると、
ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ
Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない
ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う
ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う

496:デフォルトの名無しさん
09/11/23 17:27:39
怒られたくなくて嘘を付いている幼児じゃあるまいし
無理せず諦めておけよ

497:デフォルトの名無しさん
09/11/23 17:33:10
>>493
つまりAngelScriptがいいって事ですね。
わかります。

498:デフォルトの名無しさん
09/11/23 17:42:29
自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ
ちょっと上ならともかく分不相応すぎ。諦めろ

499:デフォルトの名無しさん
09/11/23 17:48:07
Luaじゃ宿題スレも使えないしねえ。
(答える奴はどうせこのスレも見てる)

500:デフォルトの名無しさん
09/11/23 18:23:45
HSPスレに逝けよ

501:デフォルトの名無しさん
09/11/23 21:35:31
とりあえず、この本みてみて、何とかなるか考えてみたら。

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
URLリンク(www.amazon.co.jp)
サポートページ
URLリンク(lua.mine.nu)

どうなんだろうなあ。

502:デフォルトの名無しさん
09/11/23 21:46:36
URLリンク(en.wikipedia.org)
Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど
日本語の資料があんまりないと思う

503:デフォルトの名無しさん
09/11/24 10:46:49
Lua for Windows: A batteries included Lua installation on Windows.
URLリンク(luaforwindows.luaforge.net)
これいっこダウンロードしてインストールすれば、
GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。
ウィンドウ作る程度なら、サンプルそのまま使える。

504:デフォルトの名無しさん
09/11/25 07:48:34
Pawn始める人への組み込みメモ(修正版)
// .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。
// 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h
#include "amx.h"
#include "amxaux.h"
#include <stdio.h>
AMX_NATIVE_INFO console_Natives[];
AMX_NATIVE_INFO core_Natives[];
int main(int argc, char *argv[]) {
 AMX amx;
 cell ret = 0;
 if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1);
 if (amx_Register(&amx, console_Natives, -1)) exit(1);
 if (amx_Register(&amx, core_Natives, -1)) exit(1);
 if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1);
 printf("%ld\n", (long)ret);
 aux_FreeProgram(&amx);
 return 0;
}





505:デフォルトの名無しさん
09/11/25 07:49:39
// Pawnコンパイラの最小プロジェクト
// 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h
// それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要
// 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく
#include "sc.h"
int main(int argc, char *argv[])
{
return pc_compile(argc, argv);
}


506:デフォルトの名無しさん
09/11/25 14:11:52
luabindを使っていて気になったのですが、

//cpp
struct A {
 int x;
};
A *ptr;
A& ref() { return *ptr; };
A a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];
];
--lua
v = ref()
v.x = 1 --参照なのでC側のaにアクセスできる

クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数
(上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに
渡す方法は無いものでしょうか?

507:506
09/11/25 14:14:17
訂正

A a;
ptr = &a;
luabind::module(L) [
 luabind::def("ref", &ref),
 luabind::class_<A>("A")
  .def_readwrite("x", &A::x)
];

508:デフォルトの名無しさん
09/11/25 17:56:07
Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?


509:デフォルトの名無しさん
09/11/26 09:43:19
Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?

510:デフォルトの名無しさん
09/11/26 10:10:30
>>509
Lua側でioで記録、読み込みするコード書くしかないかも

511:デフォルトの名無しさん
09/11/26 10:18:51
Smalltalkなら可能です

512:デフォルトの名無しさん
09/11/26 11:32:21
>>509
言語機能としてはないので、無理やりやることになる。

一応こういうのはあるけど、安定してるかどうかは不明。
URLリンク(lua-users.org)

513:デフォルトの名無しさん
09/11/26 13:19:28
>>508
試してみましたが、luabindではligthuserdataではなくuserdataを使用して
独自の型ID等を付加してチェックしているようで、無理でした。
luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで
C++側の変数の参照をluaのスタックに積めることが分かったので、
これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。
luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が
記載されていないので、本来の使い方とは違う気もしますが。

514:デフォルトの名無しさん
09/11/26 13:24:32
>>513
通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。
C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。
別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。

まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。

515:デフォルトの名無しさん
09/11/26 13:29:57
休止モードを呼び出せばいいんだよ。

516:デフォルトの名無しさん
09/11/26 14:09:30
>>514
bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。

517:デフォルトの名無しさん
09/11/27 08:47:27
>>510 >>512
ありがとうございます。
Pluto調べてみます。

518:デフォルトの名無しさん
09/11/28 09:36:22
LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw
お前ら優しすぎw

519:デフォルトの名無しさん
09/11/28 10:21:52
小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな

520:デフォルトの名無しさん
09/11/28 11:31:33
最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。

521:デフォルトの名無しさん
09/11/28 12:02:53
Luaだと入力補完のあるエディタが無いから
逆にやり難いと感じる俺

522:デフォルトの名無しさん
09/11/28 12:11:48
>>520
大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって
機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ

サンプル:俺

523:デフォルトの名無しさん
09/11/28 12:45:05
まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。
オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、
60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。
最低ラインがPentium 4 2.4GHzくらいになった。

524:デフォルトの名無しさん
09/11/28 14:49:37
JIT付き静的型付けスクリプト言語
穴場だから誰か作れば
有名になれるかもよ

525:デフォルトの名無しさん
09/11/28 15:10:52
>>524
すでにあるっちゅうねん。
.NET Framework向けだがな。

526:デフォルトの名無しさん
09/11/28 15:54:13
>>.NET Framework向けだがな。

駄目じゃん

527:デフォルトの名無しさん
09/11/28 16:18:55
作りたいと本気で思ってる俺が来ましたよ
もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな

528:デフォルトの名無しさん
09/11/28 16:46:03
つAngelScriptJIT
ただしやり方は不明。

529:デフォルトの名無しさん
09/11/28 18:52:02
LuaJIT ってなかったっけ?

530:デフォルトの名無しさん
09/11/28 19:09:51
Luaは静的じゃないでしょ

531:デフォルトの名無しさん
09/11/28 19:18:30
ああごめん、静的を見落としてた

532:デフォルトの名無しさん
09/11/29 13:59:21
luaのlua_pcallのerrfncが呼ばれたときに、元のエラーメッセージとは
別にソースファイル名、行番号を収集する場合なんですが、
lua_getstackのレベル指定で、1から++しながら順にたどって
最初にcurrentlineの値が-1以外になったレベルがソースファイルの
階層と判断して問題ないでしょうか?


533:デフォルトの名無しさん
09/11/29 15:45:53
メンバアクセスの:と.ってどう違うの?

534:デフォルトの名無しさん
09/11/29 17:27:09
.が通常のメンバアクセスで、:でアクセスする場合は
v.(v ,〜 に展開される。
例: v:open(arg) -> v.open(v, arg)

535:デフォルトの名無しさん
09/11/29 17:53:43
d

536:デフォルトの名無しさん
09/11/29 18:04:12
>>17 問題1
使用言語: R

f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)}

> f(6)
[1] "abcdef"
> f(30)
[1] "abcdefghijklmnopqrstuvwxyz"

537:デフォルトの名無しさん
09/11/29 18:06:04
すみません。
書くところを間違えました。
ごめんなさい。

538:デフォルトの名無しさん
09/11/29 18:06:48
聞かれてないけどついでに補足すると.は[]に展開される
v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)

539:デフォルトの名無しさん
09/11/29 18:09:23
v['menber'](v, arg)

540:デフォルトの名無しさん
09/11/29 18:17:00
へー
じゃあメンバアクセスのたびにマップ検索してんのか
遅くならないのかな

541:デフォルトの名無しさん
09/11/29 18:28:37
空想具現化プログラミングというところから落としたlua5_1_3_Win32_mbenc_a2.zipを展開したところbin2c5.1.exeにウイルス検知ソフトが反応したんですが、これは大丈夫なんでしょうか?

542:デフォルトの名無しさん
09/11/29 18:31:42
>>540
そりゃ勿論遅いだろうさ

543:デフォルトの名無しさん
09/11/29 18:41:44
メンバだけの話じゃないだろうし。
変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4274日前に更新/247 KB
担当:undef