Modern Systems Programming with Scala Native: Write Lean, High-Performance Code without the JVM

いまだScala 2.11までのサポートしか提供されていないなど開発が停滞気味のScala Nativeですが、最近書籍が出たということで読んでみました。

仕事でScalaCLIツールを書くことがあるのですが、やはりJVMの起動時間のオーバーヘッドが気になるのでネイティブバイナリを作成可能な技術としてScala Nativeが気になってはいたのですが、最近はそういう用途であればGraalVMのネイティブイメージ生成機能の方が最新バージョンのScalaを利用できたり、使えるライブラリの自由度など様々な面で実用的だなぁと感じていました。が、この本を読んでScala Nativeに対するイメージが一変しました。そう、Scala NativeはScalaで書いたプログラムをネイティブ化するためのものではなく、ScalaC言語として使うためのものだったのです。そう考えるとScala Native対応ライブラリの少なさもデメリットにはなりません。Cライブラリを使えばいいのです。

この書籍ではポインタやメモリ管理、システムコールを活用したプロセス管理、ネットワークプログラミングなど、Scala Nativeによるシステムプログラミングの基礎が解説されています。中盤からはlibuvとlibcurlを使った非同期I/O、LMDBを使ったデータの永続化、最終的には簡単なものですがWebサービスを構築するところまでいきます。本書の中で使用されているScalaライブラリがJSON変換用のArgonautだけという事実がScala Nativeの性格を如実に表しているのではないかと思います。

サンプルコードの中にはScala的に若干微妙なものもあったりするものの、この書籍はそういうところを見るべきではないのは明らかなのですが、とはいえ正直なところ各サンプルを眺めていると果たしてこれはScalaで書く必要があるのだろうかという気持ちにならないこともありません。しかしZoneを使ったメモリアロケーションの自動化などScala Nativeならではの便利機能もありますし、FutureExecutionContextなど既存のScalaの抽象化インターフェースを活用しているサンプルもあったりするので、超高レベルなシステムプログラミング環境として密かに需要があったりなかったりするのかもしれません。

この本を読んでScala Nativeにも頑張って欲しい気持ちが出てきたので、日本時間の昨日から今朝にかけてオンラインで開催されたScala Love Conferenceでのこの書籍の著者であるRichard WhalingさんによるScala Nativeのセッションを楽しみにしていたのですが、残念ならタイムゾーン問題により該当のセッションまで起きていることができませんでした。セッションはすべて録画されているとのことなので動画が公開されるのを待ちたいと思います。

scala.love