Size: a a a

2020 March 25

G

Gymmasssorla in rust_offtopic
Т-34 85
В смысле? Можно пример, когда размер больше максимального типа в нём?
The union is only as big as necessary to hold its largest member (additional unnamed trailing padding may also be added). The other members are allocated in the same bytes as part of that largest member. 


https://en.cppreference.com/w/c/language/union
источник

Т8

Т-34 85 in rust_offtopic
В чём неудобство? Разные задачи - разные инструменты
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
В чём неудобство? Разные задачи - разные инструменты
Покажи мне задачу, где std::variant/enum class решает лучше, чем enum в Rust
источник

Т8

Т-34 85 in rust_offtopic
Gymmasssorla
Покажи мне задачу, где std::variant/enum class решает лучше, чем enum в Rust
Я не говорю, что лучше. Я говорю, что они для разного нужны
источник

AK

Alexander Krivitskiy in rust_offtopic
Т-34 85
Не столько из-за этого, сколько чтобы сделать типизацию, ибо enum == int
Ну и ради этого тоже. Но если что, то обычные enumы в плюсах тайпчекаются при присвоениях и передачи аргов в функцию. Только сравнение к интам кастует
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
Я не говорю, что лучше. Я говорю, что они для разного нужны
enum в Rust покрывает все случаи лучше.
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
Не столько из-за этого, сколько чтобы сделать типизацию, ибо enum == int
Each enumerated type is compatible with one of: char, a signed integer type, or an unsigned integer type. It is implementation-defined which type is compatible with any given enumerated type, but whatever it is, it must be capable of representing all enumerator values of that enumeration. 


https://en.cppreference.com/w/c/language/enum

Д-во, что не всегда int.
источник

G

Gymmasssorla in rust_offtopic
Более того, он способен делать анализ исчерпаемости для костыльных копродуктов и умный компилятор с флагами ещё и типы может проверять
источник

Т8

Т-34 85 in rust_offtopic
Gymmasssorla
The union is only as big as necessary to hold its largest member (additional unnamed trailing padding may also be added). The other members are allocated in the same bytes as part of that largest member. 


https://en.cppreference.com/w/c/language/union
В смысле, для выравнивания может чуть больше взять? Окей, но не суть
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
В смысле, для выравнивания может чуть больше взять? Окей, но не суть
Да
источник

Т8

Т-34 85 in rust_offtopic
Alexander Krivitskiy
Ну и ради этого тоже. Но если что, то обычные enumы в плюсах тайпчекаются при присвоениях и передачи аргов в функцию. Только сравнение к интам кастует
Серьёзно?
источник

G

Gymmasssorla in rust_offtopic
Но суть алгебраических типов данных в том, что с помощью них можно делать любые несложные типы
источник

Т8

Т-34 85 in rust_offtopic
Gymmasssorla
enum в Rust покрывает все случаи лучше.
Это вопрос конкретной реализации. И плюсовый способ можно прокачать
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
Это вопрос конкретной реализации. И плюсовый способ можно прокачать
Если прокачать можно, то его _придётся прокачивать_. Но я сомневаюсь, что можно, не зря есть RFC по сопоставлению с образом в C++23.
источник

G

Gymmasssorla in rust_offtopic
Это вопрос дизайна языка
источник

Т8

Т-34 85 in rust_offtopic
Gymmasssorla
Each enumerated type is compatible with one of: char, a signed integer type, or an unsigned integer type. It is implementation-defined which type is compatible with any given enumerated type, but whatever it is, it must be capable of representing all enumerator values of that enumeration. 


https://en.cppreference.com/w/c/language/enum

Д-во, что не всегда int.
Да, можно и другие целые запихнуть. Опять же, не суть. Беда в неявных кастах, enum class защищает от этого
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
Да, можно и другие целые запихнуть. Опять же, не суть. Беда в неявных кастах, enum class защищает от этого
Ага, enum в Rust тоже
источник

Т8

Т-34 85 in rust_offtopic
Gymmasssorla
Но суть алгебраических типов данных в том, что с помощью них можно делать любые несложные типы
А с помощью std::variant нельзя?
источник

G

Gymmasssorla in rust_offtopic
Т-34 85
А с помощью std::variant нельзя?
Визиторы против сопоставления с образом? Очевидно кто победит по удобству
источник

G

Gymmasssorla in rust_offtopic
И гарантиям безопасности, осмелюсь предположить, тоже
источник