Блог*
I love Rust for letting me write self-describing code trait Т { type T; const TT: (Self::T, Self::T); } trait ТТ<T> { const Т: T; } trait Sеlf { const Sеlf: Self; } const fn t<T: Т<T = isize>>() -> isize { impl<T: ТТ<T>> Sеlf for T…
Так вот, Rust reference гласит, что для default representation enum (а
Так какое же значение возвращается? Пойдёт снизу вверх.
|
| |
| | |
| |
| | |функция
| | |для
| |
|
Иными словами,
То есть "Ответ на главный вопрос жизни, вселенной и всего такого" — это 42, что мы и проверили в Rust на этапе компиляции.
The
является именно таковым, потому что на нём нет #[repr]
-атрибутов) дискриминанты имеют тип isize (что, однако, не мешает компилятору выбрать тип поменьше для представления enum). Таким образом, обобщённый параметр у self_describing
выводится равным возвращаемому типу, т. е. isize
.Так какое же значение возвращается? Пойдёт снизу вверх.
self_describing
принимает тип, ограниченный трейтом SelfValue
, и возвращает ассоциированную константу SELF_VALUE
;|
SelfValue
реализован для всех типов T
, реализующих GenericValue<T>
;| |
GenericValue<T>
реализован для всех типов, реализующих PairValue<T = isize>
;| | |
PairValue<T = isize>
реализован для isize
с PAIR_VALUE = (2, 11)
;| |
GenericValue<isize>
реализован для isize
с GENERIC_VALUE = t::<isize>()
;| | |функция
t
принимает тип, ограниченный PairValue<T = isize>
, и возвращает комбинацию от составляющих T::PAIR_VALUE
;| | |для
isize
функция t
возвращает 2 * 11 + 20 = 42;| |
<isize as GenericValue<isize>>::GENERIC_VALUE = 42
;|
<isize as SelfValue>::SELF_VALUE = 42
;self_describing::<isize>() == 42
;Иными словами,
enum The {
Answer = 42,
}
В последней строке создаётся неиспользуемая константа, тип которой задан, как массив длины 42, и которая инициализируется массивом длины The::Answer as usize
, то есть 42. Так как типы слева и справа совпадают, то код компилируется (и выдаёт предупреждение о неиспользуемых The
и self_describing
).То есть "Ответ на главный вопрос жизни, вселенной и всего такого" — это 42, что мы и проверили в Rust на этапе компиляции.
😐2
Блог*
#prog #rust #моё Что ж, наверное, стоит объяснить, а что это вообще за код такой. Странно выглядят фрагменты вроде trait Sеlf { const Sеlf: Self; } и const fn t<T: Т<T = isize>> , поскольку они вроде бы не должны компилироваться из-за совпадающих…
Этот пост спонсирован редактором ace (используемом на Rust playground).
ace — редактор со сломанным поиском.
ace — редактор со сломанным поиском.
GitHub
ace: searching whole words seems not to respect non-ASCII word boundaries · Issue #5232 · ajaxorg/ace
Describe the bug Using search functionality to look up whole words still finds query inside words if query consists of cyrrilic letters (and presumably other non-ASCII characters as well). Expected...
🤔1
#prog #video
Доклад от разработчиков IDE про превратности парсинга #cpp
youtube.com/watch?v=WfIr7lKT4Sk
Доклад от разработчиков IDE про превратности парсинга #cpp
youtube.com/watch?v=WfIr7lKT4Sk
YouTube
CppCon 2018: Timur Doumler & Dmitry Kozhevnikov “Parsing C++”
https://CppCon.org
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2018
—
C++ is a notoriously hard language to parse. Its grammar is highly context-dependent and ambiguous, and cannot…
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2018
—
C++ is a notoriously hard language to parse. Its grammar is highly context-dependent and ambiguous, and cannot…
🤣4❤1
@shitposting_three, пожалуйста, не выкладывай столько мемов, среди них много слишком хороших и в итоге весь Блог* в твоих репостах(
🤮5😭5❤🔥4😁2👍1
Блог*
Этот пост спонсирован редактором ace (используемом на Rust playground). ace — редактор со сломанным поиском.
Ты гляди-ка, даже отреагировали
GitHub
ace: searching whole words seems not to respect non-ASCII word boundaries · Issue #5232 · ajaxorg/ace
Describe the bug Using search functionality to look up whole words still finds query inside words if query consists of cyrrilic letters (and presumably other non-ASCII characters as well). Expected...
🤯3