問題タブ [backwards-compatibility]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - DataContractSerializer:メンバーを削除しないのはなぜですか?
Microsoft のBest Practices: Data Contract Versioningを読んでいて、次のように述べています。
以前のバージョンでIsRequiredプロパティがデフォルト プロパティのfalseのままだったとしても、新しいバージョンではデータ メンバーを削除しないでください。
誰でもこれの理由を提案できますか? 彼らは詳しく説明しません。新しいバージョンではデータ メンバーを追加しても問題ないと言われているので、削除しても問題ないようです。事実上、古いバージョンでは追加と見なされます。
違いは、(DataMemberAttribute の Order プロパティを使用して) 最後に新しいメンバーを追加することになっているのに対し、削除されるプロパティはおそらく最後ではないということです。しかし、欠落しているメンバーはロード中にデフォルト値のままになるとも言われているため、欠落しているメンバーが問題ないことは明らかです。
私は何が欠けていますか?製品の機能を廃止し、それに付随する [DataMember] プロパティを削除した場合、どのようなバージョン相互運用の問題 (前方互換性と後方互換性の両方) が発生しますか?
また、前方互換性に関心がないと判断した場合 (つまり、古いバージョンが新しいファイルを開くことに関心がない場合)、そのような問題は引き続き適用されますか?
.net - 古いアプリケーションでの新しいライブラリ機能の処理
他のアプリケーションで使用されるいくつかの UI コントロールを含む新しいライブラリ バージョンに取り組んでいます。これらのコントロールの一部には、古いアプリケーションが認識していない新しい機能があります。デフォルトでは新機能を無効にしますが、有効にしたい特定のアプリがあります。アプリは同じマシン上に存在する可能性があります。
これをどのように実装することをお勧めしますか?
更新: 私が思いついた最善の解決策は、Process.GetCurrentProcess() を使用し、proc.MainModule.FileVersionInfo.InternalName のようなものを使用して、オーバーライド値を指定するレジストリ キーを探すことです。おそらく、バージョン番号を調べて、新機能について知るには古すぎることを確認することもできます。この方法に問題はありますか?
更新: 追加された機能はコントロール内にカプセル化されています。これは、一部のコンテキストでは意味があり、他のコンテキストでは意味がないということです。
objective-c - 10.5ベースSDK、10.4デプロイメント:欠落しているメソッドを実装する方法
Mac OS X 10.4と10.5の両方を対象とするプロジェクトがあります。ここで、10.5はベースSDKです。
のようないくつかの方法-[NSString stringByReplacingOccurrencesOfString:withString]
は10.4では利用できません。手作業で機能を実装することができました。別のオプションは、メソッドをカテゴリとして実装することですが、それは10.5の実装を台無しにするので、それは避けたいものです。
では、10.5を台無しにすることなく、10.4のサポートを停止することにしたときに実装を簡単に実行できるように、10.4でそのようなメソッドを実装するにはどうすればよいですか?
c++ - 既存の API を拡張する: デフォルトの引数またはラッパー関数を使用しますか?
追加の機能を拡張する必要がある既存のメソッド (または一般的な関数) がありますが、コード内の他の場所でメソッドの使用を中断したくありません。例:
コードベースで広く使用されています。ここで、4 をパラメーターにする必要がありますが、既に foo::bar を呼び出しているコードは、期待どおりに受け取る必要があります。古いメソッドを拡張して名前を変更し、次のように新しいメソッドにラップする必要があります
または、ヘッダーファイルでデフォルトの引数を宣言する必要があります
機能を拡張するだけです
各バリアントの長所と短所は何ですか?
java - 下位互換性をサポートするために明示的に行われている Java 設計は何ですか?
この質問は 4 票で締め切られたので、コミュニティがより好意的に見てくれることを願って、より狭い質問をもう一度しようと思います。
Java における特定の設計上の決定のうち、どのような方法で文書化されているかは、それが好ましい設計上の決定だったからではなく、下位互換性をサポートするために必要だったからです。
明らかなケースは、実行時に型パラメーターを検出できない Generics です。(したがって、次のことはできません:
言語設計と標準 API には他にどのような例がありますか?
java - 1.4 JRE で動作するように 1.5 用に書かれた Java コードをコンパイルしますか?
ジェネリックといくつかの Java 1.5/6 のビットとピースを使用するプロジェクトがあります。1.4 JRE を実行しているシステムで動作するようにこのコードをコンパイルすることは可能ですか?
ANT ビルド スクリプトと javac タスクを使用して、ライブラリをコンパイルします。ターゲット属性が 1.5 の場合、これは正常にビルドされます。
ターゲットを 1.4 に変更すると、次のエラーが発生します。
そこで、ソース属性を追加して、5 と 1.5 の値を試します。新しいエラー:
これを機能させるには、すべてのコードを調べて 1.5 のものを変更する必要がありますか?
java - Java API ブレーク
次の API があります。
現在、API 実装で次の変更を行っています。
は次のように置き換えられます:
これを API の破損と見なしますか?
クライアントのコードは引き続きコンパイルされますが、MyExcepiton が「新しい」条件によってスローされるため、API javadoc によって定義されたメソッド コントラクトは尊重されなくなります。
API jar ファイルのみが更新された場合、クライアント アプリケーションは引き続き動作しますが、クライアントが例外をキャッチする方法によっては、アプリケーションの動作が大きく変わる可能性があります。
それについてあなたの見解は何ですか?
concurrency - IPC API の下位互換性を提供する方法
ネットワーク経由で関数呼び出しを行うための (SOAP のような) プロセス間通信プロトコルを設計しています。古いクライアントが新しいサーバーと通信できるようにしたいと考えています。しばらく考えた後、私にできることは次のことだけのようです。
- API の変更の回避
- 機能を追加できるようにする
- 関数パラメータを追加できるようにする
ただし、サーバーの機能が完全に変更された場合、これでは十分ではありません。例えば:
- ある関数呼び出しから別の関数呼び出しに移動する必要があるパラメーター。
- 整数から文字列など、変化するパラメータ タイプ。
私の質問は、下位互換性を維持しながらこの種の変更を行うことはできますか、それとも変更しない唯一のオプションですか?
注:私はここで発明されていない症候群に苦しんでいることを知っていますが、私の意見では、この質問が無効になるわけではありません。
php - php 5 と php 4 の下位互換性はどの程度ですか?
私は php 4 で書かれたコード ベースに取り組んでいます。コードを php 5 (私のホストが提供する最新バージョン) にアップグレードするプロセスを実行したいと思います。他の誰かが同様のアップグレード経験を経て、そこにある落とし穴/落とし穴、コードの何を変更する必要があるか、2 つのバージョン間で下位互換性がないものを共有できるかどうか疑問に思っています。
iphone - iPhoneプロジェクトでdylibの互換性バージョンを指定するにはどうすればよいですか?
最近、静的ライブラリ(mobclix)をiPhoneプロジェクトに追加したため、BaseSDKを3.0に設定する必要がありました。このライブラリは2.2と互換性があると主張されており、これまでのところ、それは本当のように見えます。プロジェクトの展開ターゲットを2.2に設定しました。そこに問題はありません。
現在、この同じプロジェクトでlibxml2も使用しています。どうやら、OS 3.0のlibxml2.2.dylibはOS2.X(それぞれバージョン10と9)よりも新しい。しかし、libxml2を使用する私のコードは、OS2.Xに含まれているlibxml2バージョンとすでに互換性がありました。Base SDKを3.0に設定する必要があったため、「互換性バージョン」/最小バージョン要件/依存関係は自動的に新しいバージョンのlibxml2に設定されます。OS 2でアプリを実行しようとすると、(明らかに)次のランタイムエラーが発生します。
どこかでバージョン要件を上書きすることは可能ですか?またはこの問題を解決するための他のアイデア?