a25_buntan04
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* buntan-pc #4
-(by [[K]], 2025.05.07)
** (0)
-https://github.com/buntan-pc/
-これにかかわる開発の話
** 2025.05.07 Wed #0
-今日はacl3.cを仕上げて、kuas.cをacl3.cに対応させたいです。
-ソースコードのサイズ比較(kuas04a→kuas05a):
|aclmini.c/acl3.c| 5125バイト → 9563バイト|
|kuas.c| 11106バイト → 9552バイト|
-ライブラリは結構いろいろ追加したので、増えたのはしょうが...
-kuas.cが1554バイト減ったのはうれしいです。それだけacl3.c...
-このライブラリを使っただけで、アセンブラが10KB未満で書け...
-https://essen.osask.jp/files/kuas05a.zip (6.17KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.05.07 Wed #1
-実はAX_printf()っていうのを作りたい。これがあれば事前に...
-と思ったら、snprintf族は、バッファに収まらなかった場合で...
--参考: https://surf.st.seikei.ac.jp/~nakano/JMwww/html/...
** 2025.05.07 Wed #2
-C言語のプリプロセッサを自作するのは大変だろうか・・・。...
-プリプロセッサって何をやればいいんだろう?
#define
#undef
#if ~ #elif ~ #else ~ #endif
#include
#
##
-これくらいでいいのかな?これならなんか比較的簡単にできそ...
** 2025.05.08 Thu #0
-とりあえず、includeは問題なくできるようになった気がする...
-次はdefineかな。
** 2025.05.09 Fri #0
-こんな実験をしました。WSL2上でUbuntu 24.04.2 LTSを使って...
-以下のプログラムを作って、gccの-Sでアセンブラソースを出...
#include <stdio.h>
static char msg[] = "not use this message";
static int func(int i)
{
puts(msg);
return i * i;
}
int main(int argc, const char **argv)
{
puts("hello, world");
return 0;
}
-要点は、mainからfuncは一切呼ばれていないし、msg[]を使っ...
|gcc -S -O0|msgとfuncもアセンブラソースに含まれる|
|gcc -S -O1|msgとfuncはアセンブラソースに含まれない|
|gcc -S -O2|msgとfuncはアセンブラソースに含まれない|
|gcc -S -O3|msgとfuncはアセンブラソースに含まれない|
-このように、-O1以上では、使わない関数やグローバル変数が...
--今回は明示的には確認していませんが、ほかのコンパイラで...
-昔からライブラリはクラスとプロトタイプ宣言のみのヘッダフ...
-でもこの方法だと、コンパイラによる高度な最適化は適用され...
-一方で、ヘッダファイルに関数の実体も含めて全部書いてしま...
-近年ではコンピュータの性能が上がってきて、小さなライブラ...
-でも一つだけ問題があります。gccとかで警告を多めにすると...
-まあ普通は関数を書いたら使われる方が当たり前で、そうなっ...
-gccの場合「-Wno-unused-function」とか「-Wno-unused-varia...
** 2025.05.10 Sat #0
-buntan-pcでは、平凡な仕様よりもちょっと変な仕様の方が望...
--[1]#defineマクロは、引数の有無、引数の数で区別されます。
--[2]#ifdefやdefined(...)は引数有り無し含めてとにかくどれ...
--[3]既に定義済みのマクロに対してさらに#defineすることを...
--[4]#undefでカッコのつかないマクロ名を指定した場合、まず...
** 2025.05.12 Mon #0
-すごく適当に#defineを作ってみたら、メモリ効率が良くなか...
** 2025.05.17 Sat #0
-単純に作れるか作れないかで言えば作れるのですが、しかし「...
** 2025.05.19 Mon #0
-defineとundefもできるようになりました。あとは#if類だけで...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 277行(6.8KB)
-もちろん、 ## や # も使えます。
#define Cat_Helper(x, y) x##y
#define Cat(x, y) Cat_Helper(x, y)
#define PutsNum(i) puts(#i)
Cat(Puts, Num)(123); → puts("123");になる
-私はこの成果にとても驚いています。まだincludeとdefine類...
-2000年くらいにOSASKを作っていたころ、私はASKAでプリプロ...
-今回こんなに小さく作れたのは自作ライブラリであるacl3.cが...
--可変長メモリ構造を楽に扱える関数とか、メモリリークをす...
** 2025.05.19 Mon #1
-調べてみてびっくり、いつの間にか#elifdefと#elifndefとい...
--https://yohhoy.hatenadiary.jp/entry/20210604/p1
-とりあえず、内部処理としては、
--#ifdef ... → #if defined(...)
--#ifndef ... → #if !defined(...)
--#elifdef ... → #elif defined(...)
--#elifndef ... → #elif !defined(...)
-と読み替えるだけにしたので、コスト的には7行の追加で済み...
-これであとは#if、#else、#elif、#endifを何とかすれば完成...
** 2025.05.20 Tue #0
-#if類も実装しました。今は!以外の演算はできないのでそこが...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 323行(9.0KB)
** 2025.05.21 Wed #0
-#ifの中の演算にも対応しました。機能的には問題なさそうで...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 394行(12.6KB)
-でもまだメモリの使い方が一部気に入らないので、明日はそれ...
** 2025.05.23 Fri #0
-メモリの使い方を直して整理しました。私は満足です。
--acl3.c : 498行(14.9KB)
--kcpp0.c : 371行(12.2KB)
** 2025.05.24 Sat #0
-ここまでを振り返ってみると、kuasを開発して、kcpp0を作っ...
-私はもっとライブラリを強化したいです。そのためには何かを...
-今回の開発でライブラリ開発のコツをつかみました。
--1.大きな機能のライブラリは作らない。小さなライブラリを...
--2.何か具体的な開発があって、そのためにライブラリも作る...
--3.最適化はしない。速度が遅くても動けばいいくらいで考え...
--4.記述が重複し始めたら、それは重複部分を別の関数で置き...
** 2025.05.24 Sat #1
-生のC言語は複雑すぎる気がするから、シンプルなC言語を考え...
--1.普通のC言語からシンプルCへトランスパイル
--2.シンプルCからアセンブラもしくは機械語へコンパイル
-の2段階に分離したほうがよさそう。シンプルCには機種依存な...
-この形式にしておけば、2を作るだけで任意のCPUアーキテクチ...
-あとは「なんとなく1週間くらいでできそう」って思えたら開...
** 2025.05.30 Fri #0
-急に思いついた、私にとっての理想のCPUアーキテクチャ。
--レジスタがいっぱいある。まあ16本くらいあればいいかなと...
--アドレスを入れるためのレジスタは固定したい。たぶん6個く...
--これらのアドレスレジスタに対して、リミットチェックのた...
---これってさ、x86のセグメンテーションでいいんじゃないの...
---x64になってセグメンテーションがなくなったわけだけど、...
--メモリアドレッシングは、[ベース+インデックス*定数+disp]...
-つまり私はVMが欲しいんだな。・・・うん、確かに欲しい。
-そしてそのVM用にアセンブラを作って、そのVM用にCコンパイ...
** 2025.05.30 Fri #1
-さらに考えて、実はVMが欲しいわけじゃないことが分かった。...
-世間ではIDEとかデバッガを使ってデバッグするけど、私はpri...
// seg(seg,vsg)やofs(lb, vpc)という構文は作れる.
// データのオフセットは共通になる。16bitアクセスがメイン...
終了行:
* buntan-pc #4
-(by [[K]], 2025.05.07)
** (0)
-https://github.com/buntan-pc/
-これにかかわる開発の話
** 2025.05.07 Wed #0
-今日はacl3.cを仕上げて、kuas.cをacl3.cに対応させたいです。
-ソースコードのサイズ比較(kuas04a→kuas05a):
|aclmini.c/acl3.c| 5125バイト → 9563バイト|
|kuas.c| 11106バイト → 9552バイト|
-ライブラリは結構いろいろ追加したので、増えたのはしょうが...
-kuas.cが1554バイト減ったのはうれしいです。それだけacl3.c...
-このライブラリを使っただけで、アセンブラが10KB未満で書け...
-https://essen.osask.jp/files/kuas05a.zip (6.17KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.05.07 Wed #1
-実はAX_printf()っていうのを作りたい。これがあれば事前に...
-と思ったら、snprintf族は、バッファに収まらなかった場合で...
--参考: https://surf.st.seikei.ac.jp/~nakano/JMwww/html/...
** 2025.05.07 Wed #2
-C言語のプリプロセッサを自作するのは大変だろうか・・・。...
-プリプロセッサって何をやればいいんだろう?
#define
#undef
#if ~ #elif ~ #else ~ #endif
#include
#
##
-これくらいでいいのかな?これならなんか比較的簡単にできそ...
** 2025.05.08 Thu #0
-とりあえず、includeは問題なくできるようになった気がする...
-次はdefineかな。
** 2025.05.09 Fri #0
-こんな実験をしました。WSL2上でUbuntu 24.04.2 LTSを使って...
-以下のプログラムを作って、gccの-Sでアセンブラソースを出...
#include <stdio.h>
static char msg[] = "not use this message";
static int func(int i)
{
puts(msg);
return i * i;
}
int main(int argc, const char **argv)
{
puts("hello, world");
return 0;
}
-要点は、mainからfuncは一切呼ばれていないし、msg[]を使っ...
|gcc -S -O0|msgとfuncもアセンブラソースに含まれる|
|gcc -S -O1|msgとfuncはアセンブラソースに含まれない|
|gcc -S -O2|msgとfuncはアセンブラソースに含まれない|
|gcc -S -O3|msgとfuncはアセンブラソースに含まれない|
-このように、-O1以上では、使わない関数やグローバル変数が...
--今回は明示的には確認していませんが、ほかのコンパイラで...
-昔からライブラリはクラスとプロトタイプ宣言のみのヘッダフ...
-でもこの方法だと、コンパイラによる高度な最適化は適用され...
-一方で、ヘッダファイルに関数の実体も含めて全部書いてしま...
-近年ではコンピュータの性能が上がってきて、小さなライブラ...
-でも一つだけ問題があります。gccとかで警告を多めにすると...
-まあ普通は関数を書いたら使われる方が当たり前で、そうなっ...
-gccの場合「-Wno-unused-function」とか「-Wno-unused-varia...
** 2025.05.10 Sat #0
-buntan-pcでは、平凡な仕様よりもちょっと変な仕様の方が望...
--[1]#defineマクロは、引数の有無、引数の数で区別されます。
--[2]#ifdefやdefined(...)は引数有り無し含めてとにかくどれ...
--[3]既に定義済みのマクロに対してさらに#defineすることを...
--[4]#undefでカッコのつかないマクロ名を指定した場合、まず...
** 2025.05.12 Mon #0
-すごく適当に#defineを作ってみたら、メモリ効率が良くなか...
** 2025.05.17 Sat #0
-単純に作れるか作れないかで言えば作れるのですが、しかし「...
** 2025.05.19 Mon #0
-defineとundefもできるようになりました。あとは#if類だけで...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 277行(6.8KB)
-もちろん、 ## や # も使えます。
#define Cat_Helper(x, y) x##y
#define Cat(x, y) Cat_Helper(x, y)
#define PutsNum(i) puts(#i)
Cat(Puts, Num)(123); → puts("123");になる
-私はこの成果にとても驚いています。まだincludeとdefine類...
-2000年くらいにOSASKを作っていたころ、私はASKAでプリプロ...
-今回こんなに小さく作れたのは自作ライブラリであるacl3.cが...
--可変長メモリ構造を楽に扱える関数とか、メモリリークをす...
** 2025.05.19 Mon #1
-調べてみてびっくり、いつの間にか#elifdefと#elifndefとい...
--https://yohhoy.hatenadiary.jp/entry/20210604/p1
-とりあえず、内部処理としては、
--#ifdef ... → #if defined(...)
--#ifndef ... → #if !defined(...)
--#elifdef ... → #elif defined(...)
--#elifndef ... → #elif !defined(...)
-と読み替えるだけにしたので、コスト的には7行の追加で済み...
-これであとは#if、#else、#elif、#endifを何とかすれば完成...
** 2025.05.20 Tue #0
-#if類も実装しました。今は!以外の演算はできないのでそこが...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 323行(9.0KB)
** 2025.05.21 Wed #0
-#ifの中の演算にも対応しました。機能的には問題なさそうで...
--acl3.c : 498行(14.9KB)
--kcpp0.c : 394行(12.6KB)
-でもまだメモリの使い方が一部気に入らないので、明日はそれ...
** 2025.05.23 Fri #0
-メモリの使い方を直して整理しました。私は満足です。
--acl3.c : 498行(14.9KB)
--kcpp0.c : 371行(12.2KB)
** 2025.05.24 Sat #0
-ここまでを振り返ってみると、kuasを開発して、kcpp0を作っ...
-私はもっとライブラリを強化したいです。そのためには何かを...
-今回の開発でライブラリ開発のコツをつかみました。
--1.大きな機能のライブラリは作らない。小さなライブラリを...
--2.何か具体的な開発があって、そのためにライブラリも作る...
--3.最適化はしない。速度が遅くても動けばいいくらいで考え...
--4.記述が重複し始めたら、それは重複部分を別の関数で置き...
** 2025.05.24 Sat #1
-生のC言語は複雑すぎる気がするから、シンプルなC言語を考え...
--1.普通のC言語からシンプルCへトランスパイル
--2.シンプルCからアセンブラもしくは機械語へコンパイル
-の2段階に分離したほうがよさそう。シンプルCには機種依存な...
-この形式にしておけば、2を作るだけで任意のCPUアーキテクチ...
-あとは「なんとなく1週間くらいでできそう」って思えたら開...
** 2025.05.30 Fri #0
-急に思いついた、私にとっての理想のCPUアーキテクチャ。
--レジスタがいっぱいある。まあ16本くらいあればいいかなと...
--アドレスを入れるためのレジスタは固定したい。たぶん6個く...
--これらのアドレスレジスタに対して、リミットチェックのた...
---これってさ、x86のセグメンテーションでいいんじゃないの...
---x64になってセグメンテーションがなくなったわけだけど、...
--メモリアドレッシングは、[ベース+インデックス*定数+disp]...
-つまり私はVMが欲しいんだな。・・・うん、確かに欲しい。
-そしてそのVM用にアセンブラを作って、そのVM用にCコンパイ...
** 2025.05.30 Fri #1
-さらに考えて、実はVMが欲しいわけじゃないことが分かった。...
-世間ではIDEとかデバッガを使ってデバッグするけど、私はpri...
// seg(seg,vsg)やofs(lb, vpc)という構文は作れる.
// データのオフセットは共通になる。16bitアクセスがメイン...
ページ名: