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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #rust #article

Небольшая заметка о том, как можно ограничить видимость реализации трейта, используя исключительно имеющиеся возможности системы типов Rust.
#prog #go #article

Статья о внутреннем устройстве map в Go. К сожалению, в статье длиннющая преамбула о различных вариантах реализации хэш-таблиц в разных языках и крайне мало о собственно реализации в Go.

Ключевая фишка реализации — фактически нетипизированная реализация мапы как таковой, отвечающая структуре hmap. Поле buckets имеет тип unsafe.Pointer, который является аналогом void* из C: может указывать на что угодно. В контексте Go примечателен ещё и тем, что, в отличие от встроенных указателей, он не отслеживается сборщиком мусора. Все мало-мальски интересные функции, манипулирующие map, принимают также указатель на значение типа maptype. В нем описаны характеристики хэш-таблицы — такие, как размер ключей, значений, бакетов, хранятся ли они значения по месту или же хранятся лишь указатели на них, а также функция для хэширования ключей и (через поле тип type_) функции для сравнения значений ключей и значений. Откуда берутся значения для maptype? А их генерирует компилятор автоматически, когда переписывает обращения к map через функции типа mapaccess1/mapaccess2. На этапе же компиляции он может проверить, что для типа ключа map определены операции хэширования и сравнения.

Не знаю, как вам, а мне эта картина кажется весьма шаткой, особенно с учётом комментариев вроде "сохраняйте это определение структуры согласованным с вот этим местом в реализации рефлексии и той части компилятора, которая обходит AST". Ну и дублирование кода между mapaccess1/mapaccess2 не может не радовать.
Forwarded from Generative Anton (Anton Repushko)
Если быстро выдернуть чеку у гранаты и поднести ухо к дыре, где была чека, можно услышать, как увеличивается средний мировой IQ.
В разработке пост с рабочим названием "как быть, если тебе нужно написать простенький парсер, но nom выглядит перебором"
Forwarded from crates.io updates (crates.io update notifier bot)
Crate was updated: err_or#0.1.0 [docs.rs] [crates.io] [lib.rs]
Forwarded from мне не нравится реальность (вафель 🧇🍓)
А я тут маленький крейтик релизнул 👀

Он добавляет методы Option::{err_or,err_or_else} аналогичные к Option::{ok_or,ok_or_else}
xxx:

    // This call is safe since ...
unsafe { ... }

yyy:

.. tomorrow (простите)

#quotes #трудовыебудни
#prog #suckassstory

1С — это не просто язык, это образ мышления.
Forwarded from Санечка Ъысь (ǺʎĔĶ₡Ǻ)
Когда у меня спрашивают, почему я не люблю одинэсников. Хотя бы, блять, за это.
Из рабочей переписки. В общем, базу товаров синхронизируем в 1С и мускуле.
Санечка Ъысь
Когда у меня спрашивают, почему я не люблю одинэсников. Хотя бы, блять, за это. Из рабочей переписки. В общем, базу товаров синхронизируем в 1С и мускуле.
"1C — врождённое генетическое заболевание. Когда-нибудь генная инженерия позволит исправлять такие промахи при планировании беременности"

#quotes от подписчика, попросившего его (или её?) не называть
#prog #video

Доклад Юрия Богомолова о том, как применили схемы рекурсии (recursive schemes) применительно к реальной задаче. Неплохой пример практичности ФП (пусть и на немножко хреновом ЯП TypeScript).

Могу со своей стороны добавить, что введение, на мой взгляд вышло чересчур сжатым, так что если вы раньше не знали, что такое схемы рекурсии, то не факт, что понимания добавится именно после просмотра этого доклада
А вот и пример в коде — как раз для тех, кто такой просил после доклада
После доклада ко мне приходили с вопросами про схемы, просили примеров использования в реальном мире… Поэтому я собрал и выложил на гитхаб реализацию схем рекурсии на TypeScript, с учетом свежей версии fp-ts:
https://github.com/YBogomolov/ts-recursion-schemes-playground

Как всегда, есть нюансы — например, для стэкобезопасной реализации Cofree необходима такая конструкция как Eval — которую я решил не тащить в примеры ввиду ее многословности, а ограничился простым ручным трамполайнингом. Но для общего понимания схем этого будет достаточно, по-моему.

Спасибо @xgrommx за идею собрать этот пример 🙂
#prog #rust #article

Небольшая статья о том, как Rust помогает в написании производительного и корректного кода.
Кошкодевочки
7🤮3💩2❤‍🔥1👍1👎1
#prog #rust

Хозяйке на заметку

Что делать, если есть три целочисленные переменные и нужно инкрементировать наименьшую из них (без разницы, какую, если две или три имеют равное значение)? Воспользуемся тем фактом, что для мутабельных ссылок реализован Ord:

let (mut a, mut b, mut c) = (12, 33, 9);
*(&mut a).min(&mut b).min(&mut c) += 1;
assert_eq!((a, b, c), (12, 33, 10));
1