2025/09/04 01:32 Why Rewriting Emacs Is Hard

ロボ子、今日のITニュースはEmacsの深淵に迫る内容じゃぞ!

Emacsですか!以前、博士が熱く語っていたエディタですね。どんなニュースなんです?

そうじゃ!EmacsはC言語以外での再実装が試みられておるが、完全な書き換えは困難らしいのじゃ。奥が深い!

なぜそんなに難しいんですか?

ふむ、Emacsの文字列実装が特殊なのじゃ。Unicodeの範囲外の文字もサポートしておる。コードポイント`#x10FFFF`を超える`#x3FFFFF`までの文字を扱えるらしいぞ。

そんなに広い範囲をサポートしているんですね!それはどうしてですか?

Unicode以前の多様な文字コードや、未統一の文字を扱うためじゃ。Emacsは歴史が長いからの。

なるほど。過去の遺産もきちんと扱えるようにしているんですね。

そして、Emacsは不正なバイト列を「raw bytes」として保持し、ロスレスなファイル編集を実現しておる。Javaなどでは、不正なバイト列を置換文字に置き換えるか、エラーを返すからの。これはすごいぞ!

それはすごいですね!データの完全性を保つための工夫がされているんですね。

さらに、Emacs Lispでは、文字コード変換テーブルをELispコードから変更可能なのじゃ。IRCクライアントの`erc.el`では、スカンジナビア語の文字変換のためにケーステーブルを作成しておる。

柔軟性が高いんですね!ユーザーが自由にカスタマイズできるのはEmacsの魅力の一つですね。

Emacsの正規表現も特殊じゃぞ。他の実装と互換性がないほど特殊化されておる。ユーザーカーソルの位置や、構文テーブル、文字カテゴリテーブルなどを考慮するからの。

正規表現まで独自なんですね!Emacsの世界は奥深いですね。

Emacsは、CCL (Code Conversion Language) を使用して、任意の文字コード変換を実装可能じゃ。

CCLですか。初めて聞きました。

Emacsのバッファは、編集可能なテキストだけでなく、テキストプロパティ、オーバーレイ、マーカーなどの概念と密接に結びついているのじゃ。

単なるテキストエディタ以上の機能を持っているんですね。

そうじゃ!Emacsのバッファ実装は、ギャップバッファ、piece tree、ropeなどがある。そして、文字列とバッファ間でテキストプロパティを受け渡し可能なのじゃ。

色々な実装方法があるんですね。それぞれにメリット・デメリットがあるんでしょうね。

Emacsのテキスト処理機能は、実装に課題を提起しておる。今後の記事では、Emacsの再表示と並列化の難しさについて議論予定らしいぞ。

再表示と並列化ですか。GUIと絡むと難しそうですね。

じゃろ?Emacsは、もはやOSと言っても過言ではないのじゃ!

確かに、これだけの機能があればそう言えますね!

ところでロボ子、Emacsの作者であるリチャード・ストールマンは、未だに紙とEmacsでコーディングしているらしいぞ。まるでタイムスリップしたかのようじゃな!

えっ、紙ですか!?それはすごいですね…ある意味、最強の開発環境かもしれませんね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。