回答:
TeXの計画された寿命が頭に浮かびます:
「1977年に始まって以来、私が着手したTeXの研究プロジェクトは、2つの大きな目標によって推進されました。最初の目標は品質でした。単に素晴らしいだけでなく、実際には最高のドキュメントを作成したかったのです。(…)2番目の主要な目標はアーカイブでした。印刷技術の変化に可能な限り依存しないシステムを作成することです。次世代の印刷デバイスが登場したとき、私はすべての問題を新たに解決する代わりに、すでに達成された同じ品質を維持できるようにしたかったのです。私は100年後にも使えるものを設計したかったのです。」–ドナルドE.クヌース:デジタルタイポグラフィ、p。559(http://de.wikipedia.org/wiki/TeXから引用)
デジタルタイポグラフィに関するKnuthの本に基づいて、TeXとMETAFONTの完全な再実装さえ可能になるはずです。すべてのコードの注釈と説明が含まれています。
結果が何十年も安定していることを要求することで、一種の凍結のジレンマに陥ります。一方で、結果を100%簡単に再現したいので、ソフトウェア/環境をフリーズします。一方、将来あなたの結果を再現することに興味がある人は、確かにそれを基にしたいと思うでしょう。この人は非常に古いソフトウェアにこだわるので、何かを変更するのは非常に困難です。いくつかの外部パッケージに基づいて構築されるものについては、実際には変更できないようにするために、すでに数年で十分です。
TeXの場合、凍結は1990年の記事で発表されています
TEXとMETAFONTの未来 http://www.ntg.nl/maps/05/34.pdf
「複雑なシステムを改善することは公理的ではありますが、不変のシステムには大きな価値があると強く信じています。したがって、TEXおよびMETAFONTと呼ばれるシステムをさらに「改善」することは賢明ではないと考えます。固定ポイントとしてのシステム。これは、現在生産している100年後と同じ結果をもたらすはずです。」
理想的なシステムは、再現性と可変性を兼ね備えています。可能な限り自己完結型で、シンプルで、十分にテストされているようにすることは、確かに役立ちます。
元の質問からあまりにも嫌悪感を感じていた場合はご容赦ください。[「Scientists for Reproducible Research」reproducible-research@googlegroups.comからクロス投稿]
計算結果の正確なビットごとの再現性を達成するのが非常に困難になる多くの技術的課題があります。
ソフトウェアレベルでは、コードまたはコードが使用するライブラリを変更すると、明らかに異なる結果が生成される可能性があります。最終的には典型的な科学的コードにリンクされるサポートライブラリの数に驚くでしょう。
下位レベルでは、新しいコンパイラーまたは異なるコンパイラー最適化をオンにして、コードで使用されるコードまたはライブラリーを再コンパイルすると、問題が発生する可能性があります。1つの理由は、コードを再コンパイルすると、コード内のさまざまな操作が異なる順序で実行される可能性があるためです。浮動小数点加算は連想的ではないため(a + b)+ c <> a +(b + c)、これは異なる結果をもたらす可能性があります。
それでは、ソフトウェア環境全体(OS、ライブラリ、コンパイル済みコード)を(たとえば)コードを実行するブート可能なCD-Romに焼き付けることによって保存するとどうなりますか。このコードを別のコンピューターで実行しても同じ結果が得られることを確認できますか?
驚くべきことに、いくつかのコードは、実行している特定のプロセッサモデルの側面に基づいて計算の順序を実際に変えます。たとえば、最適化された線形代数ライブラリは通常、行列乗算を分割してキャッシュに収まるブロックで機能します。Intelがより大きなキャッシュを備えた新しいマイクロプロセッサをリリースすると、コードがブロックサイズを動的に調整し、異なる順序で実行される演算と異なる結果をもたらす可能性があります。他のコードは、利用可能なメモリの量に基づいて計算の順序を動的に調整します-計算を異なる順序で実行し、異なる結果をもたらす可能性があるより多くのメモリを持つコンピュータでコードを実行する場合
異なるスレッドの正確な実行履歴はしばしば非決定的であるため、マルチスレッドコードを投入すると事態は驚くほど複雑になります。これにより、実行ごとに異なる順序で算術演算が実行される可能性があります。
実際に最も期待できるのは、使用するアルゴリズムの精度の許容範囲まで、あるマシンから次のマシンへと類似した結果です。たとえば、ルート検索の問題があり、二分法を使用して+ -1.0e-10以内にルートを取得する場合、さまざまなマシンがその許容範囲内で一致する回答を生成している限り、満足するはずです。
再現性を実現するための多くの試みがあり、このトピックに関する文献があります。15年間の科学ソフトウェアからの私の個人的な意見は、それが非現実的であり、その答えを見つけるのと同じくらい満足できないというものです。問題は、(i)複雑なソフトウェアにはバグがあり、凍結できないことです。(ii)ソフトウェアは機能が完全ではないため、開発は継続されます。(iii)数十万行のコードを紙で提供することの価値は何ですか?
私が言うように、私はこの答えが不十分だと思う。私は、フィールドとして、計算科学は、私たちが公表する結果が正確で再現可能であるという信頼を植え付ける文学を生み出すことにあまり成功していないと信じています。同時に、物事をより良くする方法を思い付くことができません。確かに、論文に付随するソースコードをリリースすることは有用です。同時に、正直な人なら誰でも、論文の結果は通常、異なる境界条件、異なる右側などを記述するハッキングを含む異なるバージョンのコードによって生成されることに同意するでしょう。同じコードの異なるバージョンが付属しています。そもそも読者にとっては厄介です、しかし、今日よくあるようにコードが大きい場合、まったく非生産的です-私の最新の2つの論文は、約20,000行のコードであり、取引に基づいて構築されたコードを使用しました.II(600,000行のコード)とTrilinos(1.5M行)コードの)。それは潜在的な読者にどのような情報を提供しますか?(それにもかかわらず、私のコードは利用可能であると言うべきです。)
この問題の可能な解決策については、ActivePapersプロジェクトを参照してください。要約すると、各ソフトウェアコンポーネントの特定のバージョンへの明示的な依存関係とともに、データとコードをパッケージ化する方法について説明します。これにより、同じデータで更新されたソフトウェアを実行することを許可しながら、計算を正確に再現することができます。
ActivePapersは概念実証にすぎず、近い将来実用化される可能性は低いと付け加えます。その理由は、すべての実行可能コードがJVMバイトコードとして存在しなければならないという原則に基づいているためです。現時点では、これはあまりにも多くの人気のある科学図書館を除外しています。ただし、再現性が重要であると認識されると、プログラミングツールの優先順位も変わる可能性があります。
言語の選択に関しては、標準化された言語(C / Fortran / C ++など)を使用することで「ベストプラクティス」と見なされると思います。パッケージが他の10個のlibs / packages、特に曖昧な言語で書かれたものに依存している場合、それは明らかに寿命にとって悪いことです。多くのプロジェクトは、しばらくして孤立することになります。BLAS / LAPACK、PETSc、FFTW、MPIなどの主要なライブラリ/ APIがすぐに消えるとは思わない。BLASはすでにかなり古いです。
次のコード(http://www.math.utah.edu/software/c-with-fortran.htmlから盗まれた)はFortran 77より前のバージョンで、文字操作にホレリス定数を使用していますが、40〜50年後には正常にコンパイルされます。 GNU Fortranコンパイラー:
stali@x61:~$ cat olde.f
CALL S(12HHello, world, 12)
END
SUBROUTINE S(MSG,N)
INTEGER K, N, M
INTEGER MSG(1)
M = (N + 3) / 4
WRITE (6,'(20A4)') (MSG(K), K = 1,M)
END
stali@x61:~$ gfortran -std=legacy olde.f; ./a.out
Hello, world
すぐに消える可能性が低いgooglecodeのような場所でオープンソース化/アップロードすることは簡単です(ただし、コード検索をシャットダウンしましたが)。