rusta::mann
< мем из профунктора Я сгорел, ведь правильно приготовленный type-driven design оберегает от кучи логических ошибок, особенно связанных с проверками инвариантов (пресловутый is_initialized() вместо типа, который гарантирован находиться в валидном состояннии…
dusted.codes
The type system is a programmer's best friend
Programming Adventures
Блог*
Осторожно, если вы оставляете комментарии под моими постами — я могу найти ваш публичный блог и что-то с него репостнуть
Или если вы репостите из Блог*а (что я и продемонстровал выше)
🤔3
Forwarded from Ascii Moth (Андрей)
Gitconf - оверлейная утилита для удобного управление конфигом git'a.
Git сам по себе имеет достаточно богатые возможности конфигурации, которые можно применять, как для отдельных репозиториев так и для групп. Но изменение настроек все еще требует либо ручного ввода команд
Gitconf же позволяет создать т.н. профили конфигурации, между которыми в отдельно взятом репозитории можно переключаться в одну команду.
#mycode #CC0 #rust #oldproject
Git сам по себе имеет достаточно богатые возможности конфигурации, которые можно применять, как для отдельных репозиториев так и для групп. Но изменение настроек все еще требует либо ручного ввода команд
git config ..., либо правки .gitconfig или .git/config.Gitconf же позволяет создать т.н. профили конфигурации, между которыми в отдельно взятом репозитории можно переключаться в одну команду.
#mycode #CC0 #rust #oldproject
👍2😁1
Forwarded from SoFCheck
Интересный факт: GitHub умеет парсить
Cargo.toml для Rust и понимать, кто использует какие репозитории в качестве зависимостей. Так я узнал, что у моего owlchess появились пользователи, кроме меня :) Первому пользователю я вручил pull request с исправлениями, которые делают использование owlchess более простым и идиоматичным👍8
#prog
Немного о возможностях jq, программы для обработки JSON в командной строке.
t.iss.one/brain_dump_etc/440
Немного о возможностях jq, программы для обработки JSON в командной строке.
t.iss.one/brain_dump_etc/440
Telegram
brain_dump_etc
Есть такая программка — jq. Используется для работы с JSON, делает выборки данных из глубоко вложенных структур, может что-то подменять на лету. Применяется, как правило, в сценариях автоматизации. Думаю, что слышали про неё многие. Казалось бы, ну что тут…
👍3
#prog #typescript #abnormalprogramming
Assembly interpreter inside of TypeScript's type system
Автору пришлось повысить лимиты внутри исходников компилятора Typescript, чтобы это заработало и не падало из-за слишком глубокого инстанцирования.
(thanks @randomstuffilike)
Assembly interpreter inside of TypeScript's type system
Автору пришлось повысить лимиты внутри исходников компилятора Typescript, чтобы это заработало и не падало из-за слишком глубокого инстанцирования.
(thanks @randomstuffilike)
🔥3😁1🥴1
Forwarded from Alexander
Блог*
if (Math.random() >= 0.5) print(chooseRandomWarning())
Похожим образом работает борроу чекер по мнению неосиливших Rust
😁24🤣1
Блог*
А для того, чтобы оно всё-таки работало, нужно, чтобы реализовали impl Fn() -> impl Trait in return position (привет, Вафель) и, желательно, синтаксис для явного написания замыкания с полиморфизмом высшего ранга. И то, кстати, не факт, что сработает, поскольку…
#prog #rust #rustlib
Ну а пока синтаксис для явного написания замыканий с полиморфизмом высшего ранга отсутствует, можно использовать higher_order_closure:
Ну а пока синтаксис для явного написания замыканий с полиморфизмом высшего ранга отсутствует, можно использовать higher_order_closure:
#[macro_use]
extern crate higher_order_closure;
fn main () {
let f = higher_order_closure! { // или hrtb!
for<'any> |x: &'any i32| -> &'any i32 {
x
}
};
{
let local = 42;
f(&local);
}
f(&42);
}
Поддержка lifetime elision также присутствует:let f = hrtb! {
|x: &'_ i32| -> &'_ i32 {
x
}
};docs.rs
higher_order_closure - Rust
`::higher-order-closure`
Пачка небольших приятных изменений для #prog #rust.
Parser: Recover from using colon as path separator in imports — простое двоеточие в списке импорта теперь трактуется, как опечатка при написании
Recover wrong-cased keywords that start items (привет, Вафель) — аналогично парсер теперь продолжает разбор после ключевых слов, набранных не в том регистре. Не во всех местах, но всё же.
Suggest is_some when we've found Option but expected bool.
Suggest removing unnecessary . to use a floating point literal — для тех случаев, когда там, где ожидается число с плавающей точкой, по факту диапазон. Может быть опечаткой.
Consider #[must_use] annotation on async fn as also affecting the Future::Output.
И небольшая замена семантики для большей консистентности и меньшей хрупкости кода: Remove drop order twist of && and || and make them associative.
TL;DR;
Порядок дропа после изменения: 1, 2, 3, 4
Parser: Recover from using colon as path separator in imports — простое двоеточие в списке импорта теперь трактуется, как опечатка при написании
::. Это всё ещё ошибка синтаксиса, но теперь она не мешает парсить код дальше.Recover wrong-cased keywords that start items (привет, Вафель) — аналогично парсер теперь продолжает разбор после ключевых слов, набранных не в том регистре. Не во всех местах, но всё же.
Suggest is_some when we've found Option but expected bool.
Suggest removing unnecessary . to use a floating point literal — для тех случаев, когда там, где ожидается число с плавающей точкой, по факту диапазон. Может быть опечаткой.
Consider #[must_use] annotation on async fn as also affecting the Future::Output.
async-функции — не более, чем функции, возвращающие анонимную футуру. До этого изменения атрибут #[must_use] отслеживал (не)использование этой самой футуры, что технически верно, но не особо полезно на практике. После этого изменения предупреждение также срабатывает и при неиспользовании значения, которое вернул .await.И небольшая замена семантики для большей консистентности и меньшей хрупкости кода: Remove drop order twist of && and || and make them associative.
TL;DR;
f(1).g() && f(2).g() && f(3).g() && f(4).g()
Порядок дропа до изменения: 2, 3, 4, 1Порядок дропа после изменения: 1, 2, 3, 4
GitHub
Parser: Recover from using colon as path separator in imports by mucinoab · Pull Request #103443 · rust-lang/rust
I don't know if this is the right approach, any feedback is welcome.
r? @compiler-errors
Fixes #103269
r? @compiler-errors
Fixes #103269
👍3🔥1
#prog #rust #article
Stop writing Rust linked list libraries!
tl;dr:
Don’t write a Rust linked list library: they are hard to do well, and usually useless.
Use
If you are writing your own data structure, check if someone has done it already, and consider
Stop writing Rust linked list libraries!
tl;dr:
Don’t write a Rust linked list library: they are hard to do well, and usually useless.
Use
VecDeque, which is great. If you actually need more than VecDeque can do, use one of the handful of libraries that actually offer a significantly more useful API.If you are writing your own data structure, check if someone has done it already, and consider
slotmap or generation_arena, (or maybe Rc/Arc).👍4