erlangのアセンブリを読んでみる.

Erlangが末尾再帰最適化をしてるか調べようとした - みずぴー日記に興味が湧いたので,erlangのアセンブリコードを見てみた.beamのバイトコードにほぼ一対一対応していると考えていいと思う. まず単純な定義の場合 fact(0) -> 1; fact(N) -> N * fact(N-1)…

[C/C++][コンパイラ] オペランド評価の実際

こことか http://code.nanigac.com/forum/view/342 こことか http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html で話されているオペランドの評価に関してだけれども, もちろん処理系依存なので一般的な議論はできないが,実際のところコンパイラの実装がどう…

形骸化している代入演算子の優先順位

true ? 1 : x = 2のようなソースがパースエラーにならないかどうか。ちょっと調べた限りでは、 書ける: Ruby C# 書けない: C Java のように分かれております。Javaと文法が似てると思ってたC#ですが、こんなところに違いがあったんですねぇ。 http://mono.…

[コンパイラ][Haskell][OCaml] Haskellのinfixの仕組み

OCamlでは < や | で始まる中置演算子は左結合になるため、|> はO.K.ですが、演算子をつなげたときにカッコが必要になってしまいます。 http://d.hatena.ne.jp/mzp/20090105#c1231290114 なんだそれと思ったが,ほんとだった。 | ['=' '<' '>' '|' '&' '$'] …

[日記] あけましておめでとうございます

しばらく卒論関係のコーディングに追われているので, 2008-12-11 - mad日記の続きがなかなかできないでいます。そのうち時間を見つけて何とか。ところで,2008年もいろいろあったのにブログを読み返したらなんかコンパイラの話ばかりで悲しかったので,もうち…

参照とポインタの違い

参照とポインタの機能面の違いというのは良く知られているかと思いますが,コード生成の違いに関しては結構知らない方が多いのかもと思い解説します。 記事が大変長くなってしまいましたが, 個人的には参照は非常に面白い物だと思っていましてそれが伝われば…

寺田寅彦

科学者とあたまを書いたひとだけれども、この名前どっかで聞いた事があるなと思ったら, 昨日劇団青年座の人の講演で聞いたのだった。 「フユヒコ」という劇団青年座の公演が明日NHKで放送されるらしいです。冬彦ってのは寺田寅彦のペンネームらしい。 http:/…

noreturnの挙動(続)

id:MaD:20081209のコメント欄が長くなり過ぎたので新たに書きます。 稲葉さんからご指摘を受けましたけど、どうも最適化云々はおまけで本命はどうも if(foo) { abort(); } else { return bar; } のようなコードでコンパイラに警告を出させないことのようです…

noreturnの挙動

参加できなかった午前中の会議のレポートが気になってたけど出た。終わっちゃった会議にケチつけるのは野暮だけれど,noreturnの話がなんかいろいろおかしい。「何の為のnoreturn?」という肝心な点がどっかいってる。 exit等にnoreturn属性を付けてほしい ht…

[C/C++] C++WG アドホック会議に行ってきた

試験とバイトに挟まれいて, 途中から入って途中で抜けてきた。 誰が誰だかわからないまま抜け出さなければならなかったのが残念。議題としては文字コード対応の話題で盛り上がったのが印象的。 普段最適化関係しかやっていないので, 文字コードの問題を考え…

X[Y] と Y[X] は異なる。

注:以下の話は間違いでした(下の方に訂正書きます)今日見つけた自作コンパイラのバグ。型検査時に 整数[配列]のパターンを 配列[整数]の形に直してしまっていた。 a[i]とi[a]が同じというのはC言語では有名な仕様だけれども,オペランドの評価順序の問題があ…

C++0xのaxiom

今まで見逃していたけれども, こんなものが追加されるのか! a + b == b + a; (a + b) + c == a + (b + c);みたいな論理的な性質を型に与えることができるという仕様。Haskellのrewrite rulesを連想したが論文を見つけた。 Axiom-Based Transformations: Opti…

C++0xのCommittee Draftへのコメントへのコメント

コメント一覧を一通り読みましたが, 来週の会議には後半から3時間くらいしか出れないので今の内にコメントを書いておきます。 コンパイラ実装上の観点を中心に。 01. decltypeにスコープ演算子(::)を使用できない これは賛成です。 ところで, simple-type-sp…

Cの構文解析(宣言構文)

C言語の構文解析では宣言構文もなかなか大変なので紹介。処理系を作る人の参考になれば。変数を宣言・定義する場合, 普通に考えれば [型] [変数名]; [型] [変数名] = [初期値]; という構文を採用するのが自然だと思う。例えばJavaやD言語などの新しい言語で…

離散凸解析

前に何かで知って気になってたので勉強してみた。離散凸解析の考えかた 最適化における離散と連続の数理作者: 室田一雄出版社/メーカー: 共立出版発売日: 2007/12/20メディア: 単行本購入: 5人 クリック: 16回この商品を含むブログ (4件) を見る簡単に言うと…

++と--は浮動小数点数にも使える

知らなかった。

C++の配列引数の問題

C++0xの勉強をしていたはずが, C++の勉強になってしまっているorz昨日C++0xではVLAがサポートされないと書いたが,これはもともとC++には配列引数にまつわる問題があるので, このあたりをいじりたくないという事情があるのではないかと思う。 前になんかの本…

[C/C++] C++のクラスに関する識別子規則

急遽C++0xを勉強することになったので, いろいろ見ていたのですが, 以下のコメントのやりとりが気になったので捕捉説明します。(と思ったらすでにid:uskzさんが指摘なさっていましたorz) えーと…クラス名と同じ名前の変数って作れないですけど・・・ ↓認識違…

C++0xにはC99の可変長配列がない

可変長配列は難しくても、配列引数の型修飾子は実装上は面倒な事がないはず。 これらは最適化コンパイラを実装する上で結構重要度が高いと思うんだけれどもなぁ。

Cの理解出来ない文法

Cのパーサを書いた経験から, Cの全く理解不可能な仕様を幾つか紹介。まずはこれ int const long typedef volatile long volatile unsigned x; これは const volatile unsigned long long int のxへのtypedefだけれども,Cの規格上正当でもちろんgccも通す文法…

ファンクション倶楽部

こんなのがあったのか。知らなかった。 http://atnd.org/events/99 きっと冬イベントとかがあるに違いない。

大きなアライメントのメモリブロックを確保する方法

大きなアライメント(数百kbyte, 数Mbyteレベル)のブロックを確保する方法に困りました。 malloc()で大きめに確保して、無駄な部分を切り詰めるやり方 => 「無駄な部分」のサイズが大きすぎる。 posix_memalign() => これ確保したメモリはfree()できるので、…

構文木実装のいろいろ

忙しさにかまけてここの存在をしばらく忘れてしまっていました。 ここんとこ色々なコンパイラを読んだり書いたりしているのですが、構文木の実装にもいろいろなやり方がありおもしろかったので書いときます。読んだ処理系にだいぶ偏りがありますがご了承くだ…

CPU実験まとめ。

昨日CPU実験の発表会がありました。私たちのチーム「地下詰妖精」はコンパイラコード18.407秒、ハンドコード17.085秒で歴代の記録を更新し優勝しました。私はコンパイラ係を担当しHaskellでML言語のコンパイラとアセンブラの製作をしました。 この半年は一ヶ…

自動微分モジュールで遊ぶ

HackageDBでnumbersというパッケージを見つけました。この中にData.Number.Difという自動微分のモジュールが含まれていたのですが、これがなかなか面白いです。 サンプルコードを全然見かけないので、いろいろと書いてみます。 自動微分とは 自動微分という…

ocamloptを読んだ

ocamloptを読んでみた。そして色々と改造してみたりして分かった事をメモしておきます。 整数値、アドレスのボックス化は2倍して1足すという方法で行っている。 例えばprint_int 100と書くと実際にはprint_int 201という呼び出しになる。 四則演算などは、こ…

ByteStringでwcを書く

Haskellで速いwcを書いてみようという記事を読んだのですが、Haskellの文字列表現は他言語に比べ非常に効率が悪いわけで、それをつかってそこそこ速くしようとするとコードが汚くなってしまわざるを得ないという感じを受けました。そこでByteStringで書いて…

Haskellでのエラー処理

なんでもセミナーで質問があった手前、GHCのガベージコレクションの事とか調べようと思っていたのだけれど、このところ大学の実験で余裕がないので、しばらく実験中に気づいた事とか書いてこうと思います。 Haskellでのエラー処理の難しさ Haskellで手軽に使…

ttf-vlgothic

というパッケージをアップデートしたら,日本語フォントがいろいろと入れ替わってしまった。「オプシポン」がおもしろすぎたので掲載w 何もせず時間が経過したらなぜか明朝は直っていて再現できなくなってしまったのが意味不明かつ残念。太字のゴシック(グェ…

なんでもセミナーの資料を公開します。

少し書き直しなどをしました。 内容に間違いがあれば、ここのコメントなどに指摘を下さるとうれしいです。Haskellがアセンブリになるまで(pdf)