(先日のポストの一部として既に投稿した内容ですが、元のポストが長く、内容としても独立していると思ったので分離させました。12月25日のポストを既に読んだ方は、内容は同一ですので無視してください。)
Twist.nixは、2年前から今でもまだalpha版です。 alpha版とはどういうことかというと、一般ユーザが試用することを想定しておらず、内部的に探求しながら開発を進めている段階(要は私が個人的に使っているだけ)です。 具体的には、公式なuser documentationがないため、使ってみたい人は手探りで試してねという状態です。 私自身のEmacsはtwistに全面的に依存しているし、有望な代替は今のところないので、私が死なない限りtwist.nixが突然終了することはないでしょう。
2023年のemacs-twistの主な進捗は、以下の通りです。
- twist.nix本体の、細かなAPIの変更や追加。
- Emacsを再起動せずにパッケージを更新するためのtwist.elができた。
- FigmaとAstroでウェブサイトを試作した(ほぼフロントエンドの練習目的)。
- twist-archiverなど、周辺ツールやライブラリーがちょっと増えた。
進捗は少ないです。 プロジェクト自体が長期的な持続可能性とメンテナンスの少なさを重視していますし、Nix全体のエコシステムはコミュニティによって着実に進歩していくので、なるべくただ乗りしていく方針です(NixOS Foundationには微額ながら寄付しているので、厳密にはただ乗りではないかもしれませんが)。
OCaml採用の機運
emacs-twistは(現状では事実上)私の一人プロジェクト(one-man band)ですし、私個人のスキル形成という観点で、NixとEmacs以外の技術も導入しようとしています。
具体的には、2023年に流行したOCamlの利用を検討しています。 OCamlは、OCaml 5.0でmulticore OCamlとなりalgebraic effectsにも対応しました。 さらにJane StreetがRustスタイルの所有権などの拡張機能に取り組んでいます。 Microsoft ResearchのKokaも先進的な機能を備えた言語であり、今後に期待したいところですが、現時点ではまだproduction-readyとはいえないでしょう。
日本国内ではOCamlはHaskellほど話題になっておらず、なぜHaskellではなくOCaml?と思うかもしれません。 Haskellは私が10年以上昔に学習した言語ですが、長期的な保守性(コンパイラのバージョンが上がったときにコードを書き換える手間等)という点で不安があり、現在一人では使わないことにしています。
Haskellを実際のプロジェクトに使うことの利点と欠点は以下のビデオで説明されていますが、Twistは競争していないので、速く確実にリファクタリングできるというHaskellの強みは活かされないと思います。 OCamlはHaskellよりも後方互換性を大切にする文化らしいので、Emacsのプロジェクトと相性がいいと思います。
HaskellとOCamlの経験がある人による両言語の比較は以下の記事にあります。
すべてのプログラミング言語はチューリング等価ですが、開発者にとって同じではありません。
Nix flakesが普及し始めている
そのほか、emacs-twistとは関係ありませんが、私個人の実績として、今年は2〜3のプロジェクトでNixを使ったCIの構築に貢献しました。
- Switch from niv to flakes by purcell · Pull Request #183 · purcell/nix-emacs-ci · GitHub
- Use Nix to install a custom build of Emacs on CI by akirak · Pull Request #20 · emacs-php/php-ts-mode · GitHub
- Improve flake.nix to save build time, make `nix run` work again, and check builds on CI by akirak · Pull Request #312 · elixir-tools/next-ls · GitHub
後の2つは、Nixとは直接的な関係がないプロジェクトですが、flake.nix
が入りました。Nix以外の様々な言語のリポジトリに、flake.nix
が入り始めているのが最近の流れです。