トップ «前の日(11-17) 最新 次の日(11-19)» 追記   RSS 1.0 FEED  

Journal InTime


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に求める署名をした。

<URL:http://www.petitiononline.com/xanthan/petition.html>

_ インデント幅

昔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] }

これは何もうれしくないな、うん。

Tags: Ruby

_ readlineの$SAFE対応

これを押し進めると、以前前田くんが述べていたように、特別な APIを経由しない限り拡張ライブラリで定義されたメソッドは自動 的に$SAFE=2で禁止、というのも一つの考えだと思います。

[[ruby-dev:24909] Re: Process.getrlimit and Process.setrlimitより引用]

あれ、そんなこと言ってましたっけ。

それはさておき、readlineが$SAFEに対応してなかったので、対応。 cursesも怪しいな。

Tags: Ruby

2016-11-18 (Fri)

_ リモコンキーの電池交換

電池交換

エクシーガ(CBA-YA5)のリモコンキー(非キーレスアクセス)の効きが悪くなったので交換した。

電池の型番はCR1620だった。


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でも使えるので、全部使えるようにした方が互換性の面ではよさそう。

Tags: Ruby

2023-11-18 (Sat)

_ NANKANG AW-1

NANKANG AW-1

ちょっと前にスタッドレスに換えていたが、今回ははじめて台湾製タイヤにしてみた。4本で39,864円なり。

換えた直後は接地感が無でちょっと怖かったが 、馴染んだのか馴れたのかそれほど気にならなくなった。

雪とか凍結路で早く試してみたい。

Tags: MAZDA3