トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2003-10-01 (Wed) [長年日記]

_ 誕生日

娘の二才の誕生日。早いもんだなあ。

ちなみに9/29は奥さんの誕生日で、11/24が自分、二人目の子供は11/3が予定日、と、 我が家はこのあたりに誕生日が集中している。

_ 今日のSather

試しにWindowsに持って行ったらぜんぜん動かなかった。 System.Reflection.Emitあたりの挙動がmonoとは微妙に違っているらしい。 しくしく。

どうせ自分は当面Windows上で使うことはないのでしばらくほっとこう。 (.NETアプリケーションをWindowsに移植しないといけないってのもおかしな話だな。 APIの使い方が間違ってる自分が悪いんだろうけど。)


2003-10-02 (Thu) [長年日記]

_ out/inout

引数のout/inoutモードを実装。 が、ここでやっかいな問題が。

Satherのout引数は、実引数の型が仮引数の型のスーパータイプである場合に適合する。 どういうことかというと、

abstract class $PERSON is
  ...
end;

class PROGRAMMER < $PERSON is
  ...
end;

のようなクラスがあった場合、

set_shugo(out x: PROGRAMMER) is
   x := #PROGRAMMER("shugo");
end;

のようなメソッドを、

person: $PERSON;
set_shugo(out person);

のように呼び出せるということだ。 (personの型がPROGRAMMERではなく$PERSONであることに注目)

問題なのは実引数がreference typeで仮引数がvalue typeであった場合だ。 たとえば、

set_one(i: INT) is
  i := 1;
end;
...
  o: $OB;
  set_one(o);

のような場合、$OBはすべてのクラスのスーパータイプに相当するので、前述のルール で行けば、このコードに問題はない。

しかし、.NETではvalue typeをreference typeに変換するにはboxingという処理を 行う必要があり、set_one側では実引数がreference typeかどうかを知るすべがない ため、boxingすべきかどうかわからないのだ。

というわけで、とりあえずこういうケースはエラーにした。 (ちなみにC#ではoutパラメータの型は完全に一致しないとだめらしい。)

で、書いてて気付いたけど、set_fooの実装を二つ用意してoverloadを解決する時に 適切な方を選べば実現できるかもしれない。と思ったが、out引数が複数あったら 組み合わせが多くなって破綻するなあ。 まあ、どうせあんまり使わないだろうから、とりあえずこのままで行くか。

(あとで、呼び出し側でいったん別のローカル変数を渡しておいて、呼び出し後にboxing するだけでいいことに気付いた。アホすぎ。)

次はいよいよiteratorだ。

_ Subversion

Subversionを導入してみた。

<URL:http://svn.shugo.net/svn/repos/babel/>

何にも考えなくてもrepositoryをhttpで公開できるのはナイスだ。 しかし重いなあ。

そろそろちゃんとしたプロジェクト名も考えねば。


2003-10-03 (Fri) [長年日記]

_ Satherの発音

高橋さんにSatherは「サザー」だと思っていたと言われて、一瞬あせった。

FAQより:

The way most people say the name of the language rhymes with "bather". 

「セイザー」だよね?

_ Satherはugly?

まつもとさんいわく、 「Satherの仕様はけっこう好きだけど、全体として何となくuglyな感じがする。」

考えられる主な理由:

  1. abstract classの名前が$で始まる。 (Rubyのグローバル変数もそうだけど、グローバル変数は多用すべきでないからuglyな方 がいい。Satherのabstract classはむしろ推奨されるべきものなのに記法がuglyだ。)
  2. クラス名が全部大文字じゃないといけない。
  3. (これは言語仕様と関係ないけど、)Satherのプログラム(標準ライブラリとか)はやたらと 単語を略す傾向がある。 たとえば、elementはeltだったり。Satherのコンパイラのソースなんて、typeが tpだったりする。ひどすぎ。
  4. syntax sugarが豊富すぎる?

    syntax sugarは便利な面もあるのでこれは微妙だけど、hello worldが、

    #OUT + "hello world\n"

    だったりするのはちょっとアレだ。

「いっそのことSatherじゃなくてもいいんじゃないか」と言われたけど、悩ましいところだ。

abstract classに$ではじまらない名前許して、case insensitiveに しちゃったらかなりマシかもしれない。 ついでに_も無視する(foo_barとFooBarを同一視)というのはやりすぎ?


2003-10-04 (Sat) [長年日記]

_ Ruby Onsen Meeting

ささださんのすごさが一番印象的だった。(いろんな意味で。)

高橋さんは誰かに似ていると思ったけど、ちょっと羽生さんに似ている。 (いまだにWin95を使っておられるのにはびっくりしました。)


2003-10-06 (Mon) [長年日記]

_ XP

再開。つかれた。


2003-10-09 (Thu) [長年日記]

_ イテレータ(Sather)

イテレータを実装。以下のようなコードが動くようになった。

class MAIN is
   upto!(once from: INT, once to: INT): INT is
      i ::= from;
      loop
         while!(i <= to);
         yield i;
         i := i + 1;
      end;
   end;

   sum!(i: INT): INT is
      r ::= 0;
      loop
         r := r + i;
         yield r;
      end;
   end;

   product!(i: INT): INT is
      r ::= 1;
      loop
         r := r * i;
         yield r;
      end;
   end;

   main is
      sum: INT;
      product: INT;
      loop
         i ::= upto!(1, 10);
         #OUT + "i=" + i + "\n";
         sum := sum!(i);
         product := product!(i);
      end;
      #OUT + "sum=" + sum + "\n";
      #OUT + "product=" + product + "\n";
   end;
end;

実行結果は以下の通り。

i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
sum=55
product=3628800

2003-10-13 (Mon) [長年日記]

_ 無線LAN

100万ボルト(って違う字だった気がするけど)でI-O DATAの無線LAN付きのルータを購入。 ポイントを使ったら700円くらいだった。(もともと一万以下の安いやつだけど。)

しかし、付属のPCカード(WN-B11/CBL)はLinuxで使えなかった。Webで情報を探しても 動かなかったという話しすら見つからず。とりあえず、会社のメルコのカードがあるから、 こいつはWindows用にしよう。 というか、CentrinoのLinux用ドライバはいつ出すんだよ。 > Intel リリースする気がないんだったら、期待持たせるなっつーの。


2003-10-14 (Tue) [長年日記]

_ Haskell

ちょっと気になったので調べてみた。

<URL:http://www.sampou.org/haskell/tutorial-j/index.html>

やさしくはないなあ。 型システムとか、いろいろ面白そうではある。


2003-10-17 (Fri) [長年日記]

_ Sather

地味にメソッドの競合のチェックを追加。

Sather 1.3の仕様と実装が微妙に違う(一方はmodeを考慮しているのに他方は考慮しない、など) のが悩ましい。


2003-10-20 (Mon) [長年日記]

_ そば茶

そば茶ってちょっと高級チョコレートアイスクリームに味が似ている気がする。 自分だけだろうか。

_ 高速化

必要にせまられて(実行環境がFAパソコンなので開発環境よりスペックが落ちるのだ)、 仕事で書いているRubyプログラムを高速化。 もとが大名なので、簡単に10倍くらい速くなって楽しい。

_ 子供の名前

ぜんぜんきまらず。

_ Sather

時間が取れない。


2003-10-30 (Thu) [長年日記]

_ 子供

陣痛がはじまって42時間後にようやく誕生。 誰だよ、二人目は早いなんて言ったやつは。