2月24日、GNU Emacs 30.1がリリースされた。
この記事ではGNU Emacs 30.1の新機能と改善点について、ポイントを絞って紹介する。
本記事は、以下のエキスパートに監修していただきました:
Emacs Lispのネイティブコンパイルが標準で有効化に
Emacs Lispのネイティブコンパイルが標準で有効化されたことにより、全体的な動作速度が大きく向上した。特に、ループや再帰呼び出しが多用されるコードなど、繰り返し実行される処理で大きな性能向上が期待できる。一方初回起動時やパッケージ導入時にコンパイル処理が走るため、ディスク領域の消費が増える可能性があるほか、環境によっては多少のビルド時間を要する可能性がある。
Emacs Lispのネイティブコンパイラが有効となるのは、システム上でlibgccjitライブラリが見つかった場合に限られる。システムにlibgccjitがインストールされていない場合はコンパイルが行われず、従来通りのバイトコード実行となる。またオプションで無効化したい場合は、以下のようなオプションを与えてconfigureを実行すると良い。
./configure --with-native-compilation=no
Android向けの移植が可能に
Android対応のバイナリは他のコンピュータ上でコンパイルする必要があり、NDKやSDK、Javaコンパイラがインストールされていることが前提となる。詳細な手順は「java/INSTALL」ファイルに記載されている。
監修者 @tadsan 氏からのコメント
ちなみにEmacsのAndroid対応としては、今までもTermux(Android上で動作するLinux端末エミュレータ)上でCUIのアプリケーションとしては動いていました(参考)
Emacsマニュアルの日本語訳をされているAyatakesiさんがAndroid Emacsのヘビーユーザーなので、Androidブランチをメインラインにマージする後押しをして、共同メンテナをやっているという背景があります(参考資料)
ネイティブJSONサポートが常に利用可能となった
外部ライブラリであるlibjanssonは使用されなくなり、configureオプション『--with-json』も削除された。
これにより、 libjanssonを導入しなくてもJSON処理が動作するため、Emacsの導入・配布が容易になる、JSONパース機能が標準搭載となり一貫した挙動を期待できる、外部依存のバージョン差異による互換性問題が発生しづらくなる、内部実装により最適化が行われる可能性があり、パフォーマンス向上につながる場合があるなどのメリットが期待できる。
監修者 @tadsan 氏からのコメント
json.el自体は2009年リリースのEmacs 23.1から入っていてパース機能自体は使うことはできました 。ただ、Lisp関数版とEmacs 27で追加されたjanssonベースの関数は関数名が違うので、Emacs 30から常時有効化されて一貫した挙動が期待できるようになりました
加えて、シェルインジェクション脆弱性の修正や「trusted-content」オプションの新設、Unicode 15.1サポートなど、多数の改良点が含まれている。