

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Registro delle modifiche del motore WDL per HealthOmics
<a name="wdl-engine-change-log"></a>

Questa pagina contiene il registro delle modifiche per il motore WDL sia per la modalità WDL strict che per la modalità WDL lenient. Ogni sezione riassume le nuove funzionalità, i miglioramenti e le deprecazioni.

## Nuove funzionalità e miglioramenti
<a name="wdl-changelog-new-features"></a>

La tabella seguente elenca le nuove funzionalità e i miglioramenti per il motore WDL attivo. HealthOmics


| Data di modifica | Cambia nome | Cambia la descrizione | Operazione consigliata | 
| --- | --- | --- | --- | 
| 22 settembre 2026 | Gestione coerente delle terminazioni di riga CRLF | HealthOmics taglia le Windows-style terminazioni di riga in modo coerente tra e `read_lines()` `read_tsv()``read_map()`, adattando il comportamento degli strumenti Linux standard. `\r\n` | Nessuna. Non sono richieste modifiche al flusso di lavoro. | 
| 22 settembre 2026 | `zip()``cross()`, e `read_tsv()` ora gestisci correttamente gli input di tipo misto. Le soluzioni alternative manuali possono essere rimosse. | Le funzioni integrate e `read_tsv()` ora `zip()` deducono correttamente `cross()` i tipi dei valori restituiti. Nelle versioni precedenti, queste funzioni potevano generare errori di tipo imprevisti quando si combinavano tipi misti (ad esempio `Array[String]` e `Array[Int]` in una `zip()` chiamata), richiedendo soluzioni tipografiche manuali nel codice WDL. | Se il flusso di lavoro include cast di tipo esplicito aggiunti per ovviare agli errori di tipo provenienti da`zip()`, o, `cross()` è possibile rimuoverli. `read_tsv()` HealthOmics ora deduce automaticamente i tipi corretti.<br />La conservazione dei type cast esistenti non causerà errori né influirà sul comportamento del flusso di lavoro. | 
| 22 settembre 2026 | `basename(path, "")`fix restituisce il nome del file anziché una stringa vuota. | `basename(path, "")`ora restituisce il nome del file.<br />Ad esempio, `basename("/path/to/file.txt", "")` restituirà `"file.txt"` invece di una stringa vuota. | Cerca le `basename(x, "")` chiamate nei tuoi flussi di lavoro. Se ne esistono, verifica che la restituzione del nome del file sia il comportamento previsto. | 
| 22 settembre 2026 | Float-key rilevamento delle collisioni in `collect_by_key()` | `collect_by_key()`in precedenza `Float` le chiavi erano considerate identiche se corrispondevano a 6 cifre decimali. Valori distinti come `0.0000001` e `0.0000002` sono stati uniti in un unico gruppo.<br />Dalla data di modifica in poi, HealthOmics rileva questa collisione al momento della creazione del flusso di lavoro e fallisce il flusso di lavoro con un chiaro errore nel campo GetWorkflow StatusMessage invece di scartare i risultati.<br />Un flusso di lavoro precedentemente completato con successo durante l'unione di `Float` chiavi distinte ora avrà esito negativo e si verificherà un errore di rilevamento delle collisioni come `"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)"` | È possibile utilizzare uno dei tre approcci:+  Usa `String` le chiavi: cambia `Array[Pair[Float, String]]` `Array[Pair[String, String]]` e cita i tuoi valori chiave. Le chiavi a forma di stringa sono sempre distinte ed eliminano completamente il rischio di collisione. <br />+  Usa `Int` le chiavi: modifica il tipo di chiave per `Array[Pair[Int, String]]` moltiplicare i valori float per una potenza di 10 per preservare la precisione richiesta come numeri interi. <br />+  Se `Float` le chiavi sono inevitabili, arrotondale prima con una precisione costante per assicurarti che ogni chiave sia veramente distinta e che nessun dato venga unito silenziosamente. Normalizza ogni chiave usando prima di passare a. `round(value * 1000000.0) / 1000000.0` `collect_by_key()`  | 
| Prossimamente (preavviso di 60 giorni dal 22 settembre 2026) | La divisione float (/) restituirà numeri decimali, non numeri interi troncati. | **Comportamento attuale: l'`/`operatore sugli operandi restituisce ** il numero intero più vicino. `Float` Ad esempio, `5.0 / 2` restituisce`2.0`, no. `2.5` Se entrambi gli operandi lo sono `Int` (ad esempio,`5 / 2`), il risultato restituisce 2.<br />**Modifica imminente (30 novembre 2026): ** la divisione float sugli operandi float verrà restituita con una precisione decimale di 16. Dopo questa data, `5.0 / 2.0` tornerà`2.5`, restituirà invece un `150.0 / 7.0` valore intero. `21.428...`<br />La precisione del risultato dipende da come viene utilizzato: se il tipo di risultato è`Float`, il valore viene calcolato con precisione fino a 16 cifre decimali; se il risultato viene forzato a, viene invece formattato a 6 `String` cifre decimali.<br />Ad esempio, restituirà e `5.0 / 2.0` tornerà `21.4285714285714` come a`2.5`, ma se `150.0 / 7.0` interpolato in a`Float`. `21.428571` `String`<br />`Int / Int`espressioni quali non `5 / 2` sono interessate e continueranno a restituire 2. | Per garantire risultati interi indipendentemente dalla versione del motore, inserisci la divisione float in or: `floor()` `ceil()`+  `floor(5.0 / 2.0)`→ restituisce sempre `2` <br />+  `ceil(5.0 / 2.0)`→ ritorna sempre `3` <br />Se il flusso di lavoro prevede intenzionalmente risultati decimali dalla divisione in virgolette, non sono necessarie modifiche. L'imminente comportamento di divisione a partire dal 30 novembre 2026 restituirà anche cifre decimali.<br />Nota: `5/2` restituirà comunque 2 poiché l'`/`operatore viene applicato ai numeri interi. | 