a4_log
のバックアップ(No.5)
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
バックアップ一覧
差分
を表示
現在との差分
を表示
ソース
を表示
a4_log
へ行く。
1 (2026-03-15 (日) 01:58:01)
2 (2026-03-15 (日) 02:04:40)
3 (2026-03-15 (日) 11:25:23)
4 (2026-03-16 (月) 14:56:28)
5 (2026-03-17 (火) 12:59:50)
6 (2026-03-17 (火) 15:49:29)
7 (2026-03-17 (火) 20:34:49)
8 (2026-03-17 (火) 23:50:50)
9 (2026-03-18 (水) 11:15:24)
10 (2026-03-19 (木) 00:17:28)
11 (2026-03-19 (木) 08:25:45)
12 (2026-03-26 (木) 00:46:23)
13 (2026-03-26 (木) 04:01:51)
14 (2026-03-26 (木) 12:08:34)
15 (2026-03-26 (木) 14:23:07)
16 (2026-03-27 (金) 14:03:29)
17 (2026-03-27 (金) 14:45:38)
18 (2026-03-27 (金) 17:27:07)
19 (2026-03-28 (土) 00:26:53)
20 (2026-03-29 (日) 19:52:01)
21 (2026-03-30 (月) 00:39:35)
22 (2026-03-31 (火) 01:57:36)
23 (2026-03-31 (火) 19:29:55)
24 (2026-03-31 (火) 23:53:26)
25 (2026-04-01 (水) 17:20:13)
26 (2026-04-02 (木) 01:34:31)
acl4の開発ログ
(by
K
, 2026.03.14)
acl4開発のもくじ →
a4_i01
開発ログの過去ログのもくじ →
a4_log00
一番新しい過去ログ(=このページの直前の話題) →
a4_log07
(2026.03.04(水)#0~2026.03.13(金)#5): a4vmの命令体系を試作。mandel描画でテスト。さらに再起呼び出しのテストを階乗とフィボナッチ数で行う。
↑
2026.03.14(土) #0
ライブラリに加えるとなると、一応それなりの完成度は欲しくて、だからテスト用に雑に書いた関数はライブラリに含めらません。
だからいろいろ書いているのに、ライブラリには全然追加できてなくて、なんかそこがもどかしいです。
↑
2026.03.14(土) #1
この開発ログの書き方もよくないよなあと反省中。
ログはずっと同じページに書き続けて、たくさんになったら過去ログへ移動するスタイルにしたいので、後でそれをやろうと思います。
↑
2026.03.15(日) #0
最新の開発ログのURLが
https://essen.osask.jp/?a4_log
に固定されるようにページの構成を変えました。
↑
2026.03.15(日) #1
ここ数年で最高のアイデアかもしれないものを思いつきました。
[1](前提の説明)
まず私は自作プリプロセッサを作りました。そしてプリプロセッサ処理関数を使えば、アセンブラ・仮想マシン・トランスパイラなどがとても簡単に作れることを示しました。
a4_p0004
(プリプロセッサを利用して短時間でアセンブラを作りました)
a4_p0005
(プリプロセッサを利用して短時間で仮想マシンを作りました)
a4_p0006
(プリプロセッサを利用して短時間でトランスパイラを作りました)
[2](前提の説明)
こんなにふうに何でも作れて本当に便利なのですが、でもこれには適用条件があります。プリプロセッサの置換機能が生きてくるのは、Macro(arg0, arg1, ...) みたいな形式で書かれているときだけなのです。
だから、 a = b + c * d; みたいな構文があっても、プリプロセッサは何もできません。もしこれが何とかできるようになったら、言語の開発なんて革命的に楽ができそうなのに・・・。そんなふうにずっと前から(10年以上前から)なんとなく思っていました。
そこまでは思っていても、そこから先を思いつくことはありませんでした。
[3](今回のアイデア)
それならば、そういう変換だけをするプログラムを作ればいいじゃないですか!
Mul(tmp0. c, d); Add(tmp1, b, tmp0); Let(a, tmp1);
この形式に変換できさえすれば、あとはいくらでもプリプロセッサだけで加工できます。そしてこの形式に変換するだけなら、コンパイラを作るのはずっと楽になるし、これを一度作っておけば後段の置換処理を用意するだけで、実に様々な用途に使えるはずです。
[4](今回のアイデア)
この拡張プリプロセッサは、型情報を持たせようと思っていて、だから Mul(int,int)とMul(float,float)は別の定義を与えることができます。これができれば置換処理の記述は楽になると思っています。
また前方参照も可能にしようと思っています。
↑
2026.03.16(月) #0
新しいプリプロセッサ:
C言語との互換性は気にしない
#include は #incl にする
#if 類はそのまま
#undef はなくす
#define は #def にする
#ldef がある(ローカル宣言)
#scop 命令があって、#endscop するとその中の #ldef は全部消える
前方参照OK
↑
2026.03.17(火) #0
私が最初に覚えたアセンブラは MC6809 という CPU のものでした。これには COM という命令があって、ビット反転を意味していました。 x86 でいうところの NOT 命令です。
昨日この COM 命令が急に気になりました。なぜビット反転なのに NOT ではなく COM なのか? COM は何の省略形なのか?
苦労しましたが、ようやく分かりました。 complement の略のようです。補数ってことですね。ビット反転は「1の補数表現」に当たるので、これは納得がいきます。
ついでに補数表現についても調べました。いや「1の補数表現」「2の補数表現」というのがあるのは35年以上前から知っていましたが、「3の補数表現」とか「4の補数表現」とかが何であるのか急に気になったためです。
結論からいうと、2進数で考えているときは「1の補数表現」と「2の補数表現」しかなくて、3や4はないということが分かりました。他の進法で考えれば、3や4も出てきます。
(詳細に興味があれば「補数表現」を調べてみてください。)
↑
2026.03.17(火) #1
とりあえず適当にこんなプログラムを作りました。
// tt0003a.c
↑
こめんと欄
コメント
お名前
NameLink