rust-analyzerの紹介 2020-04-27 Rust # rust-analyzerの紹介 ---------------------- [下町.rs #1 (オンライン) - connpass](https://shitamachi.connpass.com/event/173972/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * GitLab: [blackenedgold](https://gitlab.com/blackenedgold) * [Idein Inc.](https://idein.jp/)のエンジニア * Lisp, ML, Rust, Shell Scriptあたりを書きます === # rust-analyzer --------------- * 最近開発が盛んなRustのIDEバックエンド + この発表より先に紹介記事でてきちゃった… https://rust-analyzer.github.io/blog/2020/04/20/first-release.html * 最近alphaがリリースされたよ 最近成熟してきているrust-analyzer、勧告が提案されてるTransition to rust-analyzer as our official LSP (Language Server Protocol) implementation by nikomatsakis · Pull Request #2912 · rust-lang/rfcshttps://t.co/O0Wvi4nGAL— κeen (@blackenedgold) April 23, 2020 === # RustのIDEバックエンド ----------------------- * 昔: racer * 今: rls * 未来: rust-analyzer === # rlsとLSP ----------- * rlsのバックグラウンドについておさらい * LSP: IDEバックエンドのプロトコル * rls: RustのLSPサーバ + rust language server + 現在公式の推奨ツール + みんな使ってるよね? === # LSP ----- * [これ](https://microsoft.github.io/language-server-protocol/) * Microsoft主導で策定したIDEバックエンドのプロトコル + JSON RPCベース * コーディング支援をIDE(フロントエンド)と解析ツール(バックエンド)に分離する * 型とかドキュメントとか定義ジャンプとか * 言語解析が必要なので言語ごとに必要 * 一回バックエンドツールを作れば使い回せる === # LSP ![lspとエディタ、バックエンドの関係](/images/lsp.png) === # 余談1: rust survey ------------------- * [Rust Survey 2019 Results | Rust Blog](https://blog.rust-lang.org/2020/04/17/Rust-survey-2019.html) * Rustの使用歴とか開発環境とかのアンケート * エディタ(IDE)はVSCode, Vim, IntelliJが3大巨頭でEmacs, Sublimeが次ぐくらい * IDEバックエンドは43%がrls, 21.7%がIntelliJ, 15.2%がrust-analyzer === # 余談2: IntelliJ Rust ----------------------- * IntelliJ Rustは自前でRustを解析している * rlsもrust-analyzerも使ってない * あとフォーマッタも独自っぽい + それはちょっと… === # IDEバックエンド比較 --------------------- ツール開発適用範囲特徴 rls公式LSPコンパイルして中間生成物としてIDE向けの情報を出す(遅い) IntelliJ RustJetBrainIntelliJでのみ使える編集にあわせてオンデマンドで情報を出す(速い) rust-analyzer公式LSP編集にあわせてオンデマンドで情報を出す(速い)。開発途上 === # library-ification ---------------- * rls → rust-analyzerは単にフルスクラッチしただけではない * Rustコンパイラを周辺ツールフレンドリに再構成する流れもきてる + [library-ification](https://smallcultfollowing.com/babysteps/blog/2020/04/09/libraryification/) + [demand-driven compilation](https://rustc-dev-guide.rust-lang.org/query.html) * 例えば[Chalk](https://blog.rust-lang.org/inside-rust/2020/03/28/traits-sprint-1.html)とか === # 使ってみた ------ * 少しだけrust-analyzer使ってみた * 感覚的に、慣れもあってrlsの方が使いやすい気がする + 補完とか賢い気がする…? * rust-analyzerはコマンドがいっぱいあって便利 + 今後の発展に期待 === # デモ ------- === # まとめ -------- * rust-analyzerはRustの新しいlspサーバだよ * 荒削りだけど現時点でもrlsより優れているところもあるよ * 見えづらいけどコンパイラ言語以外の面でも進化してるよ + 言語は総合力! * 多分そのうち公式になるから覚えておいてね