* acl4の開発ログ #04
-(by [[K]], 2026.01.25)
** 2026.01.25(日) #0
-[Q]ライブラリを作っていくのはまあいいとして、このライブラリを使って何を作るの?何も作らないんだったら、ライブラリなんか作っても意味ないよね!
--[A]全くそのとおりです。多分何らかの言語を作ります。
** 2026.01.28(水) #0
-[[a4_0003]]と[[a4_0004]]を書きました。VecChrはできたので、次は何にしようかな。足場は固まったので、いよいよ言語っぽいものを作るための関数群をそろえようかなー。
** 2026.01.28(水) #1
-サイズ管理をしなくていいスタックが作れそうだと思ったので実験してみます。
class_(Elm) { int i; char *s; };
VecChr stk[1]; VecChr_ini(stk); Elm *sp;
// push
VecChr_resizeDiff(stk, + sizeof (Elm)); sp = (Elm *) &stk->p[stk->n - sizeof (Elm)];
sp->i = 123; sp->s = "hello";
printf("stack-top = [%d, %s]\n", sp->i, sp->s);
// pop
VecChr_resizeDiff(stk, - sizeof (Elm)); sp = (Elm *) &stk->p[stk->n - sizeof (Elm)];
-これって、以下のような関数があればもっと短くかけるのかな?
void *VecChr_stkPush(VecChr *w, intptr_t sz) { VecChr_resizeDiff(w, + sz); return w->p + w->n - sz; }
void *VecChr_stkPull(VecChr *w, intptr_t sz) { VecChr_resizeDiff(w, - sz); return w->p + w->n - sz; }
sp = VecChr_stkPush(stk, sizeof (Elm)); sp->i = 123; sp->s = "hello";
sp = VecChr_stkPull(stk, sizeof (Elm));
-おお、これはいいかもしれない。
** 2026.01.29(木) #0
-C++のSTLでは双方向リストはlistっていう名前なのかー。じゃあそれに似せた名前にしたほうがいいかもしれないなあ。
--https://cpprefjp.github.io/reference/list/list.html
-STLのset相当のものも必要なので、それも作らないといけない。
--https://cpprefjp.github.io/reference/set/set.html
** 2026.01.29(木) #1
-一般的な語感では、データを追加するときは insert。消すときはdelete。・・・なのかな?
-STLではpush_backとかpush_frontで、データの追加を意味する場合が多い。もちろんinsertもある。
-STLでは消すときはeraseがよくつかわれる。
-うーん、だんだんSTLの命名規則が気に入らなくなってきたよ・・・。
-あれ?データを追加するのって、insertよりもaddかも?・・・まあでもaddだと加算みたいだから、避けられるのかな。
-ああでも、C#のsetみたいに、add-removeで追加と削除を表す場合もあるのかー。
-Javaもadd-removeモデルだなあ。
** 2026.01.29(木) #2
-よしきめた。acl4ではこうしよう。
--データの追加と削除はadd/rmvで統一する。
--先頭と末尾は、Hd/Tlで統一する。
-私は双方向リンクなどでつながった構造の先頭をheadだと思うし、末尾をtailだと思うのです。front/backではなく。
-私は蛇みたいなものを想像するわけですが、蛇のfront/backって「ん?」と思うのです。head/tailならイメージ通りです。
** 2026.01.29(木) #3
-私は変数名や関数名を決められなくて、最悪の場合何日も悩むタイプです。
-それで反省して悩むをやめたら作るのは速くなったけど、今度はわかりにくいと言われるようになりました。
-なかなかうまくいかないものです。
** 2026.01.30(金) #0
-[[a4_0005]]を書きました。これで変数名とかを登録して、辞書引きすることができます。
-双方向リストとか、可変長配列とか、連想コンテナはC++やJavaには最初からあるから作る必要ないですよね。C言語だと標準関数には入ってないので、そこから作るか、どこかから探してこないといけないわけです。
** 2026.01.30(金) #1
-よし、次はトークナイザーっぽいやつを作ろう!
** 2026.02.02(月) #0
-[[a4_0006]]と[[a4_0007]]を書きました。
-今日は a_malloc_debugList のおかげでメモリリークのバグを見つけられました。便利だなー。
** 2026.02.02(月) #1
-[[a4_p0001]]を書きました。#defineしかできない簡易プリプロセッサです。
-今後はこれを拡張してちゃんとしたプリプロセッサを作るぞー・・・ということではなく、いろんなものを作って遊びます。そうやってライブラリを鍛えていきます。
-・・・と言っておきながら、プリプロセッサの続きを作るかもしれません。その日の気分でやっていきます。
** 2026.02.03(火) #0
-a4_0001~a4_0007の行数を合わせると、もう830行かー。ずいぶん大きくなったなー。
** 2026.02.03(火) #1
-コマンドライン引数でファイル名を指定するときに、ファイル名ではなくファイルの中身をインラインで書けるようにできたら便利そうだなあ・・・。
** 2026.02.03(火) #2
-[[a4_0008]]を書きました。 VecChr_iniArg を作ったので、コマンドラインからファイルを受け取るのがかなり楽になりそうです。
-[[a4_p0002]]を途中まで書きました。式の評価プログラムを書きました。45行で書けました。
-[Q]最近開発ペース速くないですか?
--[A]自分でも速いと思います。ライブラリがうまくできると開発が速くなるんです。思い付きがすぐ実装できてしまうのです。
--あと、デバッグにほとんど時間がかからなくなっているのも、影響しているかもしれません。
** 2026.02.04(水) #0
-[[a4_p0002]]の続きを書きました。86行で謎の言語(?)ができてしまいました!
-C言語って、C++やRustと比べたら非常に古い言語で、大したことはできないって思われていると思いますし、実際もその通りなのですが、でも acl4 で遊んでいると「いやいや、まだまだ遊べるじゃん!」って思えてきます(笑)。
** 2026.02.04(水) #1
-なぜ私はこんなに楽しく開発が進むのかを考えてみました。
-それは多分、私がライブラリだけではなくサンプルプログラムを作るからだと思います。
-ライブラリ関数を追加するごとに簡単なサンプルを作っています( t0008a.c など、「t」で始まるテストプログラムのことを言っています)。
-それだけではなく、もはやサンプルプログラムだけのページもあります( p0002a.c など「p」で始まるプログラム)。
-やっぱり「作ったら使う、使ったらもっと作る」のサイクルは最強だと思うのです。
** 2026.02.04(水) #2
-[[a4_0009]]と[[a4_p0003]]を書きました。式の評価プログラムは変数だけではなくマクロ定義も使えるようになりました!
-a4_0001~a4_0009の行数を合わせると、1067行になりました。