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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Хреногубка
депутатики госдумы у нас, конечно, охуевшие в край. по другому и не сказать. ильтяков просто конченый.
🤡19🖕10😁4💩4🤬2🍌2🙏1
Блог*
Зачем быть картошкой?
Технологический болт Генона и commit -m "better": рекомендуют канал про IT

Канал про IT:
13🤡7😁4👎2💯1
#prog #amazingopensource

ripgrep-allripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
👍19🥰4👌2
Forwarded from ен сешмно
🤣12😢5🤔2👍1💔1
Forwarded from Авва
McMaster-Carr - американская компания, которая продает
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.

https://www.mcmaster.com/

Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:

https://www.youtube.com/watch?v=-Ln-8QM8KhQ

При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).

Много респекта.
🔥25👍6🤡2
Армянская бабушка на улице отругала меня по-армянски за серёжку в ухе. Мол, ай-яй-яй, в наше время такого ужаса не было.

Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...

Какая-то очень сложная схема сегрегации 😅
16🫡14😁11💯3🤷3
Раньше чтобы тебя не детектили системы как человека надо было носить одежду как справа. Теперь достаточно одежды как слева.

Я напомню что среди DSов есть секта:

ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
🌚18😁8🤣3
В Армении в последние дни последнего месяца осени пошёл снег. Немыслимо!
🎉4
😭15😁10
Блог*
Я абсолютно ненавижу культуру разработки вокруг BPF
Я ненавижу ошибки верификатора BPF
😁10👍2
Forwarded from someone's shitpost (devilreef)
🤯8🥰5😁1🤔1🥴1
не баян а классика #трудовыебудни
😁14👍9🤔3🔥1🤯1
#prog #rust #rustreleasenotes

Вышла версия Rust 1.83.0! Как всегда, тут только избранные части, а всё остальное в детальных заметках.

▪️В const-контекстах теперь можно использовать &mut-ссылки, а также &-ссылки на типы с внутренней изменяемостью!

const fn inc(x: &mut i32) {
*x += 1;
}

const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};


Написание const-кода серьёзно упростилось. Само итоговое значение константы, впрочем, не может быть изменяемой (в том числе через внутреннюю изменяемость) ссылкой.

Также итоговое значение константы теперь может содержать &-ссылку на static, если в типе нет внутренней изменяемости.

static S: i32 = 25;
const C: &i32 = &S;


По понятным причинам итоговое значение константы не может содержать изменяемую (в том числе через внутреннюю изменяемость) ссылку на static.

▪️Как прямое следствие предыдущего пункта — кучу функций можно теперь использовать в const-контексте, включая множество операций над сырыми указателями (в том числе NonNull) и различные функции для разбиения мутабельных слайсов на части.

▪️Также стабилизировали кучу новых вариантов io::ErrorKind. Забавный факт: эти варианты были и раньше и использовались в std, и в теории по ним можно было матчиться, используя реализацию Display. Ещё забавный факт: стабилизацию всех этих вариантов и ещё некоторых запланировали 23 месяца назад, но первый PR со стабилизацией застопорился из-за некоторых вариантов, которые были слишком специфичны для конкретных операционных систем. Собственно, новый PR со стабилизацией приняли лишь потому, что эти варианты из списка на стабилизацию выкинули.

▪️Ещё в число стабилизированных API вошли hash_map::{Entry, VacantEntry}::insert_entry. Эти методы вставляют переданное значение, но, в отличие от insert, возвращают не мутабельную ссылку на значение, а OccupiedEntry.

▪️Одновременные атомарные и неатомарные доступы на чтение из одной локации в памяти одного размера теперь не считаются гонкой данных и потому не являются UB (в C++ — является, поскольку атомарные доступы в C++ происходят через создание atomic_ref, абстрактная машина C++ оперирует типизированной памятью).

▪️Предыдущие версии языка ошибочно считали #[non_exhaustive]-структуры с ненаселёнными полями населёнными типами вне крейта, в которых они определены. В этой версии это странное поведение исправили. Для пользователей языка это означает, что, например, с вот таким определением:

enum Empty {}

#[non_exhaustive]
struct Foo(Empty);


следующая функция скомпилируется вне зависимости от того, определена ли она в том же крейте, что и Foo, или нет:

fn eliminate<T>(f: Foo) -> T {
match f {}
}


▪️Из забавного: компилятор теперь выдаёт ошибку на атрибут #[repr(Rust)], применённый на определение, которое не является перечислением, структурой или объединением.
👍84🎉2
Последние полторы недели я пилила Lithium — крейт для работы с исключениями в расте.

Exceptions? In my monadic language? It's more likely than you think!

Исключения хороши тем, что они, по сравнению с Result, добавляют меньше оверхеда в success path, и поэтому, если ошибки случаются достаточно редко, оказывается выгодным их использовать для передачи ошибок.

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

Это пока обзорный пост, чтобы извиниться за лишние пинги оффтопом, потом напишу побольше.

- Эргономика

Для эргономики предоставляются функции throw и catch, аналогичные конструкциям из других языков. throw бросает произвольный T, catch ловит произвольный T, никакой проверки типов нет.

С одной стороны — это требует делать функции unsafe, с другой — если смотреть на существующий растовый код, опирающийся на Result, то там это требование всегда исполняется, поэтому проверка типов только добавила бы оверхед.

По сравнению с Rust-паниками снимается еще одно требование — бросаемый тип не обязан быть Send + 'static, поэтому можно спокойно бросать, например, ссылки на Cell.

- Производительность

Для производительности пробрасывание исключений идет через наиболее низкоуровневые доступные API, а не через panic!. В случае большинства платформ это Itanium EH, на Windows это SEH. Это несколько уменьшает оверхед от вызовов, а также в большинстве случаев позволяет снизить количество аллокаций до нуля.

В API есть еще одна особенность: интерфейс позволяет поймать исключение, промодифицировать его payload и перевыбросить исключение более эффективно, чем в два шага через catch + throw. Такое переиспользование буфферов тоже несколько увеличивает перф.

Итоговый результат — на большинстве платформ идиоматичный код на Lithium работает в 2.5 раза быстрее идиоматичного кода на паниках, не теряя в экспрессивности.
🤔13🔥6👎4👍2😱2🌚1
В СМЫСЛЕ УЖЕ ДЕКАБРЬ
🤡11🙏3😭3😁1
И да, раз декабрь начался, знаете, что это означает? Всё правильно, это означает Advent of code
👌12🤮4❤‍🔥3