コンテンツ
オープンソースなデバッガのニューカマー「lldb」、LLVMのサブプロジェクトとして登場
ここ数年注目されているコンパイラ環境「LLVM」が、サブプロジェクトとして「LLDB」なるデバッガを開発するよとアナウンスしている(LLVM Project Blog)。
LLVMは「コンパイラインフラストラクチャ」という形で開発が進められているのだが、このLLDBは現代的な「デバッガインフラストラクチャ」とのことで、モジュラー化構造や再利用しやすいライブラリが特徴らしい。LLDBはLLVMの技術やAPI、パーサー、コードジェネレータ、JITコンパイラなどを利用して構築されているとのこと。
現在は開発中の段階で、Mac OS Xでのコマンドラインでのデバッグのみに対応しているとのことだが、scriptableだったり、マルチスレッド対応など面白い話もある。さらに現状ではGDBよりも高速だそうで、特にC++プログラマにとっては使いやすいものになっているらしい。
MSys&MinGWをインストール
MinGW でのビルドを前提とされたツールをCygwin上でビルドするのが面倒だったので全力で MSys とMinGWをインストールした。MSysGitも入っているので環境汚れまくり。
SourceForge.JP のミラーからMinGW 5.1.4.exeとMSYS-1.0.11-rc-1.exeをダウンロードしてそれぞれインストール。MSYSは結構下の方(MSYS Base Systemの中)にあるので探す。
それぞれインストール後、「C:\msys\1.0\etc\fstab.sample」を同じディレクトリに「fstab」という名前にコピー、下記のようにMinGWとActivePerlをインストールしているディレクトリに対応付ける。
c:/MinGW /mingw c:/Perl /perl
あとはスタートメニューの「MinGW」-「MSYS」-「MSYS」などからシェルを起動。gccがエラーを日本語で吐いてくれるのだがWindowsのコマンドプロンプトだと化けるのでexport LANG=Cを適宜設定。
GCC 4.4系を使う
GCC 4.4系を使うには別途インストールが必要。「gcc-4.4.0-mingw32-notes.txt」に解説があるが、下記をMinGWのインストールディレクトリで展開すればよい。
- GMP Runtime [REQUIRED]
- gmp-4.2.4-mingw32-dll.tar.gz
- MPFR Runtime [REQUIRED]
- mpfr-2.4.1-mingw32-dll.tar.gz
- POSIX Threads for Win32 Runtime [REQUIRED]
- pthreads-w32-2.8.0-mingw32-dll.tar.gz
- Core (C) [REQUIRED]
- gcc-core-4.4.0-mingw32-bin.tar.gz、gcc-core-4.4.0-mingw32-dll.tar.gz
- C++ [OPTIONAL]
- gcc-c++-4.4.0-mingw32-bin.tar.gz、gcc-c++-4.4.0-mingw32-dll.tar.gz
なお、ドキュメントにはgcc-full-4.4.0-mingw32-bin.tar.lzmaに全部入っていると書いてあるが、GMPとMPFRとPOSIX Threadは入っていなかった……(汗)。
Pythonのクラスの挙動を調べる:class構文の外でクラスにメンバ関数を追加(2)
今度は、別のモジュールで定義したクラスにメンバ関数を追加してみる。
[Macintosh:~]$ python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# importすることで定義されたクラスは、その名前空間内に閉じこめられる
>>> import foobar
>>> print foobar.FooBar
<class 'foobar.FooBar'>
# 名前空間が異なっていても、名前空間さえ指定すればメンバ関数を追加できる
>>> f = foobar.FooBar()
>>> f.show_name()
I'm FooBar.
>>> def rename(self,new_name):
... self.name = new_name
...
>>> foobar.FooBar.rename = rename
>>> f.rename("john")
>>> f.show_name()
I'm john.
大体予想通りの結果ですな。
新プロジェクト「BlueGriffon日本語版」始めました
突発的に新プロジェクトBlueGriffon日本語版」を始めました( プロジェクトのトップページ )。
BlueGriffonは古くはNetscape Navigator Goldに端を発したMozilla系のHTMLエディタで、Nvu、KompoZerなどの後継ソフトだそうです。本家は bluegriffon.org 。
BrueGriffonはXULベースで作成されており、レンダリングエンジンはもちろんGecko。XULベースなのでFirefoxなどと同じ感じで日本語化できるので、ちょっと日本語化してみました。まだ本家も開発版という位置付けで、基本的なHTML編集くらいしかできないんですがざっとテキストリソースを見る限り良さげな感じです。
ということで期待しつつ、様子をみる感じで日本語化。しかし本家の開発リソースは少なそうなので開発の進捗はちょっと遅めの模様。まぁ請うご期待、ということで。
cl.exeの主要コマンドラインオプションメモ
最近、Visual C++をいじっているのでメモ。昔はVisual StudioでGUIでビルド設定してましたが、最近はもうmakeを使う方になれちゃったんだよね……。
| スイッチ | 意味 |
|---|---|
| 最適化 | |
| /O1 | コードを最小化 |
| /O2 | コードを最速化 |
| /Ob{0|1|2} | インライン展開方法を指定 |
| /Od | 最適化を禁止 |
| /Oi | 組み込み関数を使用 |
| /Ox | 最大限の最適化 |
| /GL | プログラム全体の最適化を使用 |
| /arch:{SSE|SSE2} | SSE/SSE2を使用 |
| 作成するコード | |
| /MD | DLL版ランタイムライブラリを使用。/MDdとするとデバッグバージョンを作成 |
| /MT | スタティック版ランタイムライブラリを使用。/MTdとするとデバッグバージョンを作成 |
| /LD | DLLを作成。/LDdとするとデバッグバージョンを作成 |
| /Fe<ファイル名> | 出力するEXEファイル名を指定 |
| /Fo<ファイル名> | objファイルを出力する |
| /Zi | デバッグ情報を生成 |
| そのほか | |
| /D<シンボル> | シンボルを定義(#defineと同等)。値を指定する場合は/D<シンボル>=<値>とする |
| /I<パス> | 追加インクルードディレクトリを指定 |
| /X | 標準インクルードパスを無視 |
| /w | ワーニング出力を無効にする |
| /Wall | すべてのワーニング出力を有効にする |
| /link | リンカにオプションを渡す |
| スイッチ | 意味 |
|---|---|
| /DEBUG | デバッグ情報(PDBファイル)を作成 |
| /DEF:<ファイル名> | モジュール定義ファイルを指定 |
| /DLL | DLLを作成 |
| /EXPORT:entryname[,@ordinal[,NONAME]][,DATA] | エクスポートする関数を指定 |
| /LIBPATH:<パス> | 追加のライブラリパスを指定 |
| /LTCG | リンク時のコード生成を有効化。/GLを指定してコンパイルしたオブジェクトファイルのリンクに必要 |