Hatena::ブログ(Diary)

七誌の開発日記(旧) このページをアンテナに追加 RSSフィード

新ブログ Twitter OneDrive Wiki

2010-10-04

[][][]圧縮・展開アプリ

F#でZIPの圧縮・展開を行うアプリを作成しました。GUIデザイナーの関係上、GUI部分はNemerleで作成しました。パブリックドメインで置いておきます。

Deflateの展開は規格通りに実装していますが、圧縮は固定ハフマンのみサポートしています。そのため圧縮率はあまり良くありません。

2010-07-13

[][]最強コンビ?

VS2008ShellのF#ではGUIデザイナを使うことができません。複雑なレイアウトをコードだけで書くのは面倒なので、他の言語と組み合わせることにしました。C#VBは使えないため、それ以外の言語を色々と試した結果、Nemerleに行き着きました。ツールチップがカラフルなのが目を引きます。

早速、AlphaアセンブラインタプリタWindows Forms部分をNemerleに置き換えてみました。

Nemerleにたどり着くまでの経過は以下の通りです。

いくつかの言語

VS2008Shellに統合できる言語がいくつか見付かりました。

予め断っておきますが、GUIデザイナを使うのが目的のため、言語自体の評価をしているわけではありません。

Nemerle

一見C#を改造した言語のようです。実際はマクロの塊のような言語らしいのですが。

Windows FormsのGUIデザインはすんなりできました。WPFはうまくいかないようです。

NemerleではPython風のインデントブロックも使えるようですが、GUIデザイナが生成するコードはその構文に対応していないようです。

Boo

Pythonを静的型付けにして、ラムダ式を複数行書けるようにしたような言語です。言語仕様は魅力的ですが、残念ながらGUIデザイナをサポートしていません。

IronPython

Windows FormsのGUIデザイナはすんなり使えました。しかしインテリセンスが動的型付けをうまく扱えないためか、頻繁に補完が効かなくなります。しかも動的型付けのため、メンバ名を間違えても実行するまで分かりません。

動的言語を活かすためのノウハウがあれば問題にならないのかもしれませんが、一朝一夕で身につくものではなさそうです。自分でVS統合をビルドしないといけないのも敷居が高いです。

IronRuby

Ruby In Steel For IronRubyを使用しました。スクリーンショットではGUIデザインをしていますが、私にはそのやり方が分かりませんでした。

IronScheme

GUIデザイナをサポートしていないようなので、試していません。

結果

実質的にNemerleIronPythonとなりました。私にはIronPythonを使いこなせる気がしなかったため、消去法的にNemerleを選択することになりました。

GUIのコードビハインドとして少しだけNemerleでコードを書いてみました。「C#とF#を足して2で割った言語」という印象です。マクロに深入りすれば、また別の顔を見せるのでしょうけど。割と気軽に使えそうです。