Optimizing an IDE for an Evolving Language Ecosystem
本論文は、言語サーバープロトコルと既存のコアコンパイラを活用して、進化中のMoveスマートコントラクト言語向けの高パフォーマンスIDEを構築する戦略を概説し、エコシステムの成長を支えるために必要なインフラの最適化と得られた教訓を詳述する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
ゼロから全く新しい都市を建設していると想像してください。あなたは建物の設計図(プログラミング言語)と建設チーム(コンパイラ)を持っています。しかし、誰かが実際にそこに住んだり、何か実用的なものを建設したりする前に、彼らを案内し、特定の住所を見つけ、建設中のミスを修正するのを助ける超スマートなアシスタントが必要です。コーディングの世界において、このアシスタントはIDE(統合開発環境)と呼ばれます。
Mysten Labs のチームによる論文は、Move(スマートコントラクト用の言語)という新しい都市のためのこの「超スマートなアシスタント」をどのように構築したかを説明しています。ここでは、彼らがどのように行ったか、簡単な比喩を用いて物語として紹介します。
大きなジレンマ:新しいエンジンを構築するか、既存のものを使うか
新しいアシスタントを動かすために車用エンジンが必要な場合、2 つの選択肢があります。
- アシスタント専用にゼロから新しいエンジンを構築する。これは、運転手を助けるというたった一つの目的のために、特別なメカニックを雇ってカスタムエンジンを作るようなものです。その仕事には完璧かもしれませんが、時間と莫大な費用がかかります。
- すでに持っているエンジンを使う。都市の建設者たちは、設計図を完成した建物に変えるように設計された、巨大で強力なエンジン(コンパイラ)をすでに持っていました。
チームは選択肢 2を選びました。彼らは、既存の都市エンジンにアシスタントを接続することを決めました。
- リスク: そのエンジンは建物を完成させるために作られたものであり、設計図を描いている最中に人々を助けるためではありません。それは遅すぎたり、重すぎたりするかもしれません。
- 報酬: エンジンがすでに存在していたため、新しいものを構築するために数年待つ代わりに、アシスタントをほぼ即座に稼働させることができました。
問題:エンジンがあまりにも遅かった
当初、アシスタントは機能しましたが、動きは鈍かったです。図書館司書に本を探してもらうことを想像してください。もし司書が図書館の奥まで歩き、すべての棚を確認し、1 ページを見つけるためにすべての本の表紙から裏表紙まで読み通さなければならないとしたら、あなたは長い間待たされることになります。
Move という都市が大きくなるにつれ、図書館も大きくなりました。開発者がコードに小さな変更を加えるたびに、アシスタントはライブラリ(コードとそのすべての依存関係)を最初からすべて読み直す必要がありました。これには 1 秒以上かかり、開発者にとっては永遠のように感じられました。
解決策:どのようにスピードを向上させたか
チームは、エンジンを作り直すことなく最適化する必要があることに気づきました。彼らは 3 つの主な「微調整」を適用しました。
1. 「事前読み」ライブラリ(依存関係の事前コンパイル)
問題: アシスタントは、開発者が自分の物語を変更するたびに、標準ライブラリの本(辞書や数学ガイドなど)を繰り返し読み直していました。
解決策: 彼らは、「ねえ、辞書なんて誰も変えないよ!」と気づきました。そこで、彼らは事前読み棚を作成しました。標準ライブラリの本を一度読み、重要なメモを書き留めて、特別な棚に置きました。これで、アシスタントが単語を確認する必要があるとき、図書館の奥まで歩く代わりに、棚からメモを手に取るだけで済むようになりました。
- 結果: これにより、待ち時間はほぼ 1 秒から数ミリ秒の分数に短縮されました。
2. 「スポットチェック」戦略(増分コンパイル)
問題: 事前読み棚があっても、開発者が 100 ページの物語を変更した場合、アシスタントは変更されていない部分も含め、全体の物語を再読しようとしていました。
解決策: 彼らはアシスタントに(良い意味で)怠け方を教えました。開発者が 50 ページ目だけを変更した場合、アシスタントは 50 ページ目だけを再読します。残りの 99 ページについては、「この部分はすでに知っている、変更されていない」と言うだけです。
- 結果: これにより、巨大なコードベースであっても、アシスタントは瞬時に感じられるようになりました。
3. 「共有バックパック」(メモリ最適化)
問題: アシスタントは巨大なバックパックを背負っていました。それはあまりにも重く、開発者が 3 つの異なるプロジェクトを開いた場合、アシスタントのバックパックは持ちきれないほど重くなり、コンピュータの動作が遅くなったりクラッシュしたりしました。それは、アシスタントが今すぐ見る必要のない詳細を含め、すべての本のすべての詳細を運んでいたのです。
解決策: 彼らはバックパックを整理し直しました。重くて不要な詳細を捨て、必要なメモだけを残しました。さらに、3 人の開発者が同じ辞書を使うプロジェクトに取り組んでいる場合、3 つの別々の辞書は必要ないことに気づきました。彼らは 3 つのプロジェクト全体で1 つの辞書を共有しました。
- 結果: バックパックは大幅に軽くなり、アシスタントは息を切らすことなく複数のプロジェクトを同時に処理できるようになりました。
学んだ教訓
この論文は、新しい言語のために同様のアシスタントを構築しようとする人々へのいくつかの「経験則」で結論付けています。
- すべてを一度に構築しない: 初日から完璧なエンジンが必要ではありません。持っているものから始め、都市が大きくなるにつれて微調整してください。
- キャッシュを期待する: 二度と作業しなくて済むように、常に自分の作業(事前読み棚など)を保存する計画を立ててください。
- 重さに注意する: 運ぶ「もの」(メモリ)の量に注意してください。重いバックパックを運ぶことができるからといって、運ぶべきという意味ではありません。
- 回復力を持つ: 開発者がタイプミスをした場合、アシスタントは諦めてやめてはいけません。「ミスを見つけましたが、文の残りの部分については引き続きお手伝いします」と言うべきです。
結論
チームは、既存の機械の使い方を賢く行うことで、遅く重たい建設用エンジンを、速く機敏なアシスタントへと成功裏に変えました。彼らは新しいエンジンを作ったわけではありません。古いエンジンをはるかに効率的に動作させるようにしただけです。これにより、開発者はスマートコントラクトの都市を迅速に、かつ不満なく構築できるようになりました。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。