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で公開できるのはナイスだ。 しかし重いなあ。
そろそろちゃんとしたプロジェクト名も考えねば。
2004-10-02 (Sat)
_ DebianJava
I got a problem because the scripts aren't currently set to recognize the file name of the java 1.5 binary from sun (this may well be fixed by the time you read this.) To fix it I edited /usr/share/java-package/sun-j2sdk.sh.
[MF Bliki: DebianJavaより引用]
こんな感じの変更で上手く行った。
--- /usr/share/java-package/sun-j2sdk.sh.orig 2004-10-02 11:18:02.000000000 +0900 +++ /usr/share/java-package/sun-j2sdk.sh 2004-10-02 11:18:37.000000000 +0900 @@ -27,6 +27,11 @@ j2se_expected_min_size=122 # 125899 kB found=true ;; + "jdk-1_5_0-linux-i586.bin") + j2se_version=1.5.0 + j2se_expected_min_size=122 # 125899 kB + found=true + ;; esac if [[ -n "$found" ]]; then cat << EOF
j2se_expected_min_sizeは適当。
eclipse 3.0のdebってどっかにないのかな。
_ Markdownスタイル
BlueClothを使ってMarkdownスタイルを書いています。 今日中に出来るかな?
[Devlog(2004-10-01)より引用]
お、期待して待ってます。
RDでちょっと不満なのは以下の点:
- インデントしても、たとえば先頭が「---」だと、verbatimになってくれない。
- インラインの記述が冗長。
- 引用がない。
まつもとさんは、インラインの入力はemacs lispに頼っているらしい。 ちょっと意外。
_ MoonWolf [Markdownスタイルですが、とりあえずdevlogで動いています。 まだプラグインが動きませんが(^^; tDi..]