16: 2008-12-25 (木) 15:03:11 [6] | 現: 2024-01-08 (月) 12:58:42 lina[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * ぐいぐい01に関するメモ-14 | + | TITLE:x |
+ | * ぐいぐい01に関するメモ-14 [#j68ff7f1] | ||
-(by [[K]], 2008.12.20) | -(by [[K]], 2008.12.20) | ||
-メモのうち重要な部分をそのうちまとめてまともなページを作る | -メモのうち重要な部分をそのうちまとめてまともなページを作る | ||
- | *** (29) 2008.12.20近況 | + | *** (29) 2008.12.20近況 [#e218b448] |
-ここ1週間ほどの開発がここ数年で最高に充実していてかつ面白かったので記念でメモ。 | -ここ1週間ほどの開発がここ数年で最高に充実していてかつ面白かったので記念でメモ。 | ||
-少し前からOSASK-IRCにneriさんが常駐してくれていて、それでCOM64-GREの改良の話をしました。いろいろと改良してアーカイブ風になったあと、もっとコンパクトの役に立つ仕様にしたいということで、二人でどうしたらいいかを話し合いました。長すぎるシグネチャを短くするべきか、みたいなところが出発点だったと思います。こうしてCOM64plusの開発が始まりました。シグネチャを4バイトにするべきか2バイトにするべきか、そこも悩ましいところでした。 | -少し前からOSASK-IRCにneriさんが常駐してくれていて、それでCOM64-GREの改良の話をしました。いろいろと改良してアーカイブ風になったあと、もっとコンパクトの役に立つ仕様にしたいということで、二人でどうしたらいいかを話し合いました。長すぎるシグネチャを短くするべきか、みたいなところが出発点だったと思います。こうしてCOM64plusの開発が始まりました。シグネチャを4バイトにするべきか2バイトにするべきか、そこも悩ましいところでした。 | ||
Line 12: | Line 13: | ||
-(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更新] | + | -以下にここまでの成果(多分これが限界でもあると思う)を書いておきます。[2009.01.02更新] |
- | | |hello |hello-c |chars |echo |echo-c | | + | | |hello |hello-c |chars |echo |echo-c |cpy |cpy-c |makefont-c |sjisconv-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 |RIGHT:912| |
- | |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 |RIGHT:507| |
- | |COM64plus用|RIGHT:20 |検討中? |RIGHT:''14''|RIGHT:? |RIGHT:? | | + | |abcdw008用 |RIGHT:18 |RIGHT:69 |RIGHT:14 |RIGHT:''6''|RIGHT:51 |RIGHT:''45''|RIGHT:138 |RIGHT:207 |RIGHT:395| |
- | |DOS用 |RIGHT:22 |RIGHT:? |RIGHT:17 |RIGHT:19 |RIGHT:? | | + | |abcdw009用 |RIGHT:''17''|RIGHT:''68''|RIGHT:''13''|RIGHT:''6''|RIGHT:''50''|RIGHT:''45''|RIGHT:''134''|RIGHT:''203''|RIGHT:''389''| |
+ | |COM64plus用|RIGHT:18? |検討中? |RIGHT:14 |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:? |RIGHT:?| | ||
+ | |DOS用 |RIGHT:22 |RIGHT:? |RIGHT:17 |RIGHT:19 |RIGHT:? |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までで小さいアプリをたくさん作ってきて、ボトルネックというか、「こんな仕様だったらいいのに」を実感していたのもあると思います。 | ||
Line 39: | Line 42: | ||
|abcdw007版|RIGHT:644|RIGHT:386|RIGHT:439| | |abcdw007版|RIGHT:644|RIGHT:386|RIGHT:439| | ||
|改良版 |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.27追記)コマンドライン周りの設計中(本仕様級)。以前は数ヶ月かけてもできなかったのに、今だと数日でこんなにはかどる。でも時間がないので比較的ゆっくり。ちなみに昨日のcpyのASKA版は更に見直しで45バイトになり、echoも9バイトになりました。 | ||
+ | -(12.28追記)abcdw008向けのmakefont-c(現在207バイト)をASKAで書いたら72バイトになった。やっぱりアセンブラは偉大だー。 | ||
+ | -(01.02追記)アイデアを思いついた!ので現在効果を見積もり中(abcdw009)。とりあえずバイナリ互換はなくなります。・・・アプリを丁寧に作るとそれだけ小さくなってくれるので、すごく気持ちがいいです。やりがい一杯、手ごたえ一杯。やっぱりこうでないと! | ||
+ | * こめんと欄 [#fa2e7236] | ||
- 現在abcdw007の今週中のリリースを目指してがんばり中。 -- [[K]] &new{2008-12-22 (月) 20:33:28}; | - 現在abcdw007の今週中のリリースを目指してがんばり中。 -- [[K]] &new{2008-12-22 (月) 20:33:28}; | ||
- とりあえずリリースしました。MLへは後日投稿します。 -- ''K'' &new{2008-12-24 (水) 20:10:07}; | - とりあえずリリースしました。MLへは後日投稿します。 -- ''K'' &new{2008-12-24 (水) 20:10:07}; | ||
+ | - abcdw008ができましたー。 http://osask.jp/files/ 6バイトのechoや45バイトのcpyなど、こんなので本当にちゃんと動くの?といいたくなるサイズのアプリが一杯です。MLへは後日投稿します。 -- ''K'' &new{2009-01-01 (木) 21:14:50}; | ||
+ | - abcdw009ができましたー。 http://osask.jp/files/ abcdw009があればabcdw008はいらないようになっています(というか以前のバージョンは全部なくても大丈夫)。MLへは後日投稿します。 -- ''K'' &new{2009-01-03 (土) 19:39:07}; | ||
#comment | #comment |
(This host) = http://osask.net