Cuno
Абстрактного, в ваккуме
Cuno
который без кучи геттеров не обходится
Anton
По логике, переменные должны жить, пока они используются, в расте же до конца блока. И вроде бы логично в случае return делать туда goto и вызывать drop, а одновременно это нелогично.
Anton
пример чего?
Маjко
То как ты скинул код — читать невозможно
Маjко
Минимализуй пример и кинь на плейграунд
Vladimir
у тебя селф в замыкание пробрасывается
Loo
Vladimir
вот и бороуинг селфа
Vladimir
а вдруг зомыкание будет жить вечно
Filipp
Loo
Matwey
/me поет и пляшет "замыкание будет вечным, если я замению батарейки
если я за ме ню ба та рей ки"
պլհկ
переменные должны жить, пока они используются
պլհկ
хуйня ваш раст
Loo
Matwey
goto не нужно, есть же Drop
Loo
ебучий борроу чекер
Vladimir
пиздос
Vladimir
вот жили в си
Loo
напридумали хуйни чтобы на нормальных языках не писать
Vladimir
там переменные живут пока живут
doc
Anton
Пример
https://play.rust-lang.org/?gist=0d4d632d0f4d3d9b135e377b496d6ec3&version=stable
Сережа
Потому что логично unsafe нужно использовать, когда мы лезем куда-то в железо или извращаемся, но тут мы вынуждены обманывать borrow checker, который обожает борровить всю структуру в геттерах вида fn get_a_mut(&mut self) -> &mut A и, видимо, еще и closure так себя ведет тоже.
может кто-то знает, как сделать такие геттеры более нормальными? copy, clone, assign не предлагать, нужно именно вырывать поле из из структуры. Зачем эти геттеры? А как ты сделаешь в расте что-то вида наследования? заюзаешь определенный трейт для схожих объектов.
https://github.com/rust-unofficial/patterns/blob/master/patterns/compose-structs.md
оффициальный паттерн тм от кор тим раста, нужно структуры бить на подструктуры и методы объявлять для них
Loo
Loo
и я хочу менять поля в ней как угодно
Loo
к чему это всё
big
Сережа
контрибутор
doc
есть си, там можно все
Сережа
это просто боро чекер ваш жопой слеплен
Vladimir
big
контрибутор
да, я в теме ) от этого не смищно не становится
Сережа
Сережа
у кого есть такие смайлики????
Anton
напомню, ты юзаешь геттеры чтобы добраться до полей в трейте. ты тык сделать не можешь. =)
Anton
В чем проблема написать так?
https://play.rust-lang.org/?gist=b56c2230f0280cf1f156a2674ac56133&version=stable
Cuno
окей, пили пример с трейтами тогда.
Сережа
сделать трейт get_A и в твоем трейте на него делать ограничение!
Сережа
элегантно!
Anton
ок
Anton
https://play.rust-lang.org/?gist=81cffeba68d0d216b511b919ca6b3d26&version=stable
Vladimir
ты не правильно готовишь трейты
Vladimir
нужно думать тем что этот трейт выполняет, а не то что внутри него находится
Vladimir
так никакой человек в здравом уме не пишет
Anton
да? у меня есть 7 серверов, крайне схожих, поэтому есть трейт Server.. удачи
Сережа
тебе нужно ишью в репе на гитхабе создать про это!
Anton
Раст вроде первый язык с борров чекером. И вроде все хорошо, когда мы юзаем всякие i32, и без классов жить легко, и логично, а на деле вылезает много острых подводных камней. Либо еще борров чеккер может заставить тебя выносить из блоков кода, копировать и тд, тем самым только уменьшая логичность и читабельность. Хорошо, что в расте хоть можно
match self.field {
Some(ref mut field) => do
ref mut field @ None => *field=Some(..)
}
Хотя для этого кажись функция была некая.
Судзумия
Anton
сколько сарказма
Anton
да какой безопасно. ваш раст только создает иллюзию безопасности - всё решается ансейфом. язык просто убог
Anton
тебе нужно ишью в репе на гитхабе создать про это!
Сережа
вроде бы там циклон был с боро чекером, но Роб Пайк как мудрый человек от этого всего отказался и сделал язык с гц
Alexander
Anton
Ну вообще-то ООП во многом верно. Ну структуры, поля, это же логично. А вот наследование да, кривая штука, композиция лучше, правда в расте она крайне неудобная из-за тысяч геттеров и сеттеров. Уход от такого "простого" ООП просто неразумен, я даже не представляю, как можно, например, сделать текстуры/буферы и работу с ними без ООП и тем более на функциональщине(сам потому не шибко её знаю)
Твой вариант не универсален. А если у нас 5 полей, будем добавлять get_ab get_abc и тд? Просто криво =)
Alexander
структуры и поля были задолго до ООП, при чем тут ООП?
Alexander
в чем проблема с буфферами и функциональщиной?
Cuno
Ну вообще-то ООП во многом верно. Ну структуры, поля, это же логично. А вот наследование да, кривая штука, композиция лучше, правда в расте она крайне неудобная из-за тысяч геттеров и сеттеров. Уход от такого "простого" ООП просто неразумен, я даже не представляю, как можно, например, сделать текстуры/буферы и работу с ними без ООП и тем более на функциональщине(сам потому не шибко её знаю)
Твой вариант не универсален. А если у нас 5 полей, будем добавлять get_ab get_abc и тд? Просто криво =)
Нет, один get_abcde. Можно же дропать ненужные ссылки.
Cuno
Но если у тебя 5 или больше геттеров в трейте, то определенно дизайн не очень.
Anton
знаю, но мне же намекают, что как бэ это неправильно, и надо вместо Struct+Implementation делать хз что.
Anton
структуры и поля были задолго до ООП, при чем тут ООП?
Anton
тогда зачем структуры с синтаксисом s.a вообще? можно было бы как в луа без классов обойтись(там только массивы)
Anton
Нет, один get_abcde. Можно же дропать ненужные ссылки.
Alexander
Struct+Implementation это ad-hoc полиморфизм, к ООП (subtype polymorphism) имеет отношение весьма далекое
Cuno
分解物質
Проблема с ООП заключается в том, что этим термином сейчас называют все что угодно. Привязал методы к хэшу в Perl — ООП. Наплодил в Erlang процессов, которые обмениваются сообщениями — ООП. Объявил пару-тройку функций для работы с какой-то структурой, и снова ООП. Никто уже толком не понимает, что именно сей термин означает, но все с умным видом его произносят. Стыдно же не знать!
...
Лично я уже перестал понимать, что такое ООП и вообще стараюсь выкинуть этот термин из своего лексикона. Во-первых, потому что я не понимаю, о чем идет речь. Во-вторых, потому что мой собеседник тоже не понимает, и мы оба не понимаем о чем-то своем.
eax.me/adt-and-traits/
...
分解物質
Alexander
какое отношение синтаксис c.a имеет к классам?!
Alexander
что ж за день сегодня
Anton
ИМХО, GC это кривая штука. GC лишь обходит проблему, но не решает её. Например, в жабе нужно закрывать файлы вручную, а если тровишь эксепшн, когда мутекс открыт, то.. он и не закрывается. Ну во всяком случае, как я слышал(жабу я потому и не юзаю). RAII куда логичнее. Например, раст закрывает файлы и отравляет мутексы. Второе очень полезно для написания чего-то живучего.
Alexander
c.a очень часто просто сахар для a(c)
Alexander
....
Маjко
Маjко
Как бы