

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HealthOmics の WDL エンジン変更ログ
<a name="wdl-engine-change-log"></a>

このページには、WDL strict モードと WDL lenient モードの両方の WDL エンジンの変更ログが含まれています。各セクションには、新機能、機能強化、廃止がまとめられています。

## 新しい特徴と拡張機能
<a name="wdl-changelog-new-features"></a>

次の表に、HealthOmics の WDL エンジンの新機能と機能強化を示します。


| 変更日 | 名前の変更 | 説明の変更 | [Recommended Action] (推奨されるアクション) | 
| --- | --- | --- | --- | 
| 2026 年 9 月 22 日 | 一貫した CRLF ライン終了処理 | HealthOmics は、Windows スタイルの (`\r\n`) 行の末尾を `read_lines()`、、および 全体で一貫してトリミング`read_tsv()`し`read_map()`、標準の Linux ツールの動作と一致します。 | なし。ワークフローの変更は必要ありません。 | 
| 2026 年 9 月 22 日 | `zip()`、`cross()`、および が混合型入力を正しく処理する`read_tsv()`ようになりました。手動型キャストの回避策は削除できます。 | 組み込み関数 `zip()`、`cross()`、および は、戻り値の型を正しく推測する`read_tsv()`ようになりました。以前のバージョンでは、これらの関数は混合型 ( `Array[String]`や `Array[Int]` `zip()` 呼び出しなど) を組み合わせるときに予期しない型エラーを発生させる可能性があり、WDL コードで手動型キャストの回避策が必要になります。 | ワークフローに `zip()`、、`cross()`または からのタイプエラーを回避するために追加された明示的なタイプキャストが含まれている場合は`read_tsv()`、それらを削除できます。HealthOmics は、正しいタイプを自動的に推測するようになりました。<br />既存の型キャストを保持しても、エラーが発生したり、ワークフローの動作に影響を与えたりすることはありません。 | 
| 2026 年 9 月 22 日 | `basename(path, "")` 修正は、 および空の文字列の代わりにファイル名を返します。 | `basename(path, "")` がファイル名を返すようになりました。<br />たとえば、 `basename("/path/to/file.txt", "")`は空の文字列`"file.txt"`の代わりに を返します。 | ワークフローで`basename(x, "")`呼び出しを検索します。存在する場合は、ファイル名を返すことが予想される動作であることを確認します。 | 
| 2026 年 9 月 22 日 | での浮動小数点衝突検出 `collect_by_key()` | `collect_by_key()` 以前は`Float`、キーが小数点以下第 6 位と一致した場合、キーは同一として扱われていました。`0.0000001` や などの個別の値が 1 つのグループに`0.0000002`マージされました。<br />変更日以降、HealthOmics はワークフローの作成時にこの衝突を検出し、結果を破棄する代わりに GetWorkflow statusMessage フィールドで明確なエラーでワークフローを失敗させます。<br />異なる`Float`キーのマージ中に以前に正常に完了したワークフローが、次のような衝突検出エラーで失敗するようになりました。 `"statusMessage": "(collect_by_key_test.wdl Ln 17 Col 47) No such function: collect_by_key\n Map[Float, Array[String]] collected = collect_by_key(pairs_with_collision)"` | 次の 3 つの方法のいずれかを使用できます。+  `String` キーを使用する: キー値を `Array[Pair[Float, String]]`に変更`Array[Pair[String, String]]`して引用します。文字列キーは常に異なり、衝突リスクを完全に排除します。 <br />+  `Int` キーを使用する: キータイプを変更して浮動小数点値を`Array[Pair[Int, String]]`乗算し、必要な精度を整数として保持します。 <br />+  `Float` キーが避けられない場合は、まず一貫した精度に丸めて、各キーが真に異なり、データがサイレントマージされないようにします。を に渡す`round(value * 1000000.0) / 1000000.0`前に、 を使用して各キーを正規化します`collect_by_key()`。  | 
| 近日 (2026 年 9 月 22 日から 60 日前の通知) | 浮動小数点除算 (/) は、切り捨てられた整数ではなく、小数を返します。 | **現在の動作:** `Float`オペランドの`/`演算子は、最も近い整数を返します。たとえば、 は `2.0`ではなく `5.0 / 2`を返します`2.5`。両方のオペランドが `Int` ( など`5 / 2`) の場合、結果は 2 を返します。<br />**今後の変更 (2026 年 11 月 30 日):** 浮動小数点オペランドの浮動小数点除算は 16 進精度で返ります。この日付以降、 `5.0 / 2.0`は を返し`2.5`、 `150.0 / 7.0`は整数値`21.428...`の代わりに を返します。<br />結果の精度は、消費方法によって異なります。結果タイプが の場合`Float`、値は最大 16 の小数の精度で計算されます。結果が に強制される場合、代わりに 6 の小数にフォーマット`String`されます。<br />たとえば、 `5.0 / 2.0`は を返し`2.5`、 `150.0 / 7.0`は `21.4285714285714`として返しますが`Float`、 に補間`21.428571`された場合です`String`。<br />`Int / Int` などの式`5 / 2`は影響を受けず、引き続き 2 を返します。 | エンジンのバージョンに関係なく整数の結果を確保するには、浮動小数点除算を `floor()`または でラップします`ceil()`。+  `floor(5.0 / 2.0)` → 常に を返します `2` <br />+  `ceil(5.0 / 2.0)` → 常に を返します `3` <br />ワークフローが意図的に浮動小数点除算から 10 進数の結果を想定している場合、変更は必要ありません。2026 年 11 月 30 日以降の今後の除算動作では、小数点以下も返されます。<br />注意: `/`演算子`5/2`が整数に適用されるため、 は引き続き 2 を返します。 | 