1.83K subscribers
3.3K photos
131 videos
15 files
3.57K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Плюсы и минусы калькулятора

Плюсы:
Минусы:
👍2😁1
Пока что самая оригинальная открытка, которую видел
Forwarded from 🇺🇦 Go for two :)
Happy New Year’; DROP TABLE 2020;--
Эт самое
С Новым Годом
Не ждите ни развёрнутых новогодних представлений — их вы и так уже услышали достаточно, чтобы они смешались в однородную массу счастьяздоровьябогаствавсегонаилучшего — ни итогов года, потому что, во-первых, они переоценены, а во-вторых, я уже суммировал всё, что мне было важно, на дне рождения Блог*а (https://t.iss.one/dereference_pointer_there/1405), и с тех пор ничего нового не прибавилось
Forwarded from мне не нравится реальность (вафель 🧇🍓)
ah yes день "и тебя тоже"
Блог*
Лучший пост?
Опрос завершён (с всего 89 голосов — где вы все?!). Не буду проходится по всем пунктам — иначе это слишком уж походит на самолюбование — хочу отметить лишь наиболее популярный вариант.

Пост про регулярные выражения. Честно говоря, я удивлён. Ну то есть, я писал о куда как более продвинутых вещах, а здесь я даже кода никакого не привёл. В чём же дело? Я вижу две возможные причины.

Во-первых, это тема, понятная и близкая многим разработчикам, да и, в общем-то, также и некоторым из тех, кто программистом не является. Остальные авторские посты у меня погружаются в костыли тонкости Rust — языка всё ещё не особо широко распространённого, а регулярные выражения — это то, пост про что можно скинуть коллеге.

Во-вторых, да, тон поста. Если в других постах я обычно стараюсь выдерживать относительно нейтральный тон, то тут я дал волю своему раздражению и щедро сдобрил пост речевой мишурой. Является ли это фактором внимания в силу самого тона как такого или в силу того, что пост столь сильно выбивается среди остальных — мне неизвестно.

А что вы можете сказать по этому поводу? Серьёзно, почему?
#prog #rust #rustreleasenotes

А тем временем вышла версия Rust 1.49.0 🎉. Конечно, вы можете прочитать пост в официальном блоге, но там по традиции пишут не всё, а я, как обычно, нововведения обозреваю выборочно.

Наиболее значимое с точки зрения кровавого энтерпрайза изменение — это поднятие уровня поддержки таргета aarch64-unknown-linux-gnu до tier 1, то есть компилятор гарантированно собирает исполняемые файлы для данной платформы, и для этой платформы обязательны прохождения полного набора тестов. Это изменение значимо не только из-за того, что убирает одно из препятствий на пути к использованию Rust на всё растущем количестве ARM-устройств, но и потому, что это первая не-x86 платформа, которая добралась до tier 1. Это не единственный ARM-таргет, получивший внимание — до tier 2 подняли поддержку aarch64-apple-darwin (да, это M1) и aarch64-pc-windows-msvc.

Впрочем, для тех, кто разрабатывает на Rust под x86, это не столь интересное изменение. А вот что является универсальным улучшением — так это появившаяся теперь возможность привязывать в одном и том же паттерне одновременно и по значению, и по ссылке — честно говоря, я удивлён, что про это в официальном блоге ничего не сказано. Короткий пример:

let [foo, ref bar] = [String::from("foo"), String::from("bar")];

Неразмеченные объединения (union) теперь могут реализовывать Drop. Стабилизирована эта фича именно так, как и предполагалась: в объединении всё так же не разрешается иметь поля, реализующие Drop, так что их надо заворачивать в ManuallyDrop. Для конечных пользователей языка это означает главным образом то, что всякие SmallVec/SmallString, хранящие элементы на стеке при небольшом их количестве, теперь могут переиспользовать память при помощи union на стабильной версии компилятора и не хранить тег, то есть простое обновление компилятора и библиотеки срежет несколько байт с размеров этих типов вообще без каких-либо дополнительных телодвижений. Ну, в идеале.

Массивы всех размеров теперь реализуют Index{, Mut}<всё, чем можно индексировать слайс>. Казалось бы, мелочь, поскольку индексация работала и до этого через deref coercion, но до влития этого PR реализация для массива индексации собственным типом ломала индексацию через usize и всякие Range*.

Ну и наконец, как я уже писал, наконец-то стабилизировали select_nth_unstable{, _by{, _key}}, ю-ху! Теперь можно на изи извлекать n наименьших/наибольших элементов без аллокаций. Дупликации кода тут нет, поскольку это те же алгоритмы, которые и так использовались внутри реализации нестабильных сортировок (что, впрочем, лишь усиливает вопросы о причине долгого срока стабилизации).

Короче — хороший, годный релиз.

P. S.: так как я тоже писал не всё — вот полные записи о релизе.
std::collections::linkedin_list
Forwarded from Tester of QA
Краткое пособие по эффективному мотивационному менеджменту в картинках.
std::iter::Irritator
#prog #meme #haskell

Для тех, кто в теме
Forwarded from oleg_log (Oleg Kovalov)
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да?

Наверное каждый хоть раз обжигался о
for k, v := range foo {
go run(k,v)
}


или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал, что давайте от этого уйдём (в го2, когдатотам) https://github.com/golang/go/issues/20733

Там забавный комент добавили, может слышали, Let's Encrypt недавно откатили 3М+ сертификатов. Угадайте из-за чего)))

https://github.com/letsencrypt/boulder/pull/4690/files#diff-d02067a9f9a2bed1110fd4e98641c2effcf5d1d5f18461e35d6ac1535f6e2c21L1411-R1414
#prog #go

Несколько более подробно про инцидент. Это к вопросу о том, чем плох Go и почему мутабельность и разделяемость плохо сочетаются.

Суть ошибки состоит в том, что в неправильном коде переменная цикла захватывалась по указателю, то есть та самая переменная, которая меняется на каждой итерации. Это привело к тому, что позднее вместо вызова проверки для каждого из N элементов списка она вызывалась N раз для одного и того же элемента. И это известная ловушка.

Неприятной особенностью этого паттерна ошибки является то, что переменная может быть захвачена по указателю даже в том случае, если от неё не берётся явно адрес — можно вызвать на значении метод, принимающий значение по указателю, и это синтаксически неотличимо от вызова метода, принимающего значение по, собственно, значению. Также можно нарезать слайс, и синтаксически это не выглядит как взятие указателя, хотя и является семантически.
#prog

Антоша опять делает интересные вещи. Жаль, пока что не хватает кнопки "назад". И fuzzy search имеет смысл чуток подкрутить, потому что когда на Sif находятся sift — это как-то не очень.