2008-01-01から1年間の記事一覧

参照とポインタの違い

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

寺田寅彦

科学者とあたまを書いたひとだけれども、この名前どっかで聞いた事があるなと思ったら, 昨日劇団青年座の人の講演で聞いたのだった。 「フユヒコ」という劇団青年座の公演が明日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言語のコンパイラとアセンブラの製作をしました。 この半年は一ヶ…