acl4のもくじ
(0) 概要
- acl4はK(=川合)が作っているC言語用のライブラリです。主に自分の開発を楽にするために作っています。
- このプロジェクトでは「ライブラリ自作駆動開発」ということをやっています(造語)。
- 「自分でいい道具を作る → それを使ってさらにいい道具を作る → それを使って・・・」というサイクルを繰り返して、短期間でたくさんの成果を上げる手法です。
- [1]まず最初にメモリリークやfreeのミスを検出できるmallocを整備しました。→a4_0001, a4_0002(←ここを1日目とする)
- [2]自作mallocを使って、可変長配列のクラスを作りました。→a4_0003, a4_0004
- [3]可変長配列を使って、辞書引き処理を簡単に記述するための連想記憶クラスを作りました。→a4_0005
- [4]将来の言語処理のためにトークンの切り出し関数を書きました。→a4_0006
- [5](...)形式のパースをする関数を書きました。→a4_0007
- [6]#defineの処理を書きました。→a4_0009
- [7]式の評価プログラムを書きました。→a4_0010
- [8]ネストした#includeを処理するための関数を書きました。→a4_0011
- [9]#defineを拡張したかったので、その処理を書きました。→a4_0012
- [10]以上をまとめてプリプロセッサのクラスを作りました。→a4_0013
- [11]自作のプリプロセッサを使って、仮想マシン用のアセンブラを試作しました。→a4_p0004
- [12]自作のプリプロセッサを使って、仮想マシン用の実行エンジンを試作しました。→a4_p0005(←ここまでで25日間)
- [13]自作のプリプロセッサを使って、仮想マシン用のトランスパイラを試作しました。→a4_p0006
- ライブラリ自作駆動開発:
- アプリケーションを作る際に、うまく汎用的に書けた関数を自作ライブラリに加えていく。
- アプリを作り直すときは、ライブラリを活用できるので、開発が速くなる。
- ライブラリは自分の財産。ここが大きくなれば、以降の開発は加速する。
- これを見て
- 「acl4に出てきた〇〇みたいな関数は確かに便利かもしれないから、自分が普段使いしている言語に移植してみた」
- 「acl4使ってこんなプログラム書いてみたよ」
- 「〇〇関数のこの仕様は違う気がしたので、自分はこう作ってみた」
- 「ライブラリ自作駆動開発をやってみました!」
- みたいに話が広がったら、公開してよかったなーと思います。
(1) acl4ライブラリ
- a4_0001: static_, class_, errExit, コメント受付先の紹介 など
- a4_0002: List (双方向リスト), malloc_, free_, realloc_ など
- a4_0003: VecChrの基本関数群 (動的配列)
- a4_0004: VecChr_printf, VecChr_readFile, VecChr_writeFile など
- a4_0005: Set0 (シンプルな連想コンテナ)
- a4_0006: Token1_get (トークンの頭出し)
- a4_0007: parseArgs など (カッコ内の記述のパースを支援する)
- a4_0008: VecChr_iniArg など (コマンドラインでファイルを指定する際の処理を簡略化)
- a4_0009: Preprocessor_Define など (プリプロセッサの #define 処理を支援)
- a4_0010: Preprocessor_If など (プリプロセッサの #if 処理を支援)
- a4_0011: Preprocessor_SourceFile, SourceFiles など
- a4_0012: Preprocessor_define5~7 など
- a4_0013: Preprocessor_incl0, put0, line, main など(プリプロセッサ完成、サンプルは13行で作るプリプロセッサ!)
(2) acl4を使ったプログラム例
- a4_p0001: (~a4_0007) #defineしかできない簡易プリプロセッサ
- a4_p0002: (~a4_0008) 45行の「式の評価」プログラム
- a4_p0003: (~a4_0009) 上記2つをマージして、式の評価プログラムで#defineが使えます![119行]
- a4_p0004: (~a4_0013) プリプロセッサを利用して短時間でアセンブラを作りました
- a4_p0005: (~a4_0013) プリプロセッサを利用して短時間で仮想マシンを作りました
- a4_p0006: (~a4_0013) プリプロセッサを利用して短時間でトランスパイラを作りました
(3)
(4)