Оказывается система типов в #rust полная по Тьюрингу
https://sdleffler.github.io/RustTypeSystemTuringComplete/
https://sdleffler.github.io/RustTypeSystemTuringComplete/
sdleffler.github.io
Rust's Type System is Turing-Complete
(N.B. The word “fuck” appears multiple times in this post. I recommend that
the reader temporarily not consider “fuck” as profanity, as it isn’t used that
way here.)
the reader temporarily not consider “fuck” as profanity, as it isn’t used that
way here.)
немного про строковые типы, почему их два, какие нюансы есть и какие гарантии предоставляет #rust
https://fasterthanli.me/articles/working-with-strings-in-rust
рассказано просто супер. с подробностями и сравнением с #c
https://fasterthanli.me/articles/working-with-strings-in-rust
рассказано просто супер. с подробностями и сравнением с #c
fasterthanli.me
Working with strings in Rust
There’s a question that always comes up when people pick up the Rust programming language: why are there two string types? Why is there String, and &str?
My Declarative Memory Management article an...
My Declarative Memory Management article an...
пакет для удобной работы с COW и строками в #rust
https://github.com/RReverser/cow-utils-rs
а вот пакет с более компактными COW
https://github.com/maciejhirsz/beef
https://github.com/RReverser/cow-utils-rs
а вот пакет с более компактными COW
https://github.com/maciejhirsz/beef
GitHub
GitHub - RReverser/cow-utils-rs: Copy-on-write string utilities for Rust
Copy-on-write string utilities for Rust. Contribute to RReverser/cow-utils-rs development by creating an account on GitHub.
причины почему именно #rust ?
так же минимальное сравнение #rust с #python, #golang
https://www.youtube.com/watch?v=DnT-LUQgc7s
так же минимальное сравнение #rust с #python, #golang
https://www.youtube.com/watch?v=DnT-LUQgc7s
YouTube
Considering Rust
The Rust programming language has become a serious contender in the space of "systems" programming languages, and has recently been adopted by many of the tech giants for "serious" projects. In response to this, more companies are now considering whether…
Forwarded from Блог*
#prog #rust #моё
В Rust в некоторых случаях можно использовать анонимный лайфтайм (
Времена жизни — пожалуй, именно та фича, которая больше всего делает Rust непохожим на мейнстримные языки программирования. В частности, их синтаксис (
Раскрытие сокращённой записи начинается с введения нового явного параметра для каждого аргумента, тип которого параметризован временем жизни (далее ВЖ), но для которого конкретное значение ВЖ не указано. Например, если у нас функция
Далее компилятор пытается приписать времена жизни возвращаемому типу. В обычном коде произвольные времена жизни не материализуются из ничего, они появляются из ссылок на имеющиеся значения. Логично предположить, что если у тебя есть функция с ВЖ, то ВЖ возвращаемого типа должно быть связано с аргументами. Если аргументов нет вовсе, то компилятор откажется компилировать функцию. Если аргумент есть только один и с одним обобщенным параметром ВЖ, то возвращаемый тип параметризуется этим ВЖ для всех возможных обобщённых параметров. Например, если есть функция
В Rust в некоторых случаях можно использовать анонимный лайфтайм (
'_). Практика показывает, что эта фича некоторым не до конца понятна, поэтому я решил написать об этом подробнее.Времена жизни — пожалуй, именно та фича, которая больше всего делает Rust непохожим на мейнстримные языки программирования. В частности, их синтаксис (
'identifier) — это то, что приходит первым на ум тому, кто уверяет, что у Rust нечитаемый синтаксис. Тем не менее, если взглянуть на код программы на Rust, то этих времён жизни можно увидеть очень мало. Казалось бы, как так может быть, если учесть, что каждая ссылка параметризована временем жизни, а ссылки в Rust используются достаточно активно? Дело в том, что бо́льшая часть вариантов использования времён жизни подпадает под один из достаточно простых паттернов, для которых компилятор в состоянии вывести отсутствующие времена жизни сам. Это называется lifetime elision, и правила, по которым оно происходит, перечислены в растономиконе. Раскрытие сокращённой записи начинается с введения нового явного параметра для каждого аргумента, тип которого параметризован временем жизни (далее ВЖ), но для которого конкретное значение ВЖ не указано. Например, если у нас функция
fn do_something(a: &mut u32, b: (&u32, &u32), c: Cow<str>) { ... }
, то после первого шага преобразования она выглядит так:fn do_something<'lt1, 'lt2, 'lt3, 'lt4>(a: &'lt1 mut u32, b: (&'lt2 u32, &'lt3 u32), c: Cow<'lt4, str>) { ... }
Обратите внимание, это работает не только с ссылками.Далее компилятор пытается приписать времена жизни возвращаемому типу. В обычном коде произвольные времена жизни не материализуются из ничего, они появляются из ссылок на имеющиеся значения. Логично предположить, что если у тебя есть функция с ВЖ, то ВЖ возвращаемого типа должно быть связано с аргументами. Если аргументов нет вовсе, то компилятор откажется компилировать функцию. Если аргумент есть только один и с одним обобщенным параметром ВЖ, то возвращаемый тип параметризуется этим ВЖ для всех возможных обобщённых параметров. Например, если есть функция
fn first_and_second(arg: &(u32, u32, u32))- > (&u32, &u32) {
(&arg.0, &arg.1)
}
, то её развёрнутый тип будетfn first_and_second<'a>(arg: &'a (u32, u32, u32))- > (&'a u32, &'a u32) {
(&arg.0, &arg.1)
}
Что же делать, если аргументов несколько? В случае, когда функция принимает &self или &mut self, ВЖ возвращаемого типа приравнивается ВЖ self. Из этого, кстати, следует несколько неожиданный результат, что нижеприведённый код не компилируется:struct Foo;Если расписать тип полностью, то станет понятно, почему:
impl Foo {
fn use_str(&self, s: &str) -> &str {
s
}
}
struct Foo;Действительно, lifetime elision приводит к тому, что возвращаемая строка имеет то же ВЖ, что и
impl Foo {
fn use_str<'foo, 's>(&'foo self, s: &'s str) -> &'foo str {
s
}
}
self, но в теле функции используется строка с другим ВЖ 's, которое никак не связано с 'foo. Для того, чтобы решить эту проблему, нужно явно ввести обобщённый параметр времени жизни и указать, что он один и тот же у аргумента и возвращаемого значения:struct Foo;Такой код уже компилируется.
impl Foo {
fn use_str<'s>(&self, s: &'s str) -> &'s str {
s
}
}
Telegram
folex in codingteam
Не выходит прототипировать на расте у меня
модель атомик памяти в #CPP (полностью такая же для #rust)
- Неделимый, но расслабленный (relaxed)
- Полный порядок (seq_cst)
- Синхронизация пары (Acquire/Release)
https://habr.com/ru/post/517918/
- Неделимый, но расслабленный (relaxed)
- Полный порядок (seq_cst)
- Синхронизация пары (Acquire/Release)
https://habr.com/ru/post/517918/
Хабр
std::atomic. Модель памяти C++ в примерах
Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы...
Крутющая статья о енамах в #rust есть и места сравнения с #C
= Peeking inside a Rust enum
https://fasterthanli.me/articles/peeking-inside-a-rust-enum
= Peeking inside a Rust enum
https://fasterthanli.me/articles/peeking-inside-a-rust-enum
fasterthanli.me
Peeking inside a Rust enum
During a recent Rust Q&A Session on my twitch channel, someone asked a question that seemed simple: why are small string types, like SmartString or SmolStr, the same size as String, but small vec t...
блинский. только сейчас заметил что мне выдает компилятор при попытке скомпилировать асинхронный трэйт в #rust... и этот пакет прямо рекламируется! и действительно весь геморой с ними решаются макросами и афигенно рботает !
https://crates.io/crates/async-trait
рубрика "надо чаще обновлять компилятор раста" много нового можно черпануть)))
https://crates.io/crates/async-trait
рубрика "надо чаще обновлять компилятор раста" много нового можно черпануть)))
Unterstanding Rust’s Vec and its capacity for fast and efficient programs
https://markusjais.com/unterstanding-rusts-vec-and-its-capacity-for-fast-and-efficient-programs/
про выделение памяти для вектора в #rust
https://markusjais.com/unterstanding-rusts-vec-and-its-capacity-for-fast-and-efficient-programs/
про выделение памяти для вектора в #rust