uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

プログラミング言語Fan

James Strachan氏のブログ記事へのコメントを見ていて知ったのですが、Fanというプログラミング言語があるそうな。

http://www.fandev.org/

「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上でも動作します。
親しみやすい文法
JavaC#プログラマはFanの進化した文法にほっとします。
ミックスイン(Mixin)
インターフェースと実装に対するMixin
並行処理
言語組み込みのイミュータブル性、メッセージパッシング、REST指向のトランザクショナルメモリで並行処理に取り組みます。
オブジェクト指向
すべてがObjeのサブクラス。性能が必要な場合にはバリュータイプ。
関数型
関数とクロージャが組み込まれています。
静的型付け&動的型付け
極端は好かん。中道を行け。
シリアライゼーション
ビルトインの「JSONライクな」シリアライゼーション文法。宣言的プログラミングにも最適です。
エレガントなAPI
標準ライブラリに必要な機能を織り込むことについて、ぼくらはこだわります。しかし、Javaや.NETよりも表面上は小さいぐらいです。
REST
URIで識別されるリソースの単一化された名前空間を持ったモデルデータ。

以下感想。
言語要素は基本Groovyに似ていて、C#っぽいところ(継承の:)、Rubyっぽい(というよりSmalltalkぽい)ところ(クロージャの区切りが||ただし{}の直前に置く)、メンバは.だと静的解決、->だと動的解決らしい。静的解決の明示指定はGroovyにもほしいところ。クラスの外側に文を書くいわゆる「ルーズステートメント」などはない。

目新しいのは、言語組み込みのトランザクショナルメモリあたりか。アプリケーション自体の設計をRESTスタイルで(Webアプリであるかどうかとは独立した話として)書くことができるわけですかね。そういうの好きー*1。(参考:RESTは名前が悪い)
あと、ネームスペースと配布単位を整合させたPodというモジュール管理単位があるそうな。

*1:MVCがどうのフレームワークがどうのって話はWebアプリに特化して語られすぎてますよね。ほんとはそうじゃないのに。