Блог*
Допустим, я организую в Ереване встречу с подписчиками
Что ж, попробуем иначе. Пусть встреча будет в... Пятницу. Время — 20:00. Место то же, Vol. 1
Vol. 1 · 67 Yeznik Koghbatsi St, Yerevan 0002, Armenia
★★★★★ · Coffee shop
🤡3😐2🤝2🔥1🍌1
#prog #rust #article #amazingopensource
Automating Cargo project configuration using cargo-wizard
TL;DR: I created a Cargo subcommand called cargo-wizard that simplifies the configuration of Cargo projects for maximum runtime performance, fastest compilation time or minimal binary size.
Не смотря на то, что способы настройки проектов на cargo для перечисленных целей известны, на практике их применение затруднено:
1) О них надо знать. Документация cargo хоть и вполне хорошая, но очень уж обширная, и там есть не вся информация для достижения этих целей.
2) Их надо применить. Не то чтобы это само по себе было сложно, но для этого нужно прописывать конфигурацию в разных секциях Cargo.toml, а значимый эффект они зачастую дают в комплексе.
Kobzol создал инструмент для того, чтобы по возможности решить обе проблемы. Использование одного инструменты позволяет перечислить все нужные настройки в одном месте, а также применить их к целому workspace одним махом. При этом у cargo wizard есть и более вдумчивый режим, который позволяет предварительно посмотреть все вносимые изменения и настроить индивидуально каждое из них.
Automating Cargo project configuration using cargo-wizard
TL;DR: I created a Cargo subcommand called cargo-wizard that simplifies the configuration of Cargo projects for maximum runtime performance, fastest compilation time or minimal binary size.
Не смотря на то, что способы настройки проектов на cargo для перечисленных целей известны, на практике их применение затруднено:
1) О них надо знать. Документация cargo хоть и вполне хорошая, но очень уж обширная, и там есть не вся информация для достижения этих целей.
2) Их надо применить. Не то чтобы это само по себе было сложно, но для этого нужно прописывать конфигурацию в разных секциях Cargo.toml, а значимый эффект они зачастую дают в комплексе.
Kobzol создал инструмент для того, чтобы по возможности решить обе проблемы. Использование одного инструменты позволяет перечислить все нужные настройки в одном месте, а также применить их к целому workspace одним махом. При этом у cargo wizard есть и более вдумчивый режим, который позволяет предварительно посмотреть все вносимые изменения и настроить индивидуально каждое из них.
Kobzol’s blog
Automating Cargo project configuration using cargo-wizard
TL;DR: I created a Cargo subcommand called cargo-wizard that simplifies the configuration of Cargo projects for maximum runtime performance, fastest compilation time or minimal binary size.
👍5🔥3
Forwarded from someone's shitpost
если вдруг кто-то играет в Monster Hunter Now то вот вам промокод на Pink Paintball x1, Wander Orb x1 и DevilJho Scale x1:
8JNE5L46CPUAN
я сам про игру ничего не знаю, но промокод достался за наличие Discord Nitro
Link to post
8JNE5L46CPUAN
я сам про игру ничего не знаю, но промокод достался за наличие Discord Nitro
Link to post
#prog #article
Text Buffer Reimplementation
Статья про основную структуру данных в текстовом редакторе VSCode (от 23 марта 2018 года, поэтому некоторые детали могут быть неактуальны). До внесения изменений в редакторе использовался line buffer (массив строк), который, понятное дело, имел печальную производительность на больших файлах.
Новая структура данных, основанная на piece table, получилась значительно быстрее старой на большинстве реалистичных юзкейсов. Трюки вполне ожидаемые: по возможности плоские данные, использование индексов вместо реальной конкатенации, использование сбалансированных двоичных деревьев для понижения сложности операций с линейной до логарифмической.
Интересно, что новая реализация написана целиком на Typescript. Как пишет автор:
Why not native?
I promised at the beginning that I would get back to this question.
TL;DR: We tried. It didn't work out for us.
Выгоды от возможной реализации текстового буфера в нативном коде перекрывались высокой стоимостью вызовов с переходом через границу FFI. Потенциальное спользование наивных строк осложнялось тем, что это означало бы завязку на детали реализации JS-движка, а конкретно у V8 эти внутренние строковые типы ещё и не потокобезопасны.
Text Buffer Reimplementation
Статья про основную структуру данных в текстовом редакторе VSCode (от 23 марта 2018 года, поэтому некоторые детали могут быть неактуальны). До внесения изменений в редакторе использовался line buffer (массив строк), который, понятное дело, имел печальную производительность на больших файлах.
Новая структура данных, основанная на piece table, получилась значительно быстрее старой на большинстве реалистичных юзкейсов. Трюки вполне ожидаемые: по возможности плоские данные, использование индексов вместо реальной конкатенации, использование сбалансированных двоичных деревьев для понижения сложности операций с линейной до логарифмической.
Интересно, что новая реализация написана целиком на Typescript. Как пишет автор:
Why not native?
I promised at the beginning that I would get back to this question.
TL;DR: We tried. It didn't work out for us.
Выгоды от возможной реализации текстового буфера в нативном коде перекрывались высокой стоимостью вызовов с переходом через границу FFI. Потенциальное спользование наивных строк осложнялось тем, что это означало бы завязку на детали реализации JS-движка, а конкретно у V8 эти внутренние строковые типы ещё и не потокобезопасны.
Visualstudio
Text Buffer Reimplementation
Text Buffer Reimplementation in the Visual Studio Code/Monaco editor
🤔2❤🔥1
Forwarded from Neural Machine
Я уверен, что мой ребенок вырастет замечательным человеком, если не родится.
👍4💩3
Блог*
Что ж, попробуем иначе. Пусть встреча будет в... Пятницу. Время — 20:00. Место то же, Vol. 1
Напоминаю про встречу завтра
🤡2🫡2❤1
Блог*
— Пересечёмся? — Мне на тебя параллельно.
Не, я, конечно, знал, что Rust хорошо помогает с параллелизацией, но чтоб настолько...
🥰6👏1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.77.0! Как всегда, тут только избранные хайлайты, а полные изменения в ченджлоге.
▪️Асинхронные функции теперь могут быть рекурсивными при условии наличии индирекции. Скажем, такой код по прежнему не работает:
, поскольку асинхронные функции компилируются в стейт-машины, размер которых должен быть известен на этапе компиляции, а размер стека функций явно зависит от рантайм-параметра. Компилятор на это выдаёт относительно хорошую ошибку:
(к сожалению, на сами рекурсивные вызовы не указывает)
Если воспользоваться предложением компилятора, то можно получить вот такой рабочий код:
Можно даже слегка угореть по уменьшению количества аллокаций и сделать так:
▪️В язык добавили строковые литералы типа
Очень удобная вещь для интеропа с C. Эти литералы могут быть сырыми (
▪️Добавили макрос
▪️Для слайсов добавили пачку методов, позволяющих доставать части слайса в виде ссылок на массивы:
🔸
🔸
🔸
🔸
Также добавили методы
▪️Опубликован крейт cargo-util-schemas, который является публичной схемой
▪️Rustdoc теперь поддерживает ссылки в заголовках и позволяет искать по типам, используя естественный синтаксис для кортежей (со скобочками).
Вышла версия Rust 1.77.0! Как всегда, тут только избранные хайлайты, а полные изменения в ченджлоге.
▪️Асинхронные функции теперь могут быть рекурсивными при условии наличии индирекции. Скажем, такой код по прежнему не работает:
async fn fib(n: u32) -> u32 {
match n {
0 | 1 => 1,
_ => fib(n-1).await + fib(n-2).await
}
}
, поскольку асинхронные функции компилируются в стейт-машины, размер которых должен быть известен на этапе компиляции, а размер стека функций явно зависит от рантайм-параметра. Компилятор на это выдаёт относительно хорошую ошибку:
error[E0733]: recursion in an async fn requires boxing
--> src/lib.rs:1:1
|
1 | async fn fib(n: u32) -> u32 {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: a recursive `async fn` call must introduce indirection such as `Box::pin` to avoid an infinitely sized future
(к сожалению, на сами рекурсивные вызовы не указывает)
Если воспользоваться предложением компилятора, то можно получить вот такой рабочий код:
async fn fib(n: u32) -> u32 {
match n {
0 | 1 => 1,
_ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await
}
}
Можно даже слегка угореть по уменьшению количества аллокаций и сделать так:
_ => Box::pin(async move { fib(n-1).await + fib(n-2).await }).await
▪️В язык добавили строковые литералы типа
&'static CStr
:use core::ffi::CStr;
const _: &CStr = c"look mum, no trailing nul!";
Очень удобная вещь для интеропа с C. Эти литералы могут быть сырыми (
cr"it is not --> \n <-- a newline"
) и поддерживают escape-последовательности для UTF-8 code point и байтовых значений за пределами ASCII. Символы за пределами ASCII кодируются в том же виде, что и в UTF-8. ▪️Добавили макрос
std::mem::offset_of!
. Пока что поддерживается только в форме смещения поля (полей) от начала раскладки структуры. Технически такой макрос возможно реализовать и сейчас, но для того, чтобы это сделать правильно (без UB), нужно некоторое количество не самого тривиального unsafe
кода.▪️Для слайсов добавили пачку методов, позволяющих доставать части слайса в виде ссылок на массивы:
🔸
slice::first_chunk{, _mut}
🔸
slice::split_first_chunk{, _mut}
🔸
slice::last_chunk{, _mut}
🔸
slice::split_last_chunk{, _mut}
Также добавили методы
slice::chunk_by{, _mut}
, который возвращает итератор из частей слайсов, в которых последовательные пары элементов удовлетворяют предоставленному предикату:let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
let mut iter = slice.chunk_by(|a, b| a == b);
assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
assert_eq!(iter.next(), Some(&[3, 3][..]));
assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
assert_eq!(iter.next(), None);
▪️Опубликован крейт cargo-util-schemas, который является публичной схемой
Cargo.toml
, используемой в самом cargo.▪️Rustdoc теперь поддерживает ссылки в заголовках и позволяет искать по типам, используя естественный синтаксис для кортежей (со скобочками).
👍10
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.77.0! Как всегда, тут только избранные хайлайты, а полные изменения в ченджлоге. ▪️Асинхронные функции теперь могут быть рекурсивными при условии наличии индирекции. Скажем, такой код по прежнему не работает:…
Но мой фаворит — это, конечно, вот это дополнение к weird-exprs.rs
😁8😱2
Блог*
Что ж, попробуем иначе. Пусть встреча будет в... Пятницу. Время — 20:00. Место то же, Vol. 1
У админа перелом воли, встреча отменяется
🤣10🤡5😢3🤷2