2002-11-18 (Mon)
_ C#のイテレータ(2)
ruby-devでも書いたけど、C#のイテレータだと一つのクラスに複数の イテレータを定義できないので不便な気がする。
public class List { internal object[] elements; internal int count; // Elementsという名前のイテレータ定義 public iterator object Elements() { foreach(object o in elements) { yield o; } } }
のように色々な名前でイテレータを定義できるようにして(実装的には Elementsという名前のメソッドで外部イテレータを返すようにする)、
foreach (object o in list.Elements()) { ... }
のようにforeach文で、コレクション(list)の代りに、イテレータ呼び 出し(外部イテレータを返すメソッドのよび出し - list.elements())を 指定するようにした方がCLU風味でよくないだろうか。
2003-11-18 (Tue)
_ Centrino under Linux
CentrinoのLinuxサポートをIntelに求める署名をした。
_ インデント幅
昔rubyでコードを書く時のインデント幅を3にしたいた理由が思い出せなかったのだが、 Satherの影響のような気がしてきた。
_ イテレータの動的分配
Satherコンパイラで イテレータの動的分配ができるようになった。
abstract class $TIMES is times!(once n: INT): INT; end; class TIMES < $TIMES is create: SAME is return new; end; times!(once n: INT): INT is i ::= 0; loop while!(i < n); yield(i); i := i + 1; end; end; end; class MAIN is main is t: $TIMES := #TIMES; loop i ::= t.times!(3); #OUT + "i=" + i + "\n"; end; end; end;
_ parameterrized type
どういう実装にするのかが悩ましい。
内部的には全部System.Objectにして、INTとかはboxingすればいいかなとも思ったけど boxingのオーバーへッドが気になるところ。 あと、.NETの配列をどういう扱いにするかって問題もあるし。
といって、パラメータとして与えられた型毎にクラスを作るのも、生成したクラスをどの アセンブリに含めるかが悩ましい。
C#で実装されるのを待つか…。
2004-11-18 (Thu)
_ Groovyのit
RubyにGroovyのitを導入するというのはどうだろう。
ary.each { p it }
は、
ary.each { |it| p it }
と同じ意味。
ワンライナーでうれしいかもしれない。
多値を受け取りたい場合は、themで配列で受け取るとか?
sum = ary.inject(0) { them[0] + them[1] }
これは何もうれしくないな、うん。
_ readlineの$SAFE対応
これを押し進めると、以前前田くんが述べていたように、特別な APIを経由しない限り拡張ライブラリで定義されたメソッドは自動 的に$SAFE=2で禁止、というのも一つの考えだと思います。
[[ruby-dev:24909] Re: Process.getrlimit and Process.setrlimitより引用]
あれ、そんなこと言ってましたっけ。
それはさておき、readlineが$SAFEに対応してなかったので、対応。 cursesも怪しいな。
2022-11-18 (Fri)
_ anonymous keyword rest parameterのバグ修正
とみたさんから報告があったanonymous keyword rest parameterのバグを修正した。 Ruby 3.2で
def foo(**)
bar(**)
end
のように匿名でキーワード引数を他のメソッドに転送する機能が追加されたが、
def foo(x: 1, **)
bar(**)
end
のようにキーワード引数を一部だけ転送する場合に文法エラーになるというもの。
修正自体はごく短いが、修正したらRubyVM::AbstractSyntaxTreeの動作が変わってしまったりしてあるべき動作を確認するのが大変だった。
調査の過程で動作に疑問がある部分があったので別のissueを作成しておいた。
def foo(...)
bar(*) # OK
baz(&) # OK
quux(**) # NG
end
上記のように ...
を使った時に *
と &
は使えるが、 **
は使えない、というもの。
全部使えるか、全部使えない、のどちらかがよいように思うが、 &
はRuby 3.1でも使えるので、全部使えるようにした方が互換性の面ではよさそう。
2023-11-18 (Sat)
_ NANKANG AW-1
ちょっと前にスタッドレスに換えていたが、今回ははじめて台湾製タイヤにしてみた。4本で39,864円なり。
換えた直後は接地感が無でちょっと怖かったが 、馴染んだのか馴れたのかそれほど気にならなくなった。
雪とか凍結路で早く試してみたい。