2009-05-28

インテリセンスのリビルド

Visual C++ Team Blog : Rebuilding Intellisense

全訳はしないが、ぜひとも原文を読むべきである。ちなみに、FEACPとは、Front End Auto Complete Parserの略である。

インテリセンスの精度を上げたい。しかし、そのためには、十年以上前に開発された、FEACPとNCBでは、役不足だ。

まず、NCBだが、これは今となっては、機能的にも貧弱だし、ファイルの構造自体が頻繁に壊れて、プログラマは手動で消すことを余儀なくされることもある。たとえば新しいテンプレートなどの構造が付け加えられたとき、その情報だけを追加することができず、結局最初からパースし直さなければならないことが多い。

そこで、情報を格納するためとしては、SQL Server Compact Editionを使うことにした。

パーサーも、再発明する必要がある。スケーラビリティを高めるためには、データーベースをインクリメンタルに更新する必要がある。これは一見明白なことのように思えるが、C++のコンパイルモデルに反する。というのも、ヘッダを一部変更するだけで、すべてのソースコードの意味が変わってしまうからだ。我々は新しいパーサーを書き上げた。

インテリセンスの精度を高めるために、IDEのエディタが開いているファイルの、全翻訳単位をパースすることに決めた。

フロントエンドの問題もある。FEACPを改良することも考えたが、やめた。完全なフロントエンドを一から作ることも考えたが、労力がかかりすぎると判断した。80年代、90年代では、コンパイラ技術というのは、最先端の技術で、各ベンダーは競って自社製品を開発したものだが、今では、みなコンパイラの上で何をするか、ということに注力している。よって、IDEのためのフロントエンドを、外部から買うことにした。これは一見、不思議なことに思えるかもしれないが、我々の目的に合っている。我々はIDEそのものにもっと労力を費やしたいのだ。 Edison Design Group(EDGとしてよくしられている)はすばらしいコンポーネントを作っており、実に良く動く。またうれしいことに、EDGは、常に最先端の規格を、まず初めにサポートするところなのだ。

No comments: