

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Log perubahan mesin WDL untuk HealthOmics
<a name="wdl-engine-change-log"></a>

Halaman ini berisi log perubahan untuk mesin WDL untuk mode ketat WDL dan mode lunak WDL. Setiap bagian merangkum fitur baru, penyempurnaan, dan penghentian.

## Fitur dan penyempurnaan baru
<a name="wdl-changelog-new-features"></a>

Tabel berikut mencantumkan fitur dan penyempurnaan baru untuk mesin WDL aktif. HealthOmics


| Tanggal Perubahan | Ubah Nama | Deskripsi Perubahan | Tindakan yang Direkomendasikan | 
| --- | --- | --- | --- | 
| September 22, 2026 | Penanganan akhir baris CRLF yang konsisten | HealthOmics memangkas Windows-style (`\r\n`) ujung baris secara konsisten di seluruh`read_lines()`,`read_tsv()`, dan`read_map()`, mencocokkan perilaku alat Linux standar. | Tidak ada. Tidak ada perubahan alur kerja yang diperlukan. | 
| September 22, 2026 | `zip()`,`cross()`, dan `read_tsv()` sekarang menangani input tipe campuran dengan benar. solusi tipe-cast manual dapat dihapus. | Fungsi bawaan`zip()`,`cross()`, dan `read_tsv()` sekarang menyimpulkan dengan benar jenis nilai pengembaliannya. Pada versi sebelumnya, fungsi-fungsi ini dapat menghasilkan kesalahan tipe yang tidak terduga saat menggabungkan tipe campuran (misalnya, `Array[String]` dan `Array[Int]` dalam `zip()` panggilan), yang memerlukan solusi pemecahan tipe manual dalam kode WDL. | Jika alur kerja Anda menyertakan jenis cast eksplisit yang ditambahkan untuk mengatasi kesalahan jenis dari `zip()``cross()`,, atau`read_tsv()`, Anda dapat menghapusnya. HealthOmics sekarang menyimpulkan jenis yang benar secara otomatis.<br />Menjaga jenis cast yang ada tidak akan menyebabkan kesalahan atau memengaruhi perilaku alur kerja. | 
| September 22, 2026 | `basename(path, "")`fix mengembalikan nama file alih-alih dan string kosong. | `basename(path, "")`sekarang mengembalikan nama file.<br />Misalnya, `basename("/path/to/file.txt", "")` akan kembali al `"file.txt"` ih-alih string kosong. | Cari alur kerja Anda untuk `basename(x, "")` panggilan. Jika ada, verifikasi bahwa mengembalikan nama file adalah perilaku yang diharapkan. | 
| September 22, 2026 | Float-key deteksi tabrakan di `collect_by_key()` | `collect_by_key()`sebelumnya memperlakukan `Float` kunci sebagai identik jika cocok dengan 6 tempat desimal. Nilai-nilai yang berbeda seperti `0.0000001` dan `0.0000002` digabungkan menjadi satu grup.<br />Mulai tanggal perubahan dan seterusnya, HealthOmics mendeteksi tabrakan ini pada waktu pembuatan alur kerja dan gagal alur kerja dengan kesalahan yang jelas di bidang GetWorkflow StatusMessage alih-alih membuang hasil.<br />Alur kerja yang sebelumnya berhasil diselesaikan saat menggabungkan `Float` kunci yang berbeda sekarang akan gagal dengan kesalahan deteksi tabrakan seperti `"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)"` | Anda dapat menggunakan salah satu dari tiga pendekatan:+  Gunakan `String` tombol: Ubah `Array[Pair[Float, String]]` ke `Array[Pair[String, String]]` dan kutip nilai kunci Anda. Tombol string selalu berbeda dan menghilangkan risiko tabrakan sepenuhnya. <br />+  Gunakan `Int` tombol: Ubah jenis kunci untuk Kal `Array[Pair[Int, String]]` ikan nilai float Anda dengan pangkat 10 untuk mempertahankan presisi yang diperlukan sebagai bilangan bulat. <br />+  Jika `Float` kunci tidak dapat dihindari, bulatkan ke presisi yang konsisten terlebih dahulu untuk memastikan setiap kunci benar-benar berbeda dan tidak ada data yang digabungkan secara diam-diam. Normalisasi setiap tombol yang digunakan `round(value * 1000000.0) / 1000000.0` sebelum diteruskan ke`collect_by_key()`.  | 
| Mendatang (pemberitahuan 60 hari dari 22 Sep 2026) | Divisi float (/) akan mengembalikan desimal, bukan bilangan bulat terpotong. | **Perilaku saat ini: ** `/` Operator pada `Float` operan mengembalikan bilangan bulat terdekat. Misalnya, pengem `5.0 / 2` balian`2.0`, tidak`2.5`. Jika kedua operan adalah `Int` (misalnya,`5 / 2`), hasilnya mengembalikan 2.<br />**Perubahan mendatang (30 November 2026): Divisi float ** pada operan float akan kembali dengan presisi 16 desimal. Setelah tanggal ini, `5.0 / 2.0` akan kembali`2.5`, `150.0 / 7.0` akan kembali al `21.428...` ih-alih nilai integer.<br />Ketepatan hasil tergantung pada bagaimana hasilnya dikonsumsi: jika jenis hasilnya adalah`Float`, nilainya dihitung hingga 16 digit desimal presisi; jika hasilnya dipaksa ke a maka diformat menjadi 6 digit desimal sebagai gant `String` inya.<br />Misalnya, `5.0 / 2.0` akan kembali`2.5`, dan `150.0 / 7.0` akan kembali `21.4285714285714` sebagai a`Float`, tetapi `21.428571` jika diinterpolasi menjadi a. `String`<br />`Int / Int`ekspresi seperti tidak `5 / 2` terpengaruh dan akan terus mengembalikan 2. | Untuk memastikan hasil bilangan bulat terlepas dari versi mesin, bungkus divisi float dalam `floor()` atau`ceil()`:+  `floor(5.0 / 2.0)`→ selalu kembali `2` <br />+  `ceil(5.0 / 2.0)`→ selalu kembali `3` <br />Jika alur kerja Anda sengaja mengharapkan hasil desimal dari pembagian float, tidak diperlukan perubahan. Perilaku pembagian yang akan datang dari 30 November 2026 akan mengembalikan tempat desimal juga.<br />Catatan: masih `5/2` akan mengembalikan 2 karena `/` operator diterapkan pada bilangan bulat. | 