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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
В СМЫСЛЕ УЖЕ АПРЕЛЬ
This media is not supported in your browser
VIEW IN TELEGRAM
👎11👍3
Блог*
#prog #performancetrap #go #article Generics can make your Go code slower (перевод) (thanks @go_perf)
Отвечая на закономерный вопрос "Какого фига": это — закономерный результат стратегии имплементации обобщённых функций. Вместо того, чтобы делать по реализации обобщённой функции на каждый тип, компилятор Go делает по реализации на каждую GC shape. Это "форма с точки зрения сборщика мусора" определяется одинаковой у каждой пары типов, если: у них одинаковый underlying type (в смысле встроенного в Go формы strong typedef); или если они оба являются указателями. Любыми.

Разумеется, в обобщённые функции надо всё-таки как-то прокидывать методы от конкретных типов. И делается это при помощи словаря с типами, который является генерируемым компилятором статическим значением и который прокидывается неявным аргументом в каждую обобщённую функцию (это похоже на то, во что компилируются классы типов в Haskell во время компиляции в GHC Core). Так как у обобщённой функции может быть больше одного тИпового параметра, этот словарь передаётся по указателю.

Что же происходит при вызове метода из ограничения на обобщённый тип? Сначала из словаря по указателю загружается описание нужного типа. Затем из этого описания по статически известному смещению загружается адрес функции. Только после этого происходит собственно вызов. Для сравнения, интерфейсы в том же Go реализованы через толстые указатели, поэтому там только два шага: считать адрес функции из таблицы и вызвать её.

В общем, для дженериков получается куча лишних шагов. И хотя сам по себе косвенный вызов — не такой уж большой оверхед, само наличие косвенного вызова предотвращает возможности инлайнинга и последующих оптимизаций. Отсюда и выходит фиговая производительность. Особенно в статье автор отмечает: "This is possibly the most salient point of this analysis: passing interfaces to a generic function in Go is never a good idea". Почему? Да потому что интерфейсы в Go уже подразумевают косвенность, и при передаче в обобщённую функцию эта косвенность только добавляется.

И вот сейчас мне хотелось бы похвалить Rust. Он не только предоставляет выбор между статическим и динамическим полиморфизмом — он ещё и позволяет написать статическую версию и получить автоматом версию с динамическим полиморфизмом в подарок абсолютно бесплатно: достаточно привести явно тип аргумента к (указателю) на dyn Trait. Всё это — без дупликации кода со стороны программиста.
👍16👎1🔥1
Forwarded from Backtracking (Дима Веснин)
что общего у следующих игр?

1. игр на досках в 8 или 10 рядов (как индийские игры аштапада и дасапада)
2. игр на вымышленных досках (как шахматы с завязанными глазами)
3. игр, в которых нужно кидать кубик
4. игр с мячом
5. игр с ветряными мельницами сделанных из пальмовых листьев
6. игр, в которых нужно угадывать мысли друзей
7. игр, имитирующих деформации
8. игр, в которых нужно пахать игрушечным плугом

эти и некоторые другие игры можно найти в статье википедии «‎List of games that Buddha would not play»
👍1
Патриотизм — это, на самом деле, так тупо
👍16👎9🤮9🤔3💩3
Forwarded from Чылік
Забалтывание
20👍10🤮3🤬2
«У России три пути: вебкам, закладки и айти»

> OnlyFans приостанавливает работу аккаунтов из России
> полиция Германии ликвидирует Гидру
> Интел полностью останавливает работу в России

У России… нет путей?
🤔20👍9😢62
Forwarded from partially unsupervised
Существует известная проблема из области социологии: как получить более или менее честные данные в количественном исследовании, если респонденты не хотят/боятся/стыдятся отвечать честно.

И вот случайно наткнулся на простой и изящный подход в духе differential privacy. TL;DR - формируем список из N утверждений, делим респондентов на две группы, одной показываем все N утверждений, другой - все, кроме того самого чувствительного. Вопрос формулируется как "с каким количеством утверждений (неважно, каких именно) вы согласны", и по разнице между группами легко вывести истинную поддержку.

Должно подойти не только для опросов про войну, но и для user research.
🔥11