MainPage 〜きまぐれ ぷろぐらま語録〜
 

2024年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24
25
26 27 28 29 30

最近の記事
Blog移転

エアポート2010を見た

花椒油

Steve Jobs,1955-2011

鉄球に無数のとげが付いた武器

M55→M42(T)が欲しい

健康診断done

回転寿司のルール

相模湖リゾート・プレジャー・フ ..

過去ログ 【表示/最小化】
2011年10月
2011年 9月
2011年 8月
2011年 7月
2011年 6月
2011年 5月
2011年 4月
2011年 3月
2011年 2月
2011年 1月
2010年12月
2010年11月
2010年10月
2010年 9月
2010年 8月
2010年 7月
2010年 6月
2010年 5月
2010年 4月
2010年 3月
2010年 2月
2010年 1月
2009年12月
2009年11月
2009年10月
2009年 9月
2009年 8月
2009年 7月
2009年 6月
2009年 5月
2009年 4月
2009年 3月
2009年 2月
2009年 1月
2008年12月
2008年11月
2008年10月
2008年 9月
2008年 6月
2008年 5月
2008年 4月
2008年 3月
2008年 2月
2008年 1月
2007年12月
2007年11月
2007年10月
2007年 9月
2007年 8月
2007年 7月
2007年 6月
2007年 5月
2007年 4月
2007年 3月
2007年 2月
2007年 1月
2006年12月
2006年11月
2006年10月
2006年 9月
2006年 8月
2006年 7月
2006年 6月
2006年 5月

広告欄

 

Blogを移転させました。
新Blogは次のURLです。
https://kerokero.org/wp/




微妙な、バグも、あるんだよ
前回予告したとおり、
今回は、自分の遭遇した微妙なバグについての話。

まぁ、これは10年ほど前をはじめ、何度か遭遇したバグ。
「同じバグを何度も発生させるなんて!
 そんなの、あたしが許さない」
と石を投げられそうだけど、こればかりは、不可抗力と言いたい。

1つめの例〜C社のCPUの場合〜


それは、MMXPentiumが登場した頃。
ソフトを作る前の技術検証を行っていたとき、
当時、珍しいMMXの勉強を兼ねた検証を行っていた。

ところが、特定のパソコンでエラーが起きることに気がついた。

当時のテストしていたのは、
CPUID命令で、MMX機能の有無を確認して、
MMXが使える場合には、MMXを使うというプログラム。

ところが、そのエラーの起きる特定のパソコンでは、
CPUID命令ではMMX搭載と判定されるのに、
いざ、MMX命令を使うと「未定義の命令です」というエラーが起きるのだった。

原因は、当時有名だったIntel互換CPUメーカーのCPUで、
そのCPUの初期出荷の一部で、MMX非搭載にもかかわらず、
CPUID命令でMMX搭載と判定されるというCPU自体に問題があったのでした。

「こんなの絶対おかしいよ」と言いたい気持ちを飲み込んで、
特定のCPUでエラーが起きる場合に、
代替のプログラムを使う様にアナウンスをした。
エンドユーザーに、CPU買い換えろとか、言えないしね。


2つめの例〜V社のCPUの場合〜


時は経て、Penitum4が出始めた時代。
MMX命令の前述のバグのあるようなCPUも、
動作保証外になるほどレガシーな物になり、
それ以来、同様のバグを抱えるCPU発売されなかったので、
もう何も恐くない。・・・と、油断してたorz


ある時に作ったソフトが、
動かないというクレームが来たのだ。

このユーザー様は、ユーザーの鑑とも言える対応をしてくれて、
エラー報告と共に、エラーが起きたときの、
コアダンプファイルを送ってくれたのだ。

それは、プログラマがどうしてもバグがとれないときに、
お客様にお願いすることがある、最後に残る道しるべであり、
それを最初からもらえるというのは、プログラマへの、最高の報告方法で、
すぐに原因は特定できた。


まず、エラーは「未定義の命令です」という、
どこか昔に逢った、ような……見覚えのあるエラーだった。
そして、エラーが起きた場所を調べてみると、
PentiumProから搭載されたCMOV命令でエラーが起きていたのだ。

どうやら、Intel互換CPUであるV社のCPUは、
CPUID命令でCMOVサポートと返してくるにもかかわらず、
CMOV命令が搭載されていないようなのである。

そして、もう一つ問題があって、
自分は、CMOV命令を使った覚えがないことだ

「これって、ほんとにバグ?」とか「CMOV命令なんてあるわけない」
と思いつつ調べてみたら、コンパイラが最適化の一環として、
CPUIDでCMOV命令が使えると返してきたCPUには、
CMOV命令を勝手に使うという最適化をしてくれていたのだ。


結局、そのCPU専用に最適化レベルを下げたプログラムを、
修正プログラムとして提供することになったorz


まとめ


いずれの例も、根本の原因はハードウェアメーカーだとは思う。
でも、ハードウェアメーカーが大規模なリコールをしない限り、
プログラマは、それを仕様として受け止めて修正せざるを得ない。

エンドユーザーから見れば、誰が悪いかは関係なく、
正しく動くソフトが欲しく、
それが動かないならば、バグを含んだソフトと判断される。


また、公開した当初は、問題が無くても、
将来的に、不具合を抱えたCPUが出現するなど
未来永劫正しく動く保証は誰にも出来ない。

それを、将来にわたってメンテナンスを
しなければならないのだとしたら
個人的に便利なソフトを作っても、
フリーソフトとしては、もう誰にも公開しない。って気になります。


でも、エンジニアは
全てのバグを製品化前に消し去りたいと努力をしている事や、
それでも、どうにもならない事もあるということをゼヒ知っておいてもらえれば、
それはとっても嬉しいなって、思うのですよ。


わかる人にだけ追記:
ちょっと、無理してがんばりすぎた。今は反省している。
反省しているのは、あと1話分入れられなかったことorz
00:38, Wednesday, Jun 01, 2011 ¦ 固定リンク ¦ 携帯


■コメント

■コメントを書く

※コメントの受け付けは終了しました

△ページのトップへ
 

最新のつぶやき

サイト内検索
カスタム検索

旅行関係の記事等
九州・広島旅行記 2009(かみちゅ!)
大阪出張(KANON)
大阪出張(ハルヒ)
三宅島旅行記'05
三宅島旅行記'08
三宅島旅行記'10
伊豆半島小旅行

最近のコメント

最近のトラックバック

IPv4枯渇時計

携帯で読む
   URLを携帯に送る





[Valid RSS]

Powered by CGI RESCUE