aclib #1

  • (by K, 2020.09.08)

(1) 背景と目的

  • 私たちはプログラムを作ります。自分が作ったプログラム(アプリ)が、Windowsでしか動かない、MacOSでしか動かない、Linuxでしか動かない、自作OSでしか動かない、みたいなのはやっぱりさみしいです。
  • いや本当はそれはさみしいとかじゃなくて、そっちのほうがむしろ当たり前なのですが、でも共通のライブラリを整備して、どうにかして共通のソースコードで、機種別の #ifdef も一切書かずに、共通化できたらいいなと考えました。
  • 同じことを目指しているプロジェクトとして SDL があります。これは大変すばらしいもので、この aclib も SDL を利用している部分がたくさんあります。ただ SDL は例えば自作OSとかではサポートされないのが普通なので、aclibはそこも含めてサポートしたいです。
  • 開発言語はとりあえずC言語を想定しています。

  • ようするに細かい話なんかどうでもいいのです(笑)。
  • Windows, MacOS, Linux, Android, ラズベリーパイ, 自作OS, ... で、下図のようなプログラムが共通で動くようになったら、それはとても楽しいとは思いませんか?(ソースレベル互換)
    http://k.osask.jp/files/pic20200831a.jpghttp://k.osask.jp/files/pic20200901a.jpg
  • 一度書いたプログラムが、将来にわたって使い続けられたら、とてもすてきだと思うんです。
  • 自分もそういうプログラムを作ってみたいと思いませんか?

  • ちなみに私自身も、このライブラリの上で自作のプログラミング言語を作りたいと思っています。そうすれば、私は言語の移植作業をしないですむはずなのです。

(2) 特徴

  • aclibはSDL2.0に対するラッパーとして書かれたバージョンと、SDL2.0を使わずに書かれたバージョンの両方が提供されます。
    • Windows用の実装は、SDL2.0ベースにするか、aclib独自のものにするかをコンパイル時に選択できます。
    • 「はりぼてOS」用の実装は、aclib独自の実装を利用します。
    • それ以外のものについては、SDL2.0ベースの実装を利用します。そうすることで対応可能な範囲を一気に広げます。
    • SDL2.0ベースではない場合、当然ですが実行に際して SDL2.DLL(1.4MB) は不要です。
  • Windows用の独自実装は、SDL2.0ベースよりもかなり優秀になっています。比較対象をSDL2.0ネイティブ(つまりaclibに対するラッパーではない)にしてもこれだけの優位性があります。
    アプリWindows用の実行ファイルの大きさ(aclib)Windows用の実行ファイルの大きさ(SDL2.0ネイティブ)「はりぼてOS」用の実行ファイルの大きさ(aclib, 参考)
    グラデーション4.50KB10.0KB937バイト(仮)
    マンデルブロー集合4.50KB10.0KB1152バイト(仮)
    キューブ回転5.50KB12.5KB1734バイト(仮)
    • (註)サイズ比較においては、どちらに対してもできるだけ小さくなるオプションを使用して、さらに実行ファイルにUPXを施しています。

  • SDLに限らず、世間にはすでにaclibよりもはるかに優秀なライブラリが多数存在しているだろうと思われます。
  • それらとの違いとしては、aclibはライブラリが巨大にならない程度のシンプルな機能だけの共通化を主目的にしています。そしてそれゆえに自作OSなどへの展開も現実的になりますし、メモリが少ない環境もサポート範囲に含めやすくなります。

(3) デバッグ支援 (セキュリティっぽい機能)

  • aclibは-DADEBUGオプションを付けてコンパイルすることにより、デバッグ支援機能が付いた実行ファイルを生成するようになります。
  • この支援機能があれば、mallocしていないメモリ領域を誤ってfreeしてしまった場合には直ちにエラー終了するようになります。
  • そのほかにもfree後に誤ってアクセスした場合とか、malloc時のサイズを超えてアクセスしようとした場合など、様々な誤りを指摘してくれるようになります。
  • ファジングテストを支援する機能も付けるかもしれません。
  • 障害の再現支援機能も付けるかもしれません。

(4) このライブラリを使って何を作るか

  • まずはプログラミング言語やテキストエディタを作ってみたいと思っています。
  • 簡単なペイントソフトや、画像ビューワーも面白そうです。
  • ゲームとかも作りたいです。
  • まあ「一度作れば他の環境でも動く。しかもバイナリの肥大化も避けられる」ということが今の私にはとても魅力的なので、上記の例にこだわらず、なんでもかんでもこのライブラリ上で作るようになるかもしれません(笑)。

(5) なぜAndroidまでターゲットに入っているのか

  • 私は先日、Android上でもBluetoothキーボードを使ってけっこう快適にプログラミングができることを知りました。
  • またAndroidタブレットは、新品3,850円(税込み・送料込み)で売っているものもあり、そんな格安のタブレットでも問題なく開発ができてしまうこともわかりました。
  • (自分で購入して確かめました。)
  • それで今後はこれらの機種もターゲットに含めていかなければいけないと、すごく思ったのです!

(6) ダウンロード

  • aclib05の(2)をご覧ください。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-09-11 (金) 12:52:19 (10d)