Re[7]: Android: Rust wins
От: Shmj Ниоткуда  
Дата: 15.11.25 06:59
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>
S>>let layout = Layout::new::<*mut MyStruct>(); // выделяем размер указателя
S>>let ptr = alloc_zeroed(layout) as *mut MyStruct;
S>>


Pzz>А что опасного в том, чтобы выделить память под сишную структуру?


Так тут вы выделяете память под один указатель, то есть 8 байт. А в голове у вас как будто под структуру. И потом будете писать в размер структуры, которая более 8 байт, а там уже совсем другие данные

Но в Rust такое возможно только в unsafe, а это очень важно данная концепция.

S>>В Rust-команде можно договориться что unsafe пишет только тимлид, а всем остальным это слово запрещено использовать.

Pzz>И как же все остальные достигнут нормальной квалификации, если им запрещено программировать?

Им разрешено в песочнице — без unsafe. Там особого вреда причинить не смогут, так что норм. И такого кода как раз 80% а то и более.
=сначала спроси у GPT=
Re[5]: Android: Rust wins
От: Shmj Ниоткуда  
Дата: 15.11.25 07:02
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Беда в том что Rust как раз на порядок сложнее в освоении, нежели C++

Pzz>Почему он сложнее?

Выше ответили. Вообще на нем писать не комфортно как-то, по этому за десятилетия не особо стал популярным. Возможно даже победят расширения для безопасности памяти C++ или Carbon-lang.
=сначала спроси у GPT=
Re[6]: Android: Rust wins
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.11.25 07:55
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>Всего на 20%? А топик начинался так, словно в расте вообще ошибок не делают.


N>Это же разные штуки: ревизии в коде и число уязвимостей.


Но подозреваю, что линейно-связанные.
Re[8]: Android: Rust wins
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.11.25 08:00
Оценка:
Здравствуйте, Shmj, Вы писали:

Pzz>>А что опасного в том, чтобы выделить память под сишную структуру?


S>Так тут вы выделяете память под один указатель, то есть 8 байт. А в голове у вас как будто под структуру. И потом будете писать в размер структуры, которая более 8 байт, а там уже совсем другие данные


Я уже понял, да. Сам на это несколько раз попадался.

В принципе, в C++ есть new, а в C это лечится простым макросом-обёрткой:

#define NEW(T) ((T*) calloc(1, sizeof(T)))


В целом, фишечка неприятная, но не прям ужас-ужас-ужас.

S>>>В Rust-команде можно договориться что unsafe пишет только тимлид, а всем остальным это слово запрещено использовать.

Pzz>>И как же все остальные достигнут нормальной квалификации, если им запрещено программировать?

S>Им разрешено в песочнице — без unsafe. Там особого вреда причинить не смогут, так что норм. И такого кода как раз 80% а то и более.


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

А как еще научиться, если "вы сначала плавать научитись, а воду в бассеин потом нальём"?
Re[6]: Android: Rust wins
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.11.25 08:09
Оценка:
Здравствуйте, SkyDance, Вы писали:

Pzz>>Почему он сложнее?


SD>Потому что заставляет тебя заранее исправить всю кривизну (ту самую, что ведет к уязвимостям). Заставляет разобраться до того, как все будет работать в проде. Еще на этапе компиляции. Понятное дело, что первоначальные затраты заметно выше. И так же понятно, что потом это поддерживать проще.


Ну т.е., заставляет быть очень эксплицитным в отношении своих намерений.

Ну, не знаю, кто как, а я всегда так делаю. С самого начала, как программировать начал. А тут еще и синтаксис есть прям в языке.

Меня в расте смущает скорее не требование явно выражать свои намерения (из которых следует необходимость их наперёд для себя сформулировать), а синтаксис евонный, который кажется мне слишком уж вычурным и барочным, без нужды.

SD>Примерно как с тестами. Если их не написать с самого начала, то зачастую можно быстрее отправить какой-то код в прод. Зато потом...


Сейчас скажу крамольное. Если быть предельно откровенным, у меня сложное отношение к тестам.

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

Но тесты минимум в два раза увеличивают цену написания, при том нет ощущения, что это компенсируется соответствующим уменьшением цены развития и поддержки.

Заметим, код условного ядра UNIX, как Linux так и BSD, особо-то тестами не покрыт. Что не мешает быть ему вполне качественным и надёжным.
Re[7]: Android: Rust wins
От: Shmj Ниоткуда  
Дата: 15.11.25 08:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Заметим, код условного ядра UNIX, как Linux так и BSD, особо-то тестами не покрыт. Что не мешает быть ему вполне качественным и надёжным.


Есть такое. Тут чисто вопрос экономики — написание авто-тестов стоит дорого и все-равно можно пропустить важные проверки. Чаще всего лучше проверить вручную тот код, который был изменен.
=сначала спроси у GPT=
Re[9]: Android: Rust wins
От: Shmj Ниоткуда  
Дата: 15.11.25 08:57
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>У меня джуны участвовали в написании ядерных драйверов. Задачи им, ставились, конечно, попроще, чем не джунам, но они писали настоящий код, без наручников на своих руках. Я потом просматривал, чего они понаписали.


Pzz>А как еще научиться, если "вы сначала плавать научитись, а воду в бассеин потом нальём"?


Бизнес об этом не думает. Пусть пишут свои опенсорсные проекты, доказывают что умеют — и уже потом бизнес их возьмет и доверит — а обучать сейчас не будут.
=сначала спроси у GPT=
Re[10]: Android: Rust wins
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.11.25 09:30
Оценка:
Здравствуйте, Shmj, Вы писали:

Pzz>>А как еще научиться, если "вы сначала плавать научитись, а воду в бассеин потом нальём"?


S>Бизнес об этом не думает. Пусть пишут свои опенсорсные проекты, доказывают что умеют — и уже потом бизнес их возьмет и доверит — а обучать сейчас не будут.


А где этот бизнес собирается брать готовых сеньёров, если он не хочет обучать джунов?
Re[6]: Android: Rust wins
От: T4r4sB Россия  
Дата: 15.11.25 10:00
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

Pzz>>Почему он сложнее?


SD>Потому что заставляет тебя заранее исправить всю кривизну (ту самую, что ведет к уязвимостям). Заставляет разобраться до того, как все будет работать в проде. Еще на этапе компиляции. Понятное дело, что первоначальные затраты заметно выше. И так же понятно, что потом это поддерживать проще.


Про поддержку вообще не факт. Допиливать мелочи — может быть. А вот рефекторинг может оказаться фатальным.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[8]: Android: Rust wins
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.11.25 11:36
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Так тут вы выделяете память под один указатель, то есть 8 байт. А в голове у вас как будто под структуру. И потом будете писать в размер структуры, которая более 8 байт, а там уже совсем другие данные


S>Но в Rust такое возможно только в unsafe, а это очень важно данная концепция.


Я в плюсах уже лет 20 сам не выделял память...
Маньяк Робокряк колесит по городу
Re[2]: Android: Rust wins
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 15.11.25 17:50
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>А не может быть так, что это очень молодой код, в котором просто еще не успели найти уязвимости?


В тексте прямо говорится, что для молодого кода они всё и считают:

Накопленная статистика подтверждает ранее высказанное предположение, что основным источником проблем с безопасностью является новый код, а для старого кода наблюдается экспоненциальная зависимость безопасности от времени — со временем в старом коде ошибки выявляются всё реже и реже. В конечном счёте в Google решили не пытаться переписать старый код на языках безопасно работающих с памятью, а сосредоточиться на использовании подобных языков для нового кода.

Re[7]: Android: Rust wins
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 15.11.25 17:52
Оценка:
Здравствуйте, Pzz, Вы писали:

N>>Это же разные штуки: ревизии в коде и число уязвимостей.

Pzz>Но подозреваю, что линейно-связанные.

Вот и видно, что коэффициент везде сильно разный.
Re[9]: Android: Rust wins
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 15.11.25 17:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>В принципе, в C++ есть new, а в C это лечится простым макросом-обёрткой:

Pzz>
Pzz>#define NEW(T) ((T*) calloc(1, sizeof(T)))
Pzz>


Ну, это даже близко не аналог new из C++
Re[10]: Android: Rust wins
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.11.25 18:06
Оценка:
Здравствуйте, Nuzhny, Вы писали:

Pzz>>
Pzz>>#define NEW(T) ((T*) calloc(1, sizeof(T)))
Pzz>>


N>Ну, это даже близко не аналог new из C++


Но sizeof структуры с sizeof указателя на структуру так уже не перепутаешь...
Re[2]: Android: Rust wins
От: CRT  
Дата: 15.11.25 19:43
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Мне кажется, в долгосрочной перспективе C++ вообще уходит.


в долгосрочной перспективе ИИ будет сразу фигачить в машинных кодах
Re[7]: Android: Rust wins
От: SkyDance Земля  
Дата: 17.11.25 16:32
Оценка:
Pzz>Ну т.е., заставляет быть очень эксплицитным в отношении своих намерений.

Именно! Заставляет разобраться (!!!) в том, что ты делаешь. У нас, старичья, желание разобраться в том, как что работает, было ключевым — мы поэтому и стали заниматься компьютерной техникой. Сначала, конечно, разобрав все в доме будильники, чайники и что еще под руку могло попасться.
Но современные железяки просто так не разберешь. А порой так и вовсе не разберешь. Они слишком сложные, и слишком не-обслуживаемые. Поэтому уже нет стремления разобраться, как и что работает, и что ты хочешь сделать. Напротив, все ушло в некоторые слабо формализованные вероятности — "хочу вот как-то так".

Pzz>Меня в расте смущает скорее не требование явно выражать свои намерения (из которых следует необходимость их наперёд для себя сформулировать), а синтаксис евонный, который кажется мне слишком уж вычурным и барочным, без нужды.


Не, ну это придирки, или вопрос вкусовщины. Выглядит чутка непривычно, но, в целом, вполне разумно. А главное — не так многословно, как это в managed языках типа жабы и аналогов.

Pzz>Да, я понимаю, код с тестами воспринимается с большим доверием, чем код без тестов, и всячески изгибать его потом комфортнее, потому что тесты ловят за руку, когда случайно сломал (и поощряют экспериментировать, толком не разобравшись).


Так это по определению и есть "поддержка старого кода". Более того, если приучить себя начинать с тестов, то и новый код пишется намного более прямой и понятный. Это всего лишь следующий шаг по лестнице грамотности программиста. Он редко случается сам собой. Как правило, нужно активно об этом думать — не о том, чтобы "пофиксить баг", а о том, чтобы написать тест, который баг воспроизводит. Через какое-то время начинаешь прозревать, насколько это меняет даже само восприятие программирования.

Pzz>Но тесты минимум в два раза увеличивают цену написания, при том нет ощущения, что это компенсируется соответствующим уменьшением цены развития и поддержки.


Поэтому и стараются перенести тривиальные тесты прямо в сам язык. И Rust как раз в этом хорош — система типов и подход к менеджменту памяти позволяют обойтись без (порой нетривиальных) тестов. Это все часть подхода "shift left" — когда обнаружение проблемы происходит на как более раннем этапе. Сначала это было в проде. Потом уже в стейдже. Потом на этапе е2е тестов, потом — интеграционных, потом — юнит. Сдвигай на еще один шаг — и вот тебе уже компилятор скажет "атата". Дальнейший сдвиг (еще до этапа написания кода, уже во время обсуждения "а надо ли вообще такой код писать") куда более сложный и пока не очень автоматизирован.
Re[7]: Android: Rust wins
От: SkyDance Земля  
Дата: 17.11.25 16:36
Оценка:
TB>Про поддержку вообще не факт. Допиливать мелочи — может быть. А вот рефекторинг может оказаться фатальным.

Конечно! Тут уже верно указали — количество дефектов напрямую зависит от новизны кода. Если был сделан большой рефакторинг, то есть много нового кода, при прочих равных (*) поначалу будет намного больше ошибок. На С/С++ эти ошибки будешь ловить уже после ухода в прод, а на Rust — еще на этапе компиляции (что, конечно же, поначалу замедлит рефакторинг).

(*) под прочими равными понимается неизменность общей архитектуры и тулинга. Если этот рефакторинг, например, перенес весь код из unsafe в safe, или вовсе на какой-то более высокоуровневый язык, подобные сравнения могут быть неприменимы.
Re[8]: Android: Rust wins
От: Skorodum Россия  
Дата: 18.11.25 11:40
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Но сам этот параметр (багов на строку кода) неверный, т.к. некоторые языки уж очень многословные. Есть известное исследование от Ericsson, когда они свою С/С++ систему переписали на Erlang, и там стало в 4 раза меньше строк кода (при той же плотности багов на строку, то есть общее количество багов снизилось в 4 раза). То самое подтверждение формулы Эйнштейна, E=m*C^2.

SD>Errors = More * Code ^ 2.
А как меняется количество строк при переписывании с С++ на С++? ИМХО, если взять какой-нибудь большой проект на С++98 и переписать на С++20, то он тоже легко в 4 раза меньше может стать по количеству строк.
Re[9]: Android: Rust wins
От: so5team https://stiffstream.com
Дата: 18.11.25 12:37
Оценка: +1
Здравствуйте, Skorodum, Вы писали:

S>А как меняется количество строк при переписывании с С++ на С++? ИМХО, если взять какой-нибудь большой проект на С++98 и переписать на С++20, то он тоже легко в 4 раза меньше может стать по количеству строк.


Есть подозрение, что тамошний код при переписывании с C++98 на C++98 можно было бы раза в полтора-два уменьшить.
Re: Android: Rust wins
От: qqqqq  
Дата: 18.11.25 16:43
Оценка:
Вообще C++ на так уж и сложен и небезопасен. Просто значительно выросло количество естетов, стремящихся с помощью его всевозможных примочек усложнить код и порой как следствие сделать его и небеопасным и непонятным и неподдерживаемым. Так языки, где возможности для извращений ограничены или вовсе отсутствуют, становятся безопасными и эффективными.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.