Giraffe+ 0.5.0.36b

Download
前リリースからの変化
言語部分(gs)

  • Range.make_excludeとRange.make_includeを、引数とその関係を検査しないようにした
  • Range.valid?とRange.invalid?を新たに実装し、レンジが"begin <= end"であるか任意に検査できるようにした
  • Range.validateを新たに実装し、レンジが無効な場合を考慮するための面倒な手順を省けるようにした
  • Range.stepを新たに実装し、イテレーションを複数幅に進捗できるようにした
  • Container.rrangeを新たに実装し、"rng.rbegin...(rng.rend)" を "rng.rrange" と書けるようにした
  • Container.rbeginとContainer.rendを新たに実装し、rbeginやrendを持たないContainerの子供でもリバースイテレータを使えるようにした
  • String.atやArray.atなどを、内部型のbasic_string::atやvector::atにして、新たにindexをoperator[]のインターフェイスとした
  • イテレータやポインタにもindexをoperator[]のインターフェイスとして持たせた

言語部分以外(Giraffe+)

  • Keyboard.Strokeを、SendInput(WinApi)を一度だけ呼ぶようにして途中で他メッセージ(他キー等)に割り込まれないようにした
  • Script/Giraffe.giraffeのMatchWildCharが"$*"という変数名を使っていたため動作してなかったのを修正
  • Script/settings/hotkey/SwitchWindow.giraffeが最小化されたウインドウをリストアしてなかったのを修正

スクリプト言語のレンジ部分を仕様から考え直そうとしましたが、少しの手直しぐらいにとどまっています。
DLLはもう手入れしない予定でしたが、やっぱりそういうわけにもいかないようです。せっかくDLLをリビルドせずに使えるようにできたのに、あまり意味がありませんでした。Shell.dllがユニコードを扱えない現状はすごく間抜けなので、たぶんいつかUnicodeビルドすることになると思います。
新言語にはDLLのためのAPIみたいなのはありません。この言語が強く依存してるC++がマルチモジュールに不向きなためでもあります。インターフェイスのみをC言語の関数にすればいいだけのことですが、旧言語のAPIと同じような仕様になるだけだと思いますのでやる気になれません。
Shell.ExecuteやShell.ShowContextMenuはGiraffe+の中核ともいえる部分ですが、まだその代替をどういう形にすべきか等、まるで考えていません。NormalExecute等についても同じような感じでしょうか。やはり、pathやiidlでやったように、文字列のメンバとしてしまうのが簡単かつ使い勝手のいい解決法のように思えます。しかしそれでは複数ファイルが扱えません。(Shell.Executeの実装はShellExecuteExではなく、Shell.ShowContextMenuのメニュー非表示というものです。)すでにあるExecuteeオブジェクト(ComposeExecuteeの戻り値)を使うとしても同じことです。NormalExecute等も含めて、すべてまとめて解決できる方法があるとは思うんですが、考えるのが面倒な割にソフトの使い勝手等は特に向上するわけでもないと思うのでほったらかしです。