Что разрешает unsafe:
* Dereference a raw pointer
* Call an unsafe function or method
* Access or modify a mutable static variable
* Implement an unsafe trait
* Access fields of unionsПри этом, остальной язык никуда не девается. По поводу безопасности, по-прежнему для ссылок работает borrow checker, поэтому имеет смысл пользоваться ими, пока возможно. К слову, создавать сырые указатели можно и без unsafe, последний нужен только чтобы разыменовывать их. Нет неявного приведения численных типов, работают проверки границ массивов. Что до удобства - это всё, чего нет в C или что сделано лучше: ADT (enum), pattern matching, трейты, слайсы, строки, AST макросы и всяческие атрибуты и фичи для условной компиляции вместо препроцессора, приклеенного к языку сбоку, безопасный printf и вообще форматирование, стандартная библиотека и т.д. Да даже нормальный синтаксис тех же указателей на функции.
Короче, я не знаю, почему здесь так не любят Rust. Несколько лет назад я бы ещё понял эту неприязнь, т.к. язык был сыроват, borrow checker местами реально бесил, т.к. был тупее и не жрал многие правильные программы, библиотек было мало, стандартная была бедновата. Но после 1.0, и, тем более сейчас, я просто не вижу причин использовать C вообще, т.к. Rust линкуется с ним, и на нём можно писать ровно то же самое, но лучше. Разве что для проектов, которые принципиально не собираются уходить от C - например, Linux.