Да не, просто статья ни о чём. Видно, что человек не писал ни на крестах, ни на расте. Зачем её вообще обсуждать.
я, как почти не знакомый с rust, с интересом прочитал, и убедился, что изучать его не следует
В этом и дело. Не зная Rust, можно поверить в это нытье (ну типа чел вроде шарит, а ноет, наверное дело говорит), но по сути всё очевидно и совсем не удивляет любого, кто хотя-бы туториал по расту прочитал. Про стандартную библиотеку ничего сказать не могу, не пишу ядра, не интересовался, но про правила владения полная хрень написана. Например: Заимствования чем-то напоминают указатели языка Си, только они намного слабее. Как и для взятия адреса в Си, в Rust нужно специально заимствовать значение символом &. Видишь неуча? Нет? А он есть. Штука как указатель, только слабее (видимо без арифметики), называется ссылкой. Автор про ссылки не слышал. Но при выходе из функции заимствование теряется, его нельзя никуда сохранить или даже вернуть. А это, между прочим, главная фича раста. Если вам хочется вернуть указатель на локальную переменную (UB), то вы выбрали не тот ЯП, проходите мимо. Дальше комментировать не интересно, не в том чате вы это развели.
Вадим собирался изучать раст? :)
Вот и иллюстрация, почему такие статьи вредны. Человек всю статью пытается высмеивать то, как сделаны некоторые вещи, которы, специально и принципиально так сделаны, потому в том числе через это достигается цель, для которой и был сделан этот язык. И именно поэтому вся критика выглядит, как заявка на вопящего неосилятора, потому что автор как-будто специально не пишет, а почему так сделано, и что хорошего из этого следует. Мне, как пишущему на последних крестах, наоборот, очевидны практически все моменты наброса, и почему оно так сделано, и для чего. Ну и уровень автора можно понять по логике "в либе языка есть Refcount объекты = в нем есть GC". Оказывается, в C++11 язык стал языком с GC, а пацаны и не знают. Вот о чем после этого можно идейно спорить?
Вот это и называется "сообщество фанатиков" - не должно быть такого, что "удивляет, значит не прочитал", поскольку это подразумевает, будто бы в написанном содержится правота, т.е. "прочитай и уверуй" - нет, критика идёт именно самого подхода >> Заимствования чем-то напоминают указатели языка Си, только они намного слабее. Как и для взятия адреса в Си, в Rust нужно специально заимствовать значение символом &. > Видишь неуча? Нет? А он есть. > Штука как указатель, только слабее (видимо без арифметики), называется ссылкой. Автор про ссылки не слышал. Подмена тезиса, приписывание автору того, чего он не говорил, принижение познаний автора без доказательств. Если его другие статьи посмотреть, то с плюсами он явно знаком, а значит, что такое ссылки, знает. Значит, твоя трактовка неверна, садись и попробуй понять, о чем именно была речь. >> Но при выходе из функции заимствование теряется, его нельзя никуда сохранить или даже вернуть. > А это, между прочим, главная фича раста. Если вам хочется вернуть указатель на локальную переменную (UB), О, отлично, снова подмена понятий. "Сохранить/вернуть владение" - вовсе не то же самое, что "вернуть указатель на локальную переменную", абсолютно. Вот она, наглядная демонстрация фанатичности - на несогласных либо смотреть высокомерно "да просто не осилил", либо, когда с их правотой так просто справиться не получается, начать врать, манипулировать подменой понятий и применять другие грязные приёмы.
иногда посматриваю на новые языки с целью размять мозг, если новые концепции будут полезны - но теперь вижу, что в случае ржавого это не так, лучше уж эрланг или хаскель
> почему такие статьи вредны Наоборот, они очень полезны - можно не тратить на это говно кучу времени и усилий > то, как сделаны некоторые вещи, которы, специально и принципиально так сделаны, потому в том числе через это достигается цель, для которой и был сделан этот язык Итак, мы начинаем читать, наслышавшись рекламы того, как новые подходы в языке нам всё улучшат, цель мы знаем. И что мы видим? Что король-то голый! Что нихера эта цель не достигается. > как пишущему на последних крестах, наоборот, очевидны практически все моменты наброса, и почему оно так сделано, и для чего Кресты, особенно последние - это отдельный раздел психопатологии. Язык с подобной целью должен был выкинуть весь пиздец и начать заново, а не продолжать мыслить в той же парадигме. > Ну и уровень автора можно понять по логике "в либе языка есть Refcount объекты = в нем есть GC". Оказывается, в C++11 язык стал языком с GC, Вот оно, снова вранье и подмена понятий от фанатиков. Читаем у автора: Особо стоит подчеркнуть, что сборщик мусора встроен в стандартную библиотеку, которая неотделима от самого языка, а потому заявления, что Rust — это якобы язык без сборки мусора, — лживы. С таким же успехом это можно сказать про язык D. Да, вы можете писать программы без сборки мусора, если очень захотите. Но, во-первых, в случае Rust это будет тяжко, ведь язык накладывает на вас многочисленные ограничения. Во-вторых, даже если ваша программа не будет его использовать — ваши зависимости будут, и почти наверняка, ведь использовать его очень легко То есть ответ на самом деле простой - встроен он в плюсах в стандартную библиотеку настолько, что им практически всегда будут пользоваться? Если да, то стал с GC. Если нет, то не стал. Всё ж просто. Но нет, так же не получится обосрать автора, чтобы получить повод проигнорировать его аргументы =)
Из новых концепций в расте, если уже знаешь плюсы - только борроу-чекер. А если ещё и был опыт с типизированным ФП, точно ничего интересного не увидишь. Для расширения сознания лучше взять какой-нибудь APL, например.
Владение и заимствование - это разные вещи. Владение вернуть можно (как раз через move), но речь то о заимствовании. А её вернуть или сохранить... тоже можно, но только если докажешь, что время жизни заимствования соответствует времени жизни того места, куда ты собираешься вернуть. Вот и выходит, что раз функция владеет значением, то значение умрёт в конце области видимости, и вернуть заимствование нельзя, потому что значение мертво. Чё вы злые такие, у вас что, работу Rust отбирает... Чуть что - обвинение в фанатизме, подмене понятий, высокомерном взгяде. Я тоже могу тебя обвинить в фанатизме и подмене понятий. Автор сказал: при выходе из функции заимствование теряется, его нельзя никуда сохранить или даже вернуть. А ты сказал: "Сохранить/вернуть владение" - вовсе не то же самое, что "вернуть указатель на локальную переменную" Подменил владение на заимствование! Конечно вернуть владение и вернуть заимствование это не одно и тоже, потому что первое - это возврат значения, а второе - возврат ссылки. И кто здесь фанатичен?
Библиотека настолько неотделима, что можно получить бинарник без неё, чем и пользуются при работе с embedded с Rust? Ну и нет, даже если бы она была неотделима, если без явного использования программистом не получается ни одна сущность под счетчиком ссылок, то и какая разница, что там можно при желании получить. Фанатиком или жирным троллем пока тут выглядит кроме автора статьи кое-кто другой, фанатики любят навешивать раздувать любой спор до священной принципиальной войны с адептами лжи.
В Rust есть core и std. В core объявлены базовые типы (bool, u8, f64 и т.д.) и интерфейсы (Copy, Clone, Iterator и т.д.) и core не отключается. В std лежит всё остальное, что завязано на ОС, файловой системе, сети, аллокации памяти... И std легко отключается. Так вот Rc и Arc лежат в std, а не в core, соответственно заявление автора статьи неверно.
Ну на уши натянуто. Там написано, что при большом желании это можно сделать, но это ж шляпа, все зависимости юзают std небось
Тут ещё проблема в том, что человек сам не разбирался в Расте, и поэтому принимает риторику статьи как адекватную. И при этом спорит с людьми, которые ознакомились с предметом обсуждения чуть больше, чем по этой одной этой статье; но, в силу ограниченности кругозора, он не понимает, что на большую часть риторических вопросов в статье ответ "Ну, оно так и планировалось, и что? В чем проблема кроме шашечек?".
Не "при большом желании", там одну команду написать нужно. Он сравнивал с D, типа там в ЯП встроен сборщик мусора, как в голанг, можно писать код без него, но он всегда есть. В Rust сборщика мусора нет, есть обычный счётчик ссылок Rc<T>, просто структура, которая импортируется, и если std нет, то и счётчика нет. Т.е. это не синтаксис или механизм языка, это структурка, написанная с помощью самого языка. Как shared_ptr в С++. И... Какие зависимости? Web, GUI, CLI? Они конечно по определению завязаны на ОС, и юзают std. Но ты и не сможешь ими воспользоваться без ОС, а отсутствие ОС - вроде бы единственная причина отказываться от std. Придётся качать библиотеки для embedded-разработки, там всё норм. В принципе ситуация не отличается от С. Там тоже в стандартной библиотеке лежит malloc и free, поди куча зависимостей используют malloc и free, что же теперь делать 😱 Но линукс на С пишут с отключенной стандартной библиотекой, чипы на С также прошивают, живут как-то.
> настолько неотделима, что можно получить бинарник без неё Попробуй перечитать еще раз, "С таким же успехом это можно сказать про язык D. Да, вы можете писать программы без сборки мусора, если очень захотите" - не, ну я понимаю, фанатики никогда не слышали про другие языки, поэтому пропускают мимо ушей...
> Владение и заимствование - это разные вещи [...] А ты сказал: Мне можно путаться в терминах, я не знаю Rust. Однако я прекрасно вижу на примере кода показанную проблему, и как она могла бы быть легко решена "верни caller'у при выходе из меня". Поэтому поинт по-прежнему валиден, более чем валиден.
"Кругозор", если что - это не "знать rust", а "знать много чего", например другие языки. Именно зная много их, и можно оценить, насколько в конкретном та или иная вещь сделана через жопу. Я ведь уже сказал, что "прочитай мануал" - это ошибка, поскольку подразумевает, будто в мануале содержится Священная Истина, и архитектор языка не мог сделать что-то через жопу (привет срезам в Питоне). Попросту говоря, на "оно так и планировалось" ответ "хуйню запланировали, хуйню и сделали".
Владение - значение, заимствование - ссылка. Ссылку на локальное значение вернуть нельзя. На значение, которым владеет caller можно. Всё. Не поняв терминологию, ты не понял саму суть.
лолшто? причем тут Си, когда речь шла про D ?
> В Rust сборщика мусора нет, есть обычный счётчик ссылок Какое смешное утверждение. Есть целые языки со сборщиками мусора, которые сделаны на подсчете ссылок (Перл, Питон), и никто же не утверждает, что это языки без сборки мусора, потому что, видите ли, ну это же просто "обычный счётчик ссылок". > это структурка, написанная с помощью самого языка А вот это как раз то самое вранье/искажение реальности. Потому что написанное под unsafe не катит под "написано на самом языке". Ибо вся суть Rust как нового языка с новой концепцией - в этом самом safe (без него мы и просто Си можем взять, спасибо).
не катит под "написано на самом языке". Это твоя выдумка
если уж так доебываться до терминологии, то "владение" не может быть "значение", оно про значение
это не моя выдумка, а реальность - rust c unsafe попросту не нужен
Ты можешь пояснить, в чем проблема с примитивом со счётчиком ссылок в std? Я в упор этого не понимаю. Ну в плюсах есть std::shared_ptr, и что, это язык со сборщиком мусора? Без std на плюсах тоже обычно никто не программирует. А если в стандартную библиотеку C добавят что-то, напоминающее работу со ссылками, то он станет языком с GC? Ты точно понимаешь, что означает "язык с GC"?
в том, что в реальных программах, а не теоретических фантазиях, они обязательно будут использоваться, только и всего
>Без std на плюсах тоже обычно никто не программирует *Qt вошло в чат*
Нужен, даже в unsafe все проверки владений и заимствований на месте
не нужен, проще взять более простой язык
Ну поди и возьми. FAANG кстати так и не научился писать на С/С++, 70% багов от памяти
источник?
https://www.zdnet.com/article/microsoft-70-percent-of-all-security-bugs-are-memory-safety-issues/ https://www.zdnet.com/article/chrome-70-of-all-security-bugs-are-memory-safety-issues/
чо? говорил же FAANG
kek, в превью Microsoft
посмотрел, там только Гугль, и даже конкретно только Chrome, причем тут весь FAANG бы?
Я знал, что ты всегда найдешь до чего доебаться
ясен пень, потому что я знаю, что Netflix например коммитит во FreeBSD, то есть на Си.
> сборщика мусора нет, есть обычный счётчик ссылок подсчёт ссылок — это уже одна из техник работы сборщика мусора
Обсуждают сегодня