Первый альфа-выпуск языка Gauntlet добавляет новый взгляд на программирование на Go. Этот язык, представляющий собой надстройку над Go, устраняет множество архитектурных ограничений и вводит дополнительные функции, при этом поддерживая полную совместимость с Go. Gauntlet позволяет транслировать код в стандартный Go и интегрироваться с существующими проектами без необходимости создания дополнительных обвязок. Разработанный на F#, инструментарий Gauntlet доступен под лицензией GPLv3 и уже включает расширение для редактора VSCode, что упрощает его использование и исследование функционала.
Рассмотрим проблемы, которые устраняет Gauntlet. Во-первых, он решает вопрос, связанный с надоедливым предупреждением о неиспользуемых переменных, автоматически добавляя заглушки вида _ = a
для таких случаев. Это упрощает написание кода и уменьшает количество ненужных предупреждений. Далее, проблема раздутого кода для обработки ошибок решается через введение однострочных выражений "try-with", заменяющих традиционные условные конструкции "if err != nil". Это позволяет сделать код чище и лаконичнее.
Импорт и экспорт в Go требуют, чтобы экспортиуемые имена начинались с заглавной буквы, что Gauntlet оптимизирует, предлагая более интуитивный подход. Также добавление тернарного оператора позволяет использовать компактные выражения, такие как let properWord = @String len(lines) > 1 ? "lines" : "line"
. Кроме того, Gauntlet вводит альтернативный синтаксис для switch-case, упрощает циклы "for" и обеспечивает возможность вызова функций по цепочке. Например, вместо стандартного подхода в Go, Gauntlet позволяет записать let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, "\n")
, делая процесс трансформации данных более последовательным.
Gauntlet расширяет стандартный синтаксис Go через нововведения, такие как "when-is", аналогичный switch-case, но управляющий выражениями. Помимо этого, поддержка "pipe-каналов" позволяет значительно улучшить читаемость кода, упрощая последовательную обработку значений в цепочке функций, например 10 => add(_, 10) => add(_, 30) => divide(_, 2)
. Try .. with
и force .. with
выражения делают код более безопасным и устойчивым к ошибкам, а использование "wrapper" позволяет создавать псевдонимы для типов, что облегчает управление сложными структурами данных. Gauntlet предлагает свежий взгляд на программирование, улучшая мощные возможности Go и предлагая новые подходы к решению общих проблем разработки.