kazamachiさんからの情報。JVM上で動くyet another language。 IBM Developer Worksのalt.lang.jreでもとりあげられている。
Java言語の冗長なところを取り除いて、 Parametric Typeなどを強化した、という感じか。
DBC(Design By Contract)やmulti-methodをサポートしているのは良いところだ。 というか、Javaが最初からこれくらいできていれば苦労しないですんだ人は多いだろう。 十分に保守的なので「Javaのあるべき姿」と言っても良いかもしれない。
でも、レシーバがある場合のmulti-methodの定義構文は好きじゃない。 定義と呼び出しで見かけが全く違うから。
void laugh(String str){
  println("haha, I'm holding an instance of " str);
}
let myString = new String("Andy");
myString.laugh();
この「Matzにっき」で紹介した言語もかなりの数になると思うのだが、 よくもまあ次々と現れるものだ。言語好きとしては嬉しい限りだ。
Elevenは、 信頼性の高い、スケーラブルなWebアプリケーションを開発するためのプログラミング言語で、 Cに似た文法でデータベースをバックエンドとしたアプリケーションを開発できる。 Elevenで開発されたWebアプリケーションは PHPまたはmod_perlで動作する(ということは、コンパイラはPHPまたはPerlを吐くということか)。
面白いのはセッション状態変数をすべてMySQLデータベースに記録するので、 セッション管理などは暗黙的に行われる(これをstatesafe variableと呼ぶ)。
statesafe var first, last;
display
{
  print ("Please enter your name.");
  edit ("First name: ", first);
  edit ("Last name: ", last);
}
display
{
  print ("Thank you, ", first, " ", last, ".");
}
これだけで2画面を持つWebアプリケーションを実装したことになる(右図は実行例)。 実行例には「Updated state for user 1005.」とか「Continue」「Logout」とかのように 「どこから来たのか?」と疑問に思う部分もあるが、 とりあえず気にしないことにする(いざとなればソースを読めばよいから)。
それぞれのdisplayがWebアプリケーションの各画面に相当しており、 ロジックが非常にわかりやすい。画面遷移の記述として非常に直感的だ。 すばらしい。
次の例も衝撃的だ。
statesafe table
{
  var deadline    "Task deadline";
  var description "Task description";
} todolist;
display
{
  edit ("Enter your tasks: ", todolist);
}
これでToDoリストアプリケーションが実装できた、ということらしい(右図)。 非常に興味深い。tableというのがpredefinedな構造で、 "edit"に対して「Modify...」、「Remove...」、「Add entry...」などまで含めて提供しているようだ。
なかなかよくできている。 プレゼンテーションとロジックの分離のような 最近のWebアプリケーションサーバーでのはやりの仕組みはどうなっているのかという点も気にならないではないが、基本的な方向性は非常に共感できる。
で、考えてみると、これって別に新しい言語を導入しなくても、 Rubyのブロックとインスタンス変数を使ってライブラリで実現できそうだ。こんな感じで。
statesafe :first, :last;
display {
  print "Please enter your name."
  edit "First name: ", @first
  edit "Last name: ", @last
}
display {
  print "Thank you, ", @first, " ", @last, "."
}
だれかElevenのアイディアをRubyのライブラリとして実装しようという人はいないだろうか。
ということで、開催された。
事前の予想通り、社外からの参加者はなかったが、告知時間が短かったのでしょうがないだろう。 参加者は、私から時計まわりに、 まつもと、しゅうご、ゆうや、ごう、どん、こうじ、けんご、かずひこの計8名(敬称略)。 どこかに食べに行くか、という話もあったが、それでは食べるばかりでミーティングになりそうもなかったので、 オフィスの大机でピザを取ることにした。
結局、なんだか雑談で終わってしまったような気もするが、とりあえず話したこと。
あとなんだっけ。Lispにおけるレキシカルスコープとダイナミックスコープの話とか、 いろいろしてたような気がするけど。きっとかずひこくん辺りが議事録を出してくれるんではないかと。 出ても雑談ばかりで価値があるかどうかはわからないけど。
反省点など。
次回も開きたいが、今度はテーマを決めた発表か、CodeFestにした方が良いかもしれない。 時間も1時間半くらい限定で。
ところで、今回利用したMeetup.comだが、 ミーティング中にさっそく「今回のMeetupはどうだったか」とか「次回はいつにするか」とかメールを送ってきた。なんと積極的な。これは「出会え系(命令形)」とでも呼ぶべきか。
Eleven面白そうですね。興味がわきます。
Niceを取り上げていただいて有難うございます。Matzさんの意見を読みたかったので、本当に有難うございました。
Ruby版、名前はやはりTwelveでしょうか。