Max
https://play.rust-lang.org/?gist=bfa9563ec06f0ede73d7869945dd5b85&version=stable
Vladimir
Vladimir
короче, всё что переделали, это разрешили булу занимать тэг
Vladimir
кстати #[repr(u8)] всё ломает
Ilya
ну ессно
Ilya
Он и оптимизацию layout структур ломает
Vladimir
т.е. репр это для тэга?
Cuno
Vladimir
А что ещё?
Cuno
https://play.rust-lang.org/?gist=92d1ffd94deeb09fa6d8853754eb96b3&version=stable
Cuno
https://play.rust-lang.org/?gist=24eeae69c4c4e92a27971ab2476300db&version=nightly
И даже так
պլհկ
() еще?
Vladimir
Значит всетаки все вложенные энамы, круто
Anonymous
https://twitter.com/steveklabnik/status/932941248507334656
Kerrigan
:D
doc
шрамко в студию
Safort
Ору)
Alex
милли- или сантидозинг я думаю лучше работает
doc
фентодозинг лизергина
doc
так голанг сделали
Alex
лизергамида тогда уже
Kerrigan
лучше гомеопатическое лсд
Kerrigan
оно как раз витает вокруг
Ilya
Лол, я так понимаю, все тут любят играть в игру "за 6 сообщений дойди до Гит... эээ... то есть до Голанга"
Сережа
знаете что объединяте раст и голанг? в этих экосистемах за меня кто-то решает, как мне программировать! в го за меня решают, что мне не нужны генерики, в расте за меня решают что если я меняю одно поле в структуре, я не могу менять в то же время другое поле!
A64m
это вообще все экосистемы объединяет
doc
doc
там все сам можешь решить
A64m
да много чего не можешь
asteglor
asteglor
Если что вдруг не понравится есть куча диалектов, акт тайпскрипт
asteglor
Oleg
Oleg
в каком контексте тебе запрещают менять два поля?
Ignat
весь смысл теории языков программирования состоит в том, чтобы по максимуму ограничить, желательно чтобы при этом на получившемся чуде человеческой мысли всё-таки можно было программировать
A64m
нет, весь смысл в том, чтобы предоставить какие-то возможности
A64m
все ограничения только для того и существуют, чтоб можно было что-то сделать, оперевшись на какие-то гарантии, в ограничении ради ограничения нет никакого смысла
Сережа
в каком контексте тебе запрещают менять два поля?
struct A {
f1: u32,
f2: u32,
f3: u32,
}
fn foo(a: &mut A) -> &u32 { &a.f2 }
fn bar(a: &mut A) -> u32 { a.f1 + a.f3 }
fn main(a: &mut A) {
// x causes a to be borrowed for the rest of the function.
let x = foo(a);
// Borrow check error
let y = bar(a); //~ ERROR: cannot borrow `*a` as mutable more than once at a time
}
спасибо за твой пример кстати, я так и сделал в итоге!
Oleg
Anonymous
Alex
liberties constrain, constraints liberate
A64m
это называется проверить корректность
корректность плохо проверять, ее лучше получать "по конструкции", для этого и служат всякие ограничения типа иммутабельности или сокрытия реализации
Anonymous
"убедиться в корректности" тогда
Сережа
вы так говорите иммутабельность как будто это что-то хорошее, а как же потребление памяти? я понимаю, что в мире джавы все любят иммутабельность, но раст то метит на место языка системного программирования!
Ignat
ну в расте один объект не алиасят несколькими мутабельными ссылками
A64m
хорошее, просто не все хорошее можно себе позволить во всех обстоятельствах
Ignat
что в некотором смысле ослабленная иммутабельность
Oleg
В мире джавы все любят иммутабельность?
Ilya
Как иммутабельность влияет на потребление памяти? (иммутабельность в раст)
Oleg
Ilya
Что мне приходит в голову - всякие лисповые иммутабельные списки, которые и правда жрут память
Ilya
Но что в раст?
Oleg
В раст нет загона на иммутабельность
Ilya
И да, джава обмазывается объектами - вот оттуда и память
Marat
Alex
иммутабельность это консервативный способ исключить обзервабл нондетерминизм
Oleg
Alex
The nondeterminism is observable if a user can see different results from executions that start at the same internal configuration.
A typical effect is a race condition, where the result of a program depends on precise differences in timing between different parts of a program (a “race”).
Ilya
Oleg
а о чем тогда?
Обо всяких древовидных CoW структурах данных для коллекций и immutable ADT.
Ilya
Ну и где это в раст?
Ilya
Вот в лиспах это built-in
Oleg
Которые позволяют не задумываться, к какким фатальным последствиям приведёт, если ты возьмёшь две независимых мутабельных ссылки к пересекающимся кускам одной структуры
Oleg
В раст нет загона на иммутабельность
Oleg
В rust exterior mutability и туча ограничений вместо этого
Oleg
Но, в принципе в языке есть всё, чтобы навернуть и приятно юзать и какие-нибудь FingerTree
Oleg
Просто они не нужны никому
Oleg
Но вот когда кого-то бомбит от упомянутых ограничений, он и задаётся вопросом "что ж мне теперь иммутабл всё делать, как в хачкелях? Но ведь раст такой оптимальный должен быть""
A64m
Ну и где это в раст?
в расте так не сделать, ГЦ-то нет. А если как-то накостылить, все равно он же для тех ниш предназначен, где такое позволить себе нельзя.
Oleg
Ilya
Ну такое дело...
A64m
сомнительно, на практике их в языках без ГЦ не применяют
Ilya
Многие обмазываются Arc как в питончике
Ilya
A64m
ох, прямо в C++ так все и используют иммутабельные деревья
Oleg
В С++ используют вообще всё, что угодно по-моему
Ilya
А, тьфу. Пардон, я думал ты про Rc/Arc
Alexander
два года назад все FingerTree на расте сливали даже haskell-ному