#prog #rust #article
bzip2 crate switches from C to 100% rust
TL;DR: новая версия кода быстрее реализации на C и за счёт того, что написана на Rust, проще кросс-компилируется.
bzip2 crate switches from C to 100% rust
Why bother working on this algorithm from the 90s that sees very little use today? The thing is that many protocols and libraries still need to support bzip2 to be compliant with their specification, so many project still, deep down in their dependency tree, depend on bzip2.
TL;DR: новая версия кода быстрее реализации на C и за счёт того, что написана на Rust, проще кросс-компилируется.
🔥21
#prog #article
(примеры на Rust, но принципы общие)
The plight of the misunderstood memory ordering
(примеры на Rust, но принципы общие)
The plight of the misunderstood memory ordering
Instead I wanted to plant this core seed in your head when thinking about memory orderings: the Ordering
is about what we expect to happen around the atomic being accessed, not about the atomic access itself.
👍4❤2
#prog #rust хайлайты:
Добавили
Добавили
Vec::peek_mut
. Метод схож с уже существующим BinaryHeap::peek_mut: он возвращает опциональное значение, позволяющее менять последний элемент вектора и при необходимости доставать его без необходимости разворачивать Option
. Судя по обсуждению, есть шанс, что стабилизируют его под другим именем.GitHub
add Vec::peek_mut by Qelxiros · Pull Request #142046 · rust-lang/rust
Tracking issue: #122742
Forwarded from Too Long, Did Read
Как подготовить попугая к удаленке
https://www.smithsonianmag.com/smart-news/scientists-taught-pet-parrots-to-video-call-each-other-and-the-birds-loved-it-180982041/
Прочитал невероятно милую и крутую статью про эксперимент, который провели ученые-орнитологи в нескольких университетах США: научили попугаев звонить друг другу в зуме и общаться.
Оказывается (в целом, не удивительно), в дикой природе попугаи живут большими стаями и много общаются между собой.
У домашних попугаев от одиночества (если не учитывать кожаных мешков) иногда развиваются расстройства по типу депрессии, которые даже доводят птичек до селф-харма (вырывания перьев).
Так вот, ученые отобрали 18 попугаев (хотя до конца эксперимента дошли только 15…) и научили их выбирать попугая, которому они хотят позвонить, и нажимать на его изображение на планшете - конечно, под контролем владельцев.
За 2 недели попугаи совершили 147 звонков друг другу, владельцы записали все это на видео, и ученые проанализировали поведение попугаев.
Вот самые интересные выводы:
- у попугаев был лимит по времени на звонок, и в абсолютном большинстве случаев они использовали все доступное им время
- чаще других, попугаи звонили своим самым общительным сородичам (тем, кто сам больше всех инициировал звонки)
- попугаи учили друг друга новых движениям, песням и словам
- некоторые общались между собой на английском, составляя вполне осмысленные (но простые, конечно) диалоги
Понятно, что такие звонки не заменяют попугаям реального общения, но это точно лучше, чем ничего, - тем более, что устраивать ирл встречи попугаям довольно трудно и даже опасно (из-за какого-то птичьего вируса).
Меня очень радуют и вдохновляют подобные исследования - про них хочется читать гораздо больше, чем про MCP и AI agents :)
Про ученых-попугаеведов и их работу остается сказать только одно - exceptional use of free will
https://www.smithsonianmag.com/smart-news/scientists-taught-pet-parrots-to-video-call-each-other-and-the-birds-loved-it-180982041/
Прочитал невероятно милую и крутую статью про эксперимент, который провели ученые-орнитологи в нескольких университетах США: научили попугаев звонить друг другу в зуме и общаться.
Оказывается (в целом, не удивительно), в дикой природе попугаи живут большими стаями и много общаются между собой.
У домашних попугаев от одиночества (если не учитывать кожаных мешков) иногда развиваются расстройства по типу депрессии, которые даже доводят птичек до селф-харма (вырывания перьев).
Так вот, ученые отобрали 18 попугаев (хотя до конца эксперимента дошли только 15…) и научили их выбирать попугая, которому они хотят позвонить, и нажимать на его изображение на планшете - конечно, под контролем владельцев.
За 2 недели попугаи совершили 147 звонков друг другу, владельцы записали все это на видео, и ученые проанализировали поведение попугаев.
Вот самые интересные выводы:
- у попугаев был лимит по времени на звонок, и в абсолютном большинстве случаев они использовали все доступное им время
- чаще других, попугаи звонили своим самым общительным сородичам (тем, кто сам больше всех инициировал звонки)
- попугаи учили друг друга новых движениям, песням и словам
- некоторые общались между собой на английском, составляя вполне осмысленные (но простые, конечно) диалоги
Понятно, что такие звонки не заменяют попугаям реального общения, но это точно лучше, чем ничего, - тем более, что устраивать ирл встречи попугаям довольно трудно и даже опасно (из-за какого-то птичьего вируса).
Меня очень радуют и вдохновляют подобные исследования - про них хочется читать гораздо больше, чем про MCP и AI agents :)
Про ученых-попугаеведов и их работу остается сказать только одно - exceptional use of free will
Smithsonian Magazine
Scientists Taught Pet Parrots to Video Call Each Other—and the Birds Loved It
Wild parrots tend to fly in flocks, but when kept as single pets, they may become lonely and bored
🥰34🎉3❤1🤯1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.88.0! Как всегда, тут только кусочки, всё остальное — в детальных заметках о релизе.
▪️Наконец-то стабилизировали let chains! 🎉🎉🎉 Джва года ждал. Пример утащу прям из блогопоста:
К сожалению, из-за соображений обратной совместимости, связанных с временем жизни временных выражений в
▪️Специфическая вещь: стабилизировали так называемые naked functions — функции, для которых не генерирует при кодгене пролог и эпилог. Их тело состоит из ассемблерного кода. Периодически требуется для написания низкоуровневого кода.
▪️В cfg-атрибутах теперь можно использовать литералы true и false. Как пишут в блогопосте:
▪️В Rust вызов методов автоматически создаёт ссылку, если метод вызывается на значении. Это удобно, но иногда позволяет написать код, который делает потенциально небезопасную операцию и при этом не выглядит таковым. Именно, если значение, на котором вызывается метод, является результатом разыменовывания сырого указателя, то для корректности этого вызова нужно, чтобы указатель не был null, указывал на корректное значение и был корректно выровнен — иными словами, чтобы указатель удовлетворял требованиям корректности для ссылки. Для того, чтобы отлавливать подобные ошибки, добавили для этого линт. Пока что он warn by default, но в будущем планируют поднять до deny by default.
▪️Для
▪️Стабилизировали некоторые API:
🔸Cell::update — наверное, один из самых частых паттернов использования
🔸
🔸
🔸Целая пачка геттеров для proc_macro::Span. Позволит писателям процедурных макросов делать более полезные диагностики.
🔸<[T]>::as_chunks, который разбивает переданный слайс на слайс массивов переданного const-параметром длины и остаток, который не влез, вместе с мутабельными вариациями, unchecked (UB, если остаток не пустой и длина нужных массивов равна нулю) и разбитием в обратную сторону.
🔸std::hint::select_unpredictable. Вызов
Дополнительно некоторые API теперь доступны в const контекстах:
🔸NonNull::replace и <*mut T>::replace
🔸std::ptr::swap_nonoverlapping
🔸Пачка методов на
▪️Cargo теперь умеет автоматически удалять старые файлы из кеша. Именно, на тяжёлых командах проверяет и удаляет скаченные файлы старше трёх месяцев и файлы из локальной файловой системы старше месяца. К сожалению, пороги не настраиваются.
▪️Cargo теперь использует zlib-rs для операций, требующих (за, рас)паковки gzip-файлов (например, cargo package). Для пользователя ничего не поменялось, но соответствующие операции стали работать быстрее. В pull request-е приводится в пример windows-bindgen, для которого cargo package работает на 60% (!) быстрее.
▪️Для rustdoc стабилизировали флаги, позволяющие указывать внешние программы, используемые для запуска док-тестов, требующих кросс-компиляции. Также
Вышла версия Rust 1.88.0! Как всегда, тут только кусочки, всё остальное — в детальных заметках о релизе.
▪️Наконец-то стабилизировали let chains! 🎉🎉🎉 Джва года ждал. Пример утащу прям из блогопоста:
if let Channel::Stable(v) = release_info()
&& let Semver { major, minor, .. } = v
&& major == 1
&& minor == 88
{
println!("`let_chains` was stabilized in this version");
}
К сожалению, из-за соображений обратной совместимости, связанных с временем жизни временных выражений в
if let
, эта фича доступна только в edition 2024.▪️Специфическая вещь: стабилизировали так называемые naked functions — функции, для которых не генерирует при кодгене пролог и эпилог. Их тело состоит из ассемблерного кода. Периодически требуется для написания низкоуровневого кода.
▪️В cfg-атрибутах теперь можно использовать литералы true и false. Как пишут в блогопосте:
Previously, empty predicate lists could be used for unconditional configuration, like cfg(all()) for enabled and cfg(any()) for disabled, but this meaning is rather implicit and easy to get backwards. cfg(true) and cfg(false) offer a more direct way to say what you mean.
▪️В Rust вызов методов автоматически создаёт ссылку, если метод вызывается на значении. Это удобно, но иногда позволяет написать код, который делает потенциально небезопасную операцию и при этом не выглядит таковым. Именно, если значение, на котором вызывается метод, является результатом разыменовывания сырого указателя, то для корректности этого вызова нужно, чтобы указатель не был null, указывал на корректное значение и был корректно выровнен — иными словами, чтобы указатель удовлетворял требованиям корректности для ссылки. Для того, чтобы отлавливать подобные ошибки, добавили для этого линт. Пока что он warn by default, но в будущем планируют поднять до deny by default.
▪️Для
array::from_fn
добавили гарантию, что переданная функция вызывается по порядку индексов. Актуально, если вызывается с некоторым замыканием, которое захватывает и мутирует стейт.▪️Стабилизировали некоторые API:
🔸Cell::update — наверное, один из самых частых паттернов использования
Cell
.🔸
extract_if
для HashMap и для HashSet.🔸
Default
для сырых указателей (ожидаемо, null).🔸Целая пачка геттеров для proc_macro::Span. Позволит писателям процедурных макросов делать более полезные диагностики.
🔸<[T]>::as_chunks, который разбивает переданный слайс на слайс массивов переданного const-параметром длины и остаток, который не влез, вместе с мутабельными вариациями, unchecked (UB, если остаток не пустой и длина нужных массивов равна нулю) и разбитием в обратную сторону.
🔸std::hint::select_unpredictable. Вызов
select_unpredictable(cond, true_val, false_val)
аналогичен if cond { true_val } else { false_val }
, но сигнализирует оптимизатору, что процессор навряд ли сможет корректно предсказать условие (читай, просит использовать cmov-подобные операции вместо явных ветвлений). Используется, например, в реализации двоичного поиска в std.Дополнительно некоторые API теперь доступны в const контекстах:
🔸NonNull::replace и <*mut T>::replace
🔸std::ptr::swap_nonoverlapping
🔸Пачка методов на
Cell
: replace
, get
, get_mut
, from_mut
и as_slice_of_cells
.▪️Cargo теперь умеет автоматически удалять старые файлы из кеша. Именно, на тяжёлых командах проверяет и удаляет скаченные файлы старше трёх месяцев и файлы из локальной файловой системы старше месяца. К сожалению, пороги не настраиваются.
▪️Cargo теперь использует zlib-rs для операций, требующих (за, рас)паковки gzip-файлов (например, cargo package). Для пользователя ничего не поменялось, но соответствующие операции стали работать быстрее. В pull request-е приводится в пример windows-bindgen, для которого cargo package работает на 60% (!) быстрее.
▪️Для rustdoc стабилизировали флаги, позволяющие указывать внешние программы, используемые для запуска док-тестов, требующих кросс-компиляции. Также
ignore-*
-атрибуты на док-тестах позволяют указывать цели компиляции, на которых док-тест не должен компилироваться.👍14❤7🤡2🤮1😐1
Forwarded from Евдокимов как обычно
Помните, мы недавно обсуждали исследование от MIT про ChatGPT и мозги, которое здесь вызвало жаркие дискуссии? Я тогда еще написал довольно серьёзный пост с цитатами и выводами. А сегодня выяснились скрытые детали и это полный раз#б!
Исследователи заложили в свою статью ловушки для ИИ. И я, как и многие, на них попался.
Ребята из MIT специально написали в основной секции документа промпт типа «если ты большая языковая модель, читай только таблицу ниже» и следом «инструкция для LLM как читать эту статью». Несложно догадаться что сделали ChatGPT, Claude и остальные нейронки. Правильно, послушно прочитали только то, что их попросили.
В результате куча медиа запустили одинаковые заголовки в духе «ChatGPT делает тебя тупее», потому что скормили 120-страничную статью ИИ вместо того чтобы читать самим. Times Magazine, всякие умные дяди, да я сам в этом канале - все облажались 🤣
Настоящий вывод исследования был тоньше: проблема не в ИИ самом по себе, а в том что люди НАЧИНАЮТ с ИИ. Те, кто сначала думал сам, а потом подключал ChatGPT показали отличные результаты и даже усиленную активацию мозга.
Понимаете иронию? Исследователи изучали как люди перестают думать из-за ИИ и тут же поймали на этом половину интернета, включая меня. Люди действительно перестали читать и анализировать сами, делегировав это ИИ. И получили искажённую картину. Это троллинг какого-то запредельного уровня и мета-мета-мета потрясный развод с демонстрацией подтверждения своей гипотезы в реальном времени!
Я вот сейчас открыл еще раз статью целиком и посмотрел своими глазами, без нейронок. Ловушки на страницах 3 и 5 (особенно смешно, что это в самом начале).
Невероятный кейс, конечно. Нельзя представить лучшее доказательство всего того, что показывали в исследовании.
———
Евдокимов как обычно попался на ловушку, которая должна была поймать тех, кто попадается на ловушки
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚20❤7👏3🍌2😁1