В своё время ценил шарп по подобным причинам, изложенным в ролике. Это довольно хороший компромис, немного пожертвовать производительностью и памятью, но получить безопасный и удобный язык. Но потом я узнал про Rust. В нём не нужно жертвовать ни производительностью, ни безопасностью. Язык safe, но при этом позволяет делать всякие низкоуровневые штуки. Скажем, как и в Си ты сам решаешь, где размещать экземпляр объекта, на стеке или в куче (в C# насколько я знаю это свойство привязывается к типу). Можешь брать ссылку на объекты, где бы они ни были, хоть на стеке, хоть куче. Можешь как и в Си экономить аллокации, скажем, нужна тебе подстрока - тогда просто возьми ссылку на уже существующую без необходимости выделять новую строку в куче, а потом копировать её (в Си даже, порой, сделать это сложнее из за нул-терминации строк). И так далее, но при этом компилятор статически проверяет что всё safe. Более того, компилятор ещё и помогает писать многопоточный код, отслеживая, какие типы можно передавать в другие потоки, не будет ли где-то гонки данных из за многопоточной записи и так далее. И что наиболее важно для производительного языка, в расте как и в C++ есть понятие zero cost abstractions - то есть на расте можно довольно эффективно выстраивать оптимальные абстракции, которые при компиляции собираются в максимально эффективный ассемблер, словно ты руками написал одну длинную процедуру. Для примера возьмём лямбду из C# - чтобы её использовать мне нужна аллокация, мне нужно менеджить эту аллокацию сборщиком мусора, мне нужно делать виртуальные вызовы чтобы вычислить результат этой лямбды. Всё это требует какие-то дополнительные расходы памяти и перфоманса. В расте это не так. Лямбда (там это называется замыканиями/кложурами) размещает всё окружение по значению (то есть обычно в стеке) не требуя аллокации, никакой виртуальный вызов не требуется - раст статически знает тип лямбды. Сборщика мусора в расте и вовсе нет, так что ещё одно потенциальное снижение перфоманса отпадает. В итоге когда я использую разные абстракции, скажем итераторы и лямбды внутри, то в итоге компилятор генерирует мне такой же код, как если бы я написал его на обычных циклах, без какой-либо высокоуровневой магии. Что касается кроссплатформенности - она изумительна. Я собирал приложения под разные десктоп системы, под андроид и даже под браузер на wasm, также раст отлично подходит чтобы запускать его в embedded среде вообще без ОС. В общем, фактически, можно писать код под любую платформу. Но, конечно, ни один язык не обходится без недостатков. Я бы выделил два основных: Первое, язык довольно сложный, требует освоения довольно специфичных вещей. Скажем, лайфтаймы, система владения, понимание как работать с борроу чеккером и так далее. Основная сложность это переучиться писать код так, чтобы он лучше вписывался в систему владения и проверки заимствований. Например, по возможности избавляться от разделяемого и одновременно изменяемого состояния, что на самом деле плохо не только для раста, но и в целом сложнее отлаживать и при этом оно вредит производительности (скажем, такой код сложнее распараллелить). Второй недостаток: на данный момент не так много готовых библиотек, в целом язык ещё только развивается. Но потенциал у языка огромен