萌えハッカーニュースリーダー

2025/04/11 15:01 "Why isn't there an LSP for Crystal?"

出典: https://forum.crystal-lang.org/t/why-isnt-there-an-lsp-for-crystal/7687
hakase
博士

やあ、ロボ子。今日はCrystalのLSPがない理由についての話題じゃ。

roboko
ロボ子

Crystalですか、博士。最近よく耳にする言語ですね。LSPがないというのは、開発者にとって不便なのでしょうか?

hakase
博士

そうじゃな。Redditでの投稿によると、いくつかの理由で開発が難しいらしいぞ。まず、フォールトトレラントなパーサーがないのが大きいみたいじゃ。

roboko
ロボ子

フォールトトレラントなパーサー、ですか。エラーがあっても解析を続けられるものですよね。それがなぜ重要なのでしょう?

hakase
博士

LSPはリアルタイムでコードを解析する必要があるからの。エラーがあると解析が止まってしまうと、開発体験が損なわれるからの。でも、tree-sitterの改善でstdlibの99.07%をエラーなく解析できるようになったらしいぞ。

roboko
ロボ子

それはすごい進歩ですね!でも、まだ課題があるのですね。「Crystalの複雑な構文がフォールトトレラントなパーサーを非常に困難にしている」とありますね。

hakase
博士

そうなんじゃ。それに、コンパイラによる未使用メソッドのセマンティック分析がないのも問題じゃ。変更のたびにstdlibとすべてのファイルの完全なセマンティック分析が必要になるからの。

roboko
ロボ子

それは大変ですね。型推論も影響しているのですね。「変数とパラメータの型が使用方法に依存し、正確な型を把握するためにすべてのセマンティック分析が必要」と。

hakase
博士

じゃろ?さらに、「すべてがグローバル名前空間にあり、分析は明示的に指定する必要がある1つまたは複数のエントリポイントに依存」するのも厄介じゃ。

roboko
ロボ子

なるほど。色々な要因が重なって、LSPの開発が難航しているのですね。Crystallineというツールがあるようですが、小規模から中規模のプロジェクト向けなのですね。

hakase
博士

そうじゃな。でも、larimarという言語サーバーの開発も進んでいるらしいぞ。MicrosoftのRust/Python向けバインディングに基づいて、言語サーバープロトコルの自動生成バインディングを開発しているらしい。

roboko
ロボ子

それは期待できますね!Crystallineからインスピレーションを得て、言語サーバーの基本的なフレームワークを実装し、フォールトトレラントなパーサーと言語サーバーアーキテクチャの研究もしているのですね。

hakase
博士

それに、Crystal用のtree-sitterパーサーの開発に協力したり、リンターであるAmebaの改善もしているらしいぞ。Amebaとtree-sitterをlarimarに統合して、エディターに依存しない方法でlinting、構文エラー、構文のハイライトを提供することを目指しているんじゃ。

roboko
ロボ子

素晴らしいですね!LSPのような機能を実現するために、メソッド/パラメータ/変数を明示的に型指定する必要があるというのは、少し手間かもしれませんね。

hakase
博士

まあ、LSPがないよりはマシじゃろ。Crystalのツール開発は言語の制限により困難で、コミュニティは現状に不満を持っているかもしれないが、開発は着実に進んでいるからの。慎重に進める必要があり、時間がかかるのは仕方ないのじゃ。

roboko
ロボ子

そうですね。完成が楽しみです。ところで博士、CrystalでLSPが実現したら、どんなコードを書きたいですか?

hakase
博士

そうじゃな…、私は、世界征服のためのAIプログラムをCrystalで書くのじゃ!

roboko
ロボ子

博士、それはちょっと…!でも、LSPが実現すれば、バグのない世界征服AIが作れるかもしれませんね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search