これにより、企業への作品提出にOSごと送りつけるという、面白いことができるわけだ(迷惑かな?)。
ただ、VC++とG++の違いを意識しなくてはならなくなった。具体的にはインラインアセンブラの構文や一部の関数が異なり、現時点では_MSC_VERマクロの有無で切り分けるようにしている。
float Vec::length() const
{
float len = x*x+y*y+z*z;
#ifdef _MSC_VER
__asm
{
fld len
fsqrt
fstp len
}
#else
len = sqrt(len);
#endif
return len;
}
速度重視のため、アセンブラ部分はかなりの部分をベタ書きのハードコーディングにしていたが、インライン関数に置き換えるなどしないとメンテしづらいことがわかった。wxWidgetsはソースコードレベルでの互換性を保障しているわけだが、実際には結構な部分に手を加えなければならなかった。今後は、移植を前提とした書き方に慣れる必要があるだろう。
C#やJavaなどのVM上で動く言語が主流になるのも頷ける。

0 件のコメント:
コメントを投稿