Add java21-features module: runnable demos and captured output for the ankurm.com java21-features article
This commit is contained in:
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
# Java 21 features: every demo compiled and run on a real JDK 21; regenerates output/*.txt
|
||||
# JDK21=/path/to/jdk21 ./run.sh
|
||||
set -uo pipefail
|
||||
unset JAVA_TOOL_OPTIONS
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
JDK21="${JDK21:-/opt/jdks/jdk21}"
|
||||
OUT="$HERE/output"; mkdir -p "$OUT"; B="$(mktemp -d)"; trap 'rm -rf "$B"' EXIT
|
||||
cd "$HERE"
|
||||
ver() { "$1/bin/java" -version 2>&1 | sed -n 1p | sed 's/.*"\(.*\)".*/\1/'; }
|
||||
# cr FILE CLASS [javac flags...] -- [java flags...]
|
||||
cr() { local src="$1" cls="$2"; shift 2; local jf=() rf=(); while [ $# -gt 0 ] && [ "$1" != "--" ]; do jf+=("$1"); shift; done; [ "${1:-}" = "--" ] && shift; rf=("$@")
|
||||
local o; o="$(mktemp -d -p "$B")"
|
||||
echo "\$ javac ${jf[*]:-} $src && java ${rf[*]:-} $cls ($(ver "$JDK21"))"
|
||||
"$JDK21/bin/javac" "${jf[@]}" -encoding UTF-8 -d "$o" "$src" 2>&1 | grep -v -e '^Note:' ; "$JDK21/bin/java" "${rf[@]}" -cp "$o" "$cls" 2>&1; }
|
||||
co() { local src="$1"; shift; local o; o="$(mktemp -d -p "$B")"
|
||||
echo "\$ javac $* $src ($(ver "$JDK21"))"; local r; r="$("$JDK21/bin/javac" "$@" -encoding UTF-8 -d "$o" "$src" 2>&1 | grep -v -e '^Note:')"; if [ -n "$r" ]; then echo "$r"; else echo "(compiled cleanly)"; fi; }
|
||||
PV=(--release 21 --enable-preview)
|
||||
cr src/VirtualThreadsDemo.java VirtualThreadsDemo > "$OUT/01-virtual-threads.txt"
|
||||
cr src/RecordPatternsDemo.java RecordPatternsDemo > "$OUT/02-record-patterns.txt"
|
||||
cr src/PatternSwitchDemo.java PatternSwitchDemo > "$OUT/03-pattern-switch.txt"
|
||||
cr src/SequencedCollectionsDemo.java SequencedCollectionsDemo > "$OUT/04-sequenced-collections.txt"
|
||||
cr src/KemDemo.java KemDemo > "$OUT/05-kem.txt"
|
||||
{ cr src/GcNamesDemo.java GcNamesDemo -- -XX:+UseZGC; echo; cr src/GcNamesDemo.java GcNamesDemo -- -XX:+UseZGC -XX:+ZGenerational; } > "$OUT/06-generational-zgc.txt"
|
||||
cr src/VectorDemo.java VectorDemo --add-modules jdk.incubator.vector -- --add-modules jdk.incubator.vector > "$OUT/07-vector-api.txt"
|
||||
cr src/StringTemplatesPreview.java StringTemplatesPreview "${PV[@]}" -- --enable-preview > "$OUT/08-string-templates.txt"
|
||||
cr src/UnnamedPreview.java UnnamedPreview "${PV[@]}" -- --enable-preview > "$OUT/09-unnamed-patterns.txt"
|
||||
{ echo "\$ java --enable-preview --source 21 src/UnnamedMainPreview.java ($(ver "$JDK21"))"; "$JDK21/bin/java" --enable-preview --source 21 src/UnnamedMainPreview.java 2>&1 | grep -v '^Note:'; } > "$OUT/10-unnamed-main.txt"
|
||||
cr src/ScopedValuesPreview.java ScopedValuesPreview "${PV[@]}" -- --enable-preview > "$OUT/11-scoped-values.txt"
|
||||
cr src/StructuredConcurrencyPreview.java StructuredConcurrencyPreview "${PV[@]}" -- --enable-preview > "$OUT/12-structured-concurrency.txt"
|
||||
cr src/FfmPreview.java FfmPreview "${PV[@]}" -- --enable-preview --enable-native-access=ALL-UNNAMED > "$OUT/13-ffm.txt"
|
||||
{ co broken/PreviewWithoutFlag.java; echo; co broken/NonExhaustive.java; echo; co broken/DominatedCase.java; } > "$OUT/14-compile-errors.txt"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user