以下の内容はhttps://blog.3qe.us/entry/2025/02/19/230427より取得しました。


Scala CLIでスクリプトを書くときはビルドサーバが立たないようにすると良い(かも)

Scala CLIはScalaの便利コマンドラインツールで、スクリプト実行やREPL、パッケージングなどをやってくれる。今回はスクリプティングの話。

blog.3qe.us

Scala CLIはビルドサーバを起動する

Scalaはコンパイル型の言語であり、JVMでコンパイラが動作するという特性上、毎回最初からコンパイルを行うとパフォーマンス上のオーバーヘッドが生じる。必要な処理が最初から走るし、JITが動いていないし、最適化もかかっていないからだ。

このため、Scala関連のツールキットは、起動時に自動的にビルドサーバを起動し、以降はBuild Server Protocolというのを使ってそのサーバと交信してコンパイルやその結果を受け取る、という挙動をすることが多い。

% cat code.scala.sc
//> using scala 3.5.2
println("hello, scala cli!")

% scala-cli code.scala.sc
Compiling project (Scala 3.5.2, JVM (17))
Compiled project (Scala 3.5.2, JVM (17))
hello, scala cli!

% jps
712651 BloopServer
1083639 Jps

これにより、二度目以降のコンパイルと実行はパフォーマンスが向上し、開発者体験が良くなる、という仕掛けになっている。

ビルドサーバのリソース

しかし、開発をしているならともかく、仕上がったものをただ実行したいだけ、という場合にはこの機能は無駄だ。ビルドサーバなので数百MiBオーダーくらいのメモリを食うし、特に何もしないだけでこれが常駐するのは困る。

ビルドサーバが起動しないようにする

もちろんこの問題はScala CLI側でも認識されていて、特定の場所にオプションを指定することでビルドサーバが起動しないようにできる。代わりにコンパイルパフォーマンスが犠牲になるので、開発が終わってあとは実行するだけ、というときに使うと良さそう。

コマンドラインオプションを指定する

最も素朴には、scala-cli--server=falseをつけることでビルドサーバの起動を抑止できる。

scala-cli.virtuslab.org

% scala-cli --server=false code.scala.sc

スクリプト中で指定する

もしくは、スクリプト自体にshebangを添加させるという方法も使える:

#!/usr/bin/env -S scala-cli --server=false
//> using scala 3.5.2
println("hello, scala cli!")
% chmod u+x code.scala.sc
% ./code.scala.sc



以上の内容はhttps://blog.3qe.us/entry/2025/02/19/230427より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14