- 1 名前:デフォルトの名無しさん [2005/12/20(火) 21:43:02 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,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/ 関連リンクは多分 >>2-10 あたり
- 375 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 22:24:52 ]
- オーバーロードを何時解決するかによる。コンパイル時に全部解決するなら問題あるまい。
- 376 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 23:18:18 ]
- >>375
メソッド名とシグニチャが結びついてれば実行時解釈でも問題ないしね。
- 377 名前:366 mailto:sage [2006/01/25(水) 23:20:36 ]
- そういやそうですな。
でも、折角だから多値戻しを実装してみたい気もするんですよね…… Rubyみたいに配列を戻す手もありますが。
- 378 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 23:37:20 ]
- あまり欲張らない方がいいよ。複雑にしすぎると作ってて嫌になる。
- 379 名前:366 mailto:sage [2006/01/26(木) 00:06:21 ]
- ははは、ご心配なく。かれこれ1年以上弄んでいますので、嫌んなるのは慣れっこです。
仕事だったら素直にC++使いますし。 まあ、未だに駆動が回んなくて鬱ですが…… “1+1”ができるのはいつになることやら……
- 380 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 18:25:17 ]
- ルビーに学べ
- 381 名前:(ぱ) mailto:sage [2006/01/26(木) 21:14:22 ]
- どうもです。上のほうで出ていた「ライターのM」です(たぶん)。
Rubyのような解析木実行タイプの言語を作ろうとしていて、かつ、独自スタックも 使うつもりなら、うちのcrowbarなんかは参考になりませんか? kmaebashi.com/programmer/devlang/ >>368 >一時変数の管理責任:呼出側 -> スタック作って管理 >動作主体:呼び出され側 -> 駆動はこちら ここで言っている「一時変数」がローカル変数のことであれば、管理責任は 呼び出され側にあるのでは。呼び出し側は呼び出され側のローカル変数を 知らないからです。 引数についてであれば、呼び出し側で領域を確保するにしても、別段それを スタックに積む必要はないように思います。 crowbarの場合、駆動レコードごとに、変数名と値の対応表を持っています (ver.0.3以降は、クロージャの実現のためにスコープチェーンを持っているので ちょっとややこしいですが)。関数呼び出しでは、呼び出し時に、呼び出され側の 駆動レコード(CRB_LocalEnvironment)を作成し、その中に、ローカル変数として、 実引数の値を突っ込んでいるだけです。 引数やローカル変数の領域をスタックに確保するという実装ももちろん考えられますが (crowbarでは代入により実行時にローカル変数が作られるのでそれはできなかった)、 その場合、引数は呼び出し側で積むことになるのでは。 いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、 どうでしょうか。crowbarは演算用の独自スタックを持っていますが、スタックは1本です。 まあ、crowbarのスタックは足りなくなるとrealloc()するので、そのへんの効率低下を 嫌って関数呼び出しごとに持つ、というのならわかりますけど。
- 382 名前:(ぱ) mailto:sage [2006/01/26(木) 21:22:58 ]
- ついでに上の方の質問に。
>>91 >ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。 >やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか? 一般的かどうかは知りませんが、crowbarでは値を保持するために2箇所で共用体を使っています。 変数の値を直接保持するCRB_Valueと、変数から指された先のヒープ中にある、 CRB_Objectです。 >そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか? Winapiに対する拡張とかを狙って、ネイティブポインタ型というのを導入しています。 luaのユーザデータ型も同じようなもののように見えます。 >>96 >C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、 >なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。 これは、crowbarで言うところのCRB_Objectについては可能でも、CRB_Valueについては 不可能ですよね。
- 383 名前:366 mailto:sage [2006/01/27(金) 00:10:43 ]
- >381
情報サンクスです。考え方のところとか色々と参考になります。 ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 >ここで言っている「一時変数」がローカル変数のことであれば、 いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと 考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある) ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。 スコープチェーン作って管理するのもいいのですが、もっと簡単な方法が無いかな……と いうことで、取りあえずはスタックマシンを利用する方法でトライすることにします。 >いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、 call/ccを実装したいと思っているのですが、その都度スタックを保存するのも面倒だし いっそのこと全部の継続にスタック持たせちまえ、という乱暴なアイディアから来ています。 ……まだ実装できていないので、本当にうまくいくのか不明ですが……
- 384 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 00:27:50 ]
- アイデアだけではなぁ、
なぜ既にあるものを使わん? アフォ?
- 385 名前:366 mailto:sage [2006/01/27(金) 00:37:09 ]
- >384
既にある言語では無いから作っているんだけど……Schemeは近いものを感じるけどね。 あと、勉強という意味では車輪の再発明も重要だよ。
- 386 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 02:00:33 ]
- 一年以上やって1+1も出来ないんだろ?
勉強になってるか疑問だな。 >ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと >ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 形無し&プロトタイプ指向だからポイント違う? 何言ってんだお前。
- 387 名前:366 mailto:sage [2006/01/27(金) 02:45:51 ]
- > 一年以上やって1+1も出来ないんだろ?
> 勉強になってるか疑問だな。 あら、そう? 1+1てけっこう大変だよ? まあ、継続とか移譲とかグラフとかオートマトンとか、回り道が多いちゃ多いがね。 それもまた勉強。 >形無し&プロトタイプ指向だからポイント違う? >何言ってんだお前。 どういう意味?
- 388 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 09:10:54 ]
- もういいから来るな。
一年以上で未だ1+1もできないほど頭悪いんだろ? これから先何年もアホ質問書き込まれるかと思ったらゾッとする。
- 389 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 12:24:31 ]
- 継続でスタック保存するのが面倒ってんなら、駆動レコードを全部
ヒープに置くって手もあるが。それだとcall/ccは駆動レコード チェインの頭の掴んでおくだけだよ。 性能を気にしてるわけでもなさそうだし、駆動レコードごとに スタックなんて面倒なことをなぜするのかよくわからない。
- 390 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 13:54:36 ]
- Lisp使いはリストを見ると車とかCD-Rとかを使い出す
- 391 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 13:58:48 ]
- >>390
どうして車とCDRに発想が結びつくの?
- 392 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 14:28:07 ]
- なにこの変なマジレス
- 393 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 14:39:34 ]
- Lisp使いはCD-Rのことを「クダー」と読むんだな
- 394 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 17:54:48 ]
- 久多良木信者はLisp使いか否か?
- 395 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 18:21:20 ]
- >>391
しらないけどcarとcdrだからじゃない?
- 396 名前:(ぱ) mailto:sage [2006/01/27(金) 20:21:31 ]
- >>383
>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと >ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 crowbarは思いっきり型なし&プロトタイプベースのつもりですが。 >いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと >考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある) >ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。 継続をやりたいということ自体初耳なわけですが。 継続は詳しくないので以下見当外れならすみませんですが、 「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、 「Cのスタックどうするの?」という疑問が出てきます。 「関数の戻り値を次の継続に直接渡そう」ということだから、CPS変換を前提にしている? だとすればそれはもう「Rubyみたいな解析木を実行するタイプ」とは言えないのでは。 >>389 関数内での、計算途中の値を積んでおくスタックのことなんじゃないでしょうか。
- 397 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:07:07 ]
- 1+1ねぇ、マジレスするけど、
yacc触りはじめてその日でできたよw
- 398 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:27:40 ]
- コンパイラ構成法の一番最初の項目が電卓だからな。
- 399 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:43:00 ]
- 1+1が一年以上できないとか言ってるなら、いったんScheme作ればいいのに。
コアな部分に限れば仮想マシンとコンパイラそれぞれ一日で書けるよ。 そしたら作りたい俺様言語で何をどうするかも少しは見えてくるんじゃね?
- 400 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:45:01 ]
- >>398
うちの大学は字句解析だったよ…。
- 401 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 23:53:04 ]
- >>398
漏れが最初にやったのは逆ポーランド式の理解だった・・・懐かしいな
- 402 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 00:42:37 ]
- きっかけを大別すると、
・yacc/lexまたはbison/flexで独学 ・大学や専学でコンパイラ/インタプリタの講義 って感じなのかな?
- 403 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 00:43:46 ]
- 授業でちょっとやったけど、あまりに講義資料・内容がヘボかったから独学に切り替えたなぁ。
- 404 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 00:58:28 ]
- 情報処理の講師の説明よりも、数学の講師の説明の方が、実は分かりやすかったりするんだよな。w
- 405 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 01:02:41 ]
- アルゴリズムの大半は、数学の勉強だからな
- 406 名前:366 mailto:sage [2006/01/28(土) 04:22:49 ]
- しまった……中途半端な情報で混乱させていますね。すみません
>389 今作っている実装だと、駆動レコードチェイン+駆動レコード内のスタックといった 感じにしています。>396の指摘通りですね……と言っても詳しく説明していないから わかんないよね。ごめん >396 >crowbarは思いっきり型なし&プロトタイプベースのつもりですが。 失礼しました。まだ読み込んでいないので…… >「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、 >「Cのスタックどうするの?」という疑問が出てきます。 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、 ・解析木から継続の連鎖を作る ・継続を駆動する という駆動を外部からループで回そうとしています。 >399 そうなんだけど、作りたいのはSchemeじゃないし、Schemeからちょっと離れているし。 ……とはいっても、練習に作ってみるのもいい勉強かな…… >388 はあ。
- 407 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 04:27:43 ]
- 1年で1+1が作れない、最低限の理解力すら無い人間が406を書いたと思うと
その恐ろしい知ったかぶりに愕然とする
- 408 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 04:45:28 ]
- しばらく放っとけないのか?
- 409 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 06:12:16 ]
- 俺は407の方の噛みつき具合いの方が愕然とする。
- 410 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 08:15:29 ]
- >>409
そう? このスレの伝統だと思ってた。
- 411 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 10:56:44 ]
- 1+1 って、意外と難しいよ。特に数値オブジェクトを + メソッドで加算する場合……とか。
経験ない人が独学でやるには、1年はちょっとキツ過ぎじゃないか? とか擁護してみる。
- 412 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 11:08:31 ]
- まあそういうのは人による部分が大きいよ。
CSのバックグラウンドあってOOにドップリつかった人がやり始めれば理解するのに1日かからないだろうし、逆にこれからプログラミングを始めますって人には1年じゃ無理だろうし。 極端に言えばね。 一口に何日で理解したとか何年かかっても理解できないとかから能力を量ってしまうのはナンセンスだとは思う。
- 413 名前:デフォルトの名無しさん [2006/01/28(土) 11:18:12 ]
- 10秒デデキマツタ!
if(strcmp(str,"1+1")) printf("2\n");
- 414 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 11:38:52 ]
- >>413
情報サンクスです。考え方のところとか色々と参考になります。 ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
- 415 名前:デフォルトの名無しさん mailto:389 [2006/01/28(土) 12:32:42 ]
- >>406
> 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、 > ・解析木から継続の連鎖を作る それをCPS変換というんじゃ… でも素直にCPS変換したらスタックなんて出てこないと思うんだけど (「計算途中の値」も全て継続への引数になる)。 それとも複数の引数を渡す際に、既に計算した引数の値を一時保存 しておくエリアってことかな。それを「スタック」と呼ぶのはどうかと 思うが (FILOである必要がないから)。 スタックは、普通の関数呼び出し→リターンに特化した一種の最適化 なんだよ。>>406 が何か特別な最適化のアイディアを試したいなら 別だが、原理を理解するために書いているなら、まず基本的な CPS変換→実行系を動かしてみることをお薦めする。判断に迷うところは とりあえず簡単に実装できるほうで書いてみる。書いてみないとわからない ことってたくさんあるからね。とにかく動かしてから、別のアイディアを 試してみればいい。
- 416 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 12:58:32 ]
- >411
そうだよね……自分の場合は駆動に引っ掛かっています。オブジェクトとメソッドを 等価に扱おうとして、『どうやって駆動すりゃいいの?』というところで散々悩んでいます。 あとは名前解決とか変数呼び出しとか…… >412 OOにはけっこうドップリ漬かっているんですけどね。 ここまで彷っているのは『当たり前と思っていた駆動とか関数呼び出しが、いざ やってみると全然当たり前じゃなかった』というのが大きいですかね。 >407, 413, 414 へえ?
- 417 名前:デフォルトの名無しさん mailto:sage 366 [2006/01/28(土) 13:16:19 ]
- >415
>それをCPS変換というんじゃ… ……そうだった。 > でも素直にCPS変換したらスタックなんて出てこないと思うんだけど 最初は素直にCPS変換していたんですけど、レキシカルスコープやろうとしたときに (オレ言語のアイディアが邪魔して)うまくアクセスリンクが処理できなかったので、 スタック……というか単なるリストも併用する形を検討しています。 > まず基本的なCPS変換→実行系を動かしてみることをお薦めする やっぱりそっちの方が近道かな……もうちょっと悩んでみます。
- 418 名前:366 mailto:sage [2006/01/28(土) 13:38:37 ]
- >>415
情報サンクスです。CPS変換のところとか色々と参考になります。 ただ、自分の目指しているのはCの関数処理プロセスに頼らない(再帰を使わない)ですので、やっぱりちょっと ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
- 419 名前:デフォルトの名無しさん mailto:sage 366 [2006/01/28(土) 13:41:57 ]
- ありゃ、騙りも出て来たか……これだからIDの無い板は駄目だよな。
そろそろ名無しに戻るか。 >418 ふうん?
- 420 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 13:42:19 ]
- >>419
ふうん?
- 421 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 13:48:08 ]
- 彼は型無し&プロトタイプ指向の言語に対して
>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと >ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 とか言ったのが一番面白かった。最高にバカ丸出しで。 何か言われたら、はあ?とかへえ?とかふうん?とか、 何か言い返さないと気がすまないってのもポイント高し。
- 422 名前:デフォルトの名無しさん mailto:sage 366 [2006/01/28(土) 13:50:38 ]
- >>421
で?
- 423 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 13:58:54 ]
- >>422
10ポイントアップ
- 424 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 17:51:31 ]
- プライドだけ高そうだね。技術は(ry
- 425 名前:デフォルトの名無しさん [2006/01/28(土) 17:55:29 ]
- ここの住人はプライド高いからナァ
ただし、技術は(ry
- 426 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 18:08:16 ]
- お前の事か?
- 427 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 18:52:11 ]
- プライドが高くなるのは仕方が無いのでは?
PGの四大欲求の一つである、言語の作成をやってるわけだし OSと言語とファイルシステムとAIで良かったんだっけ?
- 428 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 19:03:38 ]
- OS と言語と AI は分かるけど、ファイルシステムってのは何で?
4 番目に来るのは、Emacs とか Smalltalk みたいな「環境」じゃないかな。
- 429 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 23:43:42 ]
- OSと言語は分かるけど、AIってのは何で?
アフォ?
- 430 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 23:48:46 ]
- ちょwww「四大欲求」てwww
- 431 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 23:58:48 ]
- ファイルシステムってOSの一部じゃないの?
- 432 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 00:06:41 ]
- DOS
- 433 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 00:50:20 ]
- どっちかってーと、OS・言語・マイクロコード(CPUの)・BIOS(とかEFI)
とかの方が
- 434 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 01:50:22 ]
- それはただLow Levelな方をかき集めただけじゃん
- 435 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 01:55:09 ]
- OS、言語、データーベース、ゲームじゃね?w
- 436 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 01:58:33 ]
- AIは、作れなさそうだから実際に作ろうとまでは思わないが、
願望を持つ奴は多いと思う。 ゲーム、言語、OS、AIだろう。
- 437 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 06:09:51 ]
- この人、数学者としてはいまいちなのかもしれないけど、
計算機科学の実情についてはよく分かってるね。 www.ritsumei.ac.jp/se/~takayama/MathEssays/essays.html >>428 どうでもいい話だけど、現代においてはOSこそ「環境」ではないのかな。
- 438 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 06:23:47 ]
- >>437
この人は自分が高いレベルにいすぎて、考え方の基準が高すぎるね。 確かに数学者を目指すレベルからすれば、計算機科学はおちこぼれが 流れる分野なのかもしれないが、一般の高校生から見れば やっぱり、数学が必要な学科だよ。 単位とるにも数学的なものの考え方が必要な科目ばかりだしね。 一般の高校生の99%は大学でどちらかと言えば数学嫌い になるだろうし。 一般の高校生のレベルと数学者のレベルを混同してるように見える。
- 439 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 06:30:44 ]
- そりゃ、京都大学理学部出身から、立命館大学情報工学科みりゃ
レベル低くも見えるだろ。 それでもそこにいる学生は相対的に数学が得意で好きだった学生 なんだということが理解できないんだろうな。
- 440 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 09:23:25 ]
- 理学と工学は似て非なるものだしな。
- 441 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 15:33:57 ]
- 工学で一度数学の必要性を身に沁みるとまじめに勉強する気にもなるもんだが。
一度数学の講義を受けないとそもそも数学の必要性に気付けない罠。
- 442 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 15:41:09 ]
- >>436
ああなるほど、ようやく分かった 人工無能の事ではなく、ホントの人格の事だったのか 人間の場合は四つの判断力を持ってるからな。 直感と理性の再現だけならどうにかなるかもしれないが、 感情と欲求の再現となると、なかなか難しいだろな
- 443 名前:デフォルトの名無しさん [2006/01/29(日) 16:30:38 ]
-
PGの3第欲求 (1)OS (2)言語 (3)ハーレム この辺りが本当の所だろう。
- 444 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 16:34:41 ]
- で、エロゲで代用するわけか
- 445 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 19:55:35 ]
- プログラマをPGと略す奴にろくな奴がいない
- 446 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 20:06:05 ]
- >>443
OSも言語も興味ないやつはいくらでもいそうだけどな。
- 447 名前:デフォルトの名無しさん [2006/01/29(日) 20:15:58 ]
- (1)金
(2)酒 (3)ハーレム
- 448 名前:初心者 [2006/01/29(日) 21:13:56 ]
- 質問です。
Yaccとかで論理式の短絡評価を行う常套手段はどのようなものでしょうか? 例えば、if(a==b||c==d) でa==bが確定するとc==dの評価はスキップ可能ですが、 Yaccとかだと、先にa==bとc==dが認識されてしまうと思うのです。
- 449 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 21:53:31 ]
- >>448
yaccが生成するのは構文解析器。 意味解析は通常は構文解析で構文木を作った後のステップであって、yaccはやってくれません。 [文字列]→字句解析→[トークン列]→構文解析→[構文木]→意味解析→[一時コード]→最適化→[ましなコード]→コード生成→[出力コード] というように道のりは長い。 yaccがやってくれるのは構文解析だけ(でも構文解析は最適化の次に面倒くさい部分なので大助かり)。
- 450 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 23:39:37 ]
- >>447
それだ
- 451 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 00:42:32 ]
- まあ、たいていの入門書ではyaccの最初のサンプルは電卓で、
そのプログラムではアクションの中で計算もやっちゃってることが多いから >>448 のように思ってしまうのも無理はないのかも。 制御構造を持つちゃんとしたプログラミング言語を作ろうと思ったら、 yaccのアクションでは解析木を作るだけにしておいて、評価は後で行います。
- 452 名前:448(初心者) [2006/01/31(火) 02:22:55 ]
- >>449,451
そうでしたか。奥が深いですね。 一瞬、言語の仕組みが分かったような錯覚をしましたが、 本格的なものと電卓的なものとでは、ずいぶんとギャップがあるということが わかりました。 ありがとうございました。
- 453 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 02:33:12 ]
- C# コード出力するコンパイラコンパイラって、もしかして未だ無い?
- 454 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 02:36:00 ]
- >>452
その錯覚はあながち間違いじゃないよ。 449で道のりは長いとか書いちゃったけど、実際には構文木まで作れれば終わったようなもんだし。 あとはその周辺の理論的な考察とか最適化の手法は好きなように学んだらいいだけ。
- 455 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 07:15:12 ]
- >>453
多分ある。というかC#でコンパイラ作るみたいな本がなかったっけか。
- 456 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 12:20:28 ]
- >>453
たしかANTLRが対応してたような気が
- 457 名前:448(初心者) [2006/01/31(火) 23:15:15 ]
- >>454
どうもです。すこしづつ勉強して行きたいと思います。 (老後の趣味です。ハハハ) ところで、Yaccってコンパイラコンパイラ等と呼ばれたりもしますが、 結構誇張された言い方とも受け取ったのですが、言語専門家の方は どのように感じますか? (技術的な話でなくてすいません。)
- 458 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 23:30:38 ]
- そんなことを聞いてどうする
- 459 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 01:12:13 ]
- コンパイラコンパイラは言い過ぎ
パーサジェネレータの方がしっくり来る
- 460 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 02:09:03 ]
- なんで2chの回答者って偉そうなのばっかりなんですか?
- 461 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 02:16:09 ]
- Copying でも Generational でも、オブジェクトを移動させる GC で、
移動不可なデータ(ロックとか)ってどう扱ってるのでしょうか。 何かおいしい資料(論文とか)ありましたら教えて下さい。
- 462 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 06:49:40 ]
- 移動不可なデータのみを別に扱っておけば良いのでは?
例えば、移動不可データ専用の予備領域を取っておくとか
- 463 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:08:04 ]
- >>460
質問者にとっては初めての質問でも、答える方は3度目、4度目というのが当たり前。 日常では温厚な人間でも切れ気味になる。顔が見えりゃいいんだけどね。 おれは一度目にした質問にはレスしないことにしている。
- 464 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 11:48:51 ]
- members.at.infoseek.co.jp/zzyyb/gc/incremental-collector.html
のインクリメンタルガベコレの説明ですが、 GCが処理しているカレントオブジェクトをプログラムが変更しちゃう場合が 言及されていないのですがまさにその場合が問題である気がします。 カレントオブジェクトが保持する別オブジェクトへの参照のうち、既に処理 した参照が書き換えられるとおかしくなると思うんですが。
- 465 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 20:10:10 ]
- >>462
どうもありがとう。後で思いついたんですが、世代別なら一番古い世代に置くというのも手ですね。
- 466 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 21:42:14 ]
- >>460
ヒント:ルサンチマン
- 467 名前:デフォルトの名無しさん [2006/02/01(水) 22:19:13 ]
- >>463
ハツモノでもあんたのレスはいらんよw
- 468 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 23:38:35 ]
- >>461
俺もちゃんと読んでないけどひとまず貼っとく。 www.nminoru.jp/~nminoru/java/cms/concurrent_mark_sweep.html#45
- 469 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 00:59:19 ]
- つ www.shos.info/develop/oo/dscsnptn.html#chapter4
>464 GCが処理しているカレントオブジェクト 灰色 カレントオブジェクトが保持する別オブジェクトへの参照のうち、既に処理した参照 灰色 -> 黒 または 灰色 -> 灰色 灰色 -> 灰色については言及されていないけど、どちらの種類のリンクともうまく処理されます。
- 470 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 01:46:04 ]
- 灰色→白は?
カレントオブジェクトに参照A,B,Cがあってこの順で処理するとして、 Aをキューに追加して灰色にした後、Bを処理しようとしているときに 別プログラムがAを白への参照に書き換えてしまったら?
- 471 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:59:03 ]
- >470
ごめん、ちょっと勘違いしていたみたい。 ・カレントオブジェクトの処理(参照先の灰色化 & 参照元の黒化)はアトミックに処理する ・カレントオブジェクトが参照された場合、処理を中断してキューの最後に持ってくる ・カレントオブジェクトは黒と同様に処理する あたりはどう?
- 472 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 00:49:26 ]
- >>471
最後でしょうか。つまりこの条件においては黒→白取り付けと同様に考える (のでその後に書いてある各手法のようなバリアを張る)と。 前二者はオーバーヘッドが重すぎますよね。 このページ、過渡状態を無視せずにもうちょっと厳密に書いてくれていれば よかったんですけどねえ。
- 473 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 01:50:29 ]
- まずカレントオブジェクトを黒にしてから参照先を灰色にすれば、カレントオブジェクトを
特別扱いしなくて済むかな?
- 474 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:13:51 ]
- ちょっと考えたら分かることだろ。
- 475 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:48:08 ]
- >>473
処理中のカレントオブジェクトが 「それが参照している先は必ず灰色か黒」という黒の定義に反することになるのが 気持ち悪い。
|

|