2010-11-23 14 views
4

Javaは「どこでも書き込み可能」と思いつきました。どこにでも一度書いてください - どれくらい長く?

どのように長期的にすべてのフレームワークでトリックを行うには?

私は数年前にJSFとrichfacesでアプリケーションを書いていました。ブラウザは進化し、新しい機能ともちろん新しいバグを導入しました。今度はアプリケーションが実行され、場合によっては基礎となるライブラリのJavaScriptエラーが表示されます。

テクニカルな「改善」のために、私たちは実際にフィンズアプリケーション(追加するユースケースなし)を再実装する必要がありますか?

EDIT:私が言及したアプリケーションは単なる例でした。ベンダーがライセンスを変更すると、同じことが起こりやすくなります。 (オラクルはVM用に料金を請求することができ、オープンVMはアプリケーションスタックなどと互換性がありません)

+1

コミュニティWikiのチェックボックスには何が起こりますか? – stacker

+0

それはなくなっています:http://meta.stackexchange.com/questions/67039/what-c​​an-we-do-to-make-community-wiki-better/67192#67192 –

+0

JavaScriptのエラーの例を挙げてください何か?つまり、アプリケーションの機能に影響を及ぼしますか、それとも迷惑なのですか? – Jeremy

答えて

4

"一度書き、どこでも実行する"と考えても、それは永遠の下位互換性と全く同じことではありません。実際には、フレームワークの将来のバージョンでいくつかのことを変えることを期待する必要があります。時にはこれは保証された動作(最悪の種類の変更)であったものを削除することになりますが、ライブラリの将来のバージョンでは実装の詳細に頼っていないことが判明するまで、保証される。ごくまれに、あなたの古いコードは、最新バージョンの斬新なバグを明らかにするでしょう。

理想的な世界では、保証された動作のみに依存するコードを作成し、保証は削除されないため、有効なコードは永久に機能します。それに対して、あなたのプログラムが完全に正しいことを証明するのは難しいですし、言語/フレームワーク/ライブラリの開発者は、完璧な互換性を保ちながら、彼らが望む改善を加えることができるかどうかを判断します。

引数に勝つ互換性のために、元のAPIは、激しく変化することなく生き残るために十分な強度と安定性を備えていなければなりません。そうでない場合、互換性のない変更が行われるか、そうでなければ、APIは完全に放棄されます。どちらの方法でも、あなたのプログラムは、あなたが古いバージョンをどこかに置いて実行しない限り、それ以上実行されません。

あなたは、このトリックを行う方法を尋ねます - あなたが後で思いつくすべての拡張を可能にするためには、本当に良い、やや幸運なインターフェースデザインが必要です。そうでなければ、確かな約束事とビジネスケース非営利目的の動機)をサポートしています。たとえば、Python 3はPython 2と互換性がありませんが、Python 2はまだ更新プログラムでサポートされているため、古いPythonコードは引き続き実行されます。 C99はC89のいくつかの機能だけを削除し、それ以外の場合はC89コンパイラはまだ積極的に管理されています。ブラウザは、古いバージョンの1つと1つと、HTMLの非標準的な特徴をサポートしています。私はJSFとリッチフェイスがそれらとどのように比較されているのか、あるいはクライアントからの「古い」(または奇妙な)HTML/CSS/Javascriptの動作に対応するページをどれだけ出力するのか分かりません。

これは、少なくともしばらくは起こることがあります。しかし、IE6の機能は、Web上で放置しても安全なブラウザでは利用できなくなっています(IE6をサンドボックス化されたVMや気にしないマシンで実行できると思います)。あなたが最初に頼ったもの独占的なブラウザ拡張が将来のバージョンでは石のように落ちると予測されたでしょうか?おそらく、しかし、IE6のアプリライターは、当時の適切な標準を使用したいと思っていたものを達成できたでしょうか?常にではない。 IE6に関わっていない人でも、あなたのアプリが同じような罠に陥った場合、あなたは不運になります。

+0

この素晴らしい答えをありがとう、私の結論は(あなたのpython/Cの部分)あなたは大きなコミュニティを持っているか、自分自身に貢献するはずです。それは無料なので、私にとっては大丈夫です。 – stacker

0

あなたはアプリケーションについてではなく、アプレットについて話しているようです。さらに、これは展開されたページからjavascriptを呼び出すアプレットです。この場合、それはまったく純粋なjavaではありません。 Runtime.exec()を使用してプラットフォームに依存するコマンドラインを呼び出し、OSを変更して、アプリケーションが動作しないと不平を言うように聞こえるようです。

おそらく私はユースケースを正しく理解していませんでしたか?

0

プログラミング言語とテクノロジが進化しています。広く言えば、ウェブアプリケーションがかなり基本的なものであれば、多くの変更を必要とせずに更新を行うことができるかもしれません。

Javaベースの言語は、Microsoftスタックの言語よりも更新頻度が低いようです。 JSF 2には以前のバージョンより大きな変更が加えられましたが、Richfaces 3.xアプリケーションでは、Richfaces 4.xを使用する場合は移行が必要です。

回避策として、必ずしもアップグレードする必要はありません。古い言語(1つの従来のASP)で書かれたサイトがたくさんあり、幸せに展開されています。

1

誰もが "どこでも、永遠に実行する"ことを真剣に約束することはできません。遅かれ早かれLinuxとWindowsとMacOSが廃止され、新しいOSが出てくるでしょう。誰もあなたのためにJVMを書こうとは思わないので、あなたのJavaアプリケーションはそれ以上実行されません。 (私は古いMS DOSゲームを持っていますが、それはWindows DOSボックスの下では動作しません。Windows版が出てきましたが、ゲームを真剣に再設計しました。私の謙虚な意見では、 Bummer man。)

一方、新しいバージョンの上位互換性は素晴らしいことですが、すべての今、そしてベンダーはそれがちょっとした問題だと判断します。

+0

+1私が書いた「仮想現実感」エンジンで同じ問題が発生しました。これは、ウィンドウズがもはやDOS用のフルスクリーンモードを許可しなくなったため廃止されました。 – stacker

+1

@stacker:http://www.dosbox.com/を試すことができます。 DOSを含むx86全体をエミュレートし、その上でDOSプログラムを実行します。あなたが話す "Windows"や "非推奨"のような、新しく幻想的なコンセプトを彷彿させることはありません! –

+0

@Jessop:ねえ、まだディスクがあるかどうか分かります。とにかく、このWindowsのことはちょっとした流行です。 :-) – Jay

関連する問題