すでに数回書いたけど、またCheerpJの話です。 (ブラウザでJVM自体をエミュレートして動くやつ)
色々tweetして試行錯誤していたけど動きました、やった〜。
https://github.com/xuwei-k/cheerpj-scala
https://xuwei-k.github.io/cheerpj-scala/
ここでいう「ブラウザだけ」というのは、server側は静的なファイルを返してるだけで、全部処理はブラウザで行われる、ということです。 なのでgithub pagesにホストするだけで動くし、こういうものを作るときserverが必要だと、serverが殺されないようにとか、serverの負荷やセキュリティを気にする必要がありますが、これはどんなに変なコード書いても、書いた人のブラウザが高負荷になるだけなので、公開する側は一切そういう心配する必要がなくて最高便利です、やったー。
先にJava版作って、そっちの方がすごく簡単に素早く動くのだが、それは気が向いたら後で同じように公開するかも(詳細未定)
cacheなどの工夫を全くしていないので、compileにおそらく毎回数秒かかって遅かったり、tweetしたように微妙に古いversionのScalaだったり、これはcheerpj自体の問題だと思うのですが、書くコードによっては急にcrashしたりなどなど、色々と問題だらけなのですが、とりあえず動くは動きます。
CheerpJ君、javacで生成したclassファイルの動的load本当に簡単に可能なので(URLClassLoaderそのまま動く)、
— Kenji Yoshida (@xuwei_k) January 5, 2025
scalacはなぜか動かんけどブラウザだけでJavaからscala-library.jar呼ぶコードは普通に動くもの作れたな、楽しい pic.twitter.com/G5zj0bmAri
kotlinやscalaのcompilerがなぜか動かないし、Java 8なので2025年にlombokに手を出し始める様子・・・。
— Kenji Yoshida (@xuwei_k) 2025年1月6日
cheerpjでブラウザだけでlombokなら動くンゴ pic.twitter.com/skU2w9zMfE
CheerpJでScala compiler、Scala 2.11以前か2.12の初期の古いversionなら動いたな。
— Kenji Yoshida (@xuwei_k) 2025年1月7日
新しいversionは、おそらくJava 9対応で "jrt:/" のFileSystem作ったり何かしてる箇所がダメなのかもしれない