Giraffe+ 0.5.53.668

Downloadページへ

前リリースからの変化

  • NULLブロックが評価されたときにエラーにならないようにした
  • メソッドオブジェクトのブロック化を保存的にした
  • VC++のhash_mapをBoost.Unorderedに置き換えた

NULLブロックが評価されたときにエラーにならないようにした

eval(Nil)やBlock.evalでエラーになってた問題です。空ブロックの評価([].eval)と同じようにNULLオブジェクトを返すことになりました。

メソッドオブジェクトのブロック化を保存的にした

`arg[body]が[body]になっていたのを、[`arg[body].invoke]と、メソッドオブジェクトをそのまま保持するようにしました。
これにより、arg部とbody部に分割可能な単純なユーザメソッド以外でもブロック化できるようになりました。
旧言語との兼ね合いで、こうしたほうがよさそうなのでそうすることにしました。
これまでの仕様:

`arg[body].to_Block //[body]
`arg[body].to_Block(false) //[body]
`arg[body].to_Block(true) //[arg]
Method.to_Block //Nil

新仕様:

`arg[body].to_Block //[`arg[body].invoke]
`arg[body].to_Block(0) //[`arg[body].invoke]
`arg[body].to_Block(1) //[arg]
`arg[body].to_Block(2) //[body]
Method.to_Block //[Method.invoke]
Method.to_Block(1) //Nil
Method.to_Block(2) //Nil

VC++のhash_mapをBoost.Unorderedに置き換えた

Boost.Unorderedは普通のハッシュマップです。Boostのほうがよさそうなのでそうしました。どっちの実装も見てませんが。
ついでに、オブジェクトのスロットもstd::mapからBoost.Unorderedにしました。
Mapオブジェクトはそのままです。いろんなオブジェクトにハッシュ関数を用意するのも面倒だし、どうせ大した差が出る部分でもないので。