ビタミン足んねぇー

abdev 16 Comments »

ハァ〜、今日も色々なことが立て続けに起きる日でした。詳細をここでお話できないのが残念ですが、深夜、福井ちゃんとファミレスへ集合したり、明日はバイト最終日でしんみりしたりと、なんやかんやで、結局よぅわからんです。

ともかく。寝ます(いつもこうやってブログを書き終わるのよ。。。そんなに眠かぁないんだけど…)

早寝したのに、へんな早起きをしちまいます

abdev 40 Comments »

昨日は(株)びぎねっとさんのところへ今後の開発についてのアドバイスを貰いにいったんです。64コンパイラの開発や周辺ツールの開発などの話はもちろん、今後においてとても重要になるだろうと予想される事柄についてもアドバイスをいただきました(皆さんにも後日、お話します・・・)。

うーん、まだまだおいらは勉強不足であり、考察すらできていない状況なんで、もっとがんばります。(株)びぎねっとの皆さん、昨日はおいしい昼食とプリン、ご馳走様でしたm(__)m

ところで、今朝方3時ころまで、いつもように作業をやったるぞぃ〜と思っていたのですが、珍しいこともあるもんです。PM10時ころにめっちゃくちゃ眠くなってしまったんです。こういう日はあまりないんで、もう流れに任せて、早寝してやらぁ〜って感じで、布団に入ったら、コロッといきましたよ。ホント、珍しい。

しかし、これでめでたしめでたしではないんです。そう、問題は起床時間。お世辞にも、早朝とは呼べない時間帯、AM2:40分に覚醒しました。はい。

おいらの体よ、早寝を要求してくるのは良いのだが(大歓迎)、寝たからには、最後まで寝ようよ・・・・・

おいらは別にナルでもないんで、こんなセリフはブログを書いているときに思いついたんで、この時点のおいらは「ああ、こんな時間なのに起きちゃった。。。どうしよ」くらいの感覚です。

選択肢は以下の三つ

  1. このまま寝る。むりやり寝る
  2. パソコンつけて、作業する
  3. 富士山5合目行って、ご来光を眺める

もう、この選択肢が出た時点で答えは決まりです。寒くないよう、重装備をして車へと向かいます。事前に誰か誘っとけばよかったんですが、この時間からはさすがに厳しいモノがあります・・・(涙)。

K-MIX(東京FMの静岡版)ではボカスカジャンが下ネタを言いまくっておりました。なんか、この時間帯とマッチしていて良い感じです。

途中、セブンによってホットレモンを買います。

あとは、ひたすら5合目を目指して、ドライブするだけ。途中、数台の車とすれ違いますが、ほとんどおいら一人です。富士山を独占してしまったかのような感覚を覚えます。

おいらんちから、5合目までは意外と早く着くんです。自宅からの所要時間は、50分といったところでしょうか。AM4:30には山頂にいました。

それから一時間ちょっと、星を見ながら(ヤバいです)小休憩。天気予報では明け方から曇×雨みたいなことを書いてあったんで心配でしたが、空模様は良好でした。星が良く見えます。小休憩をはじめてから5分後には流れ星が見えるくらいの勢いです。下界の様子も良く見えます。白くかかっているのは、雲というより、キリですね。

夜景

ちょっと明るくなりつつある感

キリ

いつ見ても神秘的であります。こんなところへ、しかもおもいつきでこれるおいらはマジで幸せ者だと思います。

明るくなってからは行動早いです。中途半端にしか寝ていないおいらは、もうPM5:30の段階で眠くなってきているので、朝日を見て、そそくさと帰りました。

で、結局、昼ごろまで寝てました(結局それかよ

USB×ABの本が出ました

abdev 2 Comments »

8月ころ、もう2ヶ月も前の話ですが、RBB PRESSの担当者さんから、ABを使った参考書書くんで、よろしく〜みたいなメールが送られてきたんです。

おいらは、最後のほうのページにでも、ABがポツンと紹介されるのかなと思い、二つ返事でOKしたんですね。

その本が、忘れたころ(昨日)ウチに送られてきたんです。そう、本家サイトでも紹介させていただいておる、「手作りUSB機器」です。

RBB PRESS:

http://www.rbbtoday.com/enterprise/

そいつを開く前までは、あ〜ハードウェア関係の本ね。おいらにはあんまし関係なさそうだ…なんて思ったのですが、いざ開いてみると、なにやら面白そうな内容と共に、ABを前面に出したプログラミングの解説までしていただいているではありませんか。

☆こーりゃ大変なことだ☆と思い、本家のほうでも紹介させていただいたのですが、帯にある「よーし、なんか作ってみるか。ひまだからな。」というのがなんとも印象的。やる気が出るんだか、出ないんだか、よぅわかりませんが、内容と雰囲気が良い意味でマッチしております。こういう本を読んでいただいて、「ペットセンサー」や「回し車カウンタ」など、とっても便利なUSB機器がバシバシ生まれれば、もっと楽しいPCライフが送れそうですf(^w^)

え!?「ペットセンサー」「回し車カウンタ」って何かって?それは読んでからのお楽しみですよ!

もし、著者の永島さんがこのブログを見られていたら、感謝とエールを送りたいです。今後とも、よろしくお願いいたしますm(__)m

16バイトの境界

abdev 1 Comment »

いゃ〜、昨日は早寝の予定だったのですが、とある一つの問題で、明け方3時過ぎまで作業をしてしまいました(汗)。

64コンパイラ試作版でMessageBox関数を呼び出すテストをしていたのですが、それが成功するときもあれば、失敗してしまうこともあるんです。どう失敗するのか、具体的に申しますと、MessageBox関数の内部処理のmovdqa命令の部分で停止しているんです。

movdqa oword ptr[rsp+0x160]

どうしてもここで停止してしまうんです。rsp+0x160が指し示すアドレス空間は、もちろん、違反になるような領域ではなく、任意で確保された新しいスタックフレームの領域なんです。

おいらはこの原因を、rspの値がおかしくなっていて、アクセス違反が起きたものだと早合点してしまい、数時間を無駄に過ごしてしまったというわけなのですが、ことの真相はそうではありませんでした。

owordってご存知ですか?皆さん。そう、それは128ビットを示す単語なんです。

  • word … 16ビット(単なるWord)
  • dword … 32ビット(Double Word)
  • qword … 64ビット(Quad Word)
  • oword … 128ビット(Octet Word)

明らかにrsp+0x160が指し示すアドレスが違反になるようなものでなかっため、天下のMS様が作られたVCに同じコードを吐かせたんです。

なーんだ、ABと同じコード吐いてるジャン。なんでエラーになんないのよ。

っと何度も問題となるコードを実行させていたら、とあることに気づいたんです。

それは、”movdqa oword ptr[rsp+0x160]” が実行されるとき、rspは必ず0x10で割り切れる数値になっておるんですね。oword ptrというくらいなのだから、128ビット境界(16バイト境界)にしなくちゃぁならんのでは・・・・・!?

案の定、おいらの勘は当たっていたようで、スタックフレームの確保部分で、rspを0x10で割り切れるように設定したら、この問題はすんなりと解決できたというわけです。

この問題のせいで、今日のおいらは寝不足でちょっと元気がなかったんす。

まぁ、こういう問題を色々とクリアしながら、おおよそのコードをコンパイルできるようになってきました。あとは、デバッガやライブラリを対応することですな。

64コンパイラの製作で培った技術は32コンパイラのそれを大幅に超えるため、様々なテクニックを用いて32コンパイラの改良ができそうです。

明日は(株)びぎねっとさんと今後の開発について打ち合わせ。ホットウーロンでも入れて、最終作業をがんばりやす!

形成が進む、64コンパイラ

abdev 19 Comments »

色々な問題を解消していくうちに、なんとか簡単なコードをコンパイルできるようになってきました。この調子でいけば、一ヵ月後には確実にβリリースができそうです。タイトルは、う〜ん、

ActiveBasic Ver5.0β1

って、そのままやん/(–)/ しかし、ちょっとまってくだはれ・・・・・

AB5では、言語仕様やエディタの改定、周辺ツールやライブラリの充実を行いたいので、まだその名を付けるには早すぎる感じがします。

ということで、

AB4 x64 Compilerβ

などというネーミングで行こうかと思ってます。64コンパイラの開発作業が進んでも、ひとつだけ、忘れてはいけないことが。それは、ユーザー様方の64PC保有率です。いくらこちら側の作業が早くすすんでも、いいモノが出来上がったとしても、それを使ってくれる人、試してくれる人がいなければお話にならないです。

βリリースの前後に、64PCの保有率、今後のABの方針についてのアンケートでもとろうかと考えておるところです。そのときは、どうか、ご協力くださいませm(__)m

ヨン様ジーンズ!?

apparel ヨン様ジーンズ!? はコメントを受け付けていません

いつもどおりにフロアでウロチョロしていると、女の子スタッフ、ハラちゃんがおいらのところへ来ます。

ハラちゃん「やまちゃ〜ん、あちらのお客様のジーンズ選んであげてくれない?」

おいら「OK〜まかせとけぃ」

お客というのは、おばちゃんとおじちゃん。おじちゃんのほうは、ちょっとデップリとしています。

おいら「今日はどんな感じでお探しですか?」

おじさん「・・・・・ウーン」

おじさん「ペ・ヨンジュンが穿いてるやつってどれ???」

おいら「・・・・・ってーと・・・・・」

おじさん「ほら、よく穿いてるじゃん。ストレートで、ゆったりめのやつ」

おいら(んーなんわかるわけゃねーだろ!ヨン様効果ってのは、おっさんにも影響するもんなのか)

おいら「ゆったりめでしたら、エドウィンの503z辺りがいいと思いますよ。色はどんな感じがよろしいでしょうか?」

おじさん「そーそー、こういうのだよ。おにいちゃん、わかってるじゃないの」

おいら(なんだ、コレでいいのか。ちょっと拍子抜け)

っとまぁ、こんな感じで接客は続き、結局はスタンダードジーンズを買っていってくれたあのお客。今日もどこかで冬ソナの再放送でも見ているんでしょうか。

話はそれますが、今日は、店の売り上げがキリが良くない数字で閉店したんです。あと2万円でキリが良かったのに…。と、バイトのおいらには何ら関係のない話。売り上げ金額のキリの悪さなんてのは、ハッキリ言ってどーでもいいんすよ。バイト代さえ貰えれば。

しかし、そのことで一人ヤキヤキしている人物が一人。店長です。

店長「やまちゃぁーん」

おいら「はーい」

店長「ちょっとさぁー、今日の金額、キリ悪いんだよねー。あと2万円で売り上げ○○まで取れるからさー」

おいら「・・・・・」

店長「なんか買ってってちょ」

おいら「はぁー?マジっすかぁ」

閉店間際、レジ締め直前に頼んでくるんですよ。直訳すると、あと2〜3分で1万円以上の気に入った商品を選んで、購入しろよってことになるんですが、こういうことは早めに言ってほしいっすな。商品整理もまだろくにできていない店内で、すぐになんて気に入った商品は選べません。

とは言いましても、約一名、どうでもいいキリの良さで悩まれておられる人がいるので、ここはひとつ、ちょっと気になっていたアディダスのジャージでも買ってやりますかぃ。と・・・・・考えてみれば久々のトップス購入になりました。

それにしても、アディダスの商品はスポーツブランドの王様だけあって、質感がいいっす。なんだかんだ、買ってよかったかも。

秋物一色

abdev 1 Comment »

午前1時。やっと、バイトから帰宅です。ひぇー

今日は遅番、明日は早番。

オソ・ハヤに挟まれた夜ってのは、強制的に早寝をしないとマズいことになります。なんか書きたいのですが、今夜はとにかく、、、

寝ます!!!

賢いスタックフレーム

abdev 7 Comments »

64コンパイラは、ネイティブコードを構成する各オペコードをAMD64の規格へと変更しながら作られていくのですが、x86の機械語をAMD64の機械語にただ単に挿げ替えればいいということではありません。

先日、話題に出したように、レジスタは16個に増えるし、実数演算はSSE2を使うようにしなきゃならないですし、、、そんでもって本日の議題となるのですが、スタックフレームの扱い方についても、大きな変更点が生じるのです。

現状のABコンパイラ(Ver4.0 – 32ビット版)は、「最適化」という側面においては頭の悪い子だということはご承知のとおりですね。pushとpopしかしらないような、おこちゃまです。x86が持っている汎用レジスタはeax,ecx,edx,ebx,esp,ebp,esi,ebiの8本。esp,ebpはスタックフレームの制御に使ってるんで、実質上、項として扱えるレジスタはそれ以外の6本ということになります。うーん、これじゃ、ちょっと複雑な計算をコンパイルさせると、すぐに頭打ちしちゃいますな。

レジスタ数が足りないと、その足りない分をメモリで補うのがコンパイラのお約束です(っつか、そうしないと物理的に演算ができないんです)。

具体的に言うと、足りない分の値をpushし、スタックへと退避させることで演算中の値を保持します。そして、うまい具合に退避した値をレジスタに取り出しつつ、すべての演算をこなすというわけなんですね。

AMD64だって、レジスタ数は増えましたが、やはり複雑な演算式をコンパイラに通すと、たちまちレジスタは足りなくなります。となると、AMD64にアップグレードさせたところで、退避率は減っても、完全解消することはできないんです(完全解消させるとなると、.NETのCLRの話とかになっちゃうんでやめておきます)。

まぁ、CPUがどんなにたくさんのレジスタを積もうとも、理論的に限界が生じることは確かなようです。少なくとも、汎用レジスタが16本とかいっているウチは限界みえみえです。どっちにしても、スタックフレームにはお世話になるわけです。pushとpopには甘えなくちゃならんのです。

しかぁーし(`△´)、この工程、ちょっとだけ疑って考えてみましょう。

pushをするっつーことは、それだけで下記の通り、二つの動作をCPUにさせるということになります。※ここでは、AMD64の規格を例にお話します

  1. レジスタの値をrspが示すメモリにコピー
  2. rspに8を加算

「メモリに退避」を行うことが目的なんで、1番目の「レジスタの値をスタックポインタが示すメモリにコピー」はいいんですよ。しかしですよ、2番目のスタックポインタへの加算行為が許しがたい行為なんですよ。「退避」が目的なんで、アクセスの対象となるのはレジスタとメモリだけというのが理想的なんですが、それと同時にrspも書き換えられてしまうんですよね。

※誤解を招くといけないんで、断っておきます。pushに必要なクロックサイクルは1です。キャッシュミスなどの状況によって増えることがあるのかわからないっすけど、おおよそケースにおいて、pushは最小タイムで完了します。

rspが変動的であると、rspをベース値にしたオフセットを自由に扱えなくなる恐れがでてきます。AB4コンパイラでは、区間内でespが変動的なので、ebpをスタックフレームのベース値(ローカル変数フレームのベース値)として採用することで、この問題を回避しています。

ここから、x64の規格のお話に突入していきます。

もしも、もしもです。区間内で必要なスタックフレームのサイズがわかったとしたら、どのような利点が生まれるのでしょうか。ちなみに、ここで言う区間とは、ひとつの関数だと考えてもらって結構です。

スタックフレームのサイズがあらかじめわかっていれば、その区間の始めと終わりに下記のような命令を入れてしまえば、rspを変動させずに済みます。

sub rsp,(スタックフレームサイズ)

...処理

add rsp,(スタックフレームサイズ)
ret

区間内ではあらかじめフリーなスタックフレーム領域が確保されるので、いちいち、rspを変化させてしまうようなpush/popを使わなくてもよいことになります。

push/popの代わりに何を使うかというと、そいつはズバリ、mov命令なんです。rspをベース値にしてスタックフレーム内のオフセット値を指定してやればいいんですよ。

push rax   ;退避
...処理
pop rax   ;復元

raxを保持したい場合には上記のような書き方をしていましたが、今後は下記のようなrspが変化しない書き方に変わります。

mov qword ptr[rsp+オフセット], rax   ;退避
...処理
mov rax, qword ptr[rsp+オフセット]   ;復元

この話は、演算中に不足したレジスタ値を退避するだけにとどまりません。実は、関数の呼び出し規約に深くかかわってくるのです。

x86の環境では、標準の呼び出し規約(_cdeclや_stdcall)はパラメータの引渡しをすべてpushしていましたが、AMD64の環境では、第4パラメータまでは汎用レジスタ、以降のパラメータはスタックフレームにmovすることで実現しているんです。新しい呼び出し規約にスムーズに対応するためには、スタックフレームの先立った確保は必須になります。

なんだかんだで、こういう部分のケアが64コンパイラの製作では必要だってことです。アーキテクチャが変わると、根底から覆されてしまいますな。今回は、x86→AMD64という、互換性がかなり重視された環境化での移行作業ですが、もし仮にまったく別物のCPUに対応させようともなると、考えるだけで恐ろしいものがあります。

Itaniumあたりにはお願いしたいところです。おこちゃまにもわかりやすいアーキテクチャであってくれと・・・・・

さてさて、自分で読み返すのが大変になってきたんで、今日はここらでやめときます。

ともかく、AMD64の新規格に対抗しながらのAB5×64コンパイラは、最適化の問題を最低限クリアしたものになりそうなことは確かなようです。この技術、追々は32コンパイラでも生かしたいものです。

共同作業、どうやって実現させよう…

abdev 2 Comments »

最近、どうしても解決できない悩みに直面しているんです。それは、言語仕様設計に関することでも、64ビットネイティブコードに関することでもありません。

そう、それは、作業量。

どんなに賢く、どんなに努力して時間を有効活用して開発に取り組んでも、おいらが一日辺り、入力できるコードの量には上限があります。ABはその規模からすると、冗談でも一人で作るような代物ではありません。ソースコードを見返すと、今まで無事にやってこれた自分が不思議でしょうがないのですが、今後はこの不思議な現実に甘えていてはダメです。というか、おいらの役不足が原因でABは廃れることでしょう。

それじゃ、オープンソース化しちゃえばいいじゃん。ライセンスとか取り決めてさ、誰もが自由に改良できて、素晴らしい環境に皆で仕立てていけばいいじゃないのよ!

それはもっとも筋が通った、最近の流行をも意識させるご意見ではあるんですが・・・・・

おいらはそこまで人間ができていないので、どうしてもそこへ踏み込むつもりになれません。個人で作ったにしちゃぁ、でかいソフトかもしれません。しかし、実際の市場へリリースしていこうとなると、こんなのは吹けばなくなるようなチッポケなものです。そこを打破するには、おいら一人じゃ無理なことはわかってるんです。わかってるんですが・・・・・

こうやってですね、このオープンソース化計画は闇に消えていくんですよ。翌日はケロッとしながら64コンパイラの製作に精を出してしまい、そんなこと忘れてしまったりするんです。

皆さんご承知かと思いますが、おいらは貪欲です。ユーザー様、お客様が喜ぶソフトウェアを世に送り出したい気持ちは人一倍持っておるつもりではありますが、皆さんが思うほどお人よしではないんです。

まぁね、悩んでいてもはじまらないですからね。自分、協力者、ユーザー様方にとって一番良い方法は必ずあるはずです。おいらはそいつを早いうちに見つけなければなりません。それは必ずしもオープンソース化とは思っていませんが、もしかしたらそれに近いものがあるのかもしれませんな。

今の段階で、おいらが描く具体例を提示してしまってよいものかどうか、いささか疑問ではありますが、ここは雑談ブログ。あること無いこと、書いてきます。

〜理想像〜

ユーザー会なるものを発足し、信頼のおける、やる気のある協力者を集め、その内部でのみ、ソースコードの開示、改良を行っていきます。外部に対してオープンソースを行うわけではないので、ユーザー会でやり取りするソースコードの利用規約はちょっと厳しいです。っつか、これは “オープンソース” とは言わず、”仲間を増やす行為” なだけですね(^^;;;

・改良部分の著作権は改良者が有する

・ABそのものの著作権はおいらが有する

・バイナリコード・ソースコードの二次配布は禁止

・ユーザー会への入会・脱会はおいらの独断で決まる

実際の作業は、VSSやCVSなどを使ってバージョン管理と作業の排他制御を行いながらやればいいんでしょうか。専用のMLも用意する必要がありますな。複数人数での作業をしたことがないんで、これをやるとなると・・・・・まだ自身ないっす。

しかも、ABを構成しているソースコードはお世辞にもキレイにものではありません。他人が見て理解できるものかどうか…これが一番ネックになりそうかな〜。

ともかく、オープンソースに関する知識は無いに等しい状態なんです。勉強を重ねて、自分の意見をより明確にしていかなければならないです。

絶妙タイミング炸裂

abdev 絶妙タイミング炸裂 はコメントを受け付けていません

行って参りました、内定式!AM10:30集合だったんで、結構早起きです。

まず、一つ目のドッキリは朝っぱらから。

数日前、大学の友人、ごっつぁんがおいらんちに車を置かしてほしいといってきたんで、二つ返事でOKしたんですね(おいらんちは新富士駅の近くなんで…)。その日にあたるのが今日で、もちろん、行き先までは聞いていなかったんです。おいらが朝起きた直後、玄関のベルが鳴ります。

こんな早くからだれだぁ〜、と思ったら、ごっつぁんでした。しかも、スーツ姿。

・・・・・もしや!!!

おいら「今日はなんだい、内定先の会社にでも行く日なの?」

ごっつぁん「そうだけど。今日一日車置かしてよ」

おいら「まさか、新幹線で東京行ったりする?」

ごっつぁん「そうだよ。新幹線は8:18発のだよ」

おいら「マジ!?オレもその新幹線のるから、10分まっとって」

こんな感じでですね、一人でムッスリと乗るはずだった新幹線にはごっつぁんと乗ることになったんですよね。もしかして、今日はついている日なんかと思いながら内定式の会場へ着いた瞬間・・・・・

な〜んかですね、見慣れた顔がそこにはあるんですよね。。。。。

おいらはそいつに気づき、そいつもおいらに気づき、数秒間、互いに「え、オメェなにやっとんよ!?」という状態だったんです。

そいつの正体は高校時代の同級生のナガサワ。

まさかですねね、この就職戦線でですね、内定先の会社で高校時代の友達に会うとはですね、思うわけがないんですね。着慣れないスーツを着てまでして内定式へ着たにもかかわらず、受付の段階で気が抜けたおいらたち…。二つ目のドッキリはこんな形でおいらを楽しませます。

結局、内定式の中核をなす内定書授与なんてのは10分ちょいで終わってしまい、あとは和気藹々とした時間をすごします。懇親会で仲良くなったやつらとも話しをし、ランドマークタワーの最上階を散歩したりと、おれたちゃぁ何しにきたんよ、とお堅い雰囲気を忘れさせてくれるような会社さんには感謝感謝です。

後は入社前教育についての説明を受け、帰路へと着いたおいらなんですが、まだ本日最終、三つ目のドッキリが残ってるんですよ。

新幹線の中で寝いていると、ケータイが鳴ります。だれだぁ〜と思いながら画面を見ると「カトー」の表示が!そう、おいらの師匠である司法人カトーさんです。

すかさずデッキへと出て電話をかけなおします。電話の向こうでは、なにやら聞きなれた音声案内が流れています。

電話の向こう 〜○×番線に電車が参ります。黄色い線の内側に下がって・・・・・

カトーさん「山ちゃん、今日はバイトなの?」

おいら「今日は内定式で、今帰ってるところなんです。新幹線の中からですよ〜」

カトーさん「マジ!?オレ、今静岡駅であと10分くらいで新富士まで着くんだけど」

おいら「ってそれじゃ、改札で会っちゃうんじゃないっすか?こっちもあと10分くらいで新富士ですよ」

そう。今日の締めくくりは、帰りの電車です。おいらは下り線、カトーさんは上り線で新富士を目指しているんです。しかも、到着時刻はほぼ同時。おいら乗ってる新幹線が駅に着くと、反対車線にはすでに電車が止まっとりました。

すたこらと改札へ向かうと、そこにはカトーさんの姿が。なんでしょうね、この絶妙なタイミングは。まぁ、この後は2時間ほどいつもの調子でくっちゃべりながら、一日が終了したというワケです。

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン