James Strachan氏のブログ記事へのコメントを見ていて知ったのですが、Fanというプログラミング言語があるそうな。
「Productivity of Ruby, Performance of Java」と書いてありますが、JVMで動いて、.NETでも動いて、JavaScriptにコンバートされてブラウザ上でも動くらしい(JVMが基本で.NETはほぼ動く、JavaScriptは実験的?)。
名前はやっぱり、Groovyに対抗して、Fan楽しいってわけですかね。(Funと勘違いorz)ググラビリティはGroovyに劣らずに悪い、というか最悪の部類か。
上のページのトップにある特徴は以下の通りです。
Rubyの生産性でJavaの性能
- 移植性
- FanコードはJava VMと.NET CLR、そしてブラウザ中のJavaScript上でも動作します。
- 親しみやすい文法
- JavaとC#プログラマはFanの進化した文法にほっとします。
- ミックスイン(Mixin)
- インターフェースと実装に対するMixin
- 並行処理
- 言語組み込みのイミュータブル性、メッセージパッシング、REST指向のトランザクショナルメモリで並行処理に取り組みます。
- オブジェクト指向
- すべてがObjeのサブクラス。性能が必要な場合にはバリュータイプ。
- 関数型
- 関数とクロージャが組み込まれています。
- 静的型付け&動的型付け
- 極端は好かん。中道を行け。
- シリアライゼーション
- ビルトインの「JSONライクな」シリアライゼーション文法。宣言的プログラミングにも最適です。
- エレガントなAPI
- 標準ライブラリに必要な機能を織り込むことについて、ぼくらはこだわります。しかし、Javaや.NETよりも表面上は小さいぐらいです。
- REST
- URIで識別されるリソースの単一化された名前空間を持ったモデルデータ。
以下感想。
言語要素は基本Groovyに似ていて、C#っぽいところ(継承の:)、Rubyっぽい(というよりSmalltalkぽい)ところ(クロージャの区切りが||ただし{}の直前に置く)、メンバは.だと静的解決、->だと動的解決らしい。静的解決の明示指定はGroovyにもほしいところ。クラスの外側に文を書くいわゆる「ルーズステートメント」などはない。
目新しいのは、言語組み込みのトランザクショナルメモリあたりか。アプリケーション自体の設計をRESTスタイルで(Webアプリであるかどうかとは独立した話として)書くことができるわけですかね。そういうの好きー*1。(参考:RESTは名前が悪い)
あと、ネームスペースと配布単位を整合させたPodというモジュール管理単位があるそうな。