ディスカッション (6件)
Go言語において、コードのメンテナンス性を劇的に向上させる //go:fix inline ディレクティブと、新しい「ソースレベル・インライナ(Source-level Inliner)」に関するトピックです。これは、特定の関数を呼び出し元で自動的にインライン展開(置換)することで、ライブラリのAPI変更やリファクタリングをスムーズに行うための強力な仕組みです。これまでコンパイラ内部で行われていたインライン化をソースコードレベルで制御する、Goの新しいツールチェインの動向に注目が集まっています。
以下のコードだとマズい書き換えをされそうだけど、避ける方法はないのかな?もしそうなら、ブログの記事でこれに触れておくべきかも。 package main; //go:fix inline; func handle() { recover() }; func foo() { handle() }; func main() { defer foo(); panic("bye") }
僕の理解が正しければ、これはコンパイル時のインライン化指示じゃなくて、アノテーションされた関数を呼び出すクライアント側のコードを go fix 時にソース変換するものだよね。記事を読む限り、GoogleのチームがJavaやC++でやってるみたいに、組織がすべてのクライアントコードを管理できて、非推奨APIの呼び出しを go fix ですべて根絶できるような社内モノレポ的な環境で一番効果を発揮しそう。Googleでは何年も前からこういうツールを使って数百万件の呼び出しを削除してきたみたいだね。公開APIの場合でも多少のメリットはあるだろうけど、クライアント側が中央管理されていない以上、互換性を壊さずに削除するのは無理だろうな。
なんで新しい構文を作るんじゃなくて、コメントとして指示を追加することにしたんだろう。なんか場当たり的な感じがしちゃうな。 https://wiki.c2.com/?HotComments
一見シンプルそうな機能でも、裏側では膨大な実装が必要になるっていう良い例だね。Pythonにもこれがあったらいいのに。