(解決)バグフィックスと機能追加を同時にすること

7.0.1で修正済み。

Mathematica 7.0の新機能の一つであるDeleteDuplicatesにはバグがあり、次のような簡単なコードで確認できます。

While[True, DeleteDuplicates@{1, 1}]

実行すると、Mathematicaのメモリ使用量がどんどん増大し、短時間でプログラムがクラッシュします。メモリリークがあるようです。

重複を取り除いて並び替えるUnionは大丈夫ですが、並び替えてはいけない場合もあるので、代用することはできません。

Mathematicaのドキュメントに次のような代案がありますが、Unionより遅いという欠点があります。

unsortedUnion[x_] := Reap[Sow[1, x], _, #1 &][[2]]

苦心して見つけたバグを報告したら、「新しいバージョンでは直ってるからそれを買ってね」と言われた学生の頃の苦い経験を思い出します。

今は、Premier Serviceに登録しているので、最新版が出たら無料でアップデートできます(学生版2本買うよりも高いのですが)。実際、最近出た7.0.1で試してみると、このバグはちゃんと修正されていることが確認できました。

学生のことを思うと、自由でないソフトウェアで、バグフィックスと機能追加を同時にするのはやめてほしいものです。