K.Sasada's Home Page

Diary - March 2003

研究日記

弥生

_31 (Mon)

秋葉の戦利品、HDDを交換。やっぱりこれだけの量をなにやらするのは面倒だ。

秋葉原、そういえばドクター中松が都知事選の演説をしていたらしい。みていなかったからよくわからないが。しかし、あの「ドクター中松」を連呼する歌をガンガン流すのはどうにかならないのかな。あれじゃ、かえって印象悪くすると思うんだが。

ヤマギワで椅子を見る。アーロンチェア、なるほど、さすが、とか思ったんだが、20万30万40万50万とかの椅子は、なにがいいのか、ようわからんかった。名前だけなのかなぁ。20万出すなら、マッサージ椅子のほうがいいなぁ。置くスペースがあれば、欲しいんだけど。

そういえば、ジョーバを見てきました。というか乗ってきました。乗っててけっこうおもしろかったんだけど、一人で乗って運動している図を誰かに見られるのは嫌だな。

_30 (Sun)

久しぶりに秋葉原に行きました。久しぶりの秋葉原は、なんか知らないものが多かったです。

夜、某アレな人用居酒屋に行きました。やっぱり、アレな人ばかりでした。常連さんが多かったような気がします。なるほど、と思いました。

卒業、なのですよね。私は、あと2年あるからそんな気はしないんですが、やはり、別れの季節なのですね。さびしいものがあります。新天地(?)でも元気でやってください。そのあたり、ネットがあるから、連絡はとりやすそうですね。

でも、出会いが無いんだよなー

_29 (Sat)

昨日は大変たのしゅうございました。また誘ってください。終電があんなにやばいとは知らなかった。


昨日買った本。

  • dRubyによる分散オブジェクトプログラミング

とってもとってもとっても読みたいんだが、いつ読めるんだろう。分散プログラミングってようわからないんだよな、その目的が。

今日手に入れた本。

  • 家族計画原画集

非常に有益な資料です。多分。明るい、とか頭につかないので安心です。多分。

明日は秋葉いってきます。

_27 (Thu)

ブギーポップを読んでいていつも疑問に思うのがあの口笛を、登場人物が全員「これは、ワーグナーのニュルンベルグのマイスタージンガーだ」と、ただちに認識すること。私は、いまだにその曲がどんなだか知りません(聞いたことはあるんだろうけど)。これくらい常識なんだろうか。

ブギーポップは、最近惰性というか、なんというか。息切れしてるのかな。

_26 (Wed)

発表行ってきます。


いってきました。八王子遠い。京王片倉まで歩いたら、30分以上かかった気がする。しかし、東京工科大、建物綺麗だー。

座長の田原(すみません、SICP読書会主催と混ざった・・・。)田浦さん(東大)に、Ravaへの突っ込みが。「大体実装というのはどの言語でも出来るが、詳細まで実装するためにはそれが可能かどうかが問題ではないか」。そうかーそういう見方もあるのかー。大体出来たからいいやー、めんどーだしー、とか正直思ってたのだけれど、確かに言語処理系実装基盤としてのRubyという観点からはその指摘はもっともだなぁ。うん。

そういえば、発表直前まで動作確認してなくて、会場でしたら SEGV。けっこう焦ったりしたのですが、工科大はLanでさくっと外に繋がることができ、1.6.7 を入れなおして解決。というか、Rucheme の SEGV もこれか? 現在のを上書きしても直らなかったのが、Ruby 全部を別ディレクトリに入れることで解決。うー、1.6.8と1.6.7 の共存って出来ないのかしら。


工科大行った記念に買った本(違)

  • ブギーポップ・スタッカート

いいな、ちゃんとした本屋があって。そういえば、無駄に豪華なマクドナルドもあったな。コンビにも(*1)。でも、坂が多いので移動は大変そうだ。


*1 これはほんと羨ましいな、24時間営業ってわけでも無いようだけど。

_25 (Tue)

卒業式行って来ました。他人の。長々と座らされた。

なんで床屋・・・。

_24 (Mon)

大学院手続き終了。これで、手続きミスで駄目、ってこた無いだろう。多分。来年は無職というわけではなくて済みそう。

未来から卒業証書が届きました(謎。

そういえば、手続きのためにお金をがつっと数十万為替に変える必要があったんですが、下ろしたんですが、コンビニで下ろせました。20万が限度額だったんですが、それを何度か繰り返し。コンビニの中で万札を抱えて、ばさばさ数える怪しい人になってしまいました。便利な世の中なのか、なんなんだか。

日本は平和です。


あったら嫌なもの。アーロンチェアの叩き売り。

いや、ふと大学院に行く金でアーロンチェアが買えるなぁ、と思ってしまって。うーん、悩むところですな。

あー、欲しい。欲しい。でも、研究室で一人だけ10万のいすに座るのは勇気が要るな。そもそも狭くて置けない。あー、広い家に住んでみたい。そもそも、金額でモノゴトの尺度を測ってしまうのが貧乏人というか、なんというか。。。


うー、学校に居ても全然進まない。駄目周期がやってきた。この切羽詰ったときに、ヤヴァイなー・・・。

_23 (Sun)

4時間を、主に関数型言語(主にHaskell)で喋る飲み会というのは、なかなか無い経験なんだろうなぁ(*1)

楽しゅうございました。次は RHG読書会行きたいな。

ちなみに、私は SICP は「しくぷ」って読んでたんだけど、皆様「えすあいしーぴー」と読まれるのですね。

んで、Rucheme の機能追加が進みました。問題やらずに rucheme で動くかどうかの検証ばかりやってました。スタックオーバーフローしない限り、ruchemeでも問題は解けていた様子。でも、スタックオーバーフロー速すぎるな。なんとかしないと。ruby のスタックをそのまま使うのは諦めないと駄目かー。


*1 内容は怖くて書けませんが。ほら、一応大学のサイトだし。

_22 (Sat)

昨日の日記、長かったなぁ。


ごめんなさい、ねむくてたまらない・・・。算数は嫌いだ。

_21 (Fri)

あー、考えなしになんか変なこと書いた予感。ごめんなさいメールせんといかん気がする。うあー。


情報処理学会 全国大会というので、Rava でお話をするらしいのです。趣味を学術的な何かに昇華しないといけないわけで、何かあったかなー、と頭を悩ませているわけです。

同じセッションの方々のテーマ、お名前を拝見すると、そうそうたる面子なわけです(*1)。このなかで、Rubyの練習、および冗談で作ったものを紹介しなければいけないわけです。というわけで、困っているわけです。

でも、部屋自体、結構狭そう&発表15分質疑5分らしいので、いい加減にやっても終わるかも、とか甘い考えを抱いたりもするのですが、やっぱり名前を見てしまうと、いい加減な発表が出来ない気はするのです。

はてさて、どうしようかな。

いっそ、全然関係ない話でもしているか。RubyにはRubyちゃんは居るし、らんげーじ娘。だってある。ならば、情報処理学会としては彼女達をプロモートしなければならないだろう。ならば、それについてどのような方針を建てるべきであるかを論じ、今後の日本の情報処理の礎となるべく(以下略)。質疑応答の時間は、人気投票? まさに未踏ですね(*2)

うーん、なんかネタ無いですか(*3)

しかし、東京工科大学へ行くのが大変だ。京王線な私は、京王片倉で降りるのが楽なんだが、そこから遠いんだよなぁ。昔、シスアド試験のために、一度行った事があるんだけど、20分くらい歩いた気がする。天気がよければバイクでもいいんだけど、危ない気もするな。どーやって行こうかなあ。


少し真面目に考える。すでに2ページの論文(といえるのか? これ)は提出しているので、それに基づいて話をしなければならないんだろうなぁとは思う。

ちょっと、まとめてみようかな。

■目的

□現状と問題点

RubyでJavaVM なんて誰もつくってねーよ、あたりまえだよ。

JavaVM の開発は、実行速度の問題点から、インタープリタによる実装は無かった。これは、JavaVM の開発コストが非常に大きいものとなっている。

ならば、Ruby で JavaVM を作ればいーじゃん。多分。

□目標

見た人をニヤリとさせる。rubyを習得する。

Ruby によりJavaVMを実装し、それは実際にどうなのか? ということを明らかにする。

また、速度が遅いことはわかっているが、なんとかこれを抑えることは出来ないか。

■設計と実装

さくっと。

次のような点に留意することで安価に実装することができた。

  • 言語の機能をなるべくそのまま使う。
    • GC、スレッドなど
    • インスタンスは Ruby のオブジェクトにするとか工夫
  • Ruby でネイティブメソッドがかけるように
    • でも、Rubyでネイティブメソッドを書かなければならない、という点でデメリットな気もする。まあいいや。
  • あまりに遅かったため、JITコンパイラを試作した

■まとめ

□成果

スラドとかで笑ってもらえた。

次のような成果を得ることが出来た。

  • 短期間でJavaVMを実装することができた。
    • Ruby は非常に豊富な機能を持つ言語であり、それらをそのまま利用することで実装することが出来た。
    • 拡張しやすい(言語レベルでのデザインが良いため、インタープリタだから変更が容易なため)ため、機能の拡張が容易である。たとえばデバッグ用の機能や、またはキワモノ的な機能を試しにつけて見よう、というような話。
  • 簡単なJITコンパイラを作成することが出来た。
    • Ruby によってこのようなコンパイラを比較的安価に実装できるであろう予測を得ることが出来た。

ただし、実用として利用するためには、まだまだ修行が足りない(*4)

□今後の課題

次の処理系はなんにしよーかなー。

処理速度の向上や、Ravaの用途の模索など。

個人的には、Ravaを利用して自分の研究のプロトタイプの実装に役立てたいと考えている。


こんな感じですか? うーん、つまらない気がする。


[OOエンジニアの輪!]。うーん、かっこいい。

あおきさんの日記ページ、私の大好きなIEでは、なぜかデザインが変になってる気がします。スクリーンショットです。もしかして狙ってたりして。


あれ、font-size の指定を無くせば、小さい字(ブラウザの規定サイズ)になるのか。うは、駄目だ俺。

明日のために rucheme バージョン上げとかないとあかんかった。バグの探索か。うーん。

GC.disableにすればSEGVしないので、GCかー。うーん、どうしようかな。

う、あっけないほど直ぐ直ったな。Nil = nil;def Nil... のように、nil に対してsingleton を加えてたんが原因か。

Rucheme / Scheme(subset) interpreter on Ruby更新しました。0.3 SICP読書会バージョン(嘘)。多分、明日はデバッグ、機能追加の日。

というわけで、明日が楽しみなのです。しかし、人数多いな、マジで。

nil 云々についての変更点を書いておきます。

  Nil = nil # <== ここ
  def Nil.to_s
    "()"
  end
  def Nil.to_s2
    ""
  end
  # do nothing
  def Nil.each
  end

これを、

  Nil = Object.new
  def Nil.to_s
    "()"
  end
  def Nil.to_s2
    ""
  end
  # do nothing
  def Nil.each
  end
  def Nil.nil?
    true
  end

このように変更しました。nil を直接使うほうが、楽だったんで、Nil を nil にしていたわけですが、SEGV しちゃったんで(*5)

ちなみに、rucheme 0.0.3 で、rcmlib/type.rb の該当部分をこのようにすると、SEGV します。1.8 では平気だったんですが。 って、SEGV しなくなっちゃった。なんでだろう。不思議だ。さすがGC。って、再現。あれー? やっぱりGCなんて実装するもんじゃねーな(*6)


うーん、108人も飼っていれば、全国大会のネタも困らないんだろうなぁ。東大って凄いなぁ。私もがんばらないと(何を)。


*1 というか、発表タイトルにある単語の意味がわからん。私の発表はなんというか、非常にシンプルでわかりやすい。シンプル大賞は受賞できませんかねぇ。
*2 踏破されても嫌だ。
*3 全国大会は演芸大会じゃない。
*4 俺が修行しなきゃあかんのかな、やっぱり。
*5 んで、原因追求する力も無いんで・・・。
*6 人に実装してもらおう、という意味です。GCしてもらうのは大好きです。

_20 (Thu)

おっきくしてみました。(Thu, 20 Mar 2003 10:57:05 +0900 現在)

ブラウザによる文字の大きさ。興味深いですね。うーん、こんなに違うんですね。私は IE5.5 なので、small くらいの大きさがちょうどいいな、とか思うんですが。

凝るなら、ブラウザごとにfont-size変えろってことなんでしょうか。うーん。


(Thu, 20 Mar 2003 11:00:11 +0900) うわー、xx-large 、馬鹿サイトだ。first-letterだけ文字サイズ設定してるから、そっちのほうが小さいし。


(Thu, 20 Mar 2003 13:12:11 +0900) medium は結構いい感じ、ですか。うーん、なれないので違和感が。

_19 (Wed)

なんか、偉い人たちが・・・。まだまだ勉強不足だな。週末は、また偉い人たちと会えるのか。うーん。

なんか、非常に恐ろしいことがあった。恐ろしすぎて、かけません。


ちょっと、いろいろあって疲れてます。やばい。


某xxを読んで。「〜〜パターン」という話が載っていた。うーん、これって「〜〜パターン」と、名前を付けるようなことなんだろうか。なんか、人と話しているときに、その某xxに書いてあったとおり、「〜〜パターン」でやろうぜ、とか言われたらなんか嫌だ。昔はパラダイムって言ってたなぁ。

GoF のあれは、ある程度共通言語になっているような気はするけど。でも「これはイテレーターパターンを使いましょう」とか言う人と一緒に仕事をしたくない(*1)。うーん、そういう人とペアプログラミングとかしたら新たな境地が開けたりするんだろうか。

「xxパターン」と言ってしまうと、型にはめる、機械的な作業を考えてしまうんだが、プログラミングってそういうわけじゃないだろうし(もちろん、パターンを流行らせている人たちも、そんなこと思っていまい)。そのパターンの考え方を知らない、思いつかないと悲惨だが(*2)。いくつかのパターンを選択し、それを組み合わせて創造的なプログラミングの時間を増やす、とかってことだった気がする。だから、パターンにはまる部分は機械的にやっちまえばいいんだと。

Ruby なんかの delegate.rb とかは、そういうの支援、ってことでしたよね、たしか。ほんとに機械的に出来る部分ならいいんだけど、そうでもない部分を枠にはめて、思考停止してるような感じがするので、なんか嫌。

たしかに C とかだと、機械的に決まる部分は結構あるとは思うけど ^^; でも、やっぱり思考停止している気がする。

それとも、ただ単に俺が乗り遅れているだけなんだろうか。ある程度抽象的な議論までなら、なんとかパターンで、とか言うのは便利かもとか思ったりするけれど。処世術の一つに「なんとかパターンという言葉を使ってはったりをかます(なんとか、はとても難しそうな単語)」というものが出来たりするんだろうか。たしかに、偉い人はそういうのには弱そうだ。

なんか、ただ単に、私がパターンという単語に違和感があるだけな気もする。もしかして、「英語(あるプログラミング言語でもいいけど)が使えないから英語(またはあるプログラミング言語)を誹謗する、パターン」ですか、これは。

そういえば昨日今日と知らない単語ばっかり聞いていたような気がする。やれやれ。

そういえば、なんというか、某大御所のアレは変だと思うし場違いだと思う(*3)し、フレンドリーというよりは、はっきりいって気色悪い。内輪過ぎ。なんとかならないかな(楯突く勇気も無い臆病者なので意味不明の愚痴)。

・・・「*」からコメントが始まる言語って何があるんだろう。FORTRAN?


とりあえず印刷してみました>Implementation of functional language。何時読むんだろう。


*1 昔、ローカル変数を「自動変数」という人がいた。私はいまだにCで auto と付けたことが無い。
*2 そういう意味で、初心者に教えるための「xxパターン」はアリかも。もちろん私も初心者ですが。
*3 あそこであれの参加者を募るのはスゲー関係ないだろ。俺はそれを読むために金を払ってるわけじゃないんだけどなぁ。

_18 (Tue)

エレベーターの中で寝るのはいけないと思います。

_17 (Mon)

メモ帳を作ってみる。なんか、これだけですげえ時間がかかってしまった・・・。

今日は研究室掃除。さよなら広い部屋、広い机、うるさいサーバたち。

rucheme。ruby が segv る。1.6.8系しか試してないんだけど、一応 CVSのsnapshot版でも駄目だったことを確認。はてさて、どうしたものか。やっぱGC周りなのかな。1.8系も試してみるか。strscan を入れるのがめんどくさいなぁ。って、1.8系には strscan は入ってるか。らっきー。

1.8prev2 だと、問題なく動く。うーん、どうしたもんか。

_16 (Sun)

LinuxとWindows/NT/2000/XPをデュアルブートする方法(1)。メモ。

http://www-6.ibm.com/jp/developerworks/linux/030314/j_l-htl.html。メモ。

なんか、面倒くさがって日記にメモメモしてたら、後から調べなおすとき不便でしょうがない。うーん、なんとかしないと。

わ、あおきさんが次回SICP参加されるのか。わーい、RHGもってってサインしてもらおう(読書会が違う・・・)。


ウェブから更新できるようにしてみる。でっきるっかな?

我ながら激しく使い勝手が悪い。どうしてくれよう。

つっこみ対応とかするのは気が遠くなるな、これ・・・。やっぱり tDiary とか素直に使うのが吉ってことなんだろうなぁ。

もうちょっとがんばってみるか。

調整中。・・・あれ、駄目駄目? あ、ファイルの依存関係なエラー。すぱげってぃーすぱげってぃー。


分散環境でのマルチスレッドライブラリなんてあるんかなー・・・。うーん。

_14 (Fri)

うーん、long long って printf でどうやって出力するんかな。・・・ %l でいいんかな。 %ld か。l は長さ修正文字というのか(PRINTF)。


#include <papi.h>
#include <stdio.h>

int main(){
  long_long l1,l2;
  l1 = 0x0123456789abcdef;
  l2 = 0xfedcba9876543210;

  printf("l1 : %ld\nl2 : %ld\n",l1,l2);
  
  return 0;
}
// =>
// l1 : -1985229329
// l2 : 19088743

うーん、明らかに違う。はて、どうやるんかな。

  printf("l1 : %lld\nl2 : %lld\n",l1,l2);

// =>
// l1 : 81985529216486895
// l2 : -81985529216486896

%lld なんて使ったの初めてだぞ。


まつもとゆきひろ 答える (/.j)。いやーかっこえー。

CGI を使ってみる。使いづらい・・・。

_13 (Thu)

今日の古本。

いつのまにかホームページ(*1)のアクセスが 3000 を超えましたか。ありがたいことです。日記のほうはログとってから2000カウント。掲示板は1000カウント。なんか切りがいいな。

とっても気になるあのCM、徹底解明!(fuji-ml)。うーん、たしかにあのCMは凄いと思った。爆笑でした。飲んだこと無いけど。

そういえば、未踏ソフトウェア来年度が公募ですか。なんか、PMの人数が多い・・・。楽しげなテーマが受かるといいですね。http://www.ipa.go.jp/NBP/15nendo/15mito/(/.j)。


rucheme。やっぱりいろいろ難しい。(ruby-send ..), (ruby-new ..) は、結構素敵なアイデアだと思ったりしてるんだけど、どうなのかな。何が素敵かをもう少し煮詰めないと駄目か。

define ってどうやろうかな。うーん。式で扱って、body にあったらエラーにするとか。うへえ、めんどくせえ。


って、そろそろ遊んでないでいろいろやらないと。Xeon また触らないとなぁ。PAPI を試さないと。

あれ、さくっと Xeon とネットワークがつながる。ハブが死んでたのか、これ。


papi メモ。

  • linux 2.4.20 => linux-2.4.20 dir
  • perfctr 2.4.6 を落とす => perfctr-2.4.6 dir
  • cd linux-2.4.20 ; sh ../perfctr-2.4.6/update-kernel
  • make menuconfig => [General setup] => [Peformance-monitoring counters suppor] を Y , 以下を Y
  • make modules_install
  • make install
  • reboot
  • check /proc/self/perfctr
  • papi-2.3.3 を落とす => papi-2.3.3
  • cd papi-2.3.3/src
  • make -f Makefile.linux-perfctr-p4 PERFCTR=/home/ko1/tmp/perfctr-2.4.6
  • ./run-test

・・・おー? いけた? いけてる? ほんとかな? ^^; なんか、今まで全然動いてこなかったので、不安だ。global が動かないだけか。うーん。

perfctr の中の example が実行しなかったのがすげー気持ち悪いんだけど。


def make_dumpable_class name,body
  self.class.module_eval %Q{
    class #{name}
      #{body}

      def #{name}._dump lim
        %Q{
          #{body}
        }
      end
    end
  }
end

make_dumpable_class 'Hoe',%Q{
  def pr
    p 'hoe'
  end
}

Hoe.new.pr           #=> "hoe"
p Marshal.dump(Hoe)  #=> "\004\006u:\nClass5\n          \n  def pr\n    p 'hoe'\n  end\n\n        "

Mashal 対応クラス生成。・・・うーん、我ながら・・・、なんともはや。ロードもがんばればなんとか・・・ならないかな。いや、ほんま、アレですけど・・・。

そうか、_load は特異メソッドじゃ駄目なんだ。Class クラスに _load 。うーん、うざすぎ。もう一枚、被せればいいのか。そっかそっか。しかし、嫌過ぎ。

もうめんどくさいからやりません。


*1 この用法は間違ってない・・・よね?

_11 (Tue)

ruby。callcc ですっとばすと ensure をしない。(ruby1.6.8 で確認)

def f
  begin
    return
  ensure
    print 'f end'
  end
end

f

callcc{|cont|
  begin
    cont.call
  ensure
    p 'c end'
  end
}
p 'end'

結果。

"f end"
"end"

いや、ruby のcontinuation の実装を考えると自明なんだけど、意味的に自明なのかなとふと。


rucheme。continuationは簡単にできるなぁ、と思ってたんだけど、思わぬ伏兵が! 例。

(define cont #t)
(call/cc (lambda (c) (set! cont c)))
(dynamic-wind
 (lambda () (display "before\n"))
 (lambda () 
   (display "thunk1\n")
   (cont #t)
   (call/cc (lambda (c1) (c1 #t)))
   (display "thunk2\n")
   )
 (lambda () (display "after\n"))
 )
;=> 
; before
; thunk1
; after

thunk2 を実行していないのがわかります。 after を実行しているのがわかります。また、thunk2 を表示していないので、continuation によって大域脱出しているのもわかります。

dynamic-wind なんてしらねーよーちくしょう。ruby の 例外は大域脱出に使われるため、「そこから抜けるときに実行しろ」っていうの(ensure)しか必要としないが、continuation は「入ってくる」のも順番に行くとは限らないわけで。そのため、「入ってきたとき」、「出るとき」と、ルーチンが実行できるようにしたのがそれ、ということですか。

うーん、どうやって実装するかなぁ。ruby の continuation を生かす方向で考えたいんだけど。やれやれ。

継続。トップレベルをシーケンスと見るか、特別扱いするかでトップレベルへの継続の扱いが変わるそうです。処理系依存だそうな。

しかし、2chの scheme/lisp 板、凄いなぁ。(+1 : 参考になる)

また、インターネットというのは凄いですね(今更)。Scheme の話をする人なんて、私の周りでは一人くらいしか知らないし、その人は今北海道〜。うちの学科で scheme を知っている人ってどれくらいいるんだろうなぁ。なんか書いてて悲しくなってきた。


さて、明日は休みです。何しようかな。xeonもって帰りたい・・・。

_10 (Mon)

A 3D animation of Linux source code development(/.j)。すげー。すげー。どれほどの意味があるかは別にして、すげー。


rucheme、例にあげていた fact(要するにf(x) = x!)関数が異様に遅い。ruby でイテレータでさっくり終わるのが、数分かかってしまう。そんなに遅いのかなぁ、と悩んでいて、ふと「パース時に整数を Rational.new(x,1) で生成していた」ことを思い出す。Integer のままにしたら、速いったらありゃしない。ほぼ Ruby の2倍くらい遅いくらい。やれやれ。

なんか、ここで x! という式を出したときに、猛烈な違和感に襲われた。!x じゃなかったっけ? と。思わずウェブで調べてしまった。うわ、最近数式書いてないなぁ。


PuTTY を使ってみる。前はなぜか挫折したんだが、日本語版はいい感じ。


ruchemeに、ruby-send, ruby-new というのを付けてみる。

(ruby-send "AbC" 'downcase) ; => "abc"
(ruby-send (ruby-new 'String (ruby-send 'Kernel 'gets)) 'downcase) ;=> 入力文字を小文字にする

みたいな。うれしいかは謎。(ruby-class), (ruby-def)とか考えたけど、何がうれしいのかわからなかったんで却下。

これがあると、scheme 用の、たとえば入出力用の組み込み関数などを用意しなくて済むから楽かなとか思うんだけど、甘いかな。regexp とか。

_9 (Sun)

一応末尾再帰対応>Rucheme

ソースが汚い・・・。

_7 (Fri)

というわけで、Rucheme / Scheme(subset) interpreter on Ruby です。

相変わらず安易なネーミングです。いいぢゃん、わかりやすければ。

ruby-list に投げたから、きっとアクセス数増えるだろう。t2naniのページも見てやってください。私が今まで作ってきたなかで一番実用的です。というか、自分が作ったもので使ってるのってこれしか無いんじゃ。


昨日は、起きたのが15時ごろ。ガーン。

今日は、雨で、電車がラッシュでガーン。電車の人はいつもこんなにつらい思いをして来るんだなぁ。


scheme イジメ。

(quote (1 2 3))
(define (p2 li)
  (if (null? li) 0
      (+ (car li) (p2 (cdr li))))
  )
(p2 '(1 2 3))
;=> 6

(let ((quote p2))
  (p2 '(1 2 3))
  )
;=> error (MIT Scheme / DrScheme)

うふふ。'xx は、内部では(quote xx) って持ってるってことですな。

しかし、ポニーテールリカージョンとは、なんだろう。何が再帰するのかよくわからない。

ポニーテールがポニーテールをまとめて作られているとかいう、アレな光景なんだろうか。ぜひ教えてください>K本さん


にくこっぷんにこにこぷんは似てると思った。=> Google したら、既出だったらしい。

日本語で読むPHP専門雑誌創刊 を読んでいて思ったんだけど、週間ハッキングガイドとか出ないかな。RHG みたいなのを毎週。一人1〜2ページくらいをもちまわりとか? 10ソフトあれば、20ページくらいの紙面が出来る、か。OpenSource な人でも誰でもいいんだけど、自分の書いたソース、もしくは人のソースの解説をする。自分のなら自慢ばっかりしていてもいいんぢゃないかと思うんだけど。なんか、こういうのは世に出回りにくく、結局自分でソースを読むしか無い気がする。RHGみたいな本がもっと出ればいいんだけど。

こういう機能を実装するためにここをこうやって記述したんだぜ、スゲーだろ、とかいうのは、世のプログラマさんは結構思ってると思うんだけどなぁ。そういうのを記事にしても売れないのかなぁ。どこかやらないかなぁ。


cl が起動しなくて困る。DLLが見つからないらしい。環境変数PATH を "" で区切ったのがいけなかったらしい。なんで?


scheme 。マクロの練習。

(define-syntax hoe (syntax-rules ()
                     ((hoe ...) #t)))
(hoe hoehoehu- 1 2 3)
;=> #t

あんまり意味なし。

はて、これをどうやって使おう。うーん。

とりあえず、マクロの実装に悩む。いつ展開して、環境をどうやって評価すりゃええんじゃ、こんなの。

(let ((x 'outer))
  (let-syntax ((m (syntax-rules () 
                    ((m y) 
                     (begin 
                       (display x)(newline) ; *1
                       (display y)(newline) ; *2
                       )
                     ))))
    (let ((x 'inner))
      (m x))))

;=> outer
;=> inner

単純に、式をマクロどおり展開すると、マクロ中の x (*1の部分) も inner になってしまう。いつ *1 の x は展開されるんだろう。うーん。わからん。syntax-rule が評価されたとき、では明らかに無いよな。それだったら (display x) とかも評価されてしかるべきだし。となると、マクロにも環境をローカルな環境を持たせるしかないんか? 持たせたあとに、どうするんだろう。マクロ中の識別子とマクロ外の識別子を別々の環境で評価しなきゃいけない? そのチェックはどうやればできるんかな。はて。考えないで作ると末尾再帰除去に支障を来たしそうな気がする。すでに考えてないという説もあるが。はて。

逆か。シンタックスルールのパターン中に現れる識別子のみを特別扱いすればいいのか。でも ... の扱いとかどうしてくれようか。マクロ対応やめよっかなー、やっぱ。

と、駄目駄目さを発揮して帰ろう。

_5 (Wed)

この陽気はやばい。眠くなりすぎる。

MSの入社試験ですか。わからなかった・・・。うぅ、情けな。夢の中で解けた気がしたんだけど、気だけ。

うーん、やっぱり C++ のテクニックは自慢にしかならないような気がする。それを知るとうれしいことってあるんだろうか。堅牢なソースコードとか、書けるのかな。うーん。

例のsendmailの脆弱性の話があちこちで。さすがsendmail。

やばい、笑ってしまった>Novaうさぎ

そういえば、最近青木さん一色です。RHG に Racc本。幸いなことに一食では無いんですけど。RHGといえば、末尾再帰の除去というセクションパラグラフがあって、ぅぉ、いつのまにRubyは末尾再帰に対応してたんじゃ、とか思ってしまった。

scheme の仕様書読んでるんですが、cond がライブラリシンタックスなのですねぇ。if のほうが偉いのか。ふーん。

しかし、末尾再帰の除去ってどうやって実装するんかな。うーん。しかし、properly tail recursive : 正しく末尾再帰を行う、という表現、なんか不思議。

しかし、マクロって意味わかんねー。うーん。がんばって let-syntax を覚えるか。

あれ、マクロによるシンタックスって、スコープを持つのか?

用語の誤用という表現が、なんかつぼにはまったらしい。


サーバー入りハエ(/.j)。馬鹿だー。馬鹿だー。元を読んだら、カエルとかねずみ(withカメラ)とかゴキブリとかでもやりたいらしい。馬鹿だー。いいなー。いや、しかしすばらしい。

webACE ServerのTCP部分が188byte? すげー。いったいどうなってんだろう。というか全部で1KBのウェブサーバか。すげえ・・・。IPic - A Match Head Sized Web-Serverとか、小さいウェブサーバ(TCP/IPスタック)って結構あるんですねぇ。

今更だけどSTAFF SERVICE :スタッフサービス【広告レビュー】を見て受ける。


続scheme。

(let
    ((car cdr))
  (car '(a b c)))

#=> (b c)

まぁ、メソッド名を付け替えたって感じですか。これくらいなら、まぁ納得。

(if 1 2 3)
;=> 2

(let
    ((if +))
  (if 1 2 3)
  )
; => 6

うひぃ、if まで変えられるんですか。lambda も変えられました。

(let
    ((lambda +))
  ((lambda (a b) (* a b)) 4 5))
;=> error # lambda 構文が使えない

(let
    ((lambda +))
  (lambda 4 5))
;=> 9

すごいですねぇ。Lisp。シンタックスキーワードもぐちゃぐちゃ出来ちゃうんですねぇ。

ようするに、シンボルの扱いを処理系はどう扱うのかってことで。うーん。

いやー、こんなことやらないけどさぁ、実際は。

ついでに、評価順序を知るためのメモ。

(define (plus) (display "+") +)
(define (a) (display "a") 1)
(define (b) (display "b") 2)
(define (c) (display "c") 3)

((plus) (a) (b) (c))

DrScheme   => +abc
MIT Scheme => cba+
Rucheme    => abc+

面白いですねぇ。(全部 SICP-reading ML に流したネタです)

しかし、いまだにマクロがわからない罠。うぅぅ。

_4 (Tue)

雨で帰れなかったので、ちょっと寝てたら風邪引いた・・・。ぐすぐす。

うーん、ちょっとアルゴリズムが思いつかない。どうしたもんかな・・・。悩む悩む。落とした情報にもとづいた操作が必要で、そうなると情報を落とせなくて、でも情報を落とさないとただしく処理が出来なくて・・・。

うーん、なんか Intel とか Sun がヤヴァイなぁ、最近。研究のネタがどんどんなくなっていく(苦笑)。いや、広がっていくというべきか。

そういえば、「ゲーデル、エッシャー、バッハ」を読みたい読みたいと思っているんだが、なかなか古本屋では見つからないなぁ・・・。注文するには高すぎるし(5500yen)。

ほしい本リスト作っとかないと。


なんか、C++でテンプレートとかで(Lokiとか使って)云々してがんばるよりは、rubyでさっさと仕事を終わらせてしまったほうが速そうな気がするんですが・・・。どうなんだろうなぁ。なんか、C++ はそういうのがんばる言語じゃないと思うし。STLは、無いとつまんないけど、それくらいで勘弁してやったらどうですか(謎。

うーん、どうなんだろうなぁ。やっぱ出来たほうがいいとはおもうけれども。

つか、最近ほんとC++で書いてないな。もうほとんど忘れてるっぽい。


しかし、北海道いいなーいいなーいいなー。

_3 (Mon)

いろいろとやばいです。

ちょっと、ファイル名に日付を入れる必要があって、ふと 2003年3/3 を 030303 と何気なく書いて、切りのよさに驚く。いい感じ。ひな祭りですね。今朝はひな壇をしまうために朝から叩き起こされてしまった。

RHG 楽しく読んでます。10章くらいまで読んで頭が膿みました。

Ruby 1.6.7 で SEGV するスクリプトが。1.6.8 でやると起こらないから、まぁいいか。


朝のお茶でも、とティーパックでお茶を。んで、それを取り出そうとしたら、二つつながっているのに気づく。

   糸
   |
+--+---+
|      |
|      |
|      |
+------+
|      |
|      |
|      |
+------+

こんな感じ。これは得した・・・のか? なんかいつもより香りがつよいとは思ったんだが ^^;。

・・・と思ったら違った.他のもそうだった.ということは,これが標準装備なのか.どうやら,二つに折り曲げてちょっとくっつけて一つとしているらしい.これはたまたま折り曲げていた部分が広がっただけらしい.

って,香りが強いって感じたのも錯覚か.これがデフォルト.でも,いい感じだ.


メールの整理.無駄メールを1000通くらいカテゴリ分け.うーん,もっと早くわけときゃよかった.

あれの何が帰ってきてアレです.うーん,どうなるんだろう.もう何かいたか覚えてないんですが(苦笑).そういえば,Rava の発表準備もしないといけないのですね.うーん,どうやるんだろう.


雨で帰れないー.

_1 (Sat)

学校に来るも、ネットワークに異常が。いろいろ触ったけど原因特定できず。はて・・・。雨で酷い目にあったというのに、弱り目に祟り目とでも言うか。

Sasada Koichi / sasada@namikilab.tuat.ac.jp
$Date: 2003/04/28 10:27:51 $