概要
C言語、組み込み、リソースが制約された環境下で使用できるライブラリです。
MITライセンス。
ダウンロード
LibCE(GitHub)
久しぶりにmakefileを書いたのでものすごく自信が無いです。アドバイス歓迎。
背景
末端下請けで色々なお客様から仕事を頂いておりますが、このやり方で仕事をしている場合、「権利ごと売り渡す」契約になっていることがほとんどです。
が、リングバッファとか、map(連想配列)とかは、大体どんなソフトを作るにあたっても欲しい。C++が使えればstd::vectorやstd::mapがあるので問題ないけど、Cには無い。自分の請けた範囲では、組み込みの案件では、いまだにCしか使えない場合が多い。
しょうがないので、お客様ごとに似たような機能で実装が違うモジュールを作って使用しているわけですが、もう、いいかげん面倒くさい。どうしてくれよう。
で、考えたのが、これまた契約において、「既存のものの権利は甲に属さない」となっている(あたりまえだけど)ので、案件のないときにあらかじめ作ってMITライセンスで公開してしまえば、どこで使っても契約違反にならない。はず。
色々契約書をひっくり返して眺めたけど、いけるはず。法律・権利関係は専門家でないので確実ではないですが、MITなら問題なさそう。ライセンス料とかいらない。ただ効率悪すぎるので使わせてくれ。
・・・ということで公開します。
ポリシー的な、言い訳的な何か
ポリシーと言えばそうなのですが、実装が面倒で省略している、というのも真実。
実利用で問題が出たことがないので、これでいいだろうという判断です。
ただ、アラフィフのじじいが言ってることなので、昔の観念から抜け出せていない可能性もあります。もっといい方法論があるかもしれません。
Remove、Delete(相当)は要らない
電源入れたらそのまま動きっぱなし、電源切ったらそこでCPUは動かなくなる。バッテリーバックアップさえされていないことがあるので、そもそもシャットダウン処理できない。
また、複数目的で使用する端末ではない。あらかじめ決めた機能容量で動かす。開発中に残記憶容量の関係などで増減はあるが、出荷時には確定する。
Remove、Deleteでき、それ前提で作っていると、メモリリーク的な現象が起きたりする。必要な容量は決まってるんだから、最初に用意して使う。
結論。追加(Add)は必要だが、削除(Remove)は要らない。
Heapを使わない
環境によっては、そもそもmallocが無かったりしたこともあった。
高級言語を使っているとnewは当たり前で、もはやガベージコレクションさえかなりの環境で提供されているが、メモリアロケーションとは本来結構難しい問題をはらんでいる。で、さらにメモリリークの問題。使ってる最中に動かなくなる機器とか最悪。
結論。Heapを使わない。あらかじめ作業領域を確保して使う。
雑感
皆さん、背景にあるような場合、どうしてるんでしょうかねえ・・・?
今後の更新どうしよう。