#prog #rust
На всякий случай, Vec::dedup_by принимает в качестве аргумента функцию от двух
На всякий случай, Vec::dedup_by принимает в качестве аргумента функцию от двух
&mut T
, где левый аргумент — это элемент, который находится правее, а правый аргумент — это аргумент, который находится левее (если считать, что элементы в векторе расположены слева направо). Да, это написано в документации, но кто ж её читает...doc.rust-lang.org
Vec in std::vec - Rust
A contiguous growable array type, written as `Vec<T>`, short for ‘vector’.
#prog #rust
Вы ведь, наверное, слышали про макросы file!, line! и column!, которые разворачиваются в имя файла, строку и колонку места в файле в месте, где они были раскрыты? Это — "магические" макросы, встроенные в компилятор, вы такие написать сами не можете... Точнее, не могли до версии Rust 1.46.
Что поменялось в этой версии? В этой версии появился атрибут
Вы ведь, наверное, слышали про макросы file!, line! и column!, которые разворачиваются в имя файла, строку и колонку места в файле в месте, где они были раскрыты? Это — "магические" макросы, встроенные в компилятор, вы такие написать сами не можете... Точнее, не могли до версии Rust 1.46.
Что поменялось в этой версии? В этой версии появился атрибут
#[track_caller]
(кстати, когда его только предлагали, он назывался blame_caller), который позволяет функции узнать информацию о месте, в котором она была вызвана (ну, почти: месте вызова выше по стеку в первой функции в стеке без этого атрибута). Эта информация предоставляется при помощи магического конструктора std::panic::Location::caller, который возвращает &'static Location<'static>
, и, как показывает пример из документации к конструктору, у Location
есть геттеры, покрывающие функционал вышеуказанных макросов. Таким образом, ничто не мешает написать свой, скажем, line!
, который будет разворачиваться в ::core::panic::Location::caller().line()
.doc.rust-lang.org
file in std - Rust
Expands to the file name in which it was invoked.
Хозяйке на заметку
Опытные программисты на Rust знают, что есть реализация
Опытные программисты на Rust знают, что есть реализация
impl<A, E, V: FromIterator<A>> FromIterator<Result<A, E>> for Result<V, E>
, которая позволяет при помощи .collect()
собирать итератор результатов в результат с коллекцией или с первой ошибкой. Почему-то несколько менее известен тот факт, что для Option
есть аналогичный impl со схожей семантикой.doc.rust-lang.org
FromIterator in core::iter - Rust
Conversion from an [`Iterator`].
Forwarded from Красные пики (Serge Abdulmanov)
Вот эта шайтан-штука — на самом деле церковный сейф времён чуть позже, чем в Эквадор пришли испанцы. Сделан из дерева и черепахового панциря (то есть прочный и тяжёлый). Снаружи выглядит как секретер, который нереально поднять и утащить. Но у него есть много секретных отделений: например, сбоку есть узор, который на самом деле не узор, а ящики. Ещё ящики могут быть внутри других ящиков. Комбинация, что характерно, вводится не чем-то отдельным, а самими ящиками секретера: нужно знать, какие из них открыть в совокупности, чтобы получить нужный секретный.
Простите за качество фото, дело в том, что там нельзя было снимать. Ну вот совсем нельзя.
Простите за качество фото, дело в том, что там нельзя было снимать. Ну вот совсем нельзя.
Forwarded from Generative Anton
Во-первых, это красиво.
Во-вторых, если можно, то почему бы и нет?
Дэвид Тайлер из Майкрософта написал эмулятор 8080, но все как модно в 2021ом: облачно, c k8s и прочим мракобесием. Например, для каждого opcode’a написаны отдельные микросервисы на разных языках 👀
Во-вторых, если можно, то почему бы и нет?
Дэвид Тайлер из Майкрософта написал эмулятор 8080, но все как модно в 2021ом: облачно, c k8s и прочим мракобесием. Например, для каждого opcode’a написаны отдельные микросервисы на разных языках 👀
#prog #c #quotes
rrrad> это в каком месте язык C безопасный?
invasy> За пределами стэка и строк, поэтому стремится туда выбраться.
Тут
rrrad> это в каком месте язык C безопасный?
invasy> За пределами стэка и строк, поэтому стремится туда выбраться.
Тут
Хабр
Как школьный учитель изобрёл один из самых влиятельных языков программирования
Говоря коротко, С работает везде. Этот язык — не просто большой динозавр, которому каким-то образом удалось дожить до наших дней. Он крайне практичен, поэтому невероятно успешен. Удивительно, но...
❤1
К сожалению, идиома "не видно ни зги" широко используется неправильно, с опечаткой и одним словом не в той раскладке. На самом деле она должна читаться как "не видно, не pub".
Forwarded from oleg_log (Oleg Kovalov)
Ну почему он, а не я? (с)
Тлдр: коллизии хешей - проблема на века
https://blog.teddykatz.com/2019/11/12/github-actions-dos.html
Тлдр: коллизии хешей - проблема на века
https://blog.teddykatz.com/2019/11/12/github-actions-dos.html
Teddy Katz’s Blog
How I accidentally took down GitHub Actions
Last December, I was invited to a private bug bounty program to test a beta version of GitHub Actions. GitHub Actions is a workflow automation tool integrated with GitHub. One common use case of GitHub Actions is for CI builds – a project can fairly easily…
Forwarded from Backtracking (Дима Веснин)
This media is not supported in your browser
VIEW IN TELEGRAM
какая трогательная идея игры! тут нужно передвигаться по городу прыгая из тени в тень. как в играх, в которые придумываешь со скуки смотря в окно автобуса 💜
#prog #rust #rustlib
Недавно в чате для растоновичков посоветовали diffus — библиотеку для описания разницы между произвольными типами данных.
Недавно в чате для растоновичков посоветовали diffus — библиотеку для описания разницы между произвольными типами данных.
Lib.rs
Diffus — data structures in Rust
Finds the difference between two instances of any data structure. Supports: collections, Strings, Maps etc. Uses LCS where applicable. Also supports derive via `diffus-derive`.
Achievement get: зайти в магазин эзотерических приблуд и своими серьёзными расспросами довести продавца до просьбы покинуть помещение.
Forwarded from Random three body problem
This media is not supported in your browser
VIEW IN TELEGRAM
Initial states:
m: 2.550 x: -7.506 y: -4.280 vx: 0.104 vy: 0.494
m: 3.132 x: 5.132 y: 4.759 vx: -0.165 vy: 0.039
m: 7.640 x: 5.282 y: -1.253 vx: -0.025 vy: -0.071
Interest-ness score: 71
m: 2.550 x: -7.506 y: -4.280 vx: 0.104 vy: 0.494
m: 3.132 x: 5.132 y: 4.759 vx: -0.165 vy: 0.039
m: 7.640 x: 5.282 y: -1.253 vx: -0.025 vy: -0.071
Interest-ness score: 71