How to Go wrong
1.23K subscribers
9 photos
1 video
168 links
Download Telegram
NilAway: Practical Nil Panic Detection for Go

Конечно, все любители Rust’а уже опять написали какой у них прекрасный язык
Open Source Supply Chain Security at Google: http://research.swtch.com/acmscored
Forwarded from Go Update
🔒proposal: Tuple Types for Go

Я наконец оправился после конференции, а ребята из Go Core Team ненадолго вернулись к обсуждениям после ноябрьских праздников в США, перед тем как снова уйдут уже на рождественский отдых.

Итак, на повестке дня у нас новый тип - кортеж. Вообще кортежи много где встречаются - от sql до python. Идея проста: нужно хранить несколько значений друг с другом в одной конструкции и иметь доступ к ним по индексу. Условно говоря это такой массив фиксированной длины, у которого элементы могут быть разного типа.

И тут появляется традиционный вопрос - а зачем? Их много раз предлагали, но каждый раз упирались в вопрос "А чем мало простых структур?". И ведь правда, обычно структур должно хватать за глаза, а там где очень хочется можно притянуть множественный возврат из функции (тоже, кстати, своего рода кортеж). Но сила кортежей не в инновациях, а в облегчении каждодневной разработки. А именно в этих двух вещах:

• Для кортежа не нужно создавать отдельный тип (но можно). Ближайший аналог это анонимная структура, только в случае кортежа не нужно указывать имена полей.

• Для распаковки и упаковки кортежей в несколько переменных в язык добавляются специальные конструкции.

Посмотря на количество предложений, ребята наконец назрели и решили провести эксперимент по итогу которого сделали свое предложение: в их случае синтаксис выглядит как-то так:


val := (1, "foo", false)
x, y, z := val...
fn(val...) // вызываем функцию в которую распаковываем кортеж

func fn(int, string, bool) { ... }


Так-же можно получить конкретный элемент:


val := (1, "foo", false)
x := val.0 // получаем первый элемент


Функции тоже могут возвращать кортежи, но выглядит это немного странно (по причине обратной совместимости):


func f() ((int, int)) { // обратите внимание на двойные скобки


Однако по мнению Go Core Team это не настолько нужно, чтобы внедрять принципиально новый тип в язык. Поэтому сам proposal это даже не предложение, а скорее заметка о том, какое исследование они провели внутри Google и какие выводы сделали. Выводы кстати простые: делать они эту фичу не будут.

На мой взгляд, здесь они правы, так как для полноценного внедрения кортежей нужно было бы решать вопрос с возвратом функций без этих ужасных двойных скобок. Да и анонимные структуры решают 80% описанных проблем. Однако само исследование породило интересные выводы о том как можно улучшить язык не внедряя новые типы. Об этом мы поговорим в следующий раз.

P.S. И да я очень надеюсь вывести количество заметок хотя-бы до трех в месяц 😆️️️️️️
How to Go wrong
rsc прыгнул на pkg/: https://github.com/golang-standards/project-layout/issues/117
Не прошло и три го… а, нет, уже прошло. Тем не менее, теперь у нас есть официальная документация по этому поводу: https://go.dev/doc/modules/layout 🎉

Выпиливайте ваши pkg/.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вы, наверное, знаете (или подозреваете), wiki на GitHub’е не индексируются поисковиками. Сайты вроде https://zchee.github.io/golang-wiki/ появились для решения этой проблемы. Но скоро они уйдут в небытие: в конце года появился https://go.dev/wiki/. Правда, некоторые ссылки там сейчас сломаны, но, думаю, поправят.
Все написали, и Russ Cox написал:
* https://research.swtch.com/xz-script
* https://research.swtch.com/xz-timeline
Я как-то пропустил, но уже с версии 1.21 можно пересобрать Go с `GOEXPERIMENT=cacheprog`, потом определить переменную GOCACHEPROG и сделать свой распределённый кэш компиляции.
А сейчас вернулись к обсуждения включения этого механизма без эксперимента.
К слову про тулинг. Bryan C. Mills, один из майнтейнеров go CLI, модулей и прочего, ушёл из Google и Go Team.
Казалось бы – ну и ладно. Но, например, уход обоих оригинальных авторов fuzzing’а в Go фактически сломал его. Так что небольшой повод для волнения есть.
В 1.23 завезут то, что в моём детстве было ON ERROR GOTO Handler (ну, почти).
Если вы зачем-то хотите писать на Go как на Rust’е, то теперь вы можете: https://github.com/borgo-lang/borgo

EDIT: Хотя нет, пока не можете.
How to Go wrong
rsc выложил исходники: https://github.com/rsc/gaby
Ждём изменений в языке специально для AI (типа таких) уже в 1.23: https://github.com/golang/oscar

/s