- 1 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:30:50]
- 言語仕様や処理系の話題に関するスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換,CPS変換, レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化,それに VM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち) 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ (前スレ) 関連リンクは多分 >>2-10 あたり
- 801 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:02:19]
- Rieくらいは聞いたことあるんじゃないか?市販の製品に使われたって
言うのは聞かないけれども。
- 802 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:04:04]
- 藻前らはコンパイラ作って市販するつもりなのか?
- 803 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:05:07]
- コンパイラ屋くらいだろうな、そんなことするの。
- 804 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:05:50]
- 理恵タソ(;´Д`)ハァハァ
- 805 名前:デフォルトの名無しさん mailto:sage [05/01/06 08:04:07]
- 現場ではどうなのかわからないけれども、最適化ステージと
コードジェネレータを全部手書きってのは無いんじゃないかなあ。 最適化とコードジェネレーションについては、 Muchnick: Advanced Compiler Design & Implementation, Morgan Kaufmann, 1997 が実践的で参考になった。
- 806 名前:デフォルトの名無しさん mailto:sage [05/01/06 09:29:25]
- カウフマンつーとサイレントヒルだな
医者。仮眠明けで起きると誰も居ないでモンスターだらけと説明。
- 807 名前:デフォルトの名無しさん mailto:sage [05/01/06 10:46:42]
- コンパイラ作る時のお勧めの中間コードは何ですか?
- 808 名前:デフォルトの名無しさん mailto:sage [05/01/06 11:00:29]
- 中間コード?
1パスにそんなもん必要ない
- 809 名前:デフォルトの名無しさん mailto:sage [05/01/06 11:04:20]
- 1パスでレジスタ割り当てとかの最適化まで出来るのですか?
- 810 名前:デフォルトの名無しさん mailto:sage [05/01/06 14:17:14]
- どんな最適化を実装するつもりか自分でわかっているなら、
おのずと適切な中間コードもわかるはず。それが分かっていない >>807にはどうせ非最適化コンパイラも作れない罠。
- 811 名前:デフォルトの名無しさん [05/01/06 22:54:47]
- 上の張ってある書籍ですが、読む順番はあるんですか?
ちなみに私は、Cをはじめてまだ1ヶ月です。
- 812 名前:デフォルトの名無しさん mailto:sage [05/01/06 22:56:16]
- >>811
プログラミングを初めて1ヶ月?
- 813 名前:デフォルトの名無しさん mailto:sage [05/01/06 22:57:10]
- 先にCを完全にマスターして下さい。
どの本も何らかのプログラミング言語をマスターしている事を前提に書かれてます。
- 814 名前:デフォルトの名無しさん [05/01/06 23:15:09]
- Cマガでコンパイラの特集が組まれてたのって何年何月号だか
ご存知の方いらっしゃいますか?
- 815 名前:デフォルトの名無しさん [05/01/06 23:33:05]
- >812
そうです。 >813 マスターですか。。。。 K&Rがスラスラ読めるレベルでしょうか? 頑張ります。
- 816 名前:デフォルトの名無しさん mailto:sage [05/01/06 23:44:02]
- >>814
手持ちでは…2003年8月号に 「コンパイラの仕組みを理解しよう」って特集があるけど、 そこまで突っ込んでは書いてない。
- 817 名前:デフォルトの名無しさん mailto:sage [05/01/07 00:05:22]
- >>816
情報ありがとうございます。 私の手持ちで2003年1月号に「コンパイラの作成」 というそのものズバリの物がありました。
- 818 名前:デフォルトの名無しさん mailto:sage [05/01/07 00:07:54]
- >>817
見事にその号が抜けてる orz どのあたりまで書いてありますか?
- 819 名前:デフォルトの名無しさん mailto:sage [05/01/07 00:52:08]
- Cマガの特集レベルなんてたかが知れてる
昔のインターフェース誌は濃かったなあ
- 820 名前:デフォルトの名無しさん mailto:sage [05/01/07 00:55:04]
- インターフェースもCマガみたくバックナンバーをPDFにして売ってくれたりしないのかなぁ
- 821 名前:デフォルトの名無しさん mailto:sage [05/01/07 01:02:21]
- >>820
しているじゃないか。
- 822 名前:デフォルトの名無しさん mailto:sage [05/01/07 01:12:37]
- >>821
うお、知らなかった…_| ̄|○ 01年までですか…。90年代のやつがもう一度読みたいんだけどなぁ
- 823 名前:デフォルトの名無しさん mailto:sage [05/01/07 12:44:16]
- >>818
字句解析、構文解析、意味解析、コード生成までが 非常に分かりやすく書かれてます。 20ページくらいでソース付きです。
- 824 名前:デフォルトの名無しさん mailto:sage [05/01/07 14:43:10]
- >822
ttp://www.sbpnet.jp/shop/art.asp?newsid=1403
- 825 名前:824 mailto:sage [05/01/07 14:44:52]
- ごめん、インタフェースも、か。読み間違えた。
- 826 名前:デフォルトの名無しさん mailto:sage [05/01/07 17:31:22]
- www.csg.is.titech.ac.jp/~chiba/lecture/os/index.html
- 827 名前:デフォルトの名無しさん [05/01/08 03:28:16]
- ●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
上記の本を買おうと思ったら、中身パスカルだったぞ。 他のコンパイラの本もパスカル+Cって内容だった。 Cのみの本はないのか?
- 828 名前:デフォルトの名無しさん mailto:sage [05/01/08 03:32:21]
- >>827
その本俺も持ってるし、俺はCしか書けないけど、大体読めるから自分で 書き直せるっしょ。元々そういう意図があるから複数の言語で書いてないん じゃないの?
- 829 名前:デフォルトの名無しさん mailto:sage [05/01/08 07:40:38]
- >827
なぜCのみである必要が? パスカルのみでも読めるでしょ 逆に読めないなら問題
- 830 名前:デフォルトの名無しさん mailto:sage [05/01/08 16:25:31]
- 今の人には読めない読めない
無理も無い パシカル本は今の本屋にどこにも置いてないからね もしCより簡単だと言われても敬遠するだろう パスカルで書かれているという事は大抵古い本で、 ポインタ記法とか本ごとに違ってたりするし 構文なのか演算子なのかわからない物もある .の置き方に一貫性ないし 読んでもただ、混乱するだけである
- 831 名前:デフォルトの名無しさん mailto:sage [05/01/08 16:31:00]
- Pascalの方が綺麗でしょ。
Cみたいにメモリ周りの汚さはなくて、純粋にアルゴリズムを記述しやすい。
- 832 名前:デフォルトの名無しさん mailto:sage [05/01/08 16:39:23]
- 綺麗・汚いの話をしてるわけではない
- 833 名前:デフォルトの名無しさん mailto:sage [05/01/08 16:43:55]
- >>832
綺麗なら読みやすいだろう。 言語を覚えるコストよりもソースを読み解いたり書いたりするコストの方が遥かに高い。
- 834 名前:デフォルトの名無しさん mailto:sage [05/01/08 17:13:11]
- 読みやすさの話をしてるわけではない
綺麗ならSchemeの方が良い
- 835 名前:デフォルトの名無しさん mailto:sage [05/01/08 17:17:09]
- >>834
では何の話なの?わかりやすく教えて。
- 836 名前:デフォルトの名無しさん mailto:sage [05/01/08 17:18:18]
- 本がないという理由なら、WEB上のリソースでも十分だけど。
- 837 名前:デフォルトの名無しさん mailto:sage [05/01/08 17:32:26]
- なぞなぞです
- 838 名前:デフォルトの名無しさん mailto:sage [05/01/08 17:36:59]
- >>834
関数型言語と手続き型言語では、さすがにプログラミングの定石からして 全く違うだろ。 記法が書籍毎に異なるなんてのは、良くある話。コンパイラ系の書籍だと BNF 記法が良く出てくるが、あれも書籍毎に微妙に違ったりするし。その あたりを自分で吸収できないようだと、専門書と取り組むのは難しい。
- 839 名前:デフォルトの名無しさん mailto:sage [05/01/08 18:10:28]
- 記法が多少違うなんてのはコンピュータに限らず、
大学で勉強すれば大抵でくわす話。
- 840 名前:デフォルトの名無しさん mailto:sage [05/01/09 09:13:32]
- >>829
それはあんたはすでにパスカルを知っているから。 またはあんたが十分かしこいから。 よのなかの人間はあんたほど賢くないんだよ。 >>830 はげどう。 Javaが広まった理由のひとつが、「CやC++と見た目が似てるから」。 そのくらい、自分の知ってる言語に似ているかどうかは重要。かしこくない人間にとっては。
- 841 名前:デフォルトの名無しさん mailto:sage [05/01/09 09:53:52]
- pascalライクな擬似コードくらい読めるだろ普通。
ま、おまいが読めなかったとしても CSを志すような人間は大抵おまいより賢いから心配ご無用。 少なくともそんなつまらん理由で萎縮しない程度にはな。
- 842 名前:デフォルトの名無しさん mailto:sage [05/01/09 10:25:49]
- >>840のように賢くない人間はコンパイラなんか書くなということだな。
- 843 名前:デフォルトの名無しさん mailto:sage [05/01/09 10:43:32]
- 大丈夫、そんな人間に自力でコンパイラなんて書けない。
時間の無駄を省けていいじゃん。 大学入試の足切りみたいなもんだと思え(入ったってついてけない奴もいるが)。
- 844 名前:デフォルトの名無しさん mailto:sage [05/01/09 11:46:44]
- 真面目な話の途中で申し訳ないんだけど、parrot って結構良いね。
これをターゲットにコンパイラ書いたら面白そう(楽出来そう)。 www.parrotcode.org/docs/
- 845 名前:デフォルトの名無しさん mailto:sage [05/01/09 11:50:24]
- Javaの二番煎じ
- 846 名前:デフォルトの名無しさん mailto:sage [05/01/09 11:59:39]
- JVM や CLR の系列だろうけど、ベンダーフリーでライセンスも緩いから使い易いと思う。
- 847 名前:デフォルトの名無しさん mailto:sage [05/01/09 12:31:33]
- 結構早いしな
- 848 名前:デフォルトの名無しさん mailto:sage [05/01/09 12:34:28]
- てかParrot自体はちゃんと動くのか?
作ってもParrotのバグのせいでまともに動かなかったら悲しいぞ。
- 849 名前:デフォルトの名無しさん mailto:sage [05/01/09 13:31:32]
- Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Parrot
でかい顔するなぼけ 糞ぺrぇrはしね
- 850 名前:デフォルトの名無しさん [05/01/09 20:42:58]
- 字句解析でコードをトークン列にする際に、
if、forなどのキーワードは「keyword」という大きな 括りにするのと、それぞれ「keyword_if」、「keyword_for」 などのように細かく分けるのとどちらがよろしいでしょうか?
- 851 名前:デフォルトの名無しさん mailto:sage [05/01/09 20:49:53]
- 構文解析で必要な方。
- 852 名前:デフォルトの名無しさん mailto:sage [05/01/09 21:45:12]
- >>850
作りたい言語似よるが、C や Pascal ライクな言語を作りたければ 後者の方が楽。
- 853 名前:デフォルトの名無しさん [05/01/10 02:02:26]
- 洗練されたPerl: Perl 6文法と正規表現
www-6.ibm.com/jp/developerworks/linux/041203/j_l-cpregex.html
- 854 名前:デフォルトの名無しさん [05/01/10 02:08:04]
- Win32コンソール形式の実行ファイルを作りたいのですが
参考になるページはありませんか? A := B + C GOTO(L) のような3番地文の中間コード形式の出力までは出来ています。
- 855 名前:デフォルトの名無しさん mailto:sage [05/01/10 02:39:22]
- >>854
>>826
- 856 名前:デフォルトの名無しさん [05/01/10 09:03:09]
- >854
x86ならnasmのinfoやIntelのwebサイト、 exeならPE形式、 実際の実装方法はgccのソース を見ろよ
- 857 名前:デフォルトの名無しさん [05/01/10 23:52:39]
- スモールコンパイラ買って着た。
結構美人
- 858 名前:デフォルトの名無しさん mailto:sage [05/01/11 19:31:43]
- オライリyacc本が初売り在庫処分で100円だったので買ってしまった。
かなりすすけてるよ(´・ω・`) 読んでみますか。
- 859 名前:デフォルトの名無しさん mailto:sage [05/01/11 23:06:22]
- ほ、欲しかった
- 860 名前:デフォルトの名無しさん [05/01/13 20:23:21]
- 構文解析ではよく構文木を作るって言うけど、
プログラムのデータとしてはどのように持てばいいのでしょうか?
- 861 名前:デフォルトの名無しさん mailto:sage [05/01/13 20:36:53]
- リスト(木のノードも含む)とか配列じゃないかね。
LISPの場合はコードがそのまんま構文木なんだよな。 LISPに慣れてるならLISPと同じ構造を目指すとよい。 でもLISPのセルは普通の言語だとGCないから扱いにくい。
- 862 名前:デフォルトの名無しさん mailto:sage [05/01/13 20:48:38]
- a = (b[0] + 2) * 3;
だったら、 root | assign / \ a | mul / \ | 3 add / \ | 1 | array_ref / \ b 0 LISPのS式で表現すると (assign a (mul (add (array_ref b 0) 1) 3)) S式は木のデバッグに都合がいい gccの内部表現もそうだったかと
- 863 名前:デフォルトの名無しさん mailto:sage [05/01/13 20:52:15]
- 型やシンボルの属性情報はどうしてます?
- 864 名前:デフォルトの名無しさん mailto:sage [05/01/13 21:06:58]
- 記号表で別管理
- 865 名前:デフォルトの名無しさん mailto:sage [05/01/13 21:13:32]
- (´・∀・`)ヘー
- 866 名前:デフォルトの名無しさん [05/01/13 23:45:42]
- treeなんて意識しなくても大丈夫だよ。
あれはあくまでも学問。実務はパーサがやってくれる。
- 867 名前:デフォルトの名無しさん mailto:sage [05/01/14 00:20:49]
- >>866
構文解析して即コードに落としちゃう場合はともかく、もう一ステージ挟む場合 (最適化するとか)は、いちど明示的にツリー作る必要があるよ。
- 868 名前:860 mailto:sage [05/01/14 00:39:11]
- >>861-862で
なんとなく考えが具現化してきました。 ただ今一分からないのが、字句解析で得たトークンを 構文解析でtree構造のデータとして持つとして それを後の意味解析でどのように使うのでしょうか?
- 869 名前:デフォルトの名無しさん mailto:sage [05/01/14 00:43:25]
- >>868
単純な最適化だと add / \ 2 1 ってツリーがあったら、コンパイル時に計算して 3 に置き換えちゃうとか。
- 870 名前:デフォルトの名無しさん mailto:sage [05/01/14 01:03:05]
- データフロー解析をする時は、ツリーを3つ組表現すると楽かも
- 871 名前:デフォルトの名無しさん mailto:sage [05/01/14 08:43:21]
- >>869のような定数伝播ぐらいなら1パスでもできる
ただし1 + a + 2とかをa + 3にはできない 1 + aを読み終えた時点の出力を保留する様な仕組みは もはや2パスとみなせるし、そこまでするなら木を作った方がいい
- 872 名前:デフォルトの名無しさん [05/01/14 13:00:57]
- 自分の自作言語でC言語の構造体のアラインメントを
エミュレートしたいのですが、メンバオフセットの決め方がよくわかりません。 例えば#pragma pack(4)のとき、 typedef struct { int a; // offset 0 char b[1]; // offset 4 int c; // offset 8 } X; となるのはいいんですが、 typedef struct { int a; // offset 0 char b[1]; // offset 4 short c; // offset 6 short d; // offset 8 int e; // offset 12 } Y; shortが offset=6になる理屈がわかりません。 これは暗黙的にwordのアラインメントも働いているということでしょうか?
- 873 名前:デフォルトの名無しさん mailto:sage [05/01/14 14:02:03]
- >>872
かなり複雑だよ typedef struct { char c[1]; short s; char cc[1]; } C; これのsizeof(C)は6。 Cのアラインメントはshortを持つので2になる。 これをメンバに持つ構造体を作るとわかる。 typedef struct { C c[3]; }CC; これで sizeof(CC) すると 18。 次に typedef struct { char c[1]; short s; char cc[1]; int i; } D; これのsizeof(C)は12。 んで、アラインメントはintを含んでるので4。 typedef struct { D d[3]; }DD; sizeof(DD) => 36 つまり構造体はその中のメンバの基本型のサイズが関係する 例えばcharしか持たない構造体はアラインメントが1になる
- 874 名前:デフォルトの名無しさん [05/01/14 16:10:43]
- >>873
仰るとおり理解するのが大変でした。 アラインメント指定された値は、あくまでもその大きさの型が出現した ときに影響するってことで、それ以下のサイズについても アラインメント指定された値以下であれば位置調整をしなくてはならない ということですかね。 > 例えばcharしか持たない構造体はアラインメントが1になる この言葉でようやくわかりました。 構造体を外から見るだけじゃなくて、その中の基本型まで遡って 把握しないと作れませんね。 お答えありがとうございました。
- 875 名前:デフォルトの名無しさん mailto:sage [05/01/14 18:45:57]
- 難しいね。
λ...... λ...... λ...... λ...... λ......
- 876 名前:デフォルトの名無しさん [05/01/14 19:52:58]
- 名前の分からないライブラリ関数を、動的に与えられた名前を用いて
コールすることとかって出来ますか?
- 877 名前:デフォルトの名無しさん mailto:sage [05/01/14 19:54:21]
- アドレスが分かればできるよ
- 878 名前:デフォルトの名無しさん mailto:sage [05/01/15 00:43:44]
- ld
- 879 名前:デフォルトの名無しさん mailto:sage [05/01/15 09:18:20]
- 興味があったのでアラインメントの計算を考えてみました。
構造体が typedef struct { char a; // 1byte int b; // 4byte char c; // 1byte double d; // 8byte } C; とすると、 #define N 4 // 構造体メンバ数 int member_size[N] = { 1, 4, 1, 8, }; // 各メンバのサイズ(構造体Cの場合) int member_offset[N]; // メンバのオフセット(求める値) #define PACK 2 // #pragma pack() への指定サイズ member_offset[0] = 0; // 1個目のメンバのオフセットは0固定 int pos = 0; // 次のメンバを置くことができる位置 pos += member_size[0]; // 1個目のメンバのサイズ分すすめる for(int i = 1; i < N; ++i){ int size = member_size[i]; /* 次のメンバのオフセットをoffsetとすると、 offset >= pos; offset >= min(PACK * n, size * m); // n, mは0, 1, 2... */ int n = (pos + (PACK - 1)) / PACK; int m = (pos + (size - 1)) / size; int offset = min(PACK * n, size * m); member_offset[i] = offset; pos = offset + size; // 次のメンバを置ける位置を再計算 }
- 880 名前:デフォルトの名無しさん [05/01/15 11:23:28]
- 言語処理って文型向きでしょうか?理系向きでしょうか?
- 881 名前:デフォルトの名無しさん mailto:sage [05/01/15 11:27:32]
- 玄人向き
- 882 名前:デフォルトの名無しさん mailto:sage [05/01/15 11:28:11]
- よくわからんが、構造体がネストしてたらそれを再帰的にやるんだろう。
Cの型定義をパースしてサイズやオフセットを返すだけの モジュールでも作れば需要ありそうだな。 C言語作ってるならともかく、自作言語のFFI周りの作成とかでは 誰もがやりたくない部分の1つだし。
- 883 名前:デフォルトの名無しさん mailto:sage [05/01/15 11:30:26]
- >>880
理系崩れ向き
- 884 名前:デフォルトの名無しさん mailto:sage [05/01/15 11:32:42]
- >>880
廃人ムキ!
- 885 名前:デフォルトの名無しさん [05/01/15 13:05:54]
- >>882
既存のC処理系にあわせなければならないなら offsetofやsizeofを表示するプログラムを生成して Cコンパイラにやらせるのが楽そうだな。どうせ どう配置されるかなんて処理系依存なんだし、 いちいち調べるのはかったるい。
- 886 名前:デフォルトの名無しさん mailto:sage [05/01/15 14:07:25]
- 構造体のアラインメントの話、結構興味深いね。
久々のヒット、トンクス。
- 887 名前:デフォルトの名無しさん mailto:sage [05/01/15 14:10:17]
- 質問ですが、言語処理系の仕事って年収どれぐらいもらえるのでしょうか?
もちろん、条件によりさまざまだと思いますが、 平均的な所を知りたく思います。 お金の話は、禁句かもしれまえんが、 生活が出来ての仕事だと思います。
- 888 名前:デフォルトの名無しさん mailto:sage [05/01/15 14:29:32]
- 「『言語処理系』の仕事」って業種があるのですか?
私は寡聞にして聞かない。
- 889 名前:デフォルトの名無しさん mailto:sage [05/01/15 14:38:52]
- >>887
実際に、応募してみれば良いじゃん。
- 890 名前:デフォルトの名無しさん mailto:sage [05/01/15 14:40:29]
- 俺の”コンパイラ屋” 想像図↓
┌─┐ |コ.| |ン | │パ│ │ゐ│ │ラ .| │屋 .| │ !!.│ └─┤ ∧∧ │ ( `Д) | ̄ ̄ ̄|─□( ヽ┐U  ̄◎ ̄ ◎−>┘◎
- 891 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:03:15]
- まあ実際そんなもんだ
- 892 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:03:25]
- 流しのコンパイラ屋や一匹狼のコンパイラ屋なんて聞かないから
メーカーのコンパイラ開発部門の社員に過ぎないだろうよ。 サラリーマンとして給料をもらうだけ。
- 893 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:05:29]
- Digitalmarsとかは最初は一匹狼のコンパイラ屋だったに違いない
- 894 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:29:55]
- >>892
そのサラリーマンの給料が知りたい、って話じゃないの? IT 系といっても 給料はピンキリだからなぁ。 個人的には、職種よりも企業の方が効いて来るに一票だが。Microsoft なら たぶん高いよ。
- 895 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:38:18]
- スレ本来の技術的な話題で湧いた直後なのに・・。 可哀想な俺達。
- 896 名前:デフォルトの名無しさん [05/01/15 20:00:18]
- >>894
おれも、そう思うに1トークン。 ただ、システム系やら(言語を利用した)開発系よりかは 悪いと思われる。 >>892 > 流しのコンパイラ屋や一匹狼のコンパイラ屋 ワロタ
- 897 名前:デフォルトの名無しさん mailto:sage [05/01/15 20:23:06]
- アタマワルソ
- 898 名前:デフォルトの名無しさん mailto:sage [05/01/15 20:30:10]
- HSP作者のおにたま氏はある意味コンパイラ屋?
本とかで儲けてるんだろうな。いいなぁ。
- 899 名前:デフォルトの名無しさん mailto:sage [05/01/15 20:31:53]
- るby>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>。hsp
- 900 名前:デフォルトの名無しさん mailto:sage [05/01/15 20:32:13]
- HSPはインタプリタ
|

|