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...
Forwarded from Блог*
#prog #amazingopensource
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
wuffs (Wrangling Untrusted File Formats Safely) — язык (и компилятор) для написания программ обработки данных, который компилируется в C. Язык намеренно весьма ограниченный — в частности, в нём отсутствует IO и способы динамически управлять памятью, да и в принципе доступ к сисколам. Язык также memory safe: компилятор отказывается компилировать программу, в которой индексы выходят за границу массива (а также если в ней где-то есть переполнение).
Несмотря на ограниченность языка и намеренно простые проверки диапазонов переменных, на практике он с успехом подходит для написания (де)кодировщиков медиаформатов — реализации на wuffs по производительности обгоняют существующие реализации на C и Rust.
(thanks @experimentalchill за привлечение внимания к этой вещи — взято из поста про ошибки реализации в CRC32 в Linux)
GitHub
GitHub - google/wuffs: Wrangling Untrusted File Formats Safely
Wrangling Untrusted File Formats Safely. Contribute to google/wuffs development by creating an account on GitHub.
tl;dr: Диффузионную модель обучили делать оптические иллюзии и визуальные анаграммы
https://dangeng.github.io/visual_anagrams/
https://dangeng.github.io/visual_anagrams/
dangeng.github.io
Visual Anagrams
Optical illusions zero-shot from diffusion models.
Интерактивные заметки к грядущему релизу go 1.22 https://antonz.org/go-1-22/
antonz.org
Go 1.22: Interactive release notes
Isolated loop variables, range over integers, math/rand v2 and enhanced routing.
☕️ Мерлин заваривает τσάι 🐌
Интерактивные заметки к грядущему релизу go 1.22 https://antonz.org/go-1-22/
В комментах справедливо поинтересовались — не сломает ли старый код новая семантика for-циклов?
Я прогнал тесты для kubernetes, hugo, minio и caddy — все зелёные.
Кажется, что вероятность нарваться на обратную несовместимость почти пренебрежимо мала 🤔
Я прогнал тесты для kubernetes, hugo, minio и caddy — все зелёные.
Кажется, что вероятность нарваться на обратную несовместимость почти пренебрежимо мала 🤔
Писать падающий тест, чтобы начать следовать методичке TDD 🙅
Писать падающий тест, чтобы завтра вспомнить на чём ты остановился 🙌
Писать падающий тест, чтобы завтра вспомнить на чём ты остановился 🙌
☕️ Мерлин заваривает τσάι 🐌
Кстати вчера был день уничтожения оспы, с чем я вас и поздравляю
Поздравляю, человечество загеноцидило один из очень неприятных штаммов вируса гриппа https://en.wikipedia.org/wiki/Influenza_B_virus
Выступление Торвальдса о rust в ядре Линукса https://www.youtube.com/watch?v=YyRVOGxRKLg
YouTube
Torvalds Speaks: Rust's Impact on the Linux Kernel
🚀 **Linux Torvalds Reveals Insights on Rust Programming Language!**
In this exclusive interview, dive deep into the world of open-source programming as Linux creator Linus Torvalds shares his thoughts on the Rust programming language. Learn about the potential…
In this exclusive interview, dive deep into the world of open-source programming as Linux creator Linus Torvalds shares his thoughts on the Rust programming language. Learn about the potential…
PascalPosterV3 A1.pdf
1.2 MB
Плакат с синтаксисом apple pascal