Здравствуйте, ELazin, Вы писали:
В>>В любом языке можно написать библиотеки, более-менее гарантирующие безопасную работу с памятью, но никто не может заставить программистов использовать их и только их, в этом вся проблема. Заслуга Rust'а в том, что он первый из неакадемических языков, кто попытался разделить ответственности: программист пишет алгоритм, компилятор проверяет, что код работает корректно в обозначенных областях. Это минимизация вклада человеческого фактора в корректность кода и за этим будущее, так как тенденция показывает, что код все более и более усложняется со временем.
EL>Ну вот опять забыли java/C# и кучу других языков с GC. До Rust-а конечно же об этих проблемах никто не думал и не решал их, ага. Самый проверенный временем подход к решению проблемы memory safety это языки с GC (memory safety through garbage collection). При этом компилятор Java, например, умеет вставлять код, который проверяет выход за границы массивов, но оптимизатор hotspot умеет этот код убирать, если он избыточен. И при этом, в отличии от Rust, в Java в принципе невозможно испортить память или уронить приложение по segfault (если нет нативного кода). При этом там стандартная библиотека не напичкана unsafe блоками, в отличии от. И все это очень здорово минимизирует возможный негативный вклад человеческого фактора. Опять же туллинг, книжки, программисты настоящие есть. Вы уж определитесь, если нужно писать низкоуровневый быстрый код, для всяких узких задач, то тут Rust-у явно не место. Он слишком высокоуровневый, как тут уже писали, на нем даже нельзя OOM обработать. А там где раст будет хорошо работать, java и C# будут работать еще лучше. Даже Go будет работать лучше, потому что там нет лишней когнитивной нагрузки, связанной с lifetimes, при этом ногу себе отстрелить сложно.
Эти утверждение в большей части или некорректны, или не подтверждаются практикой. Проблема Java/C# в том, что безопасное программирование в них дается за счет значительного увеличения накладных расходов, а именно расходов на сборку мусора, подход же Rust'а заключается в том, чтобы дать нужные гарантии по возможности за счет компайлтайма, а не рантайма, что очень хорошо скажется на скорости выполнения и размере требуемой памяти. Я персонально могу гарантировать, что аналогичная программа на Rust работает практически всегда "лучше", чем аналогичные на java/C#, так как наблюдаю это на практике.
Rust весьма хорош и для написания быстрого низкоуровневого кода. Отсутствие обработки OOM не делает его высокоуровневым, так как это ограничение его библиотеки (не путаем язык и библиотеку). Сам язык позволяет, при необходимости, обрабатывать OOM. Rust умеет убирать проверки на выход за границы массивов, там где они не нужны. Rust слишком молод, и пока не имеет хорошего инструментария, что компенсируется в будущем.
В>>Современный C++ слишком монструозен и сложен, что сильно удорожает как подготовку нормальных специалистов, так и сам процесс написания. EL>Практика показывает, что дорого и сложно — пытаться писать идеальные системы, которые by design не могут содержать ошибок (как тут кое-кто хотел типами инварианты доказывать). Реальный код слишком быстро меняется а бюджет времени на разработку не так велик.
Это никак не связано с Rust'ом, писать на нем достаточно комфортно и быстро, при условии знания языка. У меня есть проекты игрушечных ОС, написанных на C++ и Rust'е: по моим персональным ощущениям скорость написания кода на Rust'е была весьма выше, в то же время процент багов заметно ниже. Очень положительное впечатление оставила продуманность libcore: при отсутствии стандартной библиотеки практически весь необходимый функционал (a-la printf, форматирование произвольных структур, stack unwinding, etc) реализуется за считанные часы. Сам код по качеству сравним с аналогичным сишным. Собственно это и послужило стартом моего интереса к языку. Я рекомендую вам тоже попытаться поработать с ним, что даст вам возможно новые впечатления. Пока, судя по замечаниям о языке в других сообщениях, вы спорите о предмете который не знаете.
Никто как бы и не говорит, что C++ плох, мы говорим о том, что в наше время развития информационных технологий надо искать новые методы облегчения труда программистов. Мы прошли через эру Java и C#: облегчение — да, но за счет ресурсов, что не везде применимо. Следующий этап — Rust и гарантии безопасности во время компиляции. Что будет дальше, приживется ли Rust, появится ли другой язык — я не знаю, но я рад, что вещи движутся в нужном и правильном направлении.