Clean2.3 Release!

Clean2.3 Releaseされました!
最近Wikiの変更とか活発だったから期待せずに見守っていたわけですが, まさかのリリース来ましたね.

当然ですがCHANGELOGとかNEWFEATUREとかBUGFIXみたいな軟弱な記述はどこにも*1有りません.
…と思ったけど翌日にメーリングリストで解説があったので紹介します.

イカの内容はClean2.2とClean2.3の64bitWindows版で確認しています.

明示的な Unboxed or 正格 配列の構築

Clean2.2(イカ2.2)までは, Unboxed配列({#})はアノテーションを書くことでしか構築出来ませんでしたが,
インラインで構築出来るようになりました.

// 2.2まで
xs :: {#Int}
xs = {1,2,3}
// 2.3
xs = {#1,2,3} // いきなり構築

同じく, 正格配列({!})もその場で構築出来るようになっています.

一意な配列とレコードの更新をするsyntax sugar

Cleanでは配列とレコードが一意である時に限り, 特定の要素を変更した新しい配列(orレコード)の構築を,
値を直に書き換えて, そのまま結果とすることが出来ますが,
この書き換えを行う式の略記が新しく追加されました.

// TestRレコードのyフィールドのみ書き換える
:: TestR = { x :: Int , y :: String , z :: (Real, Real) }

// 2.2まで
#  testr = {testr & y = "foobar"}

// 2.3
#  testr & y = "foobar"

(一意でない値を勝手に書き換えると, 他の名前が参照している値も書き換わってしまうので,
値をコピーしてから一部を変更する必要があります)


さらに, 複数のフィールドを一度に書き換える構文も追加されています.

// yフィールドとxフィールドを書き換える
// 2.2まで
#  testr = {{testr & y = "foobar"} & x = 555}

// 2.3
#  testr & y = "foobar", x = 555

モジュール

(最後の二つは告知をそのまま書いただけです. 自分で確認してません.)

  • ArgEnvWindowsモジュールがArgEnvに改名されました
  • TcpモジュールがTcpとTCPIPモジュールに分割されました. ObjectIOモジュールへの依存の有無でモジュールを切り分けたようですが, 相変わらずの命名規則ですね….
  • GECとHildeライブラリが削除されてしまいました. どっちも野心的なプロジェクトだったので残念です….
  • メルセンヌツイスタが64bit Windowsで動くようになりました
  • Gast(自動テストシステム) のDynamicsが64bit Windowsで動くようになりました.ただし, (without dynamic linking)と書いてあるので, コンパイルだけ通る感じかも知れません.

まとめ

あんまり派手な変更が無くてしょんぼり.
LauguageReportにはDynamicで持ち出せる型の制約についてfuture work的なことが書かれたりしていたんですが, それは実装されてないのかな

*1:パッケージと公式サイト内には