Fedora 29 OpenJDK

Fedora 29 では OpenJDK が 1.8 から 11 になった。
いきなり凄いバージョンアップだよなぁ、って違う!
IcedTea ベースの今までと違い Oracle のソースになったみたい。

Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄 ? Publickey

なんか色々あるようだけど。
RHEL の先行開発版である Fedora には RHEL 用のそのままが使われると思う。
サポート切れや脆弱性については後ろに RedHat がいるので何も問題ない。

それはいいとして。
jjs は 29 でも実行できるけどアップグレードされていないので es6 は使えない。
GraalVM は dnf list でも出てこない、うーん。

とりあえず Java 11 はコンパイルなしで実行できるらしいので試してみよう。

JEP 330: Launch Single-File Source-Code Programs

なんとシバンが使えるようだ。
つまり Java 言語のまま普通のスクリプトとして使える、よし早速。

#!/usr/bin/java --source 11
// -*- Mode: Java -*-

public class Hoge {
    public static void main(String[] args) {
        System.out.printf("%s\n", "ほげ");
    }
}

動いたけど…

結論、インタプリタ実行しているのではない。
メモリ上にコンパイルしてソレを実行しているだけのようだ。
つまり javac が必要、Fedora デフォルトには入っていない。

sudo dnf install java-11-openjdk-devel

それと、シバンを使う時は拡張子を取っ払う必要がある。
Gedit で色分けできないのでモードラインを使いましょう。

*.java 拡張子をつけたまま usr/bin/java に渡すこともできる。
この時はシバンがあるとエラーになる、なんかもどかしい。

ようするに拡張子が無い場合は一行目を無視する、って感じの単純な実装みたい。
macOS ならそれでいいんだけどね。