Den første alfaudgivelse af programmeringssproget Gauntlet, et Go-sprogtilføjelsesprogram, der adresserer nogle arkitektoniske problemer og tilføjer yderligere funktionalitet, er nu tilgængelig. Gauntlet-programmer understøtter alle Go-funktioner, er oversat til en Go-repræsentation og integreres med det eksisterende Go-økosystem uden behov for bindinger. Værktøjssættet, der er udviklet af projektet, er skrevet i F# og distribueres under GPLv3-licensen. Et VSCode-editortilføjelsesprogram leveres til at arbejde med koden.
Problemer løst i Gauntlet:
- Intrusiv fejloutput relateret til ubrugte variabler (Gauntlet tilføjer pladsholdere som "_ = a" for alle ubrugte variabler).
- Oppustet fejlhåndteringskode: Gauntlet bruger enkeltlinjede try-with-sætninger i stedet for betingede blokke med "if err != nil".
- Påtrængende import- og eksportmetode (for eksempel kræver Go, at eksporterede navne starter med et stort bogstav).
- Ingen thetar-operator. I Gauntlet kan du bruge udtryk som 'let properWord = @String len(lines) > 1 ? "lines" : "line"'.
- Manglende syntaks for switch-case.
- Avancerede "for"-løkker. I Gauntlet kan du skrive "for let _, c i "Hello" {" i stedet for "for _, c := range "Hello" {".
- En usædvanlig tildelingsoperator (':=' til at deklarere og initialisere variabler på samme tid; '=' til at ændre værdien af allerede deklarerede variabler).
- Manglende evne til at kalde funktioner i en kæde (Gauntlet understøtter kald som 'let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, «\n»)').
Avancerede Gauntlet-funktioner:
- "When-is"-syntaksen ligner switch.case, men manipulerer udtryk.
- Understøttelse af pipes, som tillader, at en værdi sendes gennem flere udtryk eller funktioner i en kæde. For eksempel "10 => add(_, 10) => add(_, 30) => divide(_, 2)".
- Udtrykkene "forsøg .. med" og "tving .. med".
- Udtrykket "wrapper" til oprettelse af typealiasser (f.eks. "wrapper Int Dollars").
Kilde: opennet.ru
