methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

だったら機械語でもいいじゃないか

http://yoshiori.org/blog/2007/09/_java.php

そして、Java が好きな僕はおなじく

>まつもと氏によれば,Rubyには「向く現場」と「向かない現場」があるという。Rubyが向いているのは,少数精鋭で進めているプロジェクトだという。

と言う言葉を聞いて思うのです。

少数精鋭なら言語は何でも良いんじゃないか?
だったら Java でも良いじゃないか!!と

言語には力の差がある。「精鋭」は、機械語よりもJavaを選ぶように、JavaよりもRubyPythonを選ぶ。 http://practical-scheme.net/trans/icad-j.html

例:

//java (Mathはstatic import済みとする)
Comparator<int> cmpr = new Comparator<int>() { public int compare(int x, int y) {
    return abs(x) - abs(y);
    }};
#Python
cmpr = lambda x, y: abs(x) - abs(y)

Pythonの例は、Javaプログラマから見ると、上のJavaのコードを短くするだけのSyntax Sugarでしかないかもしれない。ある言語機能が、無意味に言語を複雑にするSyntax Sugarなのか、無いとプログラムを書くのが退屈で面倒な作業になるSyntax Sugarなのかは、プログラマによって違う。ただ、「精鋭」と呼ばれる人の多くにとって、Javaは退屈な言語だと思う。

ただし、C#が出てきてから、Javaも「そんなSyntax Sugarイラネ」から「C#に負けるな」という雰囲気になってきていると思う。上記の例は、Java7ではこうかけるかもしれない。*1

int(int,int) cmp = (int x, int y) : abs(x) - abs(y);

素晴らしい。是非こういう方向に進化して欲しい。

そういえば、C++0xのautoやC#3.0のvarは入らないのかな?

var cmp = (int x, int y) : abs(x) - abs(y);

みたいの。

*1:参考: http://journal.mycom.co.jp/articles/2006/08/23/java7closuer/004.html