Sep 09, 2008

[Dolphin] J2SE 7.0 EA で closure 環境を用意する。

そろそろ closure を実際に使用しておこうかと思い、JDK 7.0 EA をダウンロードして closure 環境を用意してみた。 現時点(2008/09/09)では JDK 単体では closure は利用できず、別途 closure ライブラリを用意する必要がある様だ。

Closures for the Java Programming Language (aka BGGA)
http://javac.info/
JSR Proposal: Closures for Java
http://www.javac.info/consensus-closures-jsr.html
JDK 7 Project
https://jdk7.dev.java.net/
Java Platform, Standard Edition 7 Binary Snapshot Releases
http://download.java.net/jdk7/binaries/

closure 環境の準備

まずは JDK 7.0 EA をダウンロードする。 今回使用したのは現時点で最新と思われる jdk-7-ea-bin-b34-windows-i586-28_aug_2008.exe。 closure ライブラリは javac.info から closures.tar.gz をダウンロードする。

>set JAVA_HOME=C:\_java\jdk\1.7.0-ea-28_aug_2008
>set PATH=%PATH%;%JAVA_HOME%\bin
>java -version
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b34)
Java HotSpot(TM) Client VM (build 14.0-b03, mixed mode, sharing)

>javac -version
javac 1.7.0-ea
JDK 7.0 EA 単体では closure は利用できないらしいが、とりあえず試してみる。
>md test
>cd test

>javac Test.java
Test.java:7: 式の開始が不正です。
    int value = { => 1 + 2 }.invoke();
                  ^
Test.java:7: 式の開始が不正です。
    int value = { => 1 + 2 }.invoke();
                   ^
Test.java:7: ';' がありません。
    int value = { => 1 + 2 }.invoke();
                            ^
エラー 3 個

>javac -source 7 -target 7 Test.java
Test.java:7: 式の開始が不正です。
    int value = { => 1 + 2 }.invoke();
                  ^
Test.java:7: 式の開始が不正です。
    int value = { => 1 + 2 }.invoke();
                   ^
Test.java:7: ';' がありません。
    int value = { => 1 + 2 }.invoke();
                            ^
エラー 3 個
やはり無理だった。
で、closure ライブラリを導入してみる。
>xcopy /S \closures-2008-08-11\* \_java\jdk\1.7.0-ea-28_aug_2008
\closures-2008-08-11\CHANGES
\closures-2008-08-11\DISTRIBUTION
C:\_java\jdk\1.7.0-ea-28_aug_2008\LICENSE を上書きしますか (Yes/No/All)? y
\closures-2008-08-11\LICENSE
\closures-2008-08-11\bin\java
\closures-2008-08-11\bin\java.bat
\closures-2008-08-11\bin\javac
\closures-2008-08-11\bin\javac.bat
\closures-2008-08-11\bin\javadoc
\closures-2008-08-11\bin\javadoc.bat
\closures-2008-08-11\lib\closures.jar
10 個のファイルをコピーしました
先程と同じテストコードを実行してみる。
>javac.bat Test.java

>java.bat Test
3

>
動いた。今回はここまで。

使用したテストコード

上で使用したテストコード(Test.java)はこれ。

public class Test{
  public Test(){
    super();
  }

  public static void main(final String[] args){
    int value = { => 1 + 2 }.invoke();
    System.out.println(value);
  }
}