2010年1月26日火曜日

mapすごいよ map

あ~、いきなり空けてしまった。。

その上。

Gaucheのスナップショットからのビルドなのですが、
自分、情けないのですがSchemeそのものをまだまだ全然理解できておらず、
まず雑音無しでSchemeの勉強すべきと考えなおしました。
で、Version 0.9 のアーカイブを落としてきて環境を整え直しました。
Schemeの範疇で一通りのことができるようになったら、開発へ貢献しようと思います。
がんばるぞ。


さて、本題。

以前作成した年賀はがき用の宛名印刷プログラムですが、これ最初はRubyで作成していました。
で、ちょうど良い大きさのプログラムなので、これをお勉強の為にGaucheで再実装してみました。

最初にできたプログラムはものすご~く手続きチックなモノだったのですが(今も割とそうだけど)、
それでもありとあらゆるものを再帰で書きまくってると、
かなりの頻度で同じようなイディオムになってくれるので、
再帰に違和感はなくなりました。もうループ別にイラネ。


Gauche作者のShiroさんが、冗談でこんな記事を書かれてらっしゃいますが、
このレベル4の「前半のみ」をクリアした感じです。

が、実はその段階ではレベル3をクリアしてませんでした。
なんと作りたての時は「map」を一切使用してなかったのです。
(map使えば1行、2行で終わるような処理まで再帰で自前実装してた。)
宛名印刷プログラムをschemeで再実装する前に、
一応mapとかfindとかfoldの練習問題は解いていたんですよ?
でも練習問題解くだけじゃダメで、やっぱり実践こなさないとすんなり使えるようにはならんのですねぇ。

リファクタリングをしているうちにmapのことを思い出し、
今度はなんでもmap化してみました。すごいね、map。
再帰を実践していた時よりも、mapを実践した時の方が自分の脳内で何かが変わった気がする。


今までのscheme絡みの感動は、

--------------------------------------------------
・構文のシンプルさによる可能性を知って、
 脳内のプログラミングの世界が一気に広がったこと。
 (その時は具体例は思いつかなかったんだけど、それでもリアルに鳥肌がたった。)

・「手続きを渡す処理」の便利さをmapで実感できたこと。
--------------------------------------------------

の2つ。

さて、次の感動はScheme「プログラマのレベル」によるとどうやら「継続」のようですが、
既に結構いろんな情報をあさりまくってるのにイマイチ理解できない。。

mapの時もそうだったけど、俺はあんまり理解力がないタイプなので、
最初泥臭くコーディングして、それを継続で置き換える、というプロセスを経ないと理解できないかも。。
う~む。

2010年1月19日火曜日

GaucheをSubversionスナップショットからインストールしてみる。

scheme勉強中だが、schemeだけでなくて言語処理系としてのGaucheも勉強させていただこうということで、Subversionのスナップショットからコンパイルしてみることにしました。

http://practical-scheme.net/gauche/download-j.html

に記載されている通り、端末エミュレータに次のコマンドを入力。

svn co https://gauche.svn.sourceforge.net/svnroot/gauche/Gauche/trunk Gauche

しばらくすると生ソースコードがチェックアウトされてきます。
チェックアウト完了後、上述のURLの最後に記載されている通り、
「HACKING」というテキストファイルの内容を確認します。

・・・英語です。

でも最近OSSに関わっていこうと思って、
はりーぽったーの原著とAudioBookで目と耳を鍛えていたので狼狽えません。
まさに漢の中の漢。
(すげーLinuxでも「おとこの」って入れたら変換候補に
 「漢の」が出てくる時代になったんですねぇ・・・)

とりあえず読みます。
自分が使っているプラットフォームはUbuntu9.10なので、
「On Unix Platforms」のとこを見ればOKですね。

autoconf 2.54以上が必要なようなので、とりあえず「sudo apt-get install autoconf」
でパッケージをインストールします。
インストール完了後、「autoconf -h」でヘルプを確認。
バージョンを「autoconf -V」として確認すると、2.64とのこと。OKですね。

次を読むと、どうやらコンパイルに必要なCのソースコードを生成する為に、
Gaucheの最新リリースバージョンがインストールされている必要があるみたいです。
作成者であるShiroさんの記事を憧憬の思いでいろいろ読ませて頂いてますが、
Cのソースコードもschemeで生成するって記事、確かどっかで読んだなぁ。。
しかもCをLispのように記述してしまったとかなんとか。。あれのことかなぁ。
おっと横道にそれてしまった。。

この記述のすぐ後に、「./DIST gen」を実行せよとの記述がある。
このスクリプト(DIST)内でgoshが使われるのかなぁと、
中身を確認するとあるこたあるがそこのロジックは通らなそう。
渡す引数が「gen」のみなので、呼ばれているのは「autoconf」だけっぽい。
autoconfがgoshを必要とするのかなぁ。。
とりあえずこれ以上の調査は保留にしておいてやってみようか。
まずは「sudo apt-get install gauche」で最新のリリースをインストールします。

gaucheのインストール後、「./DIST gen」を実行します。
すると「configure」ファイルが生成されてます。

さて、この後は「Install.in」ファイルの通りに実行すればよいのかな?
(いろいろとコンパイルオプションがあるようなのですが、
とりあえず自分の今の環境では得にこれらを指定する必要はないので。)
というわけで、次の手順を実行。

./configure
make
make test
make install

・・・makeしたらなんかたくさんエラーがでてる。。
スナップショットってビルドも通らないケースがあるもんなのかな?
「make test」も「make install」も当然エラー。。う~む。

明日はソースを見てみて、俺でも理解できそうならデバッグしてみよう。

2010年1月18日月曜日

というわけで勉強結果を公開していきます。

少し前に「cria.log」というブログを1年ほどやってました。
内容は、オリジナルスクリプト言語の処理系を実装していく過程で思ったことや考えたことでした。
着手から1年程経過してそれなりに動くものができてたんですが、途中でschemeに出会って一気に、ほんとにビックリするぐらい一気にcriaに対する情熱が冷めてしまい、schemeの勉強にとりかかっています。(継続するのって本っ当~に難しいですねぇ・・・)

まだまだ手続き型でモノを考えてしまっていますが、なんとか頑張って立派なschemerになりたいと思います!

プログラマ 35歳 定年説 笑い飛ばして 我が道を征く

諸君 私はプログラミングが好きだ
諸君 私はプログラミングが好きだ
諸君 私はプログラミングが大好きだ

Javaが好きだ
Cが好きだ
Schemeが好きだ
リファクタリングが好きだ
デバッグが好きだ
プロトタイピングが好きだ
Emacsが好きだ
GNUが好きだ
オープンソースが好きだ
Linuxが大好きだ

会社で
自宅で
友人宅で
自分の実家で
妻の実家で
駅構内で
新幹線で
旅行先で
徹夜で
夢の中で

この地上(?)で行われるありとあらゆるプログラミング行動が大好きだ


汚いコードをならべたでっちあげのプロトタイプが 期待した結果と共に正常終了するのが好きだ
年末に急いで作った年賀状用の宛名印刷ツールが 住所や氏名を正しい位置に印刷した時など心がおどる


プログラマの操るテキストエディタが スパゲッティ状態のコードをリファクタリングするのが好きだ
悲鳴を上げたくなるような設計のコードをエレガントにモジュール化して
コードサイズが1/3になった時など胸がすくような気持ちだった


自分のブライドが蹂躙されるのが好きだ
考えぬいた設計に対して 自分よりスキルの高い人から
何度も何度もダメ出しを喰らう様など感動すら覚える


静的言語が大好きだったのに オリジナル言語処理系の作成過程で動的言語のすごさを思い知り
静的言語への忠誠心が木端微塵に粉砕された時など絶頂すら覚える


未知の技術や概念に出会い 勉強して自分の血肉にしていくのが好きだ
30歳を過ぎるまでLisp/schemeの価値を理解できなかった様(ザマ)は とてもとても悲しいものだ


意味のない大量の作業に押し潰されて時間を浪費するのはイヤだ
プログラマ35歳定年説を引き合いに出され他人の管理をするために地べたを這いずり回るのは屈辱の極みだ


諸君 私はプログラミングを 生涯プログラミングを望んでいる
諸君 日々の業務に追われているプログラマ諸君
君達は一体何を望んでいる?

更なるデジドカプログラミングを望むか?
情け容赦のない、糞の様なデジドカプログラミングを望むか?
勉強・実践の限りを尽くし、世の中に変革を与える嵐の様なオープンソースプログラミングを望むか?


『オープンソースプログラミング! オープンソースプログラミング! オープンソースプログラミング!』


(語呂は悪いが)よろしい ならば勉強と実践だ


我々は渾身の力をこめて今まさにEnterキーに振り降ろさんとする小指だ(弱そうだな)
だがこの暗い闇の底で社会人になって以来堪え続けてきた我々に
ただのプログラミングではもはや足りない!!

大オープンソースプログラミングを!!(いきなりでっかいのは無理ですよ)
一心不乱の大オープンソースプログラミングを!!(だからいきなりでかいのは無理ですってば)

我々はわずかに一個大隊 千人に満たぬプログラマに過ぎない
だが諸君は一騎当千のプログラマだと私は信仰している
ならば我らは諸君と私で総力100万と1人のオープンソースプログラマ集団となる

我々をその他大勢の彼方へと追いやり 眠りこけている連中を叩き起こそう
髪の毛をつかんで引きずり降ろし眼を開けさせ思い出させよう
連中にプログラミングの味を思い出させてやる
連中に我々の打鍵の音を思い出させてやる

天と地のはざまにはデジドカの哲学では思いもよらないコードへの情熱があることを思い出させてやる
オープンソースプログラマのコーディングで世界を変革し尽くしてやる

「ひよっこプログラマより全サラリーマンプログラマへ」
目標 任意のオープンソースプロジェクトへのコントリビュート!!

第二次プログラマ自己研鑚作戦 状況を開始せよ



征くぞ 諸君