- 1 名前:デフォルトの名無しさん mailto:sage [2014/07/20(日) 11:16:19.37 ID:p6eMVAxc.net]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 Wikiのまとめページ www6.atwiki.jp/compilerandscriptengine/
- 205 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/24(火) 08:04:58.95 ID:UGr8Bbp/.net]
- >>198
ある計算式eについて、eの部分式を互いに参照するエントリーとして再帰的にテーブルに登録する。 登録するときにソートと重複チェックを行えば、テーブルは一意化できる。 テーブルの各エントリーの参照構造は、木構造のノードを成す。
- 206 名前:デフォルトの名無しさん [2015/02/24(火) 11:33:08.23 ID:wemgVVUb.net]
- >>198
式の属性に関する再帰方程式の近似解をニュートン法のように求めること、 これがデータフロー計算解法の本質と理解できてないんじゃない? ドラゴンブックのavailable, killedの説明の所読んでみれば? 同じパス内でループしながら収束するまで計算するのよ。
- 207 名前:デフォルトの名無しさん [2015/02/24(火) 11:35:18.85 ID:wemgVVUb.net]
- ドラゴンブックのどの節か書こうとしたけど本が見つからない...
とりあえず、ここのp.10から。 dragonbook.stanford.edu/lecture-notes/Stanford-CS143/20-Optimization.pdf
- 208 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 17:44:49.00 ID:H95vOz7j.net]
- >>199
そのテーブルに式を入れるときその式が不変かどうかを判断する部分でわからなくなってくる >>200 ほとんど読んでないドラゴンブック見たら最適化部分についても書いてるな これ読むの辛いな 頑張って読んで出直すか
- 209 名前:デフォルトの名無しさん [2015/02/24(火) 17:53:23.22 ID:avE+zAm1.net]
- 多分ちゃんと読んだ方がかえって早い。
共通部分式A,Bがあって、例えばBの方の除去をやると、 Bの到達性がAの到達性にも付与される。 このことは他の属性に影響を及ぼしうる。 よってもう一度計算をしないとより正確な属性を求められない。 以下ループ。 よって収束するまで繰り返すことになる。
- 210 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 18:04:39.54 ID:H95vOz7j.net]
- 変化がなくなるまで最適化処理を繰り返すのはわかった
- 211 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 19:26:42.04 ID:wUDy2moe.net]
- >>197
コンパイル時間がか?
- 212 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/24(火) 20:45:40.84 ID:UGr8Bbp/.net]
- __declspecとか__attribute__などをパースできないと正確な構造体型のサイズ
を求めることができない。しかしattribute周りの文法がメチャクチャやなあ。
- 213 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/03/03(火) 01:05:04.60 ID:t6l1EelO.net]
- 次は"typed value"の扱いだな。定数にも型がある。型付きの値を
扱えなければ、正確な定数値を求めることはできない。
- 214 名前:デフォルトの名無しさん mailto:sage [2015/03/03(火) 04:49:45.03 ID:ZU1MaIS8.net]
- 最適化なんてイラナイよね、何処まで処理系に依存する気なんだよw
- 215 名前:デフォルトの名無しさん mailto:sage [2015/03/08(日) 14:52:45.39 ID:u8r5MR2m.net]
- 初心者だがHSPって凄いね
自分でHSPみたいなの作ろうとすると途端につまづくw 内部でメッセージハンドルに登録していく言語だと思うんだけど こんなにwinを感じさせない文法でwinと親和性高く作れるとは
- 216 名前:デフォルトの名無しさん mailto:sage [2015/03/08(日) 17:15:18.44 ID:8c6PRT7L.net]
- ランタイムの機能の量で躓くならともかくあの文法でつまづくなら>>1で概要把握して本読めば
- 217 名前:デフォルトの名無しさん [2015/03/09(月) 14:52:03.75 ID:MIZIuI1f.net]
- 文法とOSに何の関係が?
- 218 名前:デフォルトの名無しさん mailto:sage [2015/03/09(月) 16:12:25.65 ID:J8WIpDef.net]
- いただきジャンガリアンに辛酸をなめさせられたのだろうよ
- 219 名前:デフォルトの名無しさん mailto:sage [2015/03/09(月) 17:25:40.74 ID:VM1FVYaf.net]
- うーん初心者だから言い方わかんないんだけど
コマンドプロンプトのスクリプトってコマンドに従って単に実行していくだけだよね でもwinだと実行されるのは素直に考えるとメッセージが来たとき cでウインアプリつくるときはメッセージ毎に処理を書くけど上から順に読むスクリプトは それはできないわけだからどう整合性取るのかなってことで悩んでた 結局メッセージ毎にリストがあってコマンドを読んだらそのリストに関数ポインタ名で追加、 メッセージ毎に呼ばれる関数はその種別のリストを上から順に実行していく こんな感じで作ったけどこれでいいのかな
- 220 名前:デフォルトの名無しさん [2015/03/12(木) 21:28:48.21 ID:BlO2EFmA.net]
- そりゃ文法じゃなくて実行モデルだな。
イベント駆動ってことでしょ。
- 221 名前:デフォルトの名無しさん [2015/04/13(月) 21:09:38.60 ID:qtTodoaL.net]
- 「Cのコンパイラなら何日かかけて作っても良いが、C++は、一人で
作るのは嫌だ。文法をきちんとカバーするのに日数がかかりすぎるから」 と言われたよ。
- 222 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 02:22:50.19 ID:eOWj6Ffd.net]
- javaに近い構文の言語をつくろうとしてるんだけど、
ようやくchar配列に変換したソースから関数の外側を構文解析できた。 山括弧<>、文字列リテラル、コメントに気をつけつつ、 なんとか関数の中を無視してクラス・変数・関数の名前や型名を取得して 関数の中身にとりかかるところ。 関数の中身は丸括弧()が難関になりそう。 AAAA bbbb = ((HHHH)cccc.dddd.eeee(ffff.gggg(), jjjj)).iiii(); bbbb.kkkk = -10/(8-3)-9/-3
- 223 名前:デフォルトの名無しさん [2015/04/22(水) 20:33:48.48 ID:rBARkljm.net]
- >>216
まるで違う言語に見えてしまうのだが。
- 224 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 21:30:55.14 ID:eOWj6Ffd.net]
- >>217
最初はクラス名、メンバ変数、メンバ関数を全部調べてからじゃないと 関数の中身に取り掛かれないと思ってた。 でもクラス名・変数名・関数名に区別は不要で、記号をヒントに階層を分解して、 それから型名の存在の有無・整合性を調べるという風にフェーズを分けれそう。 でも()が演算の優先順位、型キャスト、メソッド...どれに使われているのか 区別できるかは不安。for文とかは最初に予約語が入るからやりやすそうだけど。 Person person = ((Factory)group.cache.getFactory(provider.getResource(), url)).create(); person.id = -10/(8-3)-9/-3;
- 225 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 22:59:19.66 ID:LKLiXgla.net]
- いまいち分からないけど、識別子の次にあったら関数呼び出しで
それ以外は式とかでいけないの
- 226 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 23:28:51.38 ID:eOWj6Ffd.net]
- いけるか分からない。とりあえずやってみるってところ
- 227 名前:デフォルトの名無しさん mailto:sage [2015/04/23(木) 08:14:58.39 ID:+O6VWDUu.net]
- >>219
構文次第 てか、普通識別子に続くカッコを見て初めて関数/メソッドってわかるわけだし
- 228 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 01:02:40.49 ID:RiYFohCl.net]
- メソッドの中が上手くいかんというか何から始めたら良いのか分からん
コンパイル速度が遅くなるけど、分解フェーズを何層にも分けて 何度もループで調べていけば良いのかな
- 229 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 06:59:39.15 ID:EFAP6joI.net]
- コンパイラの教科書の一冊でも読んで構文解析を勉強してみ
- 230 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 09:38:16.26 ID:ZDDsb7dY.net]
- C系のクソみたいな構文ルールをそのまま真似てどうすんの
自作なら作りやすいようにキーワード追加すればいいのよ キャスト式にキーワード付けなかったのは最大の誤りの一つ
- 231 名前:デフォルトの名無しさん [2015/04/27(月) 09:56:10.90 ID:qDIHhHi0.net]
- SSA形式からスタックマシンのコード生成の最適化みたいなのに参考になる文献ってないかな?
- 232 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 14:22:00.53 ID:RiYFohCl.net]
- >>224
そうだね。HaxeとかFlashからぱくって、C形式のキャストは無くしてみるわ int i = cast Integer ( 0.005f ); int i = 0.005f as Integer;
- 233 名前:デフォルトの名無しさん [2015/04/28(火) 18:20:14.24 ID:PlNb5vya.net]
- 最終的に何を目指そうかしら
1)LLVMで動かす → 超難しそう 2)Luaのように組み込みスクリプトとして動かす → 重そう。メモリ管理は全部ウィークポインタで良いのかな (C/C++組み込みならnew&deleteするようなスクリプトでも良さそう) 3)JavaScriptなどに変換 → たぶん例外のバックトレースとかを変換するデバッグ環境が必須
- 234 名前:片山博文MZ ◆T6xkBnTXz7B0 [2015/05/05(火) 23:02:55.34 ID:p1RbtT4Y.net]
- コンパイラーの品質保証は、数学で証明する時代だ!!!
Coqと数学でコンパイラーが作れる!!! compcert.inria.fr/compcert-C.html
- 235 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 18:57:31.49 ID:SYpntI8c.net]
- バイトコードインタプリタつくっているんだけど
スタックマシンのコンパイラについて パラメータスタック(データスタック)はヒープ上におくべき? それともネイティブの領域におくべき?
- 236 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 19:41:52.28 ID:SYpntI8c.net]
- >>229
訂正 コンパイラー>仮想機械
- 237 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 20:41:51.08 ID:DhZyBtDK.net]
- >>230
ネイティブスタックにデータも置くって事だよね? データスタックは分けておいた方がイロイロ楽だったので列挙 たしかこんなの GC使う様な実装の時の仕分け 実行パスがJITでコンパイルコードと非コンパイルVMコードの行ったり来たりするとき 例外のスタックトレース(これもJIT時のアレコレあり) チープマシンにVM仕込むときアセンブラで書くのが楽しい 最後はちげぇけど
- 238 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 21:02:43.06 ID:SYpntI8c.net]
- >>231
自分のVMは典型的なスタックマシンで パラメータスタック(データスタック)とコールスタックは別です。 そのうちデータスタックをヒープ内におくか アセンブリでかかれたほうのネイティブの領域におくかってことです。 ネイティブ領域においたほうが実際のアドレスとVM上でのアドレスの変換がないので 速度としては速いのですが 欠点としてバイトコードからスタックを参照することができません 焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、 基本的になければネイティブ領域におこうかとおもっています これまでつくった経験がないので設計としてどちらがよいかわからずお聞きしました
- 239 名前:デフォルトの名無しさん mailto:sage [2015/05/10(日) 09:31:50.02 ID:ZQGgJB6p.net]
- >>232
> 焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、 バイトコードの設計は終わってるんじゃないのか? バイトコードの設計終わってりゃ参照の必要があるかどうかはわかってるだろうし、バイトコードの設計終わってないのに VM の構成考えてるならお前が終わってる
- 240 名前:デフォルトの名無しさん mailto:sage [2015/05/10(日) 09:50:11.77 ID:YKkUWNQO.net]
- >>233
その通りわ 出直して来ます
- 241 名前:デフォルトの名無しさん [2015/05/19(火) 18:50:21.34 ID:a+aajTcz.net]
- 番兵の文字は
utf-8でも16でも32でも-1でいいんですか?
- 242 名前:デフォルトの名無しさん mailto:sage [2015/06/24(水) 17:14:03.39 ID:ZsIPeucp.net]
- 動的型付けってLLVMだとどうやって実装するんだろ
- 243 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 19:59:28.32 ID:h+kJ9m+3.net]
- 構文解析+Cに変換して内部でgcc呼んでコンパイルするプログラムはコンパイラって呼んでいいの?
- 244 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 20:11:15.28 ID:tLjH7MQJ.net]
- トランスレータじゃねえの
- 245 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 08:23:11.34 ID:SvdcMd32.net]
- >>238
変換したCコードを出すならトランスレーターだけどバイナリまで出すならコンパイラーでいいだろ
- 246 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/07/28(火) 03:30:13.81 ID:92wk7rzR.net]
- 果たして文法を仮想化できるか
- 247 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:24:37.58 ID:zh/OeKTd.net]
- 凄いこと発見したんだけれどもΛの記号は上の尖がったところがルートで
下の二つの棒が辺を表しているんだな
- 248 名前:デフォルトの名無しさん [2015/08/19(水) 22:05:03.04 ID:caRlC37E.net]
- 言語非依存の仮想マシンっていうアイデアがいまいち大成功していないように見えるのって
なんか理由があるのかな。
- 249 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 22:59:51.18 ID:7Z0FzJPx.net]
- 落ちてたllvmスレを立て直した
【最速へ】LowLevelVirtualMachine 2【LLVM】 peace.2ch.net/test/read.cgi/tech/1439992758/
- 250 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/08/19(水) 23:17:16.98 ID:ynuNSl9L.net]
- >>242
めちゃくちゃ成功してまんがな。LLVM,clang知らないの?
- 251 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 00:06:05.42 ID:BI1Ot8hx.net]
- >>244
実際に成功していても成功していないよ・う・に・見・え・るって話
- 252 名前:じゃないの?
XCodeのコンパイラがllvm,clangだってのは開発者にしか見えないしclangの話だけ聞いているとgccが組み込み機のCPUに対応してたころみたいに派手に活躍してるとは感じられないって事じゃ無いの? [] - [ここ壊れてます]
- 253 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 04:55:31.33 ID:uOqBPetd.net]
- たぶん外国には、CASL2のような仮想アセンブラを使う、
情報処理試験が無いのだろう 2人の大学生が作ったLLVMに、Appleが飛びついた。 それで、Lattner はAppleに就職した
- 254 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 11:06:47.70 ID:XXXu8/KU.net]
- 良く言えば新世代の輝き
悪く言えば発展途上の不安定さ さらに組み込みで言えばカバー範囲の幅広さは犠牲にされがち 将来性でメシが食えるのはごく一部
- 255 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 11:31:12.43 ID:WmW0wMbd.net]
- 痛い文章だ
- 256 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 00:47:20.35 ID:OjRQ25eS.net]
- マルチメソッドを効率よく実装するにはどのようにすればよいですか?
- 257 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 01:10:40.39 ID:YG1kZeuQ.net]
- マルチメソッドって何?
- 258 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 01:36:14.61 ID:OjRQ25eS.net]
- OOPの最も基本的な機能です
引数によって、メソッドが切り替わります 多態といいます
- 259 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 02:01:55.26 ID:YG1kZeuQ.net]
- オーバーロードのことですか?
ではマングリング
- 260 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 02:21:03.16 ID:OjRQ25eS.net]
- マルチメソッドはオーバーロードでは無いです
一般にオーバーロードは静的ですが、 マルチメソッドは動的です
- 261 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 08:00:36.10 ID:WVPITNbu.net]
- >>251
> 引数によって、メソッドが切り替わります はい?
- 262 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 08:19:25.57 ID:jJXNOMmM.net]
- clojureのdefmultiみたいな奴じゃないの?
- 263 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 11:49:46.23 ID:BYoao/vR.net]
- 多重ディスパッチのニッチな要求に応えるものか
それとも単純な動的バインディングだけの問題なのか
- 264 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 18:36:02.43 ID:XR0u/yGZ.net]
- マルチメソッドはC++相談室を検索すればなんなのかがわかる
- 265 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/08/30(日) 17:45:45.69 ID:bYlp1Mb/.net]
- >>249
パターンマッチを効率よく行う
- 266 名前:デフォルトの名無しさん [2015/08/30(日) 19:15:42.50 ID:nhXJHOe7.net]
- 型を連想配列やトライ木で管理すればO(1)
- 267 名前:デフォルトの名無しさん mailto:sage [2015/08/30(日) 20:08:17.93 ID:brcjELIg.net]
- >>259
clojureはソレだね
- 268 名前:デフォルトの名無しさん [2015/09/17(木) 12:38:19.48 ID:mHCGeegj.net]
- 中間言語の設計に関するノウハウとかアンチパターンとかが書かれた本誰か知ってる?
LLVMとかP-codeとかJava VMとか、あるいはKnuthのMIX/MMIXみたいな機械語に近いレベルの言語を ソフトウェア実装すること前提に設計する場合について知りたい。 今言語設計してて、そろそろ構文解析できそうだから学んでおきたいんだけど。
- 269 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 19:56:34.99 ID:7ftMaB4B.net]
- 最初はネイティブに落とした方がいいぞ
中間言語とか遠回りしてたらアホみたいだぞ
- 270 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 15:07:01.58 ID:QAQ6VXx0.net]
- そんな物他人に教わるくらいならおとなしく既存のを使っとけ
- 271 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 20:35:24.73 ID:F4ynHS7Z.net]
- 本として出して需要あるか?もしかしたらサーベイ論文なら探せばあるかも
- 272 名前:261 mailto:sage [2015/09/18(金) 21:16:12.07 ID:ArWsl8Ey.net]
- >>262
素直にコンパイル出来ない言語を設計してるので(clispのような)、snippetの表現をx86/amd64表記にする意義が薄いんですよね。 >>263 凝り性なもので。 >>264 一応ciniiは一通り眺めたけど、中間言語の設計に関する論文って無いんですよね。 素直に
- 273 名前:「中間言語」で調べると自然言語の翻訳に使う方が大量に引っかかってつらい…… []
- [ここ壊れてます]
- 274 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 22:17:11.93 ID:i7DEL3du.net]
- >>265
動的型付け必須系? ならErlangの論文とか資料あさるといいかも
- 275 名前:261 mailto:sage [2015/09/19(土) 09:19:04.79 ID:YlOPp2hb.net]
- >>266
swiftのように演算子をユーザー定義出来て、 c++のように同名異引数の関数を定義出来て、 Lispのように引数間のカンマが要らず、 Rubyのようにカッコを省ける そんな言語を設計中です。 それらの両立のために実行中に文法を書き換えて構文解析器を再構成するという手法を採ってるので、コンパイル出来ないんですよね…… clispのリードマクロを文脈依存に拡張したものだと言えば大体あってるかと。 ちょっとErlang関連の資料を見てみます。
- 276 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 10:26:16.30 ID:7hgo9IJ4.net]
- >>267
列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの?
- 277 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 11:29:33.20 ID:I9CWDfzW.net]
- >>267
コンパイル時の都合だよね? VMの設計とはなんの関係もなさげなんだけど
- 278 名前:261 mailto:sage [2015/09/19(土) 12:48:32.00 ID:YlOPp2hb.net]
- >>268
今考えてる言語では、演算子の扱いが関数を引数の場所に関して一般化した第一級オブジェクトなので 前置引数の個数や後置引数の個数は実行してみるまで分からないので コンパイル時の識別子を用いた構文解析は無理です。 前置演算子と一引数関数が別物って変だと思ったのでそうしました。 c++風に書くと、こんな感じのが通るイメージです。 g = [](a,b){return a - b;}; if (複雑な式) { f = [](a|b,c){return a + b + c;}; // (a|b)で前置引数としてa、後置引数としてbと示すものとする。 } else { f = [](a,b|c){return a + b + c;}; } // gは2引数演算子、fは3引数演算子。 // ここではgの優先順位はfより低いものとする(c++での表現方法が無いので)。 // カッコやカンマを省いてある場合、上の条件のどちらが走っても構文上は受理される。 // 複雑な式の結果によって、これはg(1, f(2, 3, 4))及びg(f(1, 2, 3), 4)のどちらにもなりうる。 cout << (g 1 2 f 3 4) << endl; >>269 そういうわけで一度に全部読み込んでコンパイルしてから実行するという事が出来ないので、 折角だからVMも設計しようと思った次第です。 ASTから中間言語に落とすとcontinuationの実装が楽になるので。
- 279 名前:デフォルトの名無しさん [2015/09/19(土) 13:15:38.32 ID:hJISNbn0.net]
- g 1 2 f 3 4は構文解析後にはどういうツリーになっているの?
フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?
- 280 名前:261 mailto:sage [2015/09/19(土) 13:24:30.87 ID:YlOPp2hb.net]
- >>271
字句解析でばらばらにしてLL(1)でカッコの対応等について解いた背の低い木にして、その後実行時にLR(1)で式毎に再度解析するので > フラットなままで構文解析終えて実行時にまたプチ構文解析をするの? これであってます。
- 281 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 14:10:09.60 ID:I9CWDfzW.net]
- おもしろい事かんがえてるなー
ElixirとかBEAM-VMとか参考になるんじゃねぇの?
- 282 名前:261 mailto:sage [2015/09/19(土) 15:18:02.65 ID:YlOPp2hb.net]
- >>273
高信頼・並列分散に特化したVMのようにあちこちで言われてるみたいですね、ErlangのBEAM-VM. そう考えるとLLVMは解析容易性特化、JVMはVM自体の実装容易性特化といった所でしょうか。 VMを作るなら何かに特化させるべきなような気がしてきました。
- 283 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 00:52:44.57 ID:m4tWKm8w.net]
- 演算子に限定する意味は何だろう
cout << (g 1 2 f 3 4) << endl; こんなの一見して何してるのか判らないしいっそ構文ごと第一級にすればいい そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ クロージャじゃあかんのかね
- 284 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 09:22:45.62 ID:tHziPwGz.net]
- この程度のアイデアしかないようじゃ才能ないわな
- 285 名前:261 mailto:sage [2015/09/20(日) 11:27:11.87 ID:oZCwg6h7.net]
- >>275
今作ってる実装だと構文はhead, body, precedence, directionをキーとするオブジェクトの配列になってるので 構文も第一級オブジェクトのインスタンスになっています。 説明不足ですんません。 コードは現在こんな感じ。もし読みたければどうぞ。 https://gist.github.com/pixie-grasper/d07388493204a5e370a2 debug-printが多かったりコメントが少なかったりしますが…… > そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ 必要性については私にはまだ分かりませんが、 私は昔レキシカルスコープもクロージャもポインタも継続もマクロも無い素晴らしく酷い言語(古いBASIC)で全てを考えていたので、 その経験から、どんな機能も使い慣れると必要になってくると思っています。 >>276 私馬鹿なもんで。 いいアイデアがあったら是非とも実現してくだされ。
- 286 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 11:30:35.69 ID:O6Xw3ijC.net]
- >>275-276
俺にも意味があるようには見えないけど、俺の知らない用途があるのかもしれない とにかくわからないならスルーしとけよ
- 287 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 18:18:01.68 ID:tHziPwGz.net]
- >>277
絶対真似しないと約束するなら教えてもいいぞ
- 288 名前:261 mailto:sage [2015/09/20(日) 18:52:58.39 ID:oZCwg6h7.net]
- >>279
じゃぁ真似せずに似たようなものを考えつくまで考え抜きます。 私馬鹿なので。
- 289 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 20:15:16.31 ID:9UpT3677.net]
- >>274
BEAMは引数のMatchで分ける処理がVMにあるんでそういう意味でオモシロイコト -> BEAM参考になるんじゃねぇのって話です
- 290 名前:261 mailto:sage [2015/09/20(日) 21:59:23.12 ID:oZCwg6h7.net]
- >>281
調べてみました。 BEAMだと実行時にモジュール名、関数名、及び引数の数を指定して呼び出す関数を同定するんですね。 実引数の数がコンパイル時には分かるから命令語に引数の数を組み込めるのだと思いますが…… 今考えてる言語だと、実引数の数が自明じゃないので使いにくい気がします。 助言、ありがとうございます。
- 291 名前:デフォルトの名無しさん [2015/09/21(月) 19:55:02.85 ID:x6IKJHaI.net]
- スクリプト型の言語って実行時にコンパイル(構文解析?)が発生するから、コンパイル型の言語より遅いのですよね。
では、アプリケーションの起動時にスクリプトを読み込んだ後のパフォーマンスは、スクリプト型もコンパイル型も大差ないのでしょうか?
- 292 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:31:03.01 ID:XzxcjOEi.net]
- 大差あります
- 293 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:42:55.66 ID:LoRahTLC.net]
- >>283
「スクリプト型の言語」やら「コンパイル」やらが何を意味してるのかにも依りますが、 よくある速度重視の構成だと、読み込み時に構文解析や意味解析、中間コード生成を終わらせて 実行時に中間コードを(1)実行可能バイナリに変換するパターンと、(2)仮想マシン上でエミュレートするパターンとの二通りがあります。 (1)の場合は変換処理そのものがそれなりに重く、 しかも高度な最適化を掛けるとそれ自体に時間が掛かってしまうので 最適化は殆ど掛けられずコンパイラ型言語の2〜3倍は遅くなりますし、 (2)の場合は1命令実行するのに命令を読み込んで比較してジャンプして、 とCPUがアナログ回路上で並列処理してる計算を逐次的に実行するのでかなり重くなります。
- 294 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 13:12:55.44 ID:f7gaXzgp.net]
- 比較にならない
スクリプトは柔軟性重視なので速度を出すためのチューニングは後回しにされる 起動時にある程度最適化できるものもあるが、 最適化のために数十秒〜数分かけたりもできない また実行直前にならないと決まらない内容も多く無駄になってしまう そもそもコンパイラ型で速度重視のソフトを作る場合は 開発者自身やライブラリがメモリレイアウトなど制御し効率を考慮したコードを書く(書ける)
- 295 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 18:30:15.12 ID:TpmuUHaP.net]
- 自分でC言語っぽいスクリプト言語とかデータ形式作ってみたけど、どうだろ?
ちなみにスクリプト言語はSC3_Compilerってのに入ってるが。 ttps://osdn.jp/users/mitubasa/pf/BuildContainer/files/
- 296 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 01:18:18.90 ID:4Rxec7m6.net]
- >>283
「スクリプト言語」の定義は難しいが、おおむね (1)(ユーザーから見て)明示的なコンパイルというフェーズを経ずに実行される (2)変数に型がない (3)実行時に行える処理の柔軟性が高い(例えば関数定義など) という特徴を持つ言語を指すことが多いだろう。RubyやPythonなど で、それぞれの特徴が、実行速度を遅くすることに貢献する。 (1)→ 最適化に時間を割けない (2)→ 実行時に、変数が指すオブジェクトの種類を調べる処理が毎回入る。 (3)→ これを実現するためにバイトコードインタプリタで実装されることが多く、遅くなる もちろん厳密な定義ではないので、あくまで「おおむね」という話。 Javascriptみたいな変態事例もあるし断定的なことは何も言えない 言葉の定義の論争は不毛
- 297 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 11:28:42.59 ID:GpPO3Mdd.net]
- >>287
(一切実行せずに)サラッと眺めた感じだと 字句解析くらい生成系やライブラリ(flex++やboost::spirit等)に頼ってみたらどうかなってのはあるかな。 変数名としてnCount(整数,カウント)の代わりにixArg(添字,引数)を使うとか 細かいところは幾つかあるかも知れんけど、それなりに読みやすいと思うよ。 stdafx.cppって名前で使ってることは察したけど、VS使うんなら プロジェクト開くのに必要なファイル(.sln等)を入れるとか、 或いはMinGW/Cygwin/msys2なんかのUnix系ツールでさくっとビルドできるようにcmakeを書くとかしておくと 評価する人が増えると思うよ。
- 298 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 21:40:28.41 ID:Qeh3kLaJ.net]
- おれバカで不勉強だから知らなかったえけど、最近の処理系って状態コードのお持ち帰りをしてくれるんだね
手続きAを呼んだ直後にグローバルな状態変数に何がしかの情報が入ってる(何も起きなかったとか、フックして停止させるの推奨みたいな) 面白いな〜 データを加工して返すー>関数(関数内で処理のフローに関係する記述は禁止) 処理のフローに関係するー>手続き(状態コードを標準で返す) 複数個所使うで同じ様な処理をまとめるー>サブルーチン(スタックフレームの無いローカルな手続き) プログラムを組み上げるときの構造や構成に行儀のよい作法がないと プログラムのどの時点でどのデータがどの構成や状態にあるのか把握ができなくて発狂するww で、なんでも記述できる自由度の高い処理系ほど読解困難な発狂プログラムが出来上がると
- 299 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 23:32:01.45 ID:F9TK8Py4.net]
- >>290
状態コードのお持ち帰りって何?
- 300 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 02:07:01.38 ID:mXRqVUnf.net]
- 何を言ってるのかさっぱりワカラン…
- 301 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 02:50:21.48 ID:rErEEAIK.net]
- クロージャのことかな・・・
最初Smalltalkやlispの環境のことかと思ったけど
- 302 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 10:51:51.85 ID:SQrzN3D5.net]
- coroutineだったりして?
- 303 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 13:56:11.40 ID:6X8NqiS5.net]
- 継続じゃないの
俺は気持ち悪いとしか思わんけど
- 304 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 14:17:39.64 ID:ztjfyQaD.net]
- なんでも記述できる自由度の高い言語ほど……
- 305 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 22:40:32.31 ID:KmJ2byjS.net]
- (PEEK/POKEで)なんでも記述できる自由度の高いBASIC言語はいかがですかー
|

|