1 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:12:25 ] 禁止事項【臨時】 ・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。 (スレが荒れる原因となります) プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 12 pc11.2ch.net/test/read.cgi/tech/1188688416/ 前スレ 13 pc12.2ch.net/test/read.cgi/tech/1233143342/ 関連リンクは多分 >>2-10 あたり
445 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 21:24:38 ] じゃあ普通に実行時に必要な分だけ直接スクリプトからコンパイルしたら? IronPythonだったらプリコンパイルしたってどうせランタイム同梱しないと動かないでしょ それならコードはちゃんとGCされるし
446 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 22:06:30 ] >>445 それはインタプリタと一体どう違うのよ。
447 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 22:32:09 ] >>446 ILにコンパイルされたあとJITで実行されるから実行速度はDLLにプリコンパイルしておくのと変わらない 動的にコンパイルするなら一度に全部読みこむ必要はないからILへのコンパイルのコストも そんなに問題にはならないんじゃないかな
448 名前:444 mailto:sage [2010/03/03(水) 22:37:04 ] 議論どうもありがと。 今のところ、構造化したデータをシリアライズしてDBに入れておき、 読み込み時にデシリアイズしながら固定的なコードで動けるようにしようと思ってる。 元々自動生成してたコードは非常に定型的なものだったからね。
449 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:49:08 ] >ゲームの演出スクリプト ずいぶん前にコンシューマ用で同じような事をした そのときはメモリのフットプリントを最小にするのが目的だったのでスクリプト->バイトコードコンパイラでバイトコードインタプリタを実装って方式だった バイトコードの環境をPC上でエミュっておくとスクリプターのコンソールでテストやデバッグができるので開発時間の短縮もできた 今時のマシンだったらその場でコンパイルしても良いのじゃないかとおもったりするんだけどどうなんだろう?
450 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:00:29 ] >>449 用途に応じてコンパイラを作り直せば、 1つのゲームスクリプトでマルチプラットフォームに対応できる。 今回はPC向けだからRDB化するけど、DS向けとかだったら バイトコードっぽくコンパクトなバイナリ構造にするのがいいと思う。 もちろんコンパイラもコンパイルされたスクリプトの実行環境も 全部自分で用意するんですがねorz
451 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:25:58 ] クラウドコンパイラがあれば 全て解決するらしいし 難しいことを考えるのはバカが 頭のいいところを見せようとしているだけだな
452 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:51:15 ] ブラウザの皮をかぶってシンクライアントの復活か。
453 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 02:13:34 ] ゲームなんぞ、適当なバイトコードインタプリタを作れば十分そうだが
454 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 02:24:32 ] そそ、if elseif else endを実装して、 表記式も簡略化して、r20>=10とかr5==r10だけにして、 式もLET、or、not、sub、add、sto、lodの命令にしちゃえば楽。 評価式と式は逆ポーランドで書けるようにしても、そんなに大変じゃない。
455 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 03:26:06 ] >>454 それじゃBASE-x86や。
456 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 05:25:11 ] うちのプロデューサーが簡単にコンパイラの拡張を要求してきたよ。 マクロを実装して欲しいとのことだが、MASM並の者を要求してきてる。 プログラマ上がりのプロデューサーだから仕方ないが、 MASM並のマクロがどれだけ大変か分かっていない。 文字セットの問題もあるし。ヘタに知識があると手に負えない。 しょうがないのでダメ元でこの前のエロゲプログッラマにプリプロセッサのソースを 売って貰えないか聞いてる最中。
457 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 06:41:25 ] macroもmasm以上の仕様で、こんなの作れるかって言ってやった。 コンパイルスピードは5万行を1秒だってさ。
458 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 19:29:52 ] ソースを貰えたのだけど、アセンブラ部分が多くて読めない。 マクロも先読みして展開を繰り返している。 凄く速い。50万行1秒くらいのコンパイルスピードだった。 とにかく凄い。このまま自社用に改造していただけるか交渉中。
459 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 19:37:00 ] YOUはどうして交渉中なのにそんなことをペラペラしゃべってるんですかと小一時間
460 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 21:29:06 ] あなたの会社は先方と守秘義務契約を結んでいないのですかと小一時間
461 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 21:33:55 ] エロゲ会社のPGにそんなモラル期待するなよ
462 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 22:31:37 ] 過剰な性能だ。 C#のように機械的に処理できる定型的な構文を用意して 分割コンパイルできるように考えるのが本道なんじゃないか。
463 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 22:35:36 ] 何で C Sharp?
464 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 22:39:54 ] >>462 > C#のように機械的に処理できる定型的な構文を用意して 意味分からん
465 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 22:53:31 ] 特にC#って相当複雑な部類じゃないか
466 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 22:58:51 ] んん、C#のコンパイルは相当高速だぞ。 アセンブラなんかでカリカリにチューンするのが大事なのではなく、 コンパイルしやすい構文を用意することが大事だ、ということ。
467 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 23:08:06 ] 類似のほかの言語に比べてC#がコンパイルしやすいってことはないでしょ コンテキストキーワードだらけだし
468 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 23:28:53 ] パーサを書いたことのない人の発言。
469 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 00:12:08 ] ヒント:C#はTurboPascal出身
470 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 00:16:48 ] Mono のC#コンパイラのコードを見ればわかるが、レキサー、パーサーだけでも大そうなことになってる。 パースが簡単なのは、PASCALやBASIC、LISP。
471 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 00:28:39 ] varという名前の型が存在したらvarがキーワードじゃなくなったりするんでしょ
472 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 01:04:27 ] 演算子の優先順位を変えられるのって、haskellだっけ? 普通じゃないっぽいけど、実装は簡単なの?難しいの?
473 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 01:12:09 ] 優先順位毎に演算子のリストを持って、ソースコード中に演算子を見つけたら その都度マッチングすれば良いだけじゃないの。
474 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 01:42:10 ] パーサーはともかく、レキサー(っていうの?)が複雑なのはいやだなぁ。 あー、あれか?途中でSQLやXMLなどが書けるからとか?
475 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 02:12:19 ] スマン、興奮しすぎて秘酒義務を守らなかった。 あと、俺はエロゲじゃない。 macroは#define程度にして自分で作ることにした。
476 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 02:14:31 ] 秘酒義務->守秘義務 ゴメン間違えた。
477 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 02:17:41 ] 会社の人間がこいつを特定したらクビかな?やっぱり
478 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 02:19:25 ] 先方の情報も流したから多分……orz
479 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 02:31:37 ] 正直何一つ有用な情報は含まれてない
480 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 07:11:19 ] 真偽はどうであれ宣伝乙でいいよもうめんどくさい
481 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 11:06:14 ] 向こうは別に良いですとといってくれたが言及になりそう。 やはり簡易式で作ろうと思う。マクロも完全置換の#defineで。 みなさん、#defineを実装するときには文脈を見てますか?
482 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 11:07:16 ] 言及->減給 すまん。
483 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 22:19:57 ] C#のspaced keywordは正気の沙汰とは思えない。 >>481 m4マクロを先に勉強しといたら?
484 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 23:50:14 ] C#は 後方互換>>>バージョン管理>>>>>(越えられない壁)>>>>>>>>言語仕様の簡潔さ だから仕方ない
485 名前:デフォルトの名無しさん mailto:sage [2010/03/06(土) 23:55:06 ] >>483 m4マクロのソースならどうにかなりそうです。ありがとう御座いました。
486 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:17:37 ] >>484 大規模開発に耐えるよう厳格な規格で作られたC#やJavaのような言語の仕様が簡潔なものに収まるはずがない。 でもC#の開発効率の良さやコンパイラの鬼速さは本物。 あれはいいものだ。
487 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:28:19 ] Javaなんかそんなに複雑じゃないだろ C#の文法が複雑なのは既存のコードの互換性を維持しながら無理矢理拡張しまくってるから
488 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:32:33 ] >>487 > C#の文法が複雑なのは既存のコードの互換性を維持しながら無理矢理拡張しまくってるから C#のどこらへんが複雑? パースが難しいところもあるが、文法自体は単純だと思うが。
489 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:41:03 ] Ironyのサンプルにパース用のC#構文定義クラスがあるけど、RubyやPython向けより簡単なくらいだよ。
490 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:41:24 ] 結局C#のコンパイルが激速な理由については語られないのか
491 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:47:44 ] >>490 IDEでの話か?
492 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 00:55:21 ] cs.exe
493 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:03:18 ] ILへのコンパイルの段階ではほとんど最適化やらないし
494 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:03:36 ] どの言語と比べて?
495 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:33:59 ] >>483 >C#のspaced keywordは正気の沙汰とは思えない。 spaced keywordってなんじゃらほい 名前空間周りの実装のことかな… ufcpp.net/study/csharp/sp_namespace.html
496 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 07:16:59 ] >>495 理解できるかどうかわからんがこことか。 blogs.msdn.com/slippman/archive/2003/12/03/58443.aspx
497 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 07:32:01 ] >>496 C#で具体的にどこ?
498 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 08:53:35 ] >>496 dくす。元々はmixinみたいなことをやりたかった >At the same time, it allows users of the new functionality to have a >first-class experience of the additional language feature something >we felt was missing from the original language design. #define value class class けど副産物として >It literally pairs an existing keyword with a contextual modifier separated >by a space. The pair is treated as a single unit, such as value class, rather >than as two separate keywords. spaced keyword も考案されたと、ふむ
499 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 09:02:57 ] >>497 msdn.microsoft.com/ja-jp/library/88c54tsw (VS.80).aspx >シール メソッドは基本クラスのメソッドをオーバーライドしますが、それ自体は >どの派生クラスでもオーバーライドされません 多重継承周りの話だろうおそらく...
500 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 11:57:45 ] C#で2語以上まとめて一つのキーワードになるのはextern aliasとyield returnとyield breakだけじゃね
501 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:09:34 ] >>500 そういった意味では構文の拡張そのものは大したこと無さそうだね>spaced keyword むしろ拡張されるまで従来aliasやyieldが変数名として認められてたので そういったレガシーなコードとの共存が大変そうだ。
502 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:33:02 ] 文脈依存のキーワードは他にも沢山あるよ 予約語を増やすことがあるJavaとは違ってC#の言語使用を拡張する際は 過去のコードがそのままコンパイルできることが最優先されるので 予約語を増やさずにキーワードを増やすという無茶な事をしている結果
503 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:37:31 ] 旧バージョンでコンパイルするモードとか搭載すればいい気がする
504 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:41:22 ] >>503 馬鹿相手の商売はそれでは済まない。
505 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:02:03 ] var var = from from in in select (global::Hoge)from.where.global; foreach (var var in in) { yield return in.yield; } 試してないけど多分通る
506 名前:505 mailto:sage [2010/03/08(月) 12:04:53 ] すまんいろいろ間違えてる
507 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:05:03 ] 頭の中でロンドン橋落ちるが流れた
508 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:38:11 ] 漏れの頭では「インッ!インッ!」と再生された
509 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:34:53 ] re2c でUTF32対応すべく頑張ってるが、charだと動くのにUTF32だと 挙動が変。cursorが進まず無限ループになったりする。もう限界。 どこかサンプルあったら教えてください。
510 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:54:01 ] ひげぽん氏のschemeがre2cでUTF32やってるはずだが
511 名前:509 mailto:sage [2010/03/13(土) 09:03:33 ] UTF32のBOMでしたorz。 BOMなしだと動いた。3日悩んだ。
512 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:58:08 ] 迷惑な香具師だな
513 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 00:22:42 ] ADVのシナリオ記述にXML使ってる例って結構たくさんある
514 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 07:06:31 ] パーサ作るの楽だからな。
515 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:33:34 ] しかしスクリプタの能力はXMLの方が大変。
516 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:39:03 ] スクリプトをXMLで記述してそのまま実行って……ないよな? 元ソースや中間データとしてならともかく、 プレーンテキストでもメガ単位になるんだぞ、あれ。
517 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:43:11 ] そこはエロゲの程度の低さ。自分で規格を作れないなんてな。
518 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:46:31 ] いまどき数メガなんて誤差にすぎん
519 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:49:32 ] 少なくともここにいる奴らからは支持を得ないだろうね。
520 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:10:52 ] エロゲごときに、自分でPG言語作るなんてアホくさ
521 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:16:18 ] このスレには、よほどエロゲにコンプレックスを持ってるやつが居るようだなw
522 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:32:38 ] 上に乗っかるコンテンツを、俺らの作業領域にあんま関係づけて語ってもな。 なんかド素人のゲーヲタ視点っぽい。
523 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:39:54 ] >514 XMLのパーザ簡単じゃないと思うけどなぁ。 セパレーターを調整したS式が一番良いと思う。
524 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:03:16 ] 最近はJSONやYAMLのパーザも増えてる。
525 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:15:40 ] 書く側に複雑な知識は期待できないとなれば、 wikiやTeXぐらいの記法が限界なんだろうか?
526 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:36:02 ] >>523 汎用のパーサを使わなくても(デ)シリアライザに直接食わせられるのが魅力かも。 オレはスクリプト記述の用途としては使わないが、 スクリプトの文法定義にXMLをコンパイラの設定ファイルとして使ってるよ。 S式はどーだろ?
527 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:46:36 ] >526 ライブラリが充実していればそうだけど、パーザを自分で組むとしたらXMLは無駄に複雑過ぎるよ。 要素と属性値みたいに無駄に種類が多かったり、終了タグに名前を書かなきゃいけないとか…… S式が嫌われているのは ・グループ化で使っている()が字面として強い ・セパレータとしてスペースが使われているから、普通の英文と相性が悪い 辺りだと思うんだけど、これを改善すればずいぶんと受けが良くなるんじゃないのかな? 昔こんなの作ったけど、なかなか悪くなかったと思う。XMLと相性も良かったし。 |要素名;要素の中身|: (|を表現するときは||を使う)
528 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 00:23:25 ] >>527 そもそもXMLはシリアライザやテンプレートエンジンに 吐かせるかしかせず、手では触らないことにしている。 XMLは静的型付き言語、JSONやYAMLは動的型付言語と相性がいいという印象。 >|要素名;要素の中身|: 悪くないんじゃないかな。縦棒は比較的使用頻度が少ない記号だし。 オレは [コマンド名 param1=arg1 param2=arg2] の形式にしてる。計算式は原則としてスクリプト中では使用させない。 これでも案外実用になる。
529 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 01:10:13 ] >>527 > 要素と属性値みたいに無駄に種類が多かったり 冗談だろ?
530 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 01:35:13 ] >529 マジ、マジ。属性値は本質的に制限付き要素なんだけど、わざわざ構文分けて別物にするほどのものじゃ無いよ。 『<element>属性値</element>なんて書きたくないよ』なんて思うかもしれないけど、それは要素の表記が 重すぎるのが問題なわけで。
531 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 01:42:37 ] それはあなたのDTD定義が適切でないだけ。 plistみたいにやりたければ、どんどんやればいい。 XMLの問題は「構文が単純すぎて」冗長になること。 組み込みタイプとリテラル表現がないのも一因。
532 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 02:10:00 ] え?DTD解析までやれと?どんだけ難易度高いんだよ。 やっぱりXML使うんだったらライブラリ必須じゃない?
533 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 07:21:11 ] >>528 「=」を「:」にすればObj-Cだな。
534 名前:509 mailto:sage [2010/03/20(土) 08:24:31 ] 質問です。 re2c+bisonでAST作成までだいたい出来たところまで来ました。 この先の最適化ってところが、まだ良くわかりません。 解説しているサイトとか、参考になりそうな所を教えてください。 (constant同士の演算くらいしか思いつきません)
535 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:13:01 ] コンパイラ作ってるの? とりあえず中田先生の「コンパイラの構成と最適化」は見た?
536 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:18:48 ] 最適かなんか後回しでいいのに
537 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:55:28 ] >>534 最適化は後回しにした方がいいと思うけど、いずれにせよASTから中間言語に直す方がいいな。 命令型言語なら3番地コード 大体どの教科書にも最適化は三番地コードに対するアルゴリズムとして書いてある
538 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:23:49 ] 先にある程度知っておいてからでも遅くは無いよね どうせ最初から作り直しになるんだけど
539 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 11:35:21 ] 最終的にどんなコードになるのかどうやって実行されるのかとかわかってないと 最適化なんかやりようがない
540 名前:509 mailto:sage [2010/03/20(土) 12:04:43 ] コメントありがとうございます。 >535 >コンパイラ作ってるの? いえ、今考えているのは仮想マシン書いてバイトコード実行、って 感じのスクリプトエンジンです。スタックマシンていうのが小さく 書けるみたいくらいの知識しかなくて・・・ なるほど・・・。とりあえず本買ってみます。
541 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 12:11:59 ] まずASTを直接評価するインタプリタを書いてみれば?
542 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 02:03:33 ] >>540 中間言語のニーモニックを多少最適化することより、 仮想マシン自体の性能アップの方が遥かに大事だよ。 ニーモニックの最適化が重要になるのは、吐き出すのがネイティブコードの場合だね。
543 名前:513 mailto:sage [2010/03/21(日) 22:55:18 ] >>513 でまさかこんなにレスが付くとは XMLでスクリプト書く場合の負荷については 能力の低いマシンならともかく、PC上でのプログラムだからそんなに性能を気にすることはなかった。 パーサーは自作なんて無理なので既成のを使用。 XML全体と同じ内容の木構造データにして実行する方式 (バイトコードとか仮想マシンを作るような知識はないので) なので、実行はそれなりに速いと思うけど ファイルサイズが大きくなると、最初の読み込みに時間がかかってしまいそう。 メリットは妥当性検証のあるエディタが使える事。実行する前にエラーが分かるのって大きい。
544 名前:デフォルトの名無しさん mailto:sage [2010/03/21(日) 23:14:43 ] >>543 >ファイルサイズが大きくなると、最初の読み込みに時間がかかってしまいそう。 試してないのかね。 5MBぐらいのスクリプト作って読ませてみれ。
545 名前:513 mailto:sage [2010/03/21(日) 23:58:08 ] >>544 そんな大きいのは試した事ない・・これから作って試すわ。 150KBぐらいのがあるけど、それだとCeleron 1.4Ghzで40msぐらい。 150KBで単純に40msずつ増えていくとして、5MBだと1350msぐらいかな。 こんな感じの構造にしているんだけど、block直下にある要素をコマンドとして実行させたり、 クリック待ちなどで中断するのは簡単なんだけど(要素のインデックスを保存して行ってる)、 ifの中でクリック待ちで中断するような時はどうすりゃいいんだろう・・ if文の中まで実行しなくちゃいけないし、セーブで途中の要素から実行しなくちゃいけないときはどうするんだろう。 中断すること考えなければ簡単なのに。 読み込み時に、XMLの要素全部にIDを割り当てて、ロード時はそれをもとに再開するとかだろうか。 <function name="main"> <element param="1"/> 表示するテキスト <if expr="a=6"> 変数aが6のときの処理 <else>そうでないとき</else> </if> </function>