Весь свой выходной день делаю одну штуку, связанную со сравнением значений разными способами (почти как 4 года назад), перечитываю спеку языка раз за разом. И вдруг заметил такое бревно в глазу языке, что теперь не могу развидеть.
В спеке есть понятия comparable и strictly comparable: «The equality operators == and != apply to operands of comparable types. The ordering operators <, <=, >, and >= apply to operands of ordered types». Ordered операторы применяются к ordered типам – всё нормально. А вот equality операторы применяются к comparable типам – используется другое слово, как-то немного странно, но сойдёт.
Но дальше хуже. Есть в стандартной библиотеке пакет
Пошёл смотреть почему же нет
Какая же мораль? Как обычно, NaN всё портит. Go – не такой простой язык, как кажется (никакой язык не такой простой, как кажется, но мы же тут про Go), но английский – ещё сложнее. А мне, видимо, надо отдыхать в выходной день без чтения спеки.
В спеке есть понятия comparable и strictly comparable: «The equality operators == and != apply to operands of comparable types. The ordering operators <, <=, >, and >= apply to operands of ordered types». Ordered операторы применяются к ordered типам – всё нормально. А вот equality операторы применяются к comparable типам – используется другое слово, как-то немного странно, но сойдёт.
Но дальше хуже. Есть в стандартной библиотеке пакет
cmp, название которого явно происходит от слова compare, и название функции Compare говорит о том же. Что должна делать это функция? Если comparable типы – это про equality операторы, то, по идее, она должна просто (может, с поправкой на NaN) использовать ==. Но нет, она использует ordered операторы и типы.Пошёл смотреть почему же нет
cmp.Equal. И это просто портал в ад:
Equal([2]float64{nan, 456}, [2]float64{123, nan}) // true
Какая же мораль? Как обычно, NaN всё портит. Go – не такой простой язык, как кажется (никакой язык не такой простой, как кажется, но мы же тут про Go), но английский – ещё сложнее. А мне, видимо, надо отдыхать в выходной день без чтения спеки.
5👏5👍1🤔1
Не прошло и 11-и лет (а только 10,5): https://github.com/golang/go/issues/12854#issuecomment-4256916067 Осталось 9 месяцев до релиза дотерпеть.
Вообще, интересный тренд, когда добираются до всё более и более старых proposal’ов.
Вообще, интересный тренд, когда добираются до всё более и более старых proposal’ов.
👍18🤔2
В продолжение темы выноса всякого полезного кода из FerretDB: https://github.com/AlekSi/xfail
Очень простоя библиотека для ожидаемо падающих тестов проверяющая, что они всё ещё падают.
Как обычно, ставьте звёзды 😁️️
Очень простоя библиотека для ожидаемо падающих тестов проверяющая, что они всё ещё падают.
Как обычно, ставьте звёзды 😁️️
GitHub
GitHub - AlekSi/xfail
Contribute to AlekSi/xfail development by creating an account on GitHub.
1👍9🤣1
Наконец-то кто-то это сделал, а
go test -fuzz совсем заброшен командой Go: https://blog.trailofbits.com/2026/05/12/go-fuzzing-was-missing-half-the-toolkit.-we-forked-the-toolchain-to-fix-it./The Trail of Bits Blog
Go fuzzing was missing half the toolkit. We forked the toolchain to fix it.
We built gosentry, a fuzzing-oriented fork of the Go toolchain that keeps the standard fuzzing workflow while using a stronger stack underneath.
👍9