一歩賢いインデント

OverTakerさんのブログでインデントについての面白い記事を読ませてもらいました。


OverTakerの日記:
http://d.hatena.ne.jp/OverTaker/20060918


ウーム、ただ単にTABインデントをしやすくするのではなく、コードの意味に応じて見やすい形式にインデントを整えてしまうとはアッパレです。ABのWithステートメントでも "=" を境目に同様のインデント機能を付けたら…という意見がありましたが、これは好き嫌いがありそうですね〜。こういう機能って、もしかしたらあまり利用頻度のない(少なくとも私は)Withだけに限定させてしまうのももったいない話なのかもしれませんね。


話は多少変わりまして、ちょっと発案しているインデント機能があります。それはソースコードの一部をペーストした際に、自動的に最適なインデントに整形されたソースコードが貼り付けられるというものです(C#のエディタにはこのような機能が付いているようです)。例えば、下記のようなソースコードがあったとします。


Print "test"
Print "test2"


これを下の部分に貼り付けると、、、


Sub foo()
'ココに貼り付ける
End Sub

Sub foo()
Print "test"
Print "test2"
End Sub


まぁ、こういうことになるわけですが、2つのPrint文は誰がどー見てもインデントを入れて欲しいわけです。こんな些細な問題にも対応できるだけのインデント機能、せっかく思い立ったんで次回のバージョンアップ時には対応させたいと思います。

少々厄介なオーバーロードバグ

とあるユーザー様から、下記のようなコードがうまくコンパイルできないというバグ報告をいただきました。


function func(n As double) as String
print "double";n
endfunction

function func(n As dword) as String
print "dword";n
endfunction

func(123) 'オーバーロードを解決できません
func(1.23) 'オーバーロードを解決できません


一見すると、エラーなどはでないハズなのですが、AB5β5で試すと確かにエラーがでます。


最適化中...
コンパイル中...
test5.bas(11) - "func" オーバーロードを解決できません
test5.bas(12) - "func" オーバーロードを解決できません

                                                                                                        • -

コンパイルは中断されました(エラー:2、警告:0)。


色々と調べた結果、実体オブジェクトを戻り値にしていることが引き金となって生じるバグでした。このバグの原理はこうです。


実体オブジェクトを戻り値に持つ場合は、隠れ第一パラメータ(クラスメソッドのときは第二)というものが存在し、そこには戻り値を格納するためのオブジェクトポインタを保有することになっています。オーバーロード解決時に実体オブジェクトの戻り値が隠れパラメータとして存在してしまうと、今回のような不具合を生じさせてしまうということなのです。


下記は現在の間違った手順でオーバーロードが解決される流れです。

  1. 戻り値の実態オブジェクトを隠れパラメータとして考慮
  2. オーバーロードを解決
  3. 呼び出し


呼び出し側はまさか戻り値用の隠れパラメータが考慮された上でオーバーロードが解決されるなどとは知る由もないので、この手順を下記のように修正します。

  1. オーバーロードを解決
  2. 戻り値の実態オブジェクトを隠れパラメータとして考慮
  3. 呼び出し


隠れパラメータは呼び出し直前に考慮しろってことですね。隠れパラメータがあるパラメータリスト、ないパラメータリストの2つを管理するのが面倒という発想でコード設計をしてしまったのがいけなかったのかもしれません。原因も明確になりましたし、次回のバージョンアップでキッチリと修正しようと思います。

GCの一般公開へ向けて

本日はmark&sweepの手法で実現されるであろう次期ABのGCについてのコーディングを行いました。特に手を加えた部分はスウィープ(メモリ収集)のタイミング。使用メモリが上限値に達するまでは全速力でプログラムが実行されるため、GCが発動しないうちは従来のmalloc/freeを用いたプログラムと同等の処理速度を実現できました。

あとは、GCが発動したときの付加をどのように処理するかという問題と、従来メモリ管理との併用による規制の定義をきちんと行うことです。この点は、プレビュー版をリリースし、皆様のフィードバックを待ちながらコツコツやりたいですね。

新しいヘルプセンターの構想

AB5ではワンランク上のヘルプセンターを用意していきたいと思います。単にHTMLベースのコンテンツを提供するのではなく、コンテンツデータをXMLデータベースとして管理し、リッチクライアント的な一つのアプリケーションとして用意できたらと考えています。


実現化に伴い、まず重要視しておきたいところがユーザーインターフェイスや検索サービスの充実です。


・Webアプリケーションとしての仕組みを考えること
・オフライン環境でも十分に活用できる仕組みを考えること


今は上記の2点を考慮しながら、構想を膨らませているところ。できれば、ブログ的な要素(コメントやトラックバック)、コミュニティとの連動がデータレベルで可能にできれば最高です。あとは、せっかくここまでの機能を盛り込むのであれば、汎用化ができれば文句の付けどころがありませんね。夢は膨らみます。

偉大な先輩の送別会

dai_optimistic2006-09-14

元バイト先でお世話になったジョニー先輩がついに転勤になりました(昇格ってことで、めでたい出来事です)。


服屋はもう10ヶ月前にやめていたのですが、これは私も知らんぷりはできないっ。ということでジョニー先輩の好物である芋焼酎を片手に送別会に参加してきました。


それにしてもこの飲み会、今までやった中で一番の盛り上がりを見せました。会の中盤で県外へ転勤になってしまった元店長(ジョニー先輩とかなり仲良い)がスペシャルゲストで登場し、会場は大盛り上がり。毎回のことながら、演出すごすぎ。。。


写真は二次会の様子なのですが、ライブ会場と化しています。


こんな場に参加できる自分は本当に幸せだと感じた日でした。この連中とは長い付き合いになりそうです。


この会は明け方の四時まで続いたので、今日はちょっとテンションが低めですf(--;;;

Virtual PCでWebサーバー

dai_optimistic2006-09-13

ソフトウェアの動作検証にしか利用していないVirtual PC。何か面白いことできないかな〜ということで、ちょっといつもとは違った方向でアプローチをかけてみます。


先日ダウンロードしたFedora Core 5をVirtual PC上の仮想マシンにインストールし、そこでWWW/FTPサーバーでも立ててみることにしました。ウチのネット環境は最新設備ではないので本格的に何かをすることはできませんが、将来的に様々なサーバーサービスを自宅に待機させ、いつでも利用できる環境を構築しておきたいな〜なんて考えています。ま、最終的にメンテが面倒になって「レンタルが一番だ!」とか言わなきゃいいのですが・・・


それにしても、Virtual PCを用いたネットワーク構築はかなりお手軽で驚きました。パケットの流れがホストOS→ゲストOSという風にながれ、IPアドレスの振り分けも複雑になるものだとばかり思っていたんです。しかしその考えは間違っていて、仮想マシン一つ一つにローカルIPが振り分けられると同時に、ハード的に全く別物としてネットワーク上に存在させられることが判明。特別必要になる設定などはありませんでした。


もともと、Virtual PC窓の杜の64ビットソフトウェアコンテストの賞品でいただいたのですが、かなりの頻度で活用させてもらっています。ありがたいものです。


っつか、Virtual PCって無償化の方向でコトが進んでいるのですねf(--;;;

こいつの正体って一体!?

dai_optimistic2006-09-12

ネットサーフィンしていると、時々右のようなペラッとめくれるようなイメージがでてきます。中には "Special Offer" とか書いてあります。


クリックすると海外の出会い系のようなサイトに繋がるようなのですが、これが全く関係のないサイト(明らかにHTMLコード中に含まれていない)で表示されるので困りものです。


IE側、はたまたサーバー側の問題なのか・・・


情報求む・・・