> В этом и фишка, ни одного unsafe и язык является абсолютно небезопасным.
> И в этом коде можно сделать ошибку где угодно. Не только логическую.Не любую. А ту ошибку, отсутствие которой не гарантируется safe подмножеством.
Ну, пожалуйста, ну открой доку и прочитай!
Я тебе даже ссылку скину
doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html
doc.rust-lang.org/nomicon/races.html
Надоело повторять одно и тоже!
> И ловить ты её будешь несколько лет.
Неплохой наброс... Пруфов конечно не будет, да?
> Т.е. от Сишки Rust не сильно отличается.
Пхахаха. Сишка позволяет тебе сделать так:
double *ptr = (double*)malloc(sizeof(double) * 10);
double *ptr2 = ptr;
free(ptr);
free(ptr2);
И будет классический дыряшечный double-free.
А теперь повтори это в безопасном расте. Попробуй напр. в playground.
> Возникает вопрос....и стоило ли писать этот язык с кучей ограничений, если в итоге вся эта безопасность разваливается на каждом шагу?
Конечно стоит. Потому что ты будет задумываться о реально сложных вещах, а рутину будет тебе подсказывать компилятор.
> Может, стоило сделать просто более безопасный С, с проверкой границ массивов (а не с ограничениями) в runtime и т.п.?
В runtime слишком дорого. Плюс там не только проверка границ массивов.
> И вот Rust превращается.. превращается...в Zig :))
Слава богу нет))
Потому что в твоем zig делаешь:
const allocator = std.heap.page_allocator;
var memory1 = try allocator.alloc(u8, 2);
var memory2 = memory1;
allocator.free(memory1);
allocator.free(memory2);
И наслаждаться "Segmentation fault at address 0x7f55bb3e5000"
Та же сишка, только в профиль. И что, помог тебе твой Zig?