Forwarded from Хреногубка
депутатики госдумы у нас, конечно, охуевшие в край. по другому и не сказать. ильтяков просто конченый.
🤡19🖕10😁4💩4🤬2🍌2🙏1
Блог*
Зачем быть картошкой?
Технологический болт Генона и commit -m "better": рекомендуют канал про IT
Канал про IT:
Канал про IT:
❤13🤡7😁4👎2💯1
#prog #amazingopensource
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
GitHub
GitHub - phiresky/ripgrep-all: rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. - phiresky/ripgrep-all
👍19🥰4👌2
Forwarded from Авва
McMaster-Carr - американская компания, которая продает
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.
https://www.mcmaster.com/
Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:
https://www.youtube.com/watch?v=-Ln-8QM8KhQ
При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).
Много респекта.
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.
https://www.mcmaster.com/
Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:
https://www.youtube.com/watch?v=-Ln-8QM8KhQ
При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).
Много респекта.
Mcmaster
McMaster-Carr
McMaster-Carr is the complete source for your plant with over 700,000 products. 98% of products ordered ship from stock and deliver same or next day.
🔥25👍6🤡2
Forwarded from лингвист реалист
Армянская бабушка на улице отругала меня по-армянски за серёжку в ухе. Мол, ай-яй-яй, в наше время такого ужаса не было.
Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...
Какая-то очень сложная схема сегрегации 😅
Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...
Какая-то очень сложная схема сегрегации 😅
❤16🫡14😁11💯3🤷3
Forwarded from Love. Death. Transformers.
Раньше чтобы тебя не детектили системы как человека надо было носить одежду как справа. Теперь достаточно одежды как слева.
Я напомню что среди DSов есть секта:
ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
Я напомню что среди DSов есть секта:
ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
🌚18😁8🤣3
#prog #rust #rustreleasenotes
Вышла версия Rust 1.83.0! Как всегда, тут только избранные части, а всё остальное в детальных заметках.
▪️В const-контекстах теперь можно использовать
Написание const-кода серьёзно упростилось. Само итоговое значение константы, впрочем, не может быть изменяемой (в том числе через внутреннюю изменяемость) ссылкой.
Также итоговое значение константы теперь может содержать
По понятным причинам итоговое значение константы не может содержать изменяемую (в том числе через внутреннюю изменяемость) ссылку на
▪️Как прямое следствие предыдущего пункта — кучу функций можно теперь использовать в const-контексте, включая множество операций над сырыми указателями (в том числе
▪️Также стабилизировали кучу новых вариантов io::ErrorKind. Забавный факт: эти варианты были и раньше и использовались в std, и в теории по ним можно было матчиться, используя реализацию
▪️Ещё в число стабилизированных API вошли
▪️Одновременные атомарные и неатомарные доступы на чтение из одной локации в памяти одного размера теперь не считаются гонкой данных и потому не являются UB (в C++ — является, поскольку атомарные доступы в C++ происходят через создание atomic_ref, абстрактная машина C++ оперирует типизированной памятью).
▪️Предыдущие версии языка ошибочно считали
следующая функция скомпилируется вне зависимости от того, определена ли она в том же крейте, что и
▪️Из забавного: компилятор теперь выдаёт ошибку на атрибут
Вышла версия 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)]
, применённый на определение, которое не является перечислением, структурой или объединением.👍8❤4🎉2
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.83.0! Как всегда, тут только избранные части, а всё остальное в детальных заметках. ▪️В const-контекстах теперь можно использовать &mut-ссылки, а также &-ссылки на типы с внутренней изменяемостью! const…
Пока готовил список — узнал, что есть нестабильная фича для того, чтобы указывать выравнивание для функций
GitHub
Tracking Issue for `#[repr(align(...))]` on function items (fn_align) · Issue #82232 · rust-lang/rust
This feature allows specifying an alignment for function items by adding the #[repr(align(...))] attribute to them. The feature gate for the issue is #![feature(fn_align)] Example #[repr(align(16))...
👍2
Forwarded from Алиса копается
Последние полторы недели я пилила Lithium — крейт для работы с исключениями в расте.
Exceptions? In my monadic language? It's more likely than you think!
Исключения хороши тем, что они, по сравнению с
Если оставить в стороне вопрос идиоматичности, проблем с исключениями в Rust две: эргономика и производительность. К решению их обеих Lithium подступается, но не завершает, потому что это низкоуровневый крейт с фиксированным скоупом, который должен стать одним кирпичиком, а не быть идеальным решением.
Это пока обзорный пост, чтобы извиниться за лишние пинги оффтопом, потом напишу побольше.
- Эргономика
Для эргономики предоставляются функции
С одной стороны — это требует делать функции unsafe, с другой — если смотреть на существующий растовый код, опирающийся на
По сравнению с Rust-паниками снимается еще одно требование — бросаемый тип не обязан быть
- Производительность
Для производительности пробрасывание исключений идет через наиболее низкоуровневые доступные API, а не через
В API есть еще одна особенность: интерфейс позволяет поймать исключение, промодифицировать его payload и перевыбросить исключение более эффективно, чем в два шага через
Итоговый результат — на большинстве платформ идиоматичный код на Lithium работает в 2.5 раза быстрее идиоматичного кода на паниках, не теряя в экспрессивности.
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 раза быстрее идиоматичного кода на паниках, не теряя в экспрессивности.
Lib.rs
Lithium — system library interface for Rust
Lightweight exceptions
🤔13🔥6👎4👍2😱2🌚1
И да, раз декабрь начался, знаете, что это означает? Всё правильно, это означает Advent of code
👌12🤮4❤🔥3