Giraffe+ 0.5.39.551

Downloadページへ

前リリースからの変化

  • String.c_str_utf8を定義
  • Char.to_StringのUnicode対応
  • マルチスレッド描画時のデッドロック対策
  • !cmdがSHOW引数を扱えてなかったのを修正
  • Block, Method.resolve2を定義
  • タスクトレイアイコンのデータのポインタを返すGiraffe.TaskTrayIconDataを定義
  • String.iidl_to_path, path_to_iidlを定義

String.c_str_utf8を定義

UTF8でのウェブ検索をデフォルトで可能にするため、NKF無しでUTF8への変換を可能にしました。
c_str, c_str_a, c_str_wと同じく、文字列から独立した、別寿命の、GCが管理するメモリブロックを返します。

Char.to_StringのUnicode対応

半角カナを忘れてました。
C言語のmbtowcを経由しますので、Cのロケールに依存します。

マルチスレッド描画時のデッドロック対策

スレッド登録時に専用のmutex使ったり、gc.dllのunregisterのところをDllMain利用時もロックするようにした結果、ここ一週間ほどデッドロックすることがなくなりました。
GCのマルチスレッド問題はこれでたぶん解決。

!cmdがSHOW引数を扱えてなかったのを修正

数値を渡した場合に文字として扱われていました。
!prefixによるコマンド実行の引数は、全てto_Stringされることになりました。

Block, Method.resolve2を定義

resolveが結局使い勝手が悪かったので、もう少しLispのバッククォート構文に近い形のものを作りました。
セミコロンで始まるシンボルを引数のコンテキスト(省略時はカレント)で評価します。

String.each_line: `*[
  [
    ;self.lrange.each& ;arg.@
  ].resolve2.eval(parent)
]

セミコロンで始まるシンボルは、コロンで始まるシンボルと同じ文法でパースされます。
最後まで取っておいたセミコロンをついに使いました。これで、もうこの言語は文法的な拡張可能性がなくなりました。何かやりたくなったら互換性無しの新言語のパーサを作って新旧を併用することになると思います。そのときがバージョン0.6です、たぶん。

タスクトレイアイコンのデータのポインタを返すGiraffe.TaskTrayIconDataを定義

NOTIFYICONDATAW*をvoid*として返します。使いたい場合だけNOTIFYICONDATAを定義したほうがいいと思ったからです。

//タスクトレイアイコンをWindowsのクエスチョンマークに
include('NOTIFYICONDATA')
data: Giraffe.TaskTrayIconData.to_Pointer(NOTIFYICONDATAW).deref
data.hIcon.= (Windows_HICON.new(7))
Shell32.Shell_NotifyIconW(NIM_MODIFY data)

String.iidl_to_path, path_to_iidlを定義

ITEMIDLIST関連はUnicode対応版をまだ定義してませんでした。
まとめてItemidlistオブジェクトでも作って関数を定義しようかと思っていたんですが、なんかそれも違う感じがして、とりあえず必要そうなこの2つだけをStringに定義しておきました。

//デスクトップのパスを表示
'::'.iidl_to_path.flush