技術情報
俺様デシリアライザを作ろうとして困ったこと
クラスjava.io.ObjectInputStreamはどうやって実現されているんだ?
俺様デシリアライザを作るにはクラスjava.io.ObjectInputStreamをカスタマイズする必要があります。クラスjava.io.ObjectInputStreamの振る舞いを変えるには完全に再実装するしかありません(そのように無理やり制限されています)。ということは、俺様デシリアライザでクラスjava.io.ObjectInputStreamと同じような振る舞いを実現しなければいけないことになります。そこで、いろいろ考えたところ問題にぶち当たりました。
技術情報
How to get the more specific return type of a overridden method?
Javaのgenericsはある型Xの型引数へより具体的な型を代入して得られる全ての部分型Yを実行時に同一視する。つまり、全てのYのための実行時型がXになるのだ。このような実現方法をとると、実行時に各Yを区別できないという欠点はあるが、genericsを導入する前と互換性を保てるという利点がある。これがJavaのgenericsの妥協点である。この妥協点のおかげで、型引数に代入された型の情報が得られないため、リフレクション使いとしては歯がゆい思いをすることになる。
(さらに…)
技術情報
やっちゃたよ俺様JavaVM
ある日、非常に控えめのOS上で動くプログラムをC++で作って欲しいと頼まれました。C++はいろいろと面倒なのであまりできれば使いたくありません。そこで、だめもとで交渉したところ「リアルタイム性が保証できるんだったらJavaでもいいですよ」ということだったので、俺様JavaVM(Virtual Machine)を作ることにしました。そういう訳で、たまに俺様JavaVMの状況を報告します。
技術情報
C言語のマクロで関数型オブジェクト指向プログラミング
最近、久しぶりにC言語を使った。
数百個くらいある良く似た関数を宣言するのに、C++言語のテンプレートを使ってはいけないという状況に遭遇したのでマクロで挑んでみた。
そのときに使った技を紹介する。