LINUX.ORG.RU
ФорумTalks

В чем смысл Rust?

 , , , ,


1

4

Зачем нужен Rust, если на Си с условным valgrind можно писать код без утечек и битья памяти переполняющимися буферами?

Перемещено dataman из general



Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от ugoday

Но раньше 100% уязвимостей были в сандбоксе (память+логические), а теперь 33% уязвимостей (логические) живут спокойно и радуются жизни.

rcldev
() автор топика
Ответ на: комментарий от rcldev

Признаться, что там и как работает в андроиде мне глубоко пофиг. А вот компы-ноутбуки — это уже интересно.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Сегодня Rust сделал менее безопасным Android (в чем тогда смысл Rust?), а завтра продырявит еще и Linux.

rcldev
() автор топика

писать лучше на С++ для начала. лучше перед тем как писать нарисовать схему на бумаге: кто куда чего.

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

самое сложное это я щас делаю парсер языка программирования который должен realtime-интегрироваться в IDE. там полно кросс-ссылок и вот там надо думать.

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

ckotctvo
()
Ответ на: комментарий от rcldev

а завтра продырявит еще и Linux.

То, что мертво, умереть не может.

ugoday ★★★★★
()
Ответ на: комментарий от ckotctvo

Один сишник раз решил покодить, находясь в сознании. Так и говорит коллегам: у меня, мол, жена на неделю тёщу проведать уехала, так я в субботу отосплюсь, а в воскресенье на код-то наш и взгляну. Тут меня все торопят-отвлекают, а там удастся сосредоточиться. Взял с собой ноут да и пошёл домой. В понедельник он на работу не вышел, в чат не отписался, на звонки не отвечал, на email’ы тож. А впереди deadline, busfactor обычно единица, без него никак.

Послали за ним коллегу, тоже сишника, друга евоного, тот заходит к приятелю в комнату, а он мёртв давно. И на лице — маска ужаса, будто криком своим подавился и от того задохнулся совсем. Левой рукой он будто от монитора отгородиться пытался, а правая в мышь вцепилась мёртвой хваткою. Стало коллеге любопытно взглянуть на монитор, что ж там такого было страшного, а там код проекта в ИДЕ открыт. Взглянул на него свежим взглядом и испустил вопль истошный, на колени встал и харакири себе сразу сделал. Механической клавиатурой, потому что меча не было. Откуда у программиста меч?

Другого сотрудника на следующий день отправили искать этих двух, так он в окно сиганул. Хорошо этаж был четвёртый, выжил, поломался только весь. Потом вскрыться хотел, его в дурку определили, а в третий раз послали уже фронтендера, который кроме js и немножко php ничего не знал и потому жив остался и смог разобраться в ситуации.

ugoday ★★★★★
()

если на Си с условным valgrind можно писать код без утечек и битья памяти переполняющимися буферами?

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

Tark ★★★
()
Ответ на: комментарий от ckotctvo

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

rcldev
() автор топика
Ответ на: комментарий от Tark

Бóльшая часть программ пользуются, из-за чего новостей про уязвимости в них на OpenNET нет.

rcldev
() автор топика
Ответ на: комментарий от peregrine

один cargo уже серьёзная заявка.

«Заявка» на что…? на централизацию и средство залива бэкдоров…?

Null вынесли в unsafe

Языки раньше - «стремятся уменьшить количество строк и сделать код более человекопонятным», Раст сегодня - «А давайте тучу кода писать, а то строчек в текстовике еще много»…

Sm0ke85
()
Ответ на: комментарий от Sm0ke85

не просто тучу кода, а`такого.кода_чтоб"глаза!кровоточили

ckotctvo
()
Ответ на: комментарий от rcldev

А никакие аргументы и не нужны. Нужно писать код. Растовикам — чтоб работал и делал полезное. Сишникам — без дырок. Кто лучше справится, тот и молодец.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Один сишник раз решил покодить, находясь в сознании.

Это всё занимательно, но вы промышленный код на расте видели? Когда-то давно я кажется кидал сюда куски из тормозилы, чисто поугорать. А может и не сюда, уже не помню. Суть в том, что растишки пишут хтонический ужос в худших традициях крестов. И по-другому там не получается, даже если очень стараться. Сишный код может и ненадежный, но с ним в разы проще разбираться. Что спокойно делали тысячи любителей по всему миру. И написали вам ядро и гтк с гномом. Ничего подобного у безопасных растишек нет и вряд ли когда-то появится.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от bread

Суть в том, что растишки пишут хтонический ужос в худших традициях крестов.

А у вас какой опыт написания кода на расте?

Сишный код может и ненадежный, но с ним в ращы проще разбираться.

Неправда. Возьми произвольную функцию на Си в большом проекте, и ответь на такие простые вопросы: вызывается ли эта функция из разных потоков, и позволяет ли её реализация это? Должен ли ты освободить память, переданную тебе по указателю из вызванной функции? Может ли поменяться содержимое структуры после вызова другой функции, из-за чего тебе нужно заново прочитать её поля для дальнейшей работы? Во всех ли предусмотренных способах выйти из функции ты правильно освободил ресурсы? В расте на порядки проще ответить на все эти вопросы.

unC0Rr ★★★★★
()
Ответ на: комментарий от bread

Сишный код может и ненадежный, но

Сначала хотел что-то злое ответить, а потом подумал: «Как же здорово, что производители тормозов не рассуждают в духе ‘наши тормоза может и не срабатывают иногда, но …’». Если уж нужно творческие потуги безотвественных бракоделов как-то утилизировать, пусть уж лучше пишут на С, ущерб для человечества будет меньше.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Зачем предпочтения сишников записал растоманам и наоборот?

rcldev
() автор топика
Ответ на: комментарий от unC0Rr

А у вас какой опыт написания кода на расте?

А у тебя есть опыт поедания говна? Оно, как и Rust, очень сильно воняет.

Должен ли ты освободить память, переданную тебе по указателю из вызванной функции?

Это проще простого определяется хотя бы просмотром объявленных переменных в начале функции.

rcldev
() автор топика
Ответ на: комментарий от unC0Rr

а ты можежь посмотреть кстати исходный код, если тебе нужны ответы на эти вопросы. в расте же как то отвечает.

nionio35
()
Ответ на: комментарий от rcldev

Rust, очень сильно воняет.

У тебя какие-то нарушения в работе нейронов? Раст как исключительно цифровая сущность не обладает запахом.

Это проще простого определяется хотя бы просмотром объявленных переменных в начале функции.

И что это тебе даст? Определишь, не вернули ли тебе указатель на стек? Как узнать, нужно ли сделать что-то ещё кроме освобождения памяти, может, нужно вызвать специальную функцию из этой же библиотеки, которая не только освободит память, но и закроет файл, ассоциированный с указателем?

Что насчёт остальных вопросов?

unC0Rr ★★★★★
()
Ответ на: комментарий от nionio35

в расте же как то отвечает.

В расте мне не нужно изучать всё приложение для ответа на простой вопрос, нужен ли мне мутекс для доступа по определённому указателю. Вся информация есть в типе функции, и в частности переданных в неё параметров. К тому же раст защитит от ситуации «посмотрел код всего приложения, функция никогда не вызывается из другого треда, через две недели всё-таки начали вызывать, нужно переделывать».

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Раст как исключительно цифровая сущность не обладает запахом.

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

И что это тебе даст?

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

rcldev
() автор топика
Ответ на: комментарий от unC0Rr

Вместо хипстерских тредов лучше использовать процессы. IPC, конечно, не так удобно будет делать, зато портабельнее.

rcldev
() автор топика
Ответ на: комментарий от unC0Rr

Опять растоман вырывает слова из контекста. Такое ощущение, что ты либо меня троллить пытаешься, либо уже заболел двач-болезнью (человек начинает общаться троллингом, а по-нормальному уже не может).

rcldev
() автор топика
Ответ на: комментарий от rcldev

зато портабельнее

А на каких платформах есть треды, но нет процессов?

IPC, конечно, не так удобно будет делать

IPC = inter-process communication. Как можно делать inter-process communication между тредами?

shdown
()
Ответ на: комментарий от rcldev

хотя, насколько я понимаю, он заменяет через динамическую библиотеку функции malloc

Ты неправильно понимаешь. Он интерпретирует ассебмлер. Но границы объектов на стеке он не может знать:

#include <stdio.h>
#include <assert.h>

int main()
{
    int a[2] = {0};
    int b[2] = {0};

    int i, j;
    assert(scanf("%d %d", &i, &j) == 2);
    a[i] = 123;
    b[j] = 456;

    printf("{%d %d} {%d %d}\n", a[0], a[1], b[0], b[1]);
}
$ gcc -Wall -Wextra -O3 foo.c -o foo
$ echo 2 0 | valgrind --exit-on-first-error=yes --error-exitcode=42 ./foo
==788684== Memcheck, a memory error detector
==788684== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==788684== Using Valgrind-3.25.1 and LibVEX; rerun with -h for copyright info
==788684== Command: ./foo
==788684== 
{0 0} {456 0}
==788684== 
==788684== HEAP SUMMARY:
==788684==     in use at exit: 0 bytes in 0 blocks
==788684==   total heap usage: 2 allocs, 2 frees, 5,120 bytes allocated
==788684== 
==788684== All heap blocks were freed -- no leaks are possible
==788684== 
==788684== For lists of detected and suppressed errors, rerun with: -s
==788684== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$ echo $?
0
$

valgrind не увидел ошибок, а через границы массива на стеке зашли и перезаписали значение в другом массиве. Как же так?

Rust действует на уровне исходного кода, что менее надежно

Лол.

shdown
()
Последнее исправление: shdown (всего исправлений: 1)
Ответ на: комментарий от shdown

Если ты в стековый буфер (статический буфер) пишешь неопределенное кол-во данных, то это дебилизм. Я не понимаю, что надо делать, чтобы сначала написать это, а потом оставить в коде и не посчитать это CVE’шкой.

rcldev
() автор топика
Ответ на: комментарий от shdown

Я не писал такого, я писал, что процессы — это лучше, но делать межпроцессную коммуникацию немного муторно иногда.

rcldev
() автор топика
Ответ на: комментарий от rcldev

Он поддерживает больше архитектур, чем Rust, в котором, говорят, скоро 32-битный x86 выкинут.

valgrind поддерживает: x86 (in maintenance mode now), amd64, ppc32, ppc64, ppc64le, s390x, arm, arm64, mips32, mips64. Все эти архитектуры Rust поддерживает. Также Rust поддерживает, например, RISC-V, а valgrind — нет.

shdown
()
Ответ на: комментарий от rcldev

Просто трапы в команде разработки Rust каждую неделю новые версии создают, где, кстати, ломают обратную совместимость со старым кодом на Rust.

Там editions есть, лол.

shdown
()
Ответ на: комментарий от rcldev

Ладно, покормлю: смотри, чо могу:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <sys/mman.h>

void *do_mmap(size_t len)
{
    void *r = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    assert(r != MAP_FAILED);
    return r;
}

int main()
{
    char *r1 = do_mmap(4096);
    char *r2 = do_mmap(4096);

    char *p1 = r1 > r2 ? r1 : r2;
    char *p2 = r1 > r2 ? r2 : r1;

    p2[4096 + 123] = 42; // overrun
    printf("%d\n", (int) p1[123]);
}

$ gcc -Wall -Wextra -O3 foo.c -o foo
$ valgrind --exit-on-first-error=yes --error-exitcode=42 ./foo
==790740== Memcheck, a memory error detector
==790740== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==790740== Using Valgrind-3.25.1 and LibVEX; rerun with -h for copyright info
==790740== Command: ./foo
==790740== 
42
==790740== 
==790740== HEAP SUMMARY:
==790740==     in use at exit: 0 bytes in 0 blocks
==790740==   total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
==790740== 
==790740== All heap blocks were freed -- no leaks are possible
==790740== 
==790740== For lists of detected and suppressed errors, rerun with: -s
==790740== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$ echo $?
0
$

P.S. Работает и без валгринда тоже.

shdown
()
Последнее исправление: shdown (всего исправлений: 1)
Ответ на: комментарий от shdown

А кого волнует, что поддерживает valgrind? Один раз программа пишется на машине разработчика с x86 (не обязательно 32-битным), там проверяется на корректность работы с памятью valgrind’ом, а далее без проблем может собираться под остальные архитектуры.

rcldev
() автор топика
Ответ на: комментарий от shdown

Нет, просто местные растоманы не понимают этого никак, ибо их религия не может позволить думать против Священного Раста.

rcldev
() автор топика
Ответ на: комментарий от shdown

Включи отображение удаленных сообщений и покажи, что я писал такое. Я уже практически уверен, что ты меня троллишь.

rcldev
() автор топика
Ответ на: комментарий от rcldev

Включи ему да покажи… ты сначала ответь на все неудобные вопросы и сообщения мои, потом включу и покажу.

shdown
()
Ответ на: комментарий от unC0Rr

у чела очевидная синестезия

хохма раста что бы на нём писать реально хороший код нужно быть ещё более редким спецом чем для написания ХОРОШЕГО плюсового

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

и да боров ментально нубу легче вкурить чем челу с навыком жонглировать такой порванной сущьностью как указатель который если совсем отвязаца от различных нюансов это просто последовательность битов которая через «api» памяти не гарантированно возвращает некоторую битовую последовательность <- это настолько фундаментальная весчь то с добавлением авто(инк|дек)ремента реалезуется полностью бибика яблоеда

в отличии от этого боров тот ещё хряк

qulinxao3 ★☆
()
Ответ на: комментарий от shdown

Я думаю, нормальный C-программист всегда сам может увидеть настолько наглый выход за границы буфера.

rcldev
() автор топика
Ответ на: комментарий от shdown

Valgrind’у достаточно поддерживать лишь архитектуру машины разработчика, а код собирается GCC.

rcldev
() автор топика
Ответ на: комментарий от rcldev

Жаль, что к реальным проектам нормальные С-программисты не притрагиваются, и мы видим CVE даже в самых критических сервисах.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Посмотри, как часто на OpenNET пишут о CVE в программах: да там раз в месяц, не чаще, еще и в одних и тех же программах.

rcldev
() автор топика
Ответ на: комментарий от rcldev

Может, потому что этот сайт не посвящён CVE, и пользователи, пишущие новости, следят всего за несколькими проектами? Загляни на https://www.cvedetails.com/ к примеру.

unC0Rr ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)