NilAway: Practical Nil Panic Detection for Go
Конечно, все любители Rust’а уже опять написали какой у них прекрасный язык
Конечно, все любители Rust’а уже опять написали какой у них прекрасный язык
Новому Go – новый
runtime/trace
: https://github.com/golang/go/issues/60773GitHub
runtime/trace: execution tracer overhaul · Issue #60773 · golang/go
Execution tracer overhaul Authored by mknyszek@google.com with a mountain of input from others. In no particular order, thank you to Felix Geisendorfer, Nick Ripley, Michael Pratt, Austin Clements,...
Open Source Supply Chain Security at Google: http://research.swtch.com/acmscored
maps.Clone
был сломан несколько месяцев и никто не заметил: https://github.com/golang/go/issues/64474GitHub
maps: maps.Clone reference semantics when cloning a map with large value types · Issue #64474 · golang/go
Go version go version go1.21.4 linux/amd64 What operating system and processor architecture are you using (go env)? GO111MODULE='' GOARCH='amd64' GOBIN='' GOCACHE='/home...
Forwarded from Go Update
🔒proposal: Tuple Types for Go
Я наконец оправился после конференции, а ребята из Go Core Team ненадолго вернулись к обсуждениям после ноябрьских праздников в США, перед тем как снова уйдут уже на рождественский отдых.
Итак, на повестке дня у нас новый тип - кортеж. Вообще кортежи много где встречаются - от sql до python. Идея проста: нужно хранить несколько значений друг с другом в одной конструкции и иметь доступ к ним по индексу. Условно говоря это такой массив фиксированной длины, у которого элементы могут быть разного типа.
И тут появляется традиционный вопрос - а зачем? Их много раз предлагали, но каждый раз упирались в вопрос "А чем мало простых структур?". И ведь правда, обычно структур должно хватать за глаза, а там где очень хочется можно притянуть множественный возврат из функции (тоже, кстати, своего рода кортеж). Но сила кортежей не в инновациях, а в облегчении каждодневной разработки. А именно в этих двух вещах:
• Для кортежа не нужно создавать отдельный тип (но можно). Ближайший аналог это анонимная структура, только в случае кортежа не нужно указывать имена полей.
• Для распаковки и упаковки кортежей в несколько переменных в язык добавляются специальные конструкции.
Посмотря на количество предложений, ребята наконец назрели и решили провести эксперимент по итогу которого сделали свое предложение: в их случае синтаксис выглядит как-то так:
Так-же можно получить конкретный элемент:
Функции тоже могут возвращать кортежи, но выглядит это немного странно (по причине обратной совместимости):
Однако по мнению Go Core Team это не настолько нужно, чтобы внедрять принципиально новый тип в язык. Поэтому сам proposal это даже не предложение, а скорее заметка о том, какое исследование они провели внутри Google и какие выводы сделали. Выводы кстати простые: делать они эту фичу не будут.
На мой взгляд, здесь они правы, так как для полноценного внедрения кортежей нужно было бы решать вопрос с возвратом функций без этих ужасных двойных скобок. Да и анонимные структуры решают 80% описанных проблем. Однако само исследование породило интересные выводы о том как можно улучшить язык не внедряя новые типы. Об этом мы поговорим в следующий раз.
P.S. И да я очень надеюсь вывести количество заметок хотя-бы до трех в месяц 😆️️️️️️
Я наконец оправился после конференции, а ребята из 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. И да я очень надеюсь вывести количество заметок хотя-бы до трех в месяц 😆️️️️️️
GitHub
proposal: Tuple Types for Go · Issue #64457 · golang/go
NOTE: This is a write-up of an internally worked out idea for tuple types, inspired by some of the tuple proposals listed below. The primary reason for this write-up is simply to document this work...
На Хеллоуин не успели, но лучше поздно, чем никогда: https://go.dev/blog/deadcode
go.dev
Finding unreachable functions with deadcode - The Go Programming Language
deadcode is a new command to help identify functions that cannot be called.
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/. Правда, некоторые ссылки там сейчас сломаны, но, думаю, поправят.
Мне тоже Go помогает выживать, но не настолько буквально: https://www.bytesizego.com/blog/keeping-alive-with-go
ByteSizeGo
How I keep myself Alive using Golang
In this blog I explore how I use an incident management mindset to manage a complex medical condition. I hope you enjoy it!
Все написали, и Russ Cox написал:
* https://research.swtch.com/xz-script
* https://research.swtch.com/xz-timeline
* https://research.swtch.com/xz-script
* https://research.swtch.com/xz-timeline
Я как-то пропустил, но уже с версии 1.21 можно пересобрать Go с `GOEXPERIMENT=cacheprog`, потом определить переменную
А сейчас вернулись к обсуждения включения этого механизма без эксперимента.
GOCACHEPROG
и сделать свой распределённый кэш компиляции.А сейчас вернулись к обсуждения включения этого механизма без эксперимента.
К слову про тулинг. Bryan C. Mills, один из майнтейнеров
Казалось бы – ну и ладно. Но, например, уход обоих оригинальных авторов fuzzing’а в Go фактически сломал его. Так что небольшой повод для волнения есть.
go
CLI, модулей и прочего, ушёл из Google и Go Team.Казалось бы – ну и ладно. Но, например, уход обоих оригинальных авторов fuzzing’а в Go фактически сломал его. Так что небольшой повод для волнения есть.
В 1.23 завезут то, что в моём детстве было ON ERROR GOTO Handler (ну, почти).
Если вы зачем-то хотите писать на Go как на Rust’е, то теперь вы можете: https://github.com/borgo-lang/borgo
EDIT: Хотя нет, пока не можете.
EDIT: Хотя нет, пока не можете.
GitHub
GitHub - borgo-lang/borgo: Borgo is a statically typed language that compiles to Go.
Borgo is a statically typed language that compiles to Go. - borgo-lang/borgo
I think it would be impractical from a process perspective to add ssa-based analyzers to go vet
Любопытно. nilness checker написали уже давно, но запускать по-умолчанию не будут.
Любопытно. nilness checker написали уже давно, но запускать по-умолчанию не будут.
GitHub
proposal: cmd/vet: enable nilness checker by default · Issue #59714 · golang/go
Summary Consider enabling the nilness linter by default on go vet (and therefore go test). Details The nilness linter searches for potential nil pointer dereferences in code. It is not enabled by d...
GitHub
gabyhelp feedback · golang/go · Discussion #67901
I am experimenting with running a new bot @gabyhelp (which I am writing) in the Go issue tracker to try to help automate various mundane things that a machine can do reasonably well. Some aspects o...
Ну что ж, молчать про итераторы больше нельзя: https://www.gingerbill.org/article/2024/06/17/go-iterator-design/
www.gingerbill.org
Why People are Angry over Go 1.23 Iterators
NOTE: This is based on, but completely rewritten, from a Twitter post: https://x.com/TheGingerBill/status/1802645945642799423
TL;DR It makes Go feel too “functional” rather than being an unabashed imperative language.
I recently saw a post on Twitter showing…
TL;DR It makes Go feel too “functional” rather than being an unabashed imperative language.
I recently saw a post on Twitter showing…