È disponibile la prima versione alpha del linguaggio di programmazione Gauntlet, un'estensione del linguaggio Go, che risolve alcuni problemi architetturali e aggiunge funzionalità extra. I programmi scritti in Gauntlet supportano tutte le funzionalità del linguaggio Go, sono convertiti in un rappresentazione nel linguaggio Go e si integrano con l'ecosistema esistente di Go senza necessità di utilizzo di binding. Gli strumenti sviluppati dal progetto sono scritti in F# e sono distribuiti sotto licenza GPLv3. È fornito un plugin per lavorare con il codice all'interno di VSCode.
Problemi risolti da Gauntlet:
- Errori fastidiosi legati a variabili non utilizzate (Gauntlet aggiunge una sostituzione del tipo “_ = a” per tutte le variabili non utilizzate).
- Codice ingombrante per la gestione degli errori. In Gauntlet, invece di usare blocchi condizionali come “if err != nil”, vengono utilizzate espressioni in una sola riga “try-with”.
- Un modo fastidioso di importare ed esportare (ad esempio, in Go è necessario che i nomi esportati inizino con una lettera maiuscola).
- Mancanza di un operatore ternario. In Gauntlet si possono utilizzare espressioni del tipo ‘let properWord = @String len(lines) > 1 ? “lines” : “line”‘.
- Assenza della sintassi switch-case.
- Cicli «for» complessi. In Gauntlet puoi scrivere «for let _, c in «Hello» {» invece di «for _, c := range «Hello» {«.
- Operatore di assegnazione insolito («:=» per la dichiarazione e l'inizializzazione simultanee delle variabili; «=» per modificare il valore delle variabili già dichiarate).
- Impossibilità di chiamare funzioni in chaining (in Gauntlet è supportata la chiamata del tipo ‘let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, «\n»)’.
Funzionalità avanzate di Gauntlet:
- La sintassi «when-is» è simile a switch.case, ma manipola le espressioni.
- Supporto per i pipe channel, che consentono di passare un valore attraverso più espressioni o funzioni in una catena, ad esempio «10 => add(_, 10) => add(_, 30) => divide(_, 2)».
- Espressioni «try .. with» e «force .. with».
- Espressione «wrapper» per creare alias di tipo (ad esempio, «wrapper Int Dollars»).
Fonte: opennet.ru
