clang: ccan/tal (1)
2025/04/30
C language の略で “clang” としているが、コンパイラの clang が出てきたのでやりづらいな。。。
小さい組み込み系だとあまりやらないヒープ管理。
私がやった環境では MBedOS で C++ の new
が使えたのでびっくりしたのだが、そのくらいだ。
C言語でヒープ管理というかメモリ解放漏れなどを気にするなら tal を使ってみるのもよいだろう。
tal
Tree ALlocator routines からとってきて “tal” でよいのかな。
ccan はライブラリ集で、ちょっと面倒なことにライブラリごとにライセンスが違う。 tal の場合は 3つ。
- BSD-MIT
- CC0 (Creative Commons Zero v1.0 Universal)
- LGPL-2.1
依存する他の ccan ライブラリも含んでいるが、ライセンスは licenses/
にまとめてあった。
LGPL-2.1 があるのでクローズドな開発だと使いにくいかも?
ともかく、ライセンスは各自ご確認ください。
$ tar jxf tal.tar.bz2
$ ls
ccan licenses tal.tar.bz2
$ ls -l ccan/
total 52
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 alignof
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 build_assert
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 check_type
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 compiler
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 container_of
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 hash
drwxr-xr-x 4 xxxx xxxx 4096 Apr 30 10:30 htable
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 likely
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 list
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 str
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 take
drwxr-xr-x 4 xxxx xxxx 4096 Apr 30 10:30 tal
drwxr-xr-x 3 xxxx xxxx 4096 Apr 30 10:30 typesafe_cb
$ ls licenses/
BSD-MIT CC0 LGPL-2.1
ヘッダファイルだけではないので、ソースファイルはビルドに含めないといけない。 libccan.a を作る Makefile を使ってライブラリにした方が楽かも。
“benchmark/”, “test/”, “tools/” はいらなかった。 “ccan/str/debug.c” もいらないかと思ったが使っていた。
$ find ./ccan/ -type d -name test -prune -o -type d -name benchmark -prune -o -type d -name tools -prune -o -type f -name "*.c" -print
./ccan/tal/tal.c
./ccan/htable/htable.c
./ccan/likely/likely.c
./ccan/take/take.c
./ccan/str/str.c
./ccan/str/debug.c
./ccan/hash/hash.c
./ccan/list/list.c
config.h
を置く。
サンプル はあるのだが、どうやって書くんだ?
configurator というツールがあるので生成できそうに思うが、今回は省略。
CCAN_CFLAGS
とかあるけどヘッダファイルから参照するんだろうか?
そして config.h
というファイル名は ccan の各ファイルが #include "config.h"
という形で参照しているので変更できない。
別のファイル名にして config.h
がさらに include するようにしてもよいか。
それならマクロ名は全部 CCAN_
みたいなプレフィクスを付けてほしかったかな。
今回はそのまま使ったが HAVE_BIG_ENDIAN
のように環境に依存した設定もあるのでちゃんと確認した方がよい。
ccan 全体をダウンロードするなり git clone
なりすると make config.h
で自動的に作ってくれた。
枯れたライブラリなのかと思っていたが、これを書いている 20分前に commit があるなどまだ生きているようだ。 といっても 1年ぶりくらいっぽいが。
Rusty Russell 氏は Linux だと iptables 関係の人だったか。 私にとっては Lightning Network や c-lightning(core-lightning) の人というイメージが強い。
動かす
configurator は使わず、サンプルの config.h をそのまま使った。
中身の確認は次回に。