「破壊的変更の一覧」の版間の差分

Zen (トーク | 投稿記録)
編集の要約なし
編集の要約なし
 
(2人の利用者による、間の9版が非表示)
1行目: 1行目:
{{Alert|この記事のより新しい版が[https://docs.wsoft.ws/products/alice/changelog/compatibility/ WSOFTDocs]にあります。AliceScriptWikiでは、この記事はもう更新されません。||04}}
AliceScriptの歴史を通じて、AliceScriptのバージョン間および異なる実装間で高いレベルの互換性を維持することに力が注がれてきました。
AliceScriptの歴史を通じて、AliceScriptのバージョン間および異なる実装間で高いレベルの互換性を維持することに力が注がれてきました。
多くの開発者は、AliceScriptの異なる実装間の互換性とともに、AliceScriptの特定の実装のバージョン間についても高いレベルの互換性を期待します。
多くの開発者は、AliceScriptの異なる実装間の互換性とともに、AliceScriptの特定の実装のバージョン間についても高いレベルの互換性を期待します。
特に、以前のバージョンのAliceScript用に書かれたコードは、AliceScriptの新しいバージョンでもシームレスに動作することを期待します。
特に、以前のバージョンのAliceScript用に書かれたコードは、AliceScriptの新しいバージョンでもシームレスに動作することを期待します。
また、多くの開発者は、新しくリリースされたAlice.RuntimeにあるAPIが、それらのAPIが導入された初めのバージョンとも互換性があると期待します。
実際、多くの開発者は、新しくリリースされたAlice.RuntimeにあるAPIが、それらのAPIが導入された初めのバージョンとも互換性があると期待します。


この記事では、AliceScriptまたはAlice.Runtimeに対して行われた変更のカテゴリと、それがアプリケーションの互換性に与える影響について説明します。
この記事では、AliceScriptまたはAlice.RuntimeまたはAlicePackageに対して行われた変更の詳細と、それがアプリケーションの互換性に与える影響について説明します。変更は「承認」されているか「非承認」であるか、動作の予測や期待通りの動作の維持が不十分であると判断され、「見送り」されているかのいずれかです。


{|class="wikitable" algin=“center”
|+style="white-space:nowrap"|
!colspan="2"|変更のステータス
|承認状況
|影響する範囲
|変更が行われたバージョン
|}
==Typeプロパティ==
==Typeプロパティ==
{|class="wikitable" algin=“center”
|+style="white-space:nowrap"|
!colspan="2"|変更のステータス
|承認
|AliceScript
|RC1
|}
AliceScriptRC1以前のバージョンでは、Typeプロパティはその値の型を表す文字列表現を返していました。AliceScriptRC2からはTypeプロパティは<code>type</code>型を返すため、戻り値の型が変わります。
AliceScriptRC1以前のバージョンでは、Typeプロパティはその値の型を表す文字列表現を返していました。AliceScriptRC2からはTypeプロパティは<code>type</code>型を返すため、戻り値の型が変わります。
この変更による影響を緩和するために、<code>type</code>型から<code>string</code>型への一方向の暗黙的な変換が用意されているため、この変更は承認されました。
この変更による影響を緩和するために、<code>type</code>型から<code>string</code>型への一方向の暗黙的な変換が用意されているため、この変更は承認されました。
==定義されていない変数への値の代入の禁止==
==定義されていない変数への値の代入の禁止==
{|class="wikitable" algin=“center”
|+style="white-space:nowrap"|
!colspan="2"|変更のステータス
|承認
|AliceScript
|RC1
|}
AliceScriptRC1以前のバージョンでは、定義されていない変数にも<code>var</code>キーワードを使用しないで変数を定義することができました。これは未アクセスの変数に対して値が存在するか確認できないという潜在的な欠陥が存在しているため使用できなくなります。次は未定義の変数<code>a</code>に<code>12345</code>を代入し定義するコードです。AliceScriptRC1以前では動作していましたが今は動作しません。
AliceScriptRC1以前のバージョンでは、定義されていない変数にも<code>var</code>キーワードを使用しないで変数を定義することができました。これは未アクセスの変数に対して値が存在するか確認できないという潜在的な欠陥が存在しているため使用できなくなります。次は未定義の変数<code>a</code>に<code>12345</code>を代入し定義するコードです。AliceScriptRC1以前では動作していましたが今は動作しません。
  a = 12345;
  a = 12345;
AliceScriptRC2以降でこれと同じ動作を行うことができる唯一の方法は次の通りです。
AliceScriptRC2以降でこれと同じ動作を行うことができる唯一の方法は次の通りです。
  var a = 12345;
  var a = 12345;
変数を定義した後の代入に関する動作に変更はありません。この変更は承認されませんでした。AliceScriptGMでロールバックされる。
変数を定義した後の代入に関する動作に変更はありません。この変更は承認されました。
==暗黙的な型変換の廃止==
==暗黙的な型変換の廃止==
{|class="wikitable" algin=“center”
|+style="white-space:nowrap"|
!colspan="2"|変更のステータス
|承認
|AliceScript
|RC1
|}
AliceScriptRC1以前のバージョンでは、関数などの対応する型が与えられた型ではない場合、自動的にその値を対応する型に変換します。これを暗黙的な型変換とよびますが、これは本来の用途に使用できない値などが与えられても例外が発生することなく予期しない動作をしてしまう可能性がありました。これを解消するために暗黙的な型変換は廃止されました。この変更は承認されました。
AliceScriptRC1以前のバージョンでは、関数などの対応する型が与えられた型ではない場合、自動的にその値を対応する型に変換します。これを暗黙的な型変換とよびますが、これは本来の用途に使用できない値などが与えられても例外が発生することなく予期しない動作をしてしまう可能性がありました。これを解消するために暗黙的な型変換は廃止されました。この変更は承認されました。


また、もう一つの解決策として、[[関数#引数|引数の型指定]]を行うことも検討してください。
また、もう一つの解決策として、[[関数#引数|引数の型指定]]を行うことも検討してください。
=変数/関数のスコープ=
{|class="wikitable" algin=“center”
|+style="white-space:nowrap"|
!colspan="2"|変更のステータス
|承認
|AliceScript
|GM
|}
AliceScriptGM以前のバージョンでは、変数と関数、定数はすべてグローバルとして定義されていました。これは複数回同じファイルを実行する際に重複定義が発生してしまうおそれがあるなどの潜在的な欠陥を有していました。AliceScriptGMでは、スコープが導入され、そのスコープの範囲内で宣言された変数と関数、定数はいずれもその範囲外では使用できなくなりました。これはネストされたスコープに対しても有効です。この変更は承認されました。