17: 2008-12-26 (金) 19:47:34 |
18: 2008-12-27 (土) 16:04:43 |
| -(12.22追記)昨日neriさんがオプションでCALL(EBP);をコードに追加する機能を付けるべきなんじゃないかと提案しました。この機能を付けるべきかいろいろ試行錯誤した結果、確かに付けたほうがいいと僕は判断しました(.g01の場合は先頭に付ける、COM64plusの場合は末尾に付ける)。またコマンドライン取得APIの仕様が勘違いで間違っていたことに気付いて修正したところ、このAPIが更に使いやすくなりました。これでまたサイズがかなり減っています。なおneriさん自身はまだCALL(EBP);の自動付加オプションをやるという決断にはいたっていないようです(でもきっとあとでやるとは思う)。helloが18バイトで書けるということは、ついにバッチファイルともタイだということです。ちなみにechoの13バイトはバッチファイルで"@echo %1 %2 %3"って書くだけで14バイトなので、すでにバッチファイルにも十分に勝っていると思います。 | | -(12.22追記)昨日neriさんがオプションでCALL(EBP);をコードに追加する機能を付けるべきなんじゃないかと提案しました。この機能を付けるべきかいろいろ試行錯誤した結果、確かに付けたほうがいいと僕は判断しました(.g01の場合は先頭に付ける、COM64plusの場合は末尾に付ける)。またコマンドライン取得APIの仕様が勘違いで間違っていたことに気付いて修正したところ、このAPIが更に使いやすくなりました。これでまたサイズがかなり減っています。なおneriさん自身はまだCALL(EBP);の自動付加オプションをやるという決断にはいたっていないようです(でもきっとあとでやるとは思う)。helloが18バイトで書けるということは、ついにバッチファイルともタイだということです。ちなみにechoの13バイトはバッチファイルで"@echo %1 %2 %3"って書くだけで14バイトなので、すでにバッチファイルにも十分に勝っていると思います。 |
| -(12.24追記)CALL(EBP);をやめてCALL([ESI]);にすることにしました。これだとEBPがあくので好きなことができます。アセンブラ版のバイト数は変わりません。でもC言語版のバイト数は1バイトくらい減らせそうです。・・・さらにCOM64plusのマネをしてレジスタの初期値ロード機能をオプションでつけました。これでcharsが16から14になりました。COM64plusに追いついた! | | -(12.24追記)CALL(EBP);をやめてCALL([ESI]);にすることにしました。これだとEBPがあくので好きなことができます。アセンブラ版のバイト数は変わりません。でもC言語版のバイト数は1バイトくらい減らせそうです。・・・さらにCOM64plusのマネをしてレジスタの初期値ロード機能をオプションでつけました。これでcharsが16から14になりました。COM64plusに追いついた! |
- | -以下にここまでの成果(多分これが限界でもあると思う)を書いておきます。[2008.12.24更新] | + | -以下にここまでの成果(多分これが限界でもあると思う)を書いておきます。[2008.12.27更新] |
- | | |hello |hello-c |chars |echo |echo-c | | + | | |hello |hello-c |chars |echo |echo-c |cpy |cpy-c |makefont-c| |
- | |abcdw006用 |RIGHT:27 |RIGHT:86 |RIGHT:33 |RIGHT:? |RIGHT:156 | | + | |abcdw006用 |RIGHT:27 |RIGHT:86 |RIGHT:33 |RIGHT:? |RIGHT:156 |RIGHT:? |RIGHT:612 |RIGHT:691| |
- | |abcdw007用 |RIGHT:''18''|RIGHT:''69''|RIGHT:''14''|RIGHT:''13''|RIGHT:''71''| | + | |abcdw007用 |RIGHT:''18''|RIGHT:''69''|RIGHT:''14''|RIGHT:13 |RIGHT:71 |RIGHT:? |RIGHT:342 |RIGHT:347| |
- | |COM64plus用|RIGHT:20 |検討中? |RIGHT:''14''|RIGHT:? |RIGHT:? | | + | |abcdw008用 |RIGHT:''18''|RIGHT:''69''|RIGHT:''14''|RIGHT:''9''|RIGHT:''69''|RIGHT:''45''|RIGHT:''138''|RIGHT:''207''| |
- | |DOS用 |RIGHT:22 |RIGHT:? |RIGHT:17 |RIGHT:19 |RIGHT:? | | + | |COM64plus用|RIGHT:18? |検討中? |RIGHT:''14''|RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:?| |
| + | |DOS用 |RIGHT:22 |RIGHT:? |RIGHT:17 |RIGHT:19 |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:?| |
| --(註)echoはargv[0]が見えても見えなくてもよい。 | | --(註)echoはargv[0]が見えても見えなくてもよい。 |
- | --echoはもちろんジャンクAPIで実現しているが、ジャンクAPIはジャンクであるというマークがついている分だけ実行ファイルが長くなる傾向がある。もし他の部分は一切変えずに本仕様に昇格させれば、それだけでechoもecho-cも2バイトは縮むだろう。 | + | --echoはもちろんジャンクAPIで実現しているが、ジャンクAPIはジャンクであるというマークがついている分だけ実行ファイルが長くなる傾向がある。もし他の部分は一切変えずに本仕様に昇格させれば、それだけでechoもecho-cも2バイトは縮むだろう。・・・というのはabcdw007までの仕様でのことで、abcdw008以降については本仕様級の仕様なので、ここから減ることはない。 |
| -abcdw006→abcdw007の仕様変更はかなり大きなもので、基本的にバイナリ互換はありません。ソース互換すらほどほどしかありません。大規模改造なので僕も非常に苦労しています(アプリの移植はそれほどでもないけど、efg01の改造が大変)。 | | -abcdw006→abcdw007の仕様変更はかなり大きなもので、基本的にバイナリ互換はありません。ソース互換すらほどほどしかありません。大規模改造なので僕も非常に苦労しています(アプリの移植はそれほどでもないけど、efg01の改造が大変)。 |
| -これはまさに「乾いた雑巾を絞る」レベルの改良で、その中にあってcharsが半減したり、echo-cが半減したりと、ちょっとありえない劇的な進歩になっています。それもこれもみんなneriさんの協力のおかげです。・・・neriさんなしで一人でやっていたらこの設計に到達するまでに1年間はかかったと思います(その後の改良のペースもすごいのでトータルで2年分くらいは進んでいる気がする)。あとやっぱりabcdw006までで小さいアプリをたくさん作ってきて、ボトルネックというか、「こんな仕様だったらいいのに」を実感していたのもあると思います。 | | -これはまさに「乾いた雑巾を絞る」レベルの改良で、その中にあってcharsが半減したり、echo-cが半減したりと、ちょっとありえない劇的な進歩になっています。それもこれもみんなneriさんの協力のおかげです。・・・neriさんなしで一人でやっていたらこの設計に到達するまでに1年間はかかったと思います(その後の改良のペースもすごいのでトータルで2年分くらいは進んでいる気がする)。あとやっぱりabcdw006までで小さいアプリをたくさん作ってきて、ボトルネックというか、「こんな仕様だったらいいのに」を実感していたのもあると思います。 |
| |改良版 |RIGHT:507|RIGHT:342|RIGHT:347| | | |改良版 |RIGHT:507|RIGHT:342|RIGHT:347| |
| -(12.26追記)しばらく開発しないといっておきながら、突発的にcpyをnaskで書いたら何バイトになるのかが気になって(たぶん禁断症状)、それで作ってみました(実際はASKAで書きました)。abcdw008で実装予定の(つまりまだ未実装の)APIを勝手に使って書いたところ、cpyは51バイトで書けることが分かりました。うおおおぉー。これはすごい。やっぱりアセンブラは偉大だー。あとはこの51バイトを使いたくてしょうがなくなったらabcdw008を作ることにします(笑)。ちなみにこのAPIを使うとechoは11バイトになります。他のアプリもみんな100バイトくらいは減るんじゃないかなあ。もちろん上記で減量に成功したsjisconvやmakefontも。 | | -(12.26追記)しばらく開発しないといっておきながら、突発的にcpyをnaskで書いたら何バイトになるのかが気になって(たぶん禁断症状)、それで作ってみました(実際はASKAで書きました)。abcdw008で実装予定の(つまりまだ未実装の)APIを勝手に使って書いたところ、cpyは51バイトで書けることが分かりました。うおおおぉー。これはすごい。やっぱりアセンブラは偉大だー。あとはこの51バイトを使いたくてしょうがなくなったらabcdw008を作ることにします(笑)。ちなみにこのAPIを使うとechoは11バイトになります。他のアプリもみんな100バイトくらいは減るんじゃないかなあ。もちろん上記で減量に成功したsjisconvやmakefontも。 |
| + | -(12.27追記)コマンドライン周りの設計中(本仕様級)。以前は数ヶ月かけてもできなかったのに、今だと数日でこんなにはかどる。でも時間がないので比較的ゆっくり。 |
| * こめんと欄 | | * こめんと欄 |
| - 現在abcdw007の今週中のリリースを目指してがんばり中。 -- [[K]] &new{2008-12-22 (月) 20:33:28}; | | - 現在abcdw007の今週中のリリースを目指してがんばり中。 -- [[K]] &new{2008-12-22 (月) 20:33:28}; |