2012-04-20

GNU Globalが面白そうだ

GNU GLOBAL source code tagging system
ソースコードを快適に読むための GNU GLOBAL 入門 (前編) - まちゅダイアリー(2009-03-07)
ソースコードを快適に読むための GNU GLOBAL 入門 (中編) - まちゅダイアリー(2009-03-08)
ソースコードを快適に読むための GNU GLOBAL 入門 (後編) - まちゅダイアリー(2009-03-09)
L'eclat des jours(2009-03-08)

これは面白そうだ。GNU/Linuxに移って不足していると感じていたのは、C++のコーディング支援機能だ。単純な名前補完をはじめとして、エディターで閲覧しているソースコード中の名前から、そのまま宣言や定義箇所に飛ぶような機能がほしかった。Visual Studioではおなじみの機能だ。C++でこのようなツールを提供するのは、残念ながらだいぶ難しい。

GNU Globalは、静的ではあるが、ソースコードを解析してくれる。すばらしい。

ちなみに、Linux Kernelにも適用できる。どのようになるかは、以下のサイトで確認できる。

The UNIX Kernel Source Tour!

これは予想以上にすごい。

というわけで、この記事を書いている途中で、さっそくインストールしようとしたところ、一瞬で終わった。ああ、aptはすばらしい。なぜ今までこんなに自由で便利なOSを使わず、不自由なWindowsを使っていたのか。10年前に不自由なWindowsを選択した自分を叱りつけたい気分だ。

sudo apt-get install global

Linux Kernelに言及したので、今読み進めているUnderstanding the LINUX KERNELの冒頭を読んだ感想を少し書く。

冒頭で説明されているOSの一般的な知識は、すでに知っていることが多く、とりあえずは分かる。ただ、signalとforkは、Windowsでは一般的ではない概念だ。Windowsでは、signalはほとんど使われない。Cの標準ライブラリにあるため、CRTで申し訳程度に実装してあるのみだ。Windowsでいえば、SEHが機能的に対応するだろうか。forkは、Win32サブシステムにはネイティブで存在しない。まあ、それほど難しい機能ではないのだが、このへんの違いは興味深い。

WindowsとLinuxにおける、プロセスとスレッドに関する考え方の違いは興味深い。Windowsでは、Linuxに先んじてスレッドが発達してきた。Windowsにおけるスケジュールの単位はスレッドである。ところが、Linux Kernelでは、2.6までネイティブなスレッド、つまりOSからスケジューリングされるスレッドというのは、実装されていなかった。Linuxでは、今も昔も、スケジュールの単位はプロセスであるそうだ。ネイティブなスレッドが実装された今も、Linux Kernelからは、メモリ空間を共有している特殊なプロセスとしてみているらしい。

代わりに、昔からforkが実装されていた。もっとも現代では、書き込みも含めたメモリ空間を共有した複数の実行単位としてのスレッドが重要になっているので、ネイティブなスレッドの実装は当然である。しかし、2.6までネイティブに実装されなかったというのは興味深い。

Native POSIX Thread Library - Wikipedia, the free encyclopedia

No comments: