TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.81K subscribers
Post #493 3.29K
Какие-то энтузиасты сделали свой язык Gauntlet (можно перевести как вызов, когда бросают перчатку в лицо), который почти такой же как Go, только "фиксит раздражающие особенности языка". Транспилируется в Go, так что, как я понял, совместим со всеми гошными либами.

https://github.com/gauntlet-lang/gauntlet

Вот описание от авторов языка, я с половиной не согласен, но в целом что-то в этой идее есть.

Какие проблемы Go решает Gauntlet?

- Раздражающая ошибка "неиспользуемая переменная"
- Многословная обработка ошибок (if err ≠ nil повсюду в вашем коде)
- Неудобный способ импорта и экспорта (например, использование заглавных букв для экспорта)
- Отсутствие тернарного оператора
- Отсутствие выразительной конструкции switch-case
- Сложные циклы for
- Странный оператор присваивания (чья это была идея использовать :=)
- Отсутствие способа плавно связывать функции в цепочки

Возможности языка

- Транспилируется в поддерживаемый, легко читаемый код на Golang
- Использует точно те же соглашения/идиомы, что и Go. Практически отсутствует кривая обучения.
- Последовательный и знакомый синтаксис
- Практически мгновенное преобразование в Go
- Простая установка с помощью единственного самодостаточного исполняемого файла
- Красивая подсветка синтаксиса в Visual Studio Code

Пример

package main

// Seamless interop with the entire golang ecosystem
import "fmt" as fmt
import "os" as os
import "strings" as strings
import "strconv" as strconv


// Explicit export keyword
export fun ([]String, Error) getTrimmedFileLines(String fileName) {
// try-with syntax replaces verbose `err != nil` error handling
let fileContent, err = try os.readFile(fileName) with (null, err)

let fileContentStrVersion = (String)(fileContent) // Type conversion

let trimmedLines =
// Pipes feed output of last function into next one
fileContentStrVersion
=> strings.trimSpace(_)
=> strings.split(_, "\n")


// `nil` is equal to `null` in Gauntlet
return (trimmedLines, null)

}


fun Unit main() {
let a = 1 // No unused variable errors

// force-with syntax will panic if err != nil
let lines, err = force getTrimmedFileLines("example.txt") with err

// Ternary operator
let properWord = @String len(lines) > 1 ? "lines" : "line"

let stringLength = lines => len(_) => strconv.itoa(_)

fmt.println("There are " + stringLength + " " + properWord + ".")
fmt.println("Here they are:")

// Simplified for-loops
for let i, line in lines {
fmt.println("Line " + strconv.itoa(i + 1) + " is:")
fmt.println(line)
}

}


🫥 Cross Join
⠀
GitHub GitHub - gauntlet-lang/gauntlet: A compile-to-Golang programming language designed to alleviate some of Go's design choices 👾 A compile-to-Golang programming language designed to alleviate some of Go's design choices 👾 - gauntlet-lang/gauntlet
  • 🤮 16
  • 🤔 7
  • 🤷‍♂ 4
  • ❤ 3
  • 💩 3
  • 🔥 2
  • 👍 1
  • 💊 1
More from @crossjoin
  1. Sep 29, 2026😱 Отправили свое резюме на 129 вакансий на хх, а в ответ тишина .. Думаете, что дело в ры…
  2. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  3. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  4. Sep 22, 2026photo post
  5. Sep 14, 2026Поможем Руслану собрать фидбек. Проект некоммерческий 👆
  6. Sep 14, 2026AGBX (Agent Box) — небольшой open-source CLI для запуска Claude Code и Codex в изолированн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →