Pull to refresh

Comments 20

Несмотря на вдохновенное выступление, автору так и не удалось убедить меня в необходимости массового копирования иммутабельных данных. Использовать строки в качестве идентификаторов, копируя их по значению? Хорошо ли это, правильно ли? Зря что ли придуманы хэши и атомы?

Может автор пришел из джавы, забрав все привычки с собой...

Автор забыл сказать в каких кейсах это имело бы смысл. А это в основном какие-нибудь парсинги в параллель. Какой-нибудь HTML парсить или чанки JSON или может у вас там LSP какой крутится.

Атомарный Rc в однопоточном коде, отличный совет, а главное нулевой оверхед. Если автор не понимает даже этого и вообще никак не упоминает обычный Rc, такая огромная статья от него не заслуживает прочтения

В целом совет хороший, но очевидный: если никак не модифицируете массив, то не делайте его расширяемым, чтоб не тратить ресурсы на capacity. Но так Rc тут ничем не особен: сравнение можно было проводить и с Box, а другие контейнеры упомянуть в одном пункте

Но ведь автор упоминает

Подскажите, пожалуйста, в каком месте/пункте?

В самом начале, в разделе "Arc<str> vs String" целый абзац посвящен как раз Rc.

А, хорошо, спасибо, был неправ. Тогда моя претензия в том, что автор решил указать везде менее оптимальный, но работающий в большем числе случаев способ, хотя говорит о системном языке. Казалось бы, философия всего этого направления в том, чтобы так не делать: выжимать из кода всю производительность и понимать устройство того, чем работаешь. А об оптимальном варианте автор лишь оговорился в одном абзаце, который невозможно заметить при беглом просмотре, в пункте, который вообще не про это. Но абзац хороший, да, просто находится не там, где хотелось бы (а именно в самом начале)

Последний раз когда я писал одно поточную программу был примерно 15 лет назад это не значит, что их больше не пишут совсем, но это вполне значит, что на расте это совсем не дефолтный вариант. Дефолт как раз таки многопоток, а однопоток - экзотика.

Это видео я тоже смотрел, но решил, что переведу только про Arc. Так что если у вас есть желание перевести видео про &Option<T>, то я не стою на вашем пути)

А в сложном и небезопасном С++ ребята долго запрягали, и таки ввели move-семантику, чтобы не натягивать сову на глобус, и не использовать shared ptr как костыль в данном случае.

Но ведь в Rust move-семантика вшита в язык по дефолту. А статья вовсе не про то как замувить, а про то как дешево копировать. Ну и последняя глава как раз про Box<str> для тех, кто хочет мувить

Я так понимаю, на Хабре присутствует жесткая сегрегация по языкам, и в теме про богоугодный РАСТ все неистово минусуют любому, кто не считает его хорошим ЯП?
Ну ОК.

Что значит "move-семантика вшита по дефолту"? В С++ для true rvalue это тоже "по дефолту". Но как быть с пользовательским типом?
Или если ты хочешь мувнуть именованную переменную, зная что она тебе больше не понадобится? Какой может быть "дефолт" в данном случае?
Чтобы "дешево копировать" - прожженным РАСТаманам для этого нужны целые статьи?

Что значит "move-семантика вшита по дефолту"?

y = x // это мув в Rust - x мувится в y и больше к нему нельзя обратиться

Возможно, поэтому и минусуют, потому что штуки вида "С++ ребята долго запрягали, и таки ввели move-семантику", "натягивать сову на глобус" вызывают недоумение и непонимание, поскольку они нерелевантны ни по отношению к Rust, ни по отношению к тому, что излагается в статье.

Ибо у Rust move-семантика есть с самого начала языка как ключевая фича, а статья так и вовсе не про мув-семантику. Поэтому не ясно, к чему вы ведете, где здесь сегрегация (я С++ программист, если что), и главное — как ваши слова связаны со статьей?

Далее по тексту часто будет употребляться термин "копирование", но в этой статье под ним подразумевается исключительно операция Clone::clone()

В чем проблема использовать общепринятый термин "клонировать"?

Если честно, я было начал с "клонировать", но быстро стушевался, потому что когда увидел на русском много слов "клонировать, клонировать", мне показалось, что я сумасшедший ученый, клонирующий людей. Насчет общепринятости в русском языке тоже засомневался, "копировать" выглядело более приемлемым.

В общем, если отвечать на вопрос "в чем проблема?", то скорее всего во мне)

когда увидел на русском много слов "клонировать, клонировать", мне показалось, что я сумасшедший ученый, клонирующий людей

В принципе, термин "клонировать" подходит идеально, ведь по сути он означает, что вы создаёте клон из другой материи, но с идентичными свойствами и характеристиками. Копирование, в данном случае, не очень подходит, т.к. это иной процесс.

Да и клонировать можно не только людей, в основном клонируют не их) Также и в расте, т.к. он - объектный ЯП, то логично, что там можно клонировать объекты какого-то типа. И, если уж вам захочется, то можно и создать тип "Person" (или "Human", раз аналогия биологическая) и клонировать их, уж это не запрещено всеми странами мира)))

Во время прочтения меня не покидала всего одна мысль: а почему нельзя было взять обычную ссылку, раз данные всё равно иммутабельные?.. А оригинальную строку аллоцировать в каком-нибудь AllMonsterIdVec.

Потому что подход спорный, и макаронистый, в какой то момент данные могут и вовсе оказаться полностью не нужны, и придётся продумывать способ, как их удалить, и как отслеживать, что данные были удалены, и обращаться к ним не нужно.

И придётся ещё аннотировать времена жизни частенько, чтобы компилятор был уверен, что объект на который ваша ссылка, жив на протяжении всего времени, что на него ссылаются.

Коротко

Вариант из статьи: Объект валиден - пока на него есть хотя бы одна ссылка в любой части программы, и сам удалится из памяти, когда последняя ссылка будет удалена.

Вариант ваш: Ссылки валидны - пока объект существует, если объект не нужен, вам нужно точно точно убедиться, что он больше не нужен ни в одной части программы, и удалить все ссылки на него прежде чем удалить оригинал

Sign up to leave a comment.

Articles