OpenJDK/amberをビルドしてパターンマッチングの世界を体験する

ほんとはjdk10をビルドしてvarの世界を体験するエントリだったのだけど、ここでバイナリが提供されたので、Amberの話にします。
Project Amberは、Javaにパターンマッチングを導入するプロジェクトです。
varによるローカル変数型推論もAmberの一部だったのだけど、これはjdk10に取り込まれました。jdk10はリポジトリ名で、実際のリリースがJDK10になるかどうかは不明です。


Amberのパターンマッチングがどうなるかというのは、以前ブログにまとめています。
http://d.hatena.ne.jp/nowokay/20170103#1483451037
で、これを試してみるために、ソースをビルドして動かしてみます。今回は、LinuxMacUbuntu on Windowsで試します。

Linux(Ubuntu)でのビルド

ソースをとってきて、ブランチを切り替えて、configureしてmakeというのがビルドの流れです。
ちなみに、OSと必要なライブラリなどあわせて15GBくらいディスクを使うので仮想環境では20GBくらいディスクをとっておく必要があります。ソースとビルド生成物はあわせて6GBくらい。


ビルドにはJDK 9が必要です。

~$ mkdir java
~$ cd java
java$ wget http://download.java.net/java/GA/jdk9/9.0.1/binaries/openjdk-9.0.1_linux-x64_bin.tar.gz
java$ tar zxf openjdk-9.0.1_linux-x64_bin.tar.gz


Mercurialをインストールします。

java$ apt update
java$ apt install mercurial


ソースをとってきて、patternsブランチに切り替えます。cloneは結構時間がかかるので、お風呂とか入るといいと思います。

java$ hg clone http://hg.openjdk.java.net/amber/amber
java$ cd amber
amber$ hg update patterns

今までのビルド手順だとget_source.shを動かしてソースをとってきていましたが、リポジトリ一本化によってcloneだけでよくなったみたいです。amber/amber10-oldなどだと古いパッケージ構成なので、get_source.shが必要のはず。


必要なパッケージをインストールします。

amber$ apt install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
amber$ apt install lib-cups2-dev  lib-freetype6-dev lib-asound2-dev


では、ビルドを。ビルドにはかなり時間がかかるので、ごはんの支度とかするといいと思います。

amber$ bash configure --with-boot-jdk=~/java/jdk-9.0.1
amber$ make images

configureのときに足りないパッケージはエラーメッセージで教えてくれるので、うまくconfigureできないときは確認してインストールしてください。


さて、ごはんもできたと思うので、おいしくいただきましょう。ついでにJShellも起動してみます。

というか、matches???聞いてないよーーー
matches、キーワードがどうなるかはともかく、かなりキモい仕様になっています。ということで、あとでこのあたりまとめてみます。
ここで試してないけど、ステートメントとしてのswitchもパターンマッチができています。いまのところ、ソースをみる感じswitch式については実装されてない感じです。
※ matchesが使えないときは、patternsブランチに切り替え忘れてないか確認してください。

Macでのビルド

Macでのビルドには、freetypeをインストールしてFreeType関係のオプションを指定する必要があります。

brew install freetype


configureはこんな感じ

bash configure --with-freetype-include=/usr/X11/include/freetype2 --with-freetype-lib=/usr/X11/lib --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home


※ 11/14 追記 XCodeをインストールしておく必要があるっぽい。XCode8が入ってたので大丈夫だったみたい。あと--disable-warnings-as-errorsをつけたほうがいいのかな。
macOSでOpenJDK(amber)ビルドするとエラーになってたのをクリアしてビルドした - Fight the Future
※ 2018/6/14 追記 High Sierraにしたらfreetypeの指定をするとconfigureが通らなくなっている。あとautoconfをインストールする必要があった

Ubuntu on Windows

Windows用のビルドがやりたかったのだけど、どうもVisual Studio Express 2010が必要ぽくて、インストールできなかったのであきらめた。
Ubuntuとほぼ同じだけど、makeとかが入ってないのでインストールが必要です。

~$ apt install build-essential

あとはUbuntuと同じ手順でいけるはず


2018/8/9追記
loomのインストールしてたらzipやunzipも必要だった。あとcups2などはパッケージが変わってた。

~$ apt install unzip zip
~$ apt install libcups2-dev libfontconfig1-dev libasound2-dev

プログラミングの基礎 ((Computer Science Library))

プログラミングの基礎 ((Computer Science Library))