compiler

ドラゴンブックが新しくなって登場

昨日、ドラゴンブック(→id:yaneurao:20060901)がアマゾンから届きました。8月末に発売って書いてあったのになぁ…(´ω`) 表紙は、3Dのゲームっぽい絵柄で主人公(?)がドラゴンに挑んでおります。一瞬、Game Programming Gemsかとオモタ。 コンパイラ好きとして…

いまどきのプログラム言語の作り方

マイコミさんから「いまどきのプログラム言語の作り方」という本が出る。おそらくまだ書店には並んでいないが、なぜか私の手元にはあるので*1紹介しておく。 あの橋本氏(id:yaneurao:20050602)を彷彿とさせるタイトルだが、この本に限っては良書。コンパイラ…

メタテキスト論考(2)

三日前にこの日記で書いた「メタテキスト論考」だが、反響自体はすさまじいものの、みんな外しすぎだ。ぜんぜん本質がワカッテない。確かにgrepのような検索したものを置換して、それを元テキストに反映させるだけならばsedとかed(edときくと勃起障害かと思…

メタテキスト論考(1)

何らかの作業を行なっていると、複数のテキストファイルのなかから文字列を探しだす必要が出てくる。プログラマの場合、その傾向が特に顕著だが、プログラマ以外にしても、たとえば本の執筆作業か何かでそういうシーンに出くわすことは少なくはない。 検索に…

ふたつ目の話は、コンパイラは道具ではないということ(5)

3日前に紹介した、neetさんからはこういう返答をいただいた。 http://d.hatena.ne.jp/neet/20040616#p1一応、私の言いたいことが伝わったようで、ひとまず胸をなでおろした次第である。 とまあ、そういったことを踏まえて、鬼○○のひとに、 あんまりコンパイ…

ふたつ目の話は、コンパイラは道具ではないということ(4)

先日の携帯用上位言語の開発という課題にしても、結局は、この<変換>をいかに効率的に行なうかという答えのひとつに過ぎない。http://d.hatena.ne.jp/yaneurao/20040524 http://d.hatena.ne.jp/yaneurao/20040525 人は、ひとたび「コンパイラは道具だから…

ふたつ目の話は、コンパイラは道具ではないということ(3)

昨日、一昨日の私の日記につけられているコメント、非常に白熱したものになっている。もう既にコメント上で結論めいたものは出ているので、私がここでいまから書いていくこと自体が蛇足っぽくなるのだが、そのへんはご容赦願いたい。 いま一度、基本に立ち返…

ふたつ目の話は、コンパイラは道具ではないということ(2)

昨日の話について、こういうトラックバックがあった。その人の日記にコメントしようかと思ったのだけど、コメント機能を無効にしてあるのでこちらで書かせてもらう。http://d.hatena.ne.jp/neet/20040614 結論: 数学を道具だと思うことで工学者はハッピーに…

ふたつ目の話は、コンパイラは道具ではないということ(1)

頭のいい人に限って、物事をある段階から道具だと割り切ってしまう。「数学は道具だと思って」「コンパイラは道具として」みたいな感じでだ。本当に数学と最先端で向き合っている人は、決して「数学は道具」だとは考えていないだろう。コンパイラにしてもそ…

再帰の最適化

将棋の世界で『再帰的手順』などと言っても、よほどの詰将棋マニアしか知らないだろうが、プログラマならば馴染みのある概念だろう。 詰将棋にハノイの塔のような再帰的手順を導入して長手数の詰将棋を作るわけである。長手数の詰将棋はそれ自体が価値がある…

携帯開発用言語(2)

continuationを用いれば次のようにコーディングできる。 class Hoge { coroutine void some_callback_function(){ A(); yield(); B(); yield(); while (C()){ D(); yield(); E(); yield(); } F(); } // 呼び出し側 static void test(){ some_callback_functi…

携帯開発用言語(1)

携帯の複数のデバイスをサポートしようと思うと、たいていJavaとC/C++の両方のコードを書かないといけない。JavaからC/C++、あるいはその逆をうまく変換することが出来れば理想的なのだが、ポインタの問題ひとつとってみてもそう簡単な問題ではない。 そこで…

.NETのILの仕様(3)

おまけに、CILから.NETのライブラリやら何やら呼び出すことも簡単である。ふつう、言語を自作すると言語に付随するライブラリを作ったりする作業が出てくるが、そういった、言語とは本質的に関係のない(と思われる)作業に手間暇かける必要がない。誰でも気…

.NETのILの仕様(2)

コンパイラを自作ようと考えたことのある人ならばわかるだろうが、Pentiumのアセンブラですら、レジスタ割付はかなり難しい問題だ。まして、レジスタにほとんど直交性のないプロセッサや、パイプラインを考慮した最適化をコンパイラに行なわせるのは結構辛い…

.NETのILの仕様(1)

それでは、CIL(Common Intermediate Language:(.NETで使用する)共通中間言語)について見ていこう。CILの言語仕様は、CLI(Common Language Infrastructure:共通言語基盤)に含まれる。そこで、CLIの仕様を参照するとヨロシイ。 ECMA-335: http://www.ecma-inte…

ネイティブコンパイラの善悪

C#を始めとして.NET系のcompilerはネイティブコードを生成できない。VC++(Visual C++)だけはネイティブコードを生成しようと思えば出来る。思うのだが、VC++でネイティブコードを生成できる以上、マイクロソフトの手にかかれば、C#であろうが、VB(Visual Bas…

conservativeなGC

BoehmのGCは保守的(conservative)なGCである。これは、root集合から辿れるならば、配列の中身すべての要素を辿ることを意味する。画像imageのように大きな配列を扱う場合、こんなことをされてはたまらない。配列の要素がでたらめな数字だと、そんなところを…

64bit processor

私の一昨日の日記 http://d.hatena.ne.jp/yaneurao/20040406#p1 に対して次のようなコメントをもらった。 サーバアプリケーションにJavaが多いことを考えると int32にペナルティーの付くプロセッサがこれから開発されるとは 思えないのですがいかがでしょう…

変数のbit長

C言語に代表されるような関数型言語には、たいてい整数型(int型)がある。これが何bitであるかは言語系で違う。また処理系でも異なるかも知れない。C言語では、int型は実装依存であり、その処理系でもっともパフォーマンスの優れているbit長である。ふつう、3…

GC付きの言語におけるゲームプログラミング(2)

さて、携帯のような省メモリ環境におけるGCのまずさを書いたところで、Windowsマシンのようにふんだんにメモリのある環境でのGCの挙動について考えていこう。まあ、メモリがふんだんにあるとは言ってもビデオメモリのようなリソースは限度があるので、unmana…

ソースコードのmodularityの低さ(4)

長々と書いてしまった。全然話しが進みやしねぇ。もう、ソースコードがコンパイラの特定のバージョンを強要するのは別にあっても構わないと思う。COMインターフェースで特定のバージョンの実装を要求するのと同じである。それが叶わないならば、コンパイラを…

ソースコードのmodularityの低さ(3)

C++の標準もどんどん進化している。それはそれで構わないのだが、古いバージョンのコンパイラ向けに書かれたコードは新しいバージョンでコンパイルできないという事態は起こりうる。そういう事態が起こったとき、プログラマは通例FDIS/ISではどちらが正しい…

ソースコードのmodularityの低さ(2)

バイナリレベルでの相互呼び出しに関しては、COMでもCORBAでも、まあ何でもいいのだが、それほど実現するのは難しくはない。これと同じことをソースレベルで行なえるかというと、そりゃもう、不可能に近い。なんでか?ソースコードが特定のコンパイラ、ある…

ソースコードのmodularityの低さ(1)

いまだに、やねうらおはC++でプログラムを書かないといけないことがある。この状態はまだしばらくの間は続くと思う。C++は、ライブラリを部品のように使うことが出来ない。namespaceを使って書けば、名前空間を形成することは出来る。それは、部品ではないの…

携帯ゲームプログラミングHells(2)

FOMAのような高速にJavaを実行できるマシンにすると携帯の単価があがる、だから今後はbrew(C/C++)を採用する、というauの方針は正しいと思う。それはともかく、brewとJavaについてもう少し技術的に突っ込んでみる。brew用のアプリにキャリア側の認証が必要な…

携帯ゲームプログラミングHells(1)

ABAさんが昨日の私の記事についてフォローしてくださったので紹介。 http://d.hatena.ne.jp/ABA/20040324#p1 BREWの問題点は、キャリアから認定されていないアプリ、いわゆる 勝手アプリが作れないことにある。これは単なるauの方針なのか、 それともJavaの…

GC付きの言語におけるゲームプログラミング(1)

GC(Garbage Collector)はオブジェクトを解放する手間が不要になる。世紀の大発明だったと言っても過言ではないだろう。しかし、それが便利なのかどうかは微妙なところだと思う。実際のところ、C#やJavaでまともな(市販レベルの)プログラムが組まれるようにな…

近未来的プログラミング(1)

D言語のテンプレート機構は、明示的なインスタンス化が必要になる代わりに、C++には出来ないようなことまで出来る。それば事実なのだが、それがいいか悪いかは別問題である。思えばJavaやC#にもGenericsが導入され、いよいよ本格的に足並みをそろえた感もあ…

記事書いたっすよ!

今日発売の「Software Design」誌に11ページもD言語の記事を書いた。はっきり言って書きすぎである。ここ半年間はD言語の先見性に惹かれ、毎日いろいろといじってみる日々であった。しかし、結局のところは、またC++(あるいはJavaやC#)での開発に戻らねばな…

もう時代は超並列言語だぜよってなわけで PICT:π-calculusに基づく言語 の論文(紹介?)で、以下のが秀逸だったので紹介。 http://www.cs.indiana.edu/cgi-bin/techreports/TRNNN.cgi?trnum=TR476それで先日買ったMilnerたんの本*1、さらさらっと軽く読んだけ…