トップ «前の日記(2007-03-24) 最新 次の日記(2007-04-02)» 編集

follow ikegami__ at http://twitter.com

イネムリネズミ日記

いけがみを召喚するには、出現予定を参考にしてください。三週間前までにメールをくだされば、日程を追加するなどしてスケジュールに組み込むことができるかもしれません。勉強会や個人的な会合、中途採用面接などに応じます。日記に書かないことはこちら

2003|04|05|06|07|11|12|
2004|01|02|03|04|05|06|07|10|11|
2005|01|02|03|04|05|06|07|08|11|
2006|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|11|12|
2010|03|04|12|
2011|02|03|04|06|08|09|10|

2007-04-01 一年で最も愉快な日 [長年日記]

_ /bin Haskell化終了。

今日に間に合わせるために、昨日は一番大変な日でした。 まあちょっと見てくださいよ。

silver % ls /bin
Bash*        Kill*       Rmdir*      cat*         ksh*        sh*
Cat*         Ksh*        Sh*         chmod*       launchctl*  sleep*
Chmod*       Launchctl*  Sleep*      cp*          link*       stty*
Cp*          Link*       Stty*       csh*         ln*         sync*
Csh*         Ln*         Sync*       date*        ls*         tcsh*
Date*        Ls*         Tcsh*       dd*          mkdir*      test*
Dd*          Mkdir*      Test*       df*          mv*         unlink*
Df*          Mv*         Unlink*     domainname*  pax*        wait4path*
Domainname*  Pax*        Wait4path*  echo*        ps*         zsh*
Echo*        Ps*         Zsh*        ed*          pwd*        zsh-4.2.3
Ed*          Pwd*        Zsh-4.2.3*  expr*        rcp*
Expr*        Rcp*        [*          hostname*    rm*
Hostname*    Rm*         bash*       kill*        rmdir*

Haskellをご存知ない方に 簡単に説明します。Haskell は素敵なプログラミング言語で、 ソースコードは先頭が大文字の名前のテキストに保存することになってます。 そして、 ghc でコンパイルすると大文字で始まる名前のプログラムができあがります。 たとえばこんな風です。

% cd tmp
% mkdir Hello
% cd Hello
% ls
%
% echo 'main = putStrLn "Hello, world"' > Hello.hs
% ls
Hello.hs
% ghc --make Hello.hs
[1 of 1] Compiling Main             ( Hello.hs, Hello.o )
Linking Hello ...
% ls
Hello*  Hello.hi  Hello.hs  Hello.o
% ./Hello
Hello, world

いやー、/bin を全部Haskell化したのは 世界で僕が一番最初だと思いますよ。最も簡単だったのは echo で、 最も難しかったのは zsh でした。 でも、僕は zsh 派ですから何としても再実装したかったんです。 アルファベット順にひとつひとつ作ることを自分のルールにしていたので、 zsh を再実装する頃にはだいぶ Haskell の腕前が上がりました。

ソースコードをお見せしたいけど、今見返すと乱暴な実装などもあって 恥ずかしいんです。そこで来年の4/1までには、refactoring をし終えた ソースコードを公開します。

あ、今日が偶然April Fool's Dayなので、僕が嘘を ついていると思っているでしょう。でも、以前私は すべてのオプションを兼ね備えた完全なCat を書いて、公開しています。 これは、まあまあの出来で、お見せするのに恥ずかしくはありません。 こんな感じに、地道にやれば出来るんです。書くことを楽しめばいいんです。 一度作ってしまえば、好きなオプションをいくらでも追加できるんです。 cat --my-style foobarなんて素敵でしょう?私は --my-style を「読みたくないフレーズは表示しない」というオプションにしています。これはすっごく便利。

/bin の再実装は最近の流行です。私と同じように /bin や /usr/bin にあるコマンドを皆が書き直しています。 これは素晴らしい事です。C言語で書かれたプログラムが起こしうるあらゆる Bus Error, Segmentation Fault そして memory leak を /bin から追放しましょう。それは時間がかかりますが、できないことはないのです。 日本[の会に /bin/[ を愛し、より良くしたい人達が 集まっています。あなたがプログラマならさっそく考えてみてください! あなたがプログラマでないなら、ブログで声をあげてください。「再実装!」と。 次世代[の開発に向けてというコラムを書きました。 楽しんでいただけたら何よりも幸いです。

/bin の次の目標は /usr/bin ですが、これはなかなか手強いです。なにしろ私の /usr/bin には 754 個のコマンドがありますから(他の人はもっとあるでしょう)。でも僕は忍耐強く挫けずに続けます。/usr/bin/emacs さえも Haskell で書き直してやります。「さらば Emacs-Lisp。」と言える日が来るでしょう。

_ RubyistのためのHaskellガイド

まあ、こんなふうに僕は Haskell をとても気に入っています。 コンパイルに通れば、ほぼバグがないんですからねー。 その、コンパイルに通すことが若干難しいのですが、パズルのようにプログラムを結合していくのは面白いんです。

特に名は秘すのですが、某O社から「Haskell について本を執筆しませんか」ということを ずいぶん前に依頼されました。でも、僕は仕事でとてもとてもとても忙しかったので、お断りしました。 それでも、出版社というのはしつこいもので、忘れた頃に催促が来るのです。

で、おととい来たのは「最近、Rubyが注目を集めていますよ。 Ruby ユーザを Haskell に改心させるのはいかがですか」という催促でした。 なるほど、 Ruby on Rails は僕も気になっていたところです。多くのプログラマが Ruby に興味を持つのは いいことです。というのは Ruby なら /bin の再実装も簡単だからです。もうすでに Ruby で /usr/bin/emacs を再実装しちゃった人はいるんじゃないかな?

そんなわけで、「RubyistのためのHaskellガイド」が某O社(敢えて名は秘す)から出版されます。 出版時期は、ええと、僕の頑張りにかかっているのですが、来年春(4/1)くらいには出る、んじゃないでしょうか、 いや、出るようにしたいです。

編集者の人から「もう、執筆していることをブログで公開してください、本の名前と目次くらいなら OK です。 とにかく、多くの人があなたの本を読みたがっていることをわかってください。」と言われました。 うーん、僕は、その、できれば、本を書くより、プログラムを書いたり、 素敵な彼女を捜して京都を彷徨ったりしたいのですが、仕方がありません。これが現時点での目次です。

旧きプログラマはポインタの迷宮に残され
オブジェクト指向を会得したプログラマはクラスの設計に溺れ
関数型を理解したプログラマは再帰と継続の闇に姿を消した
Haskellという名の関数型言語は、いまだ大陸の辺境にしか知られていないプログラミング言語である。
しかし、幾人ものプログラマが集まろうとHaskellの奥深くに潜り、富と名誉を手にするものは現れずにいた…。
…誰にも踏破されない佳境は、いつしかHaskellの迷宮と呼ばれプログラマの畏敬の対象と化していった。
………。きみもまた持前の好奇心からHaskellに向かう若きプログラマである。
その目的は一つ、Haskellの世界を探索し思索と喜びをその手につかむことだ。さあ門をくぐり進みたまえ!

RubyistのためのHaskellガイド

目次

  1. λの広場
    1. この文書は何か
    2. なぜ関数型言語は必要か
    3. Haskellとは何か
    4. Haskellのコミュニティ
    5. 実際、この文書は何が書かれているか
    6. 実際、この文書には何が書かれていないか
    7. Haskellが実際に使われている例
    8. どのようにしてこの文書は書かれたか
    9. ghcとは何か
  2. 第1階層 翠緑ノ樹海
    1. 希望に満ちたプログラマが踏み固めた大地
    2. 関数と定義の狭間、場合分けと再帰のあふれる場所
    3. 幾多のRubyistが混乱したタプルとリスト
    4. 地の底よりあふれる具体例
    5. リストと再帰の咆哮に立ち向かう勇気ある一歩
  3. 第2階層 原始ノ大密林
    1. いにしえの妖精たちが踊った森
    2. 痛みを耐える高階関数の道
    3. 飛竜の叫びが響くテストとデバッグ
    4. 魔物たちがさ迷う新しい型の定義
    5. 密林に鎮守するHaskell
  4. 第3階層 千年ノ蒼樹海
    1. 青く輝く関数の森
    2. 女王とその奴隷たちが棲む型
    3. 剣士が血塗られた手を染めた入出力
    4. 神の涙に沈んだモジュールの樹海
    5. 天空の海を泳ぐ主

全部で何階層あるのか、文書の中身はなにか、はネタバレを含みますので現段階ではお伝えできません。 できあがる本のレビュアーになりたいと思う方は、自分のブログで表明してください。 私は spam があまりにも多く来るので(たぶん、インターネットの初期からメールアドレスを持っており fj.* や comp.* でメールアドレスを明らかにしていたからだと思う)、メールを読むのは 辞めてしまいました。D.Knuth もメールは読んでないそうです、彼の気持ちは判ります。 Knuth が Haskell を知っていれば、TeXはあれほどにまでクソな文法にはならなかったでしょう。彼のメールボックスは不満と改善を求める手紙で溢れているそうです。

_ 就職先を探しています。

3年勤めた研究所ですが、僕は、もう formal methods に関わることに、本当に、疲れてしまいました。formal methods による検証技術は実現されるべきですが、僕が手助けすることはもう何一つありません。僕よりも優れた人たちが築き上げていけばいいでしょう。僕は作る側から見守る側に回りたいです。

そこで、次の就職先を探しています。どなたか、私に興味を持っておられる方はいらっしゃいませんでしょうか。私の特徴は、「やりたいことに全てを尽くす、やりたくないことはすぐにやりたくなくなる、しかし好奇心は何事にも旺盛である。真面目な風貌に反してユーモアを持ち合わせている。温和な性格で、協調性は高い(いろんな人と共著の論文やソフトウエアを書いてきました)。英語の文章は基本的になんでも読め、書ける。英会話の素質はスウェーデンに3ヶ月滞在できた程」です。数学とオープンソースプログラミングを愛しているので、週に4日しか働きたくありません。週に3日だけでいいなら、大歓迎。もちろん、給料はその分低めに押さえていただいて結構です。何らかの方法で連絡をください。


出現予定(召喚方法 ikegami@madscientist.jp):

RSS feed を再開しました。RSS の思想を尊重するために全文配信はしません、あしからず。