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 あたり
753 名前:デフォルトの名無しさん [2006/03/18(土) 19:50:35 ] なぜ、関係演算子は結合を持たない例が多いんだろうか? 単純に 3<=x<99 とか書けてもいいとは思うんだが、
754 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 19:58:12 ] C がそうやってるから右に習えだと思う
755 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 20:00:44 ] 10 < x >= y < 20 <= z > 0 とかあったら何なんだか困るじゃん Lispだと (< 10 x 20) とか書けるけどね
756 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 20:02:06 ] 演算子で思い出したけど おれは perl の =~ を代入演算子だとばっかり思ってたから $a =~ s///; はいいけど $b =~ m//; の意味がわかんなくなって混乱してた…
757 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 21:14:54 ] >>754 とりあえず、C で 3<=x<99 はコンパイル通るぞ。
758 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 21:18:53 ] コンパイル通るから何?
759 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 23:30:10 ] >>752 いっぺん死ねって書いてもよまねぇだろうな(w
760 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 23:51:40 ] >>753 確かに Mathematicaは書ける、って言うか書けないと数学ソフトだし不便すぎる。
761 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 02:21:26 ] スタックマシンでスタックが溢れそうな時、スタックを reallocするのと 別に領域を確保するのとではどっちが一般的ですか? 前者はスタックが一つの領域でないといけないのと reallocのコストが欠点で、 後者はフレームの削除などを絶対アドレスで指定しないといけないので 継続を作る時にちょっとめんどくさいのが欠点だと思います。
762 名前:デフォルトの名無しさん [2006/03/19(日) 20:27:31 ] >>760 へぇ、書ける言語あるんだね。しらなんだわ
763 名前:デフォルトの名無しさん [2006/03/19(日) 21:19:10 ] おそらく専用でない一般高級言語だと、Rubyあたりが実装しそうな木ガス
764 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 21:19:29 ] Pythonがそうだった記憶がかすかに
765 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 21:21:33 ] >>761 おれなんかは自家製超高速malocを作ってダブルリンクリストでスタック作ってます。 スタックに無茶な要求するにはこれが一番かなとか思ってたりします。 >>762 おれは、例外を作ってもこの表現ができるべきだと思うのですが、みんなどう思っているのだろうか? 絶対見通しいいとおもうんだけどな・・・
766 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 21:27:41 ] ダブルリンクリストだと継続が困らないか? (スタックがツリーになるから) 継続使わないならシングルリンクリストでも良さそうだが。
767 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 21:28:42 ] >>766 ダブルでないと削除がややっこしいです。
768 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 22:30:25 ] 単なる好奇心だけど、途中のスタックフレームを削除したいってどういう場合ですか?
769 名前:761 mailto:sage [2006/03/19(日) 23:11:42 ] セグメント、オフセットを使えば相対アドレスでもスタックを分割できることに 気づきました。 >>765 セグメントテーブルをリストにするってことでしょうか? 最初からセグメントテーブルのサイズを決め打ちして配列にしても良い気がします。 リストだとアクセスにコストがかかりますし。 確かに途中を削除するっていうのならリストの方がいいですが、どういう状況なんでしょうか。
770 名前:デフォルトの名無しさん mailto:sage [2006/03/20(月) 13:38:41 ] >>765 ヒープへの参照をスタックに積んでスタックそのものは小容量ですまそうって方向じゃないんだ?
771 名前:デフォルトの名無しさん mailto:sage [2006/03/20(月) 19:01:49 ] 無知な俺が、話ぶった切って恐縮ですが リフレクションってどんな構造で作るの? javaぐらいみっちり仕込まないと不可能?
772 名前:デフォルトの名無しさん mailto:sage [2006/03/20(月) 19:54:37 ] >>771 例だけど、 scheme(L)でscheme(L')インタプリタを書いて、L'からLを操作したり、L'自身の環境情報などを 取得できるように作る。このときL'からLをいじったことによってL'の動作に影響が及ぶことを causal connectionという。 言語、用途により様々だけど、メタレベルに何を求めるのかで、実装や仕様が変わると思う。
773 名前:デフォルトの名無しさん mailto:sage [2006/03/21(火) 20:59:46 ] >>771 どんな構造っつーか、単にオブジェクトやクラスに関する情報を、実行時に取り出せる(アクセスできる)仕組みを用意するだけ。 ただそれだけだから、あんまり構造がどうとか悩まなくていいよ。 リフレクションの仕組みや構造について考えるなら、まずは言語の仕組みについて知らないと。 それがわかれば、リフレクションの仕組みはおのずとわかる。
774 名前:デフォルトの名無しさん [2006/03/23(木) 14:28:00 ] dl2.n1e.jp/DATA/MOVIE/1140722907/1140722907.jpg
775 名前:デフォルトの名無しさん [2006/03/26(日) 10:03:01 ] 助けてください。 ↓こんな文章があって要はfortran90でない場合一番下のfcに何か入力しろという意味だと思うのですが、 なんと打ちこんだらよいのですか?fortran77なので打ち込まないといけないのはわかっているのですが、 全くこのあたりの知識がないのでわかりません。 -------------------------------------------------------------------- #if your machine's fortran compiler command is not "f90", need to set # # the following macro to adjust. # --------------------------------------------------------------------- FC=
776 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 10:23:11 ] >>775 Format C:
777 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 10:53:15 ] FORTRAN より C
778 名前:775 [2006/03/26(日) 13:29:06 ] ありがとうございます。 ですが入力してもだめでした。 そこで方向転換してfortran90のコンパイラをインストしたいのですが、 どこに転がっているのですか? windowsです。
779 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 17:44:13 ] 書いてあるとおりのことすればいいじゃねぇかよ。 それともネタですか?>>775
780 名前:デフォルトの名無しさん [2006/03/26(日) 17:47:03 ] FC=f77 じゃあかんの?
781 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 07:31:07 ] ポインタ操作のできるスクリプト言語作りたい そゆーの既にある?
782 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 07:40:26 ] CINT?
783 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 08:23:08 ] すごい久々にCINTスレのぞいてみたら、まだ落ちてなかったw C/C++インタプリタ CINT pc8.2ch.net/test/read.cgi/tech/1114397934/ CINTの需要自体はちと薄そうな印象。 もしもありとあらゆるCのライブラリが元のC言語の文法と比べて違和感なく全て呼び出せたらはやりそうなもんだけどな。
784 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 12:53:33 ] >>775 訳してみた。 ------------------------------------- #手持ちのマシンにおいて、Fortranコンパイラのコマンドが "f90" でない場合は、 #次のマクロを設定する必要があります。 ------------------------------------- FC= つまりだな、Fortranコンパイラのコマンドが例えばf77とかだったら、 FC=f77 と設定すればよい。 これ以上はスレ違いだから質問はやめたほうがよい。
785 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 03:57:44 ] とある対話型計算ソフトの入力行を横取りして先に字句構文解析したいんだけど perlだとParse::RecDescentがメジャーなの? 代入と()のネストくらいを1行ずつ処理できればいいので手で書いてもいいけど 昔yacc+bisonで遊んでたときみたいにまたBNF触りたくなった 割鶏焉用牛刀だが
786 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 12:29:49 ] >>785 yacc+bisonの経験あるなら、kmyaccはどう? yaccの書き方そのままで、perlやjavaやjavascriptが使える。
787 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 14:31:40 ] ひとつ聞きたいんだけど、 2型言語の任意の位置に [] の組を挿入できるようにした文法って1型言語? 例えば 1+2 を変化させた 1[+2] とか [1+]2 とかを許容する文法なんだけど……
788 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 02:59:38 ] >>785 入力が小さい場合は Parse::RecDescent が手軽だね。外部ツールにくらべると 手軽さが違う。
789 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 07:51:32 ] >>786 >>788 情報ありがと。しかし構文解析久しぶりで大分忘れてるわ。
790 名前:デフォルトの名無しさん [2006/03/31(金) 18:10:09 ] よく、他言語のライブラリとか呼べる言語があるけど、 あれって事前に呼ぶ関数名を全て列挙して組み込んでるのですか?
791 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 18:19:49 ] 普通マーシャリングしてるだけじゃないか
792 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 21:28:55 ] それは結局の所、「事前に呼ぶ関数名を全て列挙して組み込んでる」のでしょうか?
793 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 21:31:42 ] 事前にわかんない場合はどうしてるんだとか思わないのか
794 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 21:32:21 ] 違う
795 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 21:34:54 ] そういうのもあるし、そうじゃないのもある。
796 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 22:29:35 ] LALR(1)の文法をLL(k)に変えることって可能ですか?
797 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 22:51:20 ] >>793 事前にわからない場合でも呼べる方法ってありますか?
798 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 23:00:22 ] >>797 cvs.sourceforge.net/viewcvs.py/sbcl/sbcl/src/runtime/x86-assem.S?rev=1.32&view=auto call_into_c の部分とか。C なら引数とか戻りアドレスとか用意して call すれば良い。 あとは dlsym() とかを調べる。
799 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 23:42:34 ] むむ、アセンブラですか! orz
800 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 00:22:44 ] いや、単なる例として出しただけだから...
801 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 02:40:22 ] 引数の積み上げ方と呼出し後の処置さえ合ってればいんだから 簡単だろ
802 名前:デフォルトの名無しさん mailto:3/32 [2006/03/32(土) 06:02:31 ] >>796 規則を増やして左再帰を消去して左括り出しするとか地道な方法しかなさそう(自動化するツールもあるのかな?)。 それで衝突が起こるならその文法がそもそもLLじゃない可能性もあるので、文法自体を修正する。 ちなみにLL文法ってLALR文法のサブセットだっけ? LL(∞)⊂LR(1)は確かだったと思うけど、LR(0)は微妙だったような気が。 誰か教えて。
803 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 14:03:32 ] >>790 ,799 その言語のソースを読んでみようとは思わないのかな。 xyzzyのdefine-dll-entryとかRubyのdlモジュールはC++/Cだった。
804 名前:デフォルトの名無しさん [2006/04/03(月) 21:46:49 ] コンパイラを書くのにオススメな言語を教えてください。 最近は、海外では関数型言語で書くのがはやっているみたいですが・・・ OCamlとか。 自分の一番慣れている言語!というのはなしの方向で。
805 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 23:54:21 ] >>804 yaccがあるからC! とか、JavaCCがあるからJava! ってのもなしの方向で?
806 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 23:57:15 ] ある程度以上メヂャーな言語なら、hogeCCの類いは存在するからねえ。
807 名前:デフォルトの名無しさん mailto:sage [2006/04/03(月) 23:58:13 ] >>804 自分で作った言語でコンパイラ書くのがおすすめ
808 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 00:26:28 ] 誰も使わないけどな。
809 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 00:46:06 ] elisp みたいな組み込み言語にすればオケ emacs 程の神アプリじゃなくても、ちょっと気の利いたツールの拡張言語にすれば それなりにユーザを獲得出来るんじゃない。
810 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 00:59:31 ] そういえば、情報処理学会の会誌でコンパイラの連載始まるみたいね。 COINS使うらしい。
811 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 01:17:00 ] >>809 設計思想による
812 名前:デフォルトの名無しさん [2006/04/04(火) 01:28:00 ] >>807 そこまでいければ苦労しないw と思ったけど、それもいいな。 GCCみたいに、最初はどこでもコンパイルできるミニマムなCでコンパイラを生成して、 そのコンパイラで自分自身をまたコンパイルして・・・と。 そういえば、マルチプラットフォームなコンパイラつくりたいと思ったら、 やっぱり、GCCのフロントエンド作るのが正解なんかね。 最初見たとき、中間言語がわけわかめだった。 他に方法ないすか?
813 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 08:29:54 ] >>812 >他に方法ないすか? お前の知能じゃドレもムリ。 大人しくHSP使ってろ
814 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 11:20:41 ] HSPならできるんですか?
815 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 15:35:54 ] つまり、HSP最強
816 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 17:24:17 ] はいはいわろすわろす
817 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 18:56:18 ] >810 COINSはいつJavaに対応するのでしょうか? 図には書かれているのに…
818 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 13:09:14 ] >>817 一応あるみたい。 www.coins-project.org/COINSdoc/frontend/index.html#i-5-1-3 これ以上まともにJavaに対応することには、 苦労に見合うだけの学術的な意味がないからなあ。
819 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 18:50:53 ] >818 > Javaのフロントエンドは以下の方針で開発しているが、デバッグ中であるので、 > リリース版にはまだ入っていない。 だから公開はされてないんですね。いつからデバッグしてるのかちょっと不安…
820 名前:デフォルトの名無しさん [2006/04/11(火) 18:25:41 ] >>818 参考になります。 ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
821 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 18:54:36 ] なぜ>383
822 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 21:51:35 ] どこかにJavaでかかれたCの処理系とかない? 自分で作ろうかと思ってるんだけど、結構大変そうだし。 自作するならSableCCあたりで作ろうと思ってる。 ASTを作るまでは楽だろうけど、その後が...。
823 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 01:13:49 ] www.coins-project.org/
824 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:07:17 ] >>823 どうもありがとう。学習支援用にインタープリタでも作ろうかと思って。
825 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 20:22:45 ] >>823 情報処理学会誌、今日家に届いたよ。
826 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 21:48:30 ] >>825 家にも来た。 情処会員相手ということで 初心者本や教科書なら必要な噛み砕いた説明がないから 読むほうとしては面白いことだけさらっと読めていいね。 3月までの連載は www.ipsj.or.jp/07editj/promenade/index.html で見れるから、コンパイラの連載も誰でもダウンロードできるようになるかもね。
827 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 22:43:38 ] 学会誌見るまでCOINSなんて知らなかった。
828 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 12:14:03 ] >>822 構文解析だけなら、JavaCCやANTLRなら有志によってCの文法定義ファイルが用意されている。 Cだけじゃなくて、JavaやXMLも用意されている。 JavaCCやANTLRのサイトをのぞいてみて。
829 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 12:26:48 ] どんなに遅くてもいいから、実装まで作った処理系のサンプルがほしい
830 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 14:23:00 ] >>828 感謝。実はSableCC用のgrammarを発見しました。 あとはASTを上からなめるようなものを書けばいいと思う。 あとプリプロセッサがないから手で書くか、IPAのを借りようかと思う。 >>829 完成したらソース公開するから期待しないで待ってて。 Javaで作るつもり。ライブラリはアドオン形式で。 C89も結構複雑だよねぇ。これがC99になったらと思うと・・・。
831 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 14:31:21 ] 今公式サイト見たけどCOINSって錚々たるメンバー参加してるんだね。 国内のコンパイラの書籍で見かける人ばっかり・・・。
832 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 15:45:54 ] >>830 それを言うならC++0xになったらと思うと…
833 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:07:22 ] >>832 仰る通り。言語が複雑化すると処理系作る人は大変だね。 LL(1)で解析できる言語(Pascalとか)は素晴らしいなあ。 もっともそのせいで":="あたりで賛否両論になるわけだが...。
834 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:08:48 ] > もっともそのせいで":="あたりで賛否両論になるわけだが...。 どういうことですか?kwsk 代入演算子が = で、比較演算子が ==なら済む話?
835 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:59:55 ] >>834 ごめんごめん、深い意味はないのよ。個人的な感想。 個人的には":="が"="で、"<>"が"!="で、"="が"=="だったら もっと好きになってたかもってことで。 #自分が最初に使った言語にもよるんだろうけど
836 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 18:09:40 ] >>835 それは、ホントに個人によるな。 俺の場合、= が代入なのはキモく感じる。 今は慣れたが、最初に言語を習うときに、既存の教育(数学)の常識と違うから。 代入は、:= とか <- とかの方がしっくりくる。
837 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 20:23:17 ] >>836 確かに。a = a + 1 なんて絶対成立しないもんね。 そういう意味では := や <- が支持されるのはわかるなぁ。 ただ、<> が等しくないというのはちょっと違和感? 後輩で「<>って大なりでも小なりでもないから等しいってことですか」って マジで言ってる奴がいた(w ...なるほど深読みするとそうとも取れるのかと思ったよ。
838 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:06:01 ] <>と!=は好みがでそう。 個人的には!=という記号の対称性のなさが少し嫌かも。 それだったらprologのように=\=の方が好きだ。
839 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:16:39 ] <and>か<or>か、確かにどっちにも取れるよなぁ。
840 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:26:26 ] 昔は"#"が不等号って時代もチョロットだけあったよね。
841 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:38:37 ] a := 3 は a: int = 3 の略だったりするのはちょっと萌え。
842 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 22:28:55 ] 俺の知人がアドレスバーにあった ://www.com/?1=1+2 なよーなURL見て、 このサイト足し算もできないとんでもねー馬鹿だなって言ってたの思い出した この業界はとりあえず普通じゃないよね
843 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 22:31:35 ] >>842 というかURLの意味がわからないんだけど。 俺のプログラマでない友人も、x=x/3というのを見て、x==0と思い込んでた
844 名前:デフォルトの名無しさん [2006/04/18(火) 23:17:02 ] 洩れは if .. elsif を見て英語音痴だとおもたよw
845 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 23:19:15 ] "=="を定義の意味にすべきだと思う。
846 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:05:41 ] ウゼー、言語初心者が2,3人迷い込んでガタガタ騒いでやがる
847 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:14:13 ] 自称熟練者さんは理論にもさぞお詳しいのでしょう。
848 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:25:27 ] 演算子の記号の意味なんか言語の仕様書読めば済む話 スレ違い
849 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:29:00 ] 自称熟練者さんは「演算子の記号の意味」が理論だと思っていらっしゃるようです。
850 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:44:17 ] つーか何で = が代入なんだよ
851 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:50:13 ] 代入要らない。
852 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 02:31:05 ] >>851 関数型言語?
853 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 02:38:57 ] 代入って古いんだよね ダサい きもい