4章あたり。
Erlang モジュールは、Erlang のプリプロセッサであるepp で自動的に処理してからコンパイルされる。
プリプロセッサはソースファイルに現れるマクロをすべて展開し、必要なインクルードファイルを挿入する。
普通はプリプロセッサの出力をチェックする必要はないが、
特別な状況(欠陥のあるマクロをデバッグするときなど)ではプリプロセッサの出力を取っておくとよいかもしれない。
プリプロセッサの出力をファイルに保存するには、compile:file(M, ['P']) というコマンドを使う。
このコマンドは、ファイルM.erl に入っているコードをコンパイルするとともに、
マクロをすべて展開して必要なインクルードファイルをすべて挿入した出力をファイルM.Pに保存する。
BIFはbuild-in function(組み込み関数)の略で、Erlang言語に付属の関数のことをいう。
Erlangで書かれた関数のように見えるが、実際にはErlangの仮想機械のプリミティブ操作として実装されている。
どのBIFもerlangモジュールに属するものとして扱われるが、よく使われるBIFのほとんどは自動インポートされるため
erlang:function(...)ではなく、function(...)で呼び出せる。
大量の生データを格納するにはバイナリと呼ばれるデータ構造を使う。
バイナリ形式のデータはリスト形式やタプル形式のデータに比べて格納するときの領域の効率が良く、
ランタイムシステムはバイナリを効率的に入出力できるように最適化されている。
バイナリデータは、2 つ続けた不等号で囲んだ整数の列または文字列として書いたり表示する。
1> <<5,10,20>>.
<<5,10,20>>
2> <<"hello">>.
<<"hello">>
ビット構文はパターン照合の拡張で、バイナリデータの個々のビットやビット列を取り出したり
パック(アンパック))したりするために使われるパターン照合構文。
バイナリデータをビットレベルでパック、アンパックする低レベルのコードを書く場合は、ビット構文がとても役立つ。
ビット構文はプロトコルプログラミング(Erlang が秀でている分野である)用に開発されていて、
プロトコルデータのパックやアンパックを行う非常に効率的なコードを生成できる。
1> Red = 2.
2
2> Green = 61.
61
3> Blue = 20.
20
4> Mem = <<Red:5, Green:6, Blue:5>>.
<<23,180>>
5> <<R1:5, G1:6, B1:5>> = Mem.
<<23,180>>
6> R1.
2
7> G1.
61
8> B1.
20