Today アクセスカウンター Yesterday アクセスカウンター

ホワット・ア・ワンダフル・ワールド

私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ

全記事一覧 << 2008/07 12345678910111213141516171819202122232425262728293031 2008/09 >>

プロフィール

あろは (alohakun)

  • Author:あろは (alohakun)
  • 若槻俊宏 (WAKATSUKI toshihiro)

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun

    abstract

    プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.

    具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.

    もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.

    キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map









    FC2 BLOG RANKING

FC2カウンター

ブロとも申請フォーム

この人とブロともになる

素晴らしきマゾプログラミングの世界

2006/07/03(月) 20:46:27

Haskell や Perl や ML みたいな超高級言語で,brainf*ck のインタプリタを書いて満足しているようでは全然甘い.

そんなメインストリーム系の言語を使ってしまったら,「楽しく最先端の言語を勉強しながら,一歩進んだできるプログラマになろう ☆」的な,無敵の言い訳が使えてしまうじゃないか !!

偉大なプログラマは,sed で BASIC コンパイラを書く.

J - 04_07_21

Ioとか、JavaScriptみたいなプロトタイプベースのOO言語を知ると、OOに対する考えかたがちょっとだけ変わってくるのである。特にオブジェクト指向設計とか銘打っておいて、とにかく、クラス構成の話とかを聞いたときに、なんか、もやもやした気分になってしまったりするのである。 UMLとか、どうしたらいいだろうか。って感じで。

まあ、要するに、またひとつ素直な考え方ができなくなってしまったわけだ。こうやって大人になっていくんだなぁ。

とにかく、オブジェクト指向っていったら、オブジェクト指向なのだ。もはやわけわからん。実行時にオブジェクトの特性をいじれないで何がオブジェクト指向なんだろうか。とか、言いながら、二日間全身全霊をこめて書いたプログラムがsedスクリプト。


その著しく低い可読性と,奇怪な動作,四則演算はもちろん,変数宣言すらできない sed をまともなプログラミング言語と認識しているプログラマは少ない.

しかし,sed もまた,立派なチューリング等価言語なのである.

「アキレスの亀を追いかける日々」2003/03版 その1

この物語は,sed でチューリング・マシンを実装し,それを証明した,日本の変態 sed 第一人者の物語である.

(以下,引用ではなく,管理人の悪ノリ.田口トモロヲ)

記憶領域は 2 つしか 無かった.

if 文は無かったので,正規表現のマッチングを使い,代用した.

皆から,不満の声が上がった.

「オーバーキルと,呼びたいやつには言わせておけばよい.僕は,自分の責務を果たすだけです.」

その言葉に,誰も,何も言えなかった.

「駄目です.関数呼び出しがありません.」

致命的に思えた.

「b と t で,ラベルに飛べば,goto は実現できる」



#!/bin/sed -f
# sample.sed

:Main
{
x;s/$/ main-1/;x;
b Swap
:main-1
b return
}

:Swap
{
s/\([^ ][^ ]*\) \([^ ][^ ]*\)$/\2 \1/
b return
}

:return
{
x
/ main-1$/{s///;x;b main-1}
x
}



おお.

斬新な発想に,歓声が上がった.

しかし,大量のラベル付けは,困難を極めた.

ピンチを救った,ひらめき.

AWK でラベルを自動生成すれば良いじゃないか.

それだ !

皆に,笑顔が,戻った.


今日は会場に sin-x さんが来ております.


日本の変態sedの第一人者というのは言い過ぎで、私以外にしつこく sed をネタにしている方が日本にいない、が最も正確な表現です (^^; 世界には超変人はわんさかいます、例えば これ書いた人とか。加藤みどり調で言わせてください、まあ、なんて奴らなのでしょう。
私も実は awk 使いなんですが、結構何でも出来てしまうことがつまらないので、sed でやってみただけです。

プラグマティックプログラマたるもの,awk や sed はもちろん,強力なツールである make を使いこなさなくてはいけない.

■ Makefileを書こう

と、いうような話はどうでもいい。君達はMakefileの実力を知っているか!?

Makefileの実力をなめてはいけない。LL侍に斬られるくらいの実力はあるのだよ。

dec=$(shell expr $(1) - 1)
eq=$(shell if [ $(1) -eq $(2) ] ; then echo 1; fi)
mul=$(shell expr $(1) '*' $(2))

sub=$(shell expr $(1) - $(2))
add=$(shell expr $(1) + $(2))

fact=$(if $(call eq, $(1), "1"), 1, $(call mul,$(call fact, $(call dec, $(1))),$(1)))
fib=$(if $(call eq, $(1), "1")$(call eq, $(1), "2"), 1, $(call add,$(call fib,$(call sub, $(1), 1)),$(call fib,$(call sub, $(1), 2))))

all:
@echo $(call fact, 10 )
@echo $(call fib, 10 )

このぐらいは、定義できる。

数値演算と比較でshellに頼らないといけないのがややダサいけど。

と、いうわけで、次回はMakefileでWikiをつくろう編に続く!!続くわけがない!!

こういうくだらない遊びにばっかりコンピュータを使うのはよくない。


C は動的な LL なので、 Smalltalk みたいに環境を保存したり復帰したりできます。これからのゲームのセーブロードは core 吐いて restore が定番になることでしょう。」 というような魔術師はともかくとして,普通の情報系学生が次に学ぶ言語と言ったら,Ruby や Python のようなクイックハックが 256 倍楽しくなる LL か,いかにも就職に有利になりそうな C++ や Java のような業務用言語なのではないでしょうか ?

J - Make プログラミング

そんなことじゃいけないよ。ここはむしろ、「使えるプログラミング言語は?」って聞かれたときに「sedとMakeとbrainf*ckです」って答えて面接に落ちるぐらいの気持ちでいかないと。

「お願いします!!Makeでqsortだって書きますから!!内定くださいッ」

... (中略 : とても素晴らしい Makefile (負けファイル))

簡単な問題をわざわざ難しく解いて喜びを覚えるのは技術者が最もやってはいけないことのひとつだよ。

それはいいとして、Makeの関数はMakeの本来の機能である「更新日時を見てコンパイルするかどうか決める」という部分に影響を与えられないので、微妙に使い方がわからないような。

マゾプログラミングで遊ぶにしても、シェルが非常に簡単呼び出せて、どうにでもできてしまうので、いまいち感動が薄い。シェルに頼らないと基本的な機能が足りないのも辛い。標準入力から読むのにシェルが必要なので、シェルを呼ぶしかないんだけど、シェル使ってしまったら、つまらんというか、なんの話をしてるんだ。



最近キモい文章をノリノリで書きすぎたせいか他のことをやる気がしない。いいのかそれで。


AWK で brainf*ck のインタプリタを書こうとした後,世界の広さに気付いた管理人.

結論 : 僕みたいな半端者は,コツコツと真面目にレポート書いたり,研究とかしてなさいってこった.

(もうそろそろ前期が終わっちゃうよ〜 何にもレポートやってないよ〜)
小ネタTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!
コメント
コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://alohakun.blog7.fc2.com/tb.php/356-882e2e02

最近のコメント

リンク

このブログをリンクに追加する

最近のトラックバック

人生の残り日数

日本人男性の平均寿命は 28700日.

RSSフィード

カテゴリー