« Erlang Tips 更新 | Main | フォークスソウル »

Friday, June 22, 2007

Erlang で静的解析チェックをする

Erlang R11B-5 から,dialyzer が強化されて,かなりのチェックが可能になった♪
以前は型チェックと書いていたけれども,実際のところは,型チェックより幅広い範囲でチェック可能なため,静的解析と言う方が正しい感じなので,訂正.

普段の make 時に,必ず dialyzer も実行するようにすると,実行前にエラーを検出できて,デバッグ効率が上がると思う.

Erlang Tips に静的解析によるチェックの項目を追加した.

dialyzer による静的解析では,型チェックだけではなく,case の分岐に不要なものが混じっていないか,永久ループして抜けない関数がないか,などもチェックしてくれる.

また,typer を使うと,各関数がどのような入出力をするのかが,簡単に確認可能.
複数のcase文でタプルを返すような場合,タプルが返される,というだけではなく,それぞれのcaseでどのような構造のタプルが返されるかまで追いかけてくれるので,かなり便利に使えると思う.

Erlang Tips のサンプルで言うと,

%% @typer_spec get_record2/0 :: (() -> {'fail','ng'} | {'success',123})

というような解析結果になったりする.

Erlangの標準ライブラリは,各関数の型情報(?)がインストール時に処理されて用意されているので,標準ライブラリを呼び出すときに,引数の型を間違えた・・・というような場合も検出してくれる.

たとえば,リストを受け取る lists:reverse にタプルを渡そうとすると,

typetest2.erl:7: The call lists:reverse(A::{1,2,3}) will fail since the signature is lists:reverse/1 :: (([any()]) -> [any()])

というように検出してくれる.

|

« Erlang Tips 更新 | Main | フォークスソウル »

Comments

I am definitely bookmarking this page and sharing it with my friends. :)

Posted by: forexst_ra_tegies | Monday, December 21, 2009 07:46 AM

Very nice Blog, I will tell my friends about it. Thanks

Posted by: Tifotolok | Saturday, January 30, 2010 11:29 AM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Erlang で静的解析チェックをする:

« Erlang Tips 更新 | Main | フォークスソウル »