#prog #rust #article
Breaking semver in Rust by adding a private type, or by adding an import
A few days ago, I started polls on Mastodon and Twitter whether adding a new private type, or an import, can ever be a major breaking change. The consensus was that this should be impossible.
I agree with that. It should be impossible.
I've discovered a way to cause a previously-public type or function to disappear from a crate's public API by making innocuous-seeming changes like adding a private type or adding an import, etc. It is not a hypothetical problem, either — I've found at least one real-world Rust project that has been affected by it.
Breaking semver in Rust by adding a private type, or by adding an import
A few days ago, I started polls on Mastodon and Twitter whether adding a new private type, or an import, can ever be a major breaking change. The consensus was that this should be impossible.
I agree with that. It should be impossible.
I've discovered a way to cause a previously-public type or function to disappear from a crate's public API by making innocuous-seeming changes like adding a private type or adding an import, etc. It is not a hypothetical problem, either — I've found at least one real-world Rust project that has been affected by it.
predr.ag
Breaking semver in Rust by adding a private type, or by adding an import
Unexpected edge cases in Rust's name resolution rules cause trouble across crate APIs, cargo-semver-checks, and rustdoc's JSON format.
🤯4💩2
Forwarded from ИА Панорама
Госдума разрешила региональным властям не красить траву в зелёный цвет перед приездом высших должностных лиц
Текст: Виталий Манн
Текст: Виталий Манн
ИА Панорама
Госдума разрешила региональным властям не красить траву в зелёный цвет перед приездом высших должностных лиц
Государственная дума в третьем чтении приняла изменения в федеральный закон «Об особенностях благоустройства населённых пунктов в преддверии посещения ими высши...
😁10🔥2💩1
Блог*
Собственно, баг выражается в том, что при поиске по странице искомые слова в текстовом поле с кодом подсвечиваются дважды. Например: https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/fs.rs Если искать вхождение openat, то браузер показывает…
Причём если открыть эту страницу, не войдя в аккаунт, то подобной херни нету!
Блог*
Собственно, баг выражается в том, что при поиске по странице искомые слова в текстовом поле с кодом подсвечиваются дважды. Например: https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/fs.rs Если искать вхождение openat, то браузер показывает…
Не я один на это напоролся:
https://github.com/orgs/community/discussions/54546#discussioncomment-5856994
Можете сюда стрелок наставить, вдруг поможет.
https://github.com/orgs/community/discussions/54546#discussioncomment-5856994
Можете сюда стрелок наставить, вдруг поможет.
GitHub
🚢 New code search and code view feedback · community · Discussion #54546
This Discussion has been closed because it's outdated. To provide feedback on code search and code view, please click here. At GitHub Universe last year, we announced a total redesign of GitHub...
👍5
Блог*
#prog #rust #rustlib Кому-то в расточате требовались параметризованные тесты. Так вот, такая библиотека есть. crates.io/crates/test-case
#prog #rust #rustlib
rstest — uses procedural macros to help you on writing fixtures and table-based tests.
Поддерживает:
* параметризованные тесты
- с возможностью шарить тест-кейсы между функциями
- с возможностью задавать значение строками для типов, реализующих
* асинхронные тесты
- нативная интеграция только с async-std, но можно использовать тест-атрибуты из других библиотек
* таймауты на тесты целиком
- включая асинхронные
* фикстуры, которые вычисляются только один раз и потом используются для всех тестов с передачей по ссылке
Также значения для аргумента можно задавать списком в самом определении функции. В этом случае будут сгенерированы тесты для декартового произведения всех списков значений аргументов. В README есть наглядный пример, который тут, к сожалению, смотрелся бы крайне неудобно.
rstest — uses procedural macros to help you on writing fixtures and table-based tests.
Поддерживает:
* параметризованные тесты
- с возможностью шарить тест-кейсы между функциями
- с возможностью задавать значение строками для типов, реализующих
FromStr
* фикстуры, использующие другие фикстуры* асинхронные тесты
- нативная интеграция только с async-std, но можно использовать тест-атрибуты из других библиотек
* таймауты на тесты целиком
- включая асинхронные
* фикстуры, которые вычисляются только один раз и потом используются для всех тестов с передачей по ссылке
Также значения для аргумента можно задавать списком в самом определении функции. В этом случае будут сгенерированы тесты для декартового произведения всех списков значений аргументов. В README есть наглядный пример, который тут, к сожалению, смотрелся бы крайне неудобно.
crates.io
crates.io: Rust Package Registry
👍8👎1
#prog #rust #rustlib
mock_instant — библиотека длямгновенного создания моков моканья std::time::Instant, причём независимо для каждого потока. Разумеется, не патчит std, а потому на зависимости не влияет.
mock_instant — библиотека для
crates.io
crates.io: Rust Package Registry