明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

clang+llvm のインストール

必要なパッケージのインストール

build-essential 等の基本的なパッケージはインストール済みとします。

apt-get install -y libpython2.7 libpython2.7-dev swig libedit2 libedit-dev libncurses5-dev libxml2-dev

インストールしたのは以下のパッケージです。

パッケージ名 概要
libpython2.7
libpython2.7-dev libpython2.7 の開発者向けパッケージ
swig C/C++スクリプト言語のグルーライブラリ
libedit2
libedit-dev libedit2 の開発者向けパッケージ
libncurses5-dev libncurses5 の開発者向けパッケージ
libxml2-dev libxml2 の開発者向けパッケージ

足りないものは、適宜導入して下さい。

ソースの取得

cd path/to/workspace
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb
svn co http://llvm.org/svn/llvm-project/lld/trunk lld
cd ../projects
svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

Makefile の生成

今、 cmake に取り組んでいるので、 cmake を使ってMakefileを生成します。

その他、 ./configure でも生成できます。

cd path/to/workspace/llvm
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/toolchain/clang+llvm ..

コンパイル

cd path/to/workspace/llvm/build
make -j2
make check-all

途中、 lldbコンパイルでエラーが発生したが、再度コンパイルしたら通った。。。理由はわからず。

Program error: Invalid parameters entered, -h for help.

cmakeのインストール

すごく便利との評判はあるが、使い方がよくわからない cmake について、とりあえずインストールをしてみます。

まず、日々更新されているため、できるだけ新しい機能を使いたいので、パッケージではなく、公式から直接導入します。

curl -R -O http://www.cmake.org/files/v3.1/cmake-3.1.1-Linux-x86_64.sh
sudo sh cmake-3.1.1-Linux-x86_64.sh --prefix=/opt/toolchain

以下の2つの質問をされますが、どちらもagreeしておきます。

Do you accept the license? [yN]: #ライセンスを了承しますか?

y

Do you want to include the subdirectory cmake-3.1.1-Linux-x86_64?

Saying no will install in: "/opt/toolchain" [Yn]: # サブディレクトリを作りますか?

y

あとは、パスを通せば実行できます。

$ export PATH=/opt/toolchain/cmake-3.1.1-Linux-x86_64/bin/:$PATH
$ cmake --version
cmake version 3.1.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

引き続き、使い方も調べていこうと思います。

コードの品質を自動的に評価するために 続編1

を書いてから、見つけた試してみたいツールをメモしておく。

  1. terryyin/lizard · GitHub lizard というPythonで組まれた複雑度計測ツールらしい。 個人開発だが、比較的頻繁にコミットされているので、試してみるのはいいかも。 なにより、Pythonというのがテンション上がる(笑)
  2. Valgrind Home こちらは古くから知っているメモリデバッガだったが、最近はいろいろ機能が追加されているらしい。 複雑度は関係ないが、動的デバッガは珍しいので、有効ならCIに組み込みた。

コードの品質を自動的に評価するために

コーディングにおける、現場の課題としては、おそらくここ数十年変わっていないと思うのですが、コードの品質をどのように担保するのかということになると思っています。

ここでいうコードの品質とは、動作上の確かさではなく、コード自体の保守性などのことです。

私の職場では、

  1. コードレビュー
  2. 静的解析

を行っていますが、実際には、

  1. コードレビューに時間をとれない。また、十分な有識者が集められない。
  2. 静的解析のツールが貧弱でほぼ無意味な指摘しかしない。

といった問題があります。

静的解析ツールは商用なんですけれどもね。。。

ただ、現在使用している静的解析ツールは複雑度などの「人の見易さ」については評価してくれないため、その点を安易に導入する手段を探してみました。

複雑度が下がれば、コードレビューにおける問題点もある程度緩和できると思うので。(または、重点的にレビューすべき箇所が自動的に特定される)


とりあえず、ぱっと見つかったのは、 SourceMonitor V3.5 なのですが、これはWindows用だったことと、以前、超巨大プロジェクトに対して実施したときに一部コードが正しく評価されていなかったっぽいため、評価対象外にしたい。

CIに組み込むことも考慮して、Linux上で動作するもの限定で探すと、

  1. C and C++ Code Counter | SourceForge.net

なんてものが見つかったけど、更新が1年以上止まっている。。。

もしかして、世界的には複雑度によるコードの評価はあまり有効と考えられていないのか??

それとも、「都度しっかり見ていれば、複雑度なんて上がらねーよ!!」ということなのだろうか?

プログラマが知るべき97のこと

O'Reilly の書籍で、 O'Reilly Japan - プログラマが知るべき97のこと というものがあり、職業柄読んでみたかったのですが、知らないうちにWebでみられるようになっているらしい。

公式ではないようだけど、各エッセイがCCライセンスだったため、公開しても問題がないという解釈なのだけどよいのかな?

いきなり、最初の 分別のある行動 から今の仕事の状態にピッタリな内容でびっくり(笑)

プログラマの成果(≒コード)は他の職業より、作業者の考え方が品質に与える影響が大きいと思うので、まず新人には読んでもらいたい内容だな。

おそらく、その時はぴんと来ないけど、3年後に読み返せば大きな共感が得られると思う。

vim の初期設定

毎回調べるので、vim の初期設定についてのメモを残しておく。

NeoBundle のダウンロード

mkdir -p ~/.vim/bundle
git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

NeoBundle のインストール

vim ~/.vimrc
set nocompatible
filetype plugin indent off
 
if has('vim_starting')
        set rtp+=$HOME/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
call neobundle#end()
 
" NeoBundle のプラグインを記述していく
NeoBundle 'Shougo/neocomplcache.git'
NeoBundle 'Shougo/unite.vim.git'
 
filetype plugin indent on

あとは、 vim を起動して以下のコマンドを実行すればインストール・アップデートが出来る。

:NeoBundleInstall
:NeoBundleUpdate

インストールするプラグイン

とりあえず、以下のプラグインを導入しておく。

molokai カラースキーム

NeoBundle 'tomasr/molokai'