[Перевод] Почему Go и Rust не соперники, а чертовы враги
Прим. переводчика — это всего лишь перевод статьи, которая отражает альтернативную точку зрения на тему «Go против Rust». Вовсе не обязятельно показывать свое несогласие с мнением автора на карме переводчика, спасибо.
Эта статья — небольшой ответ к записи в блоге Дейва Чейни «Почему Go и Rust не соперники». Я настоятельно рекомендую вам почитать его доводы! Вероятно, вам также понравится замечательная дискуссия на реддите.
На самом деле, Go и Rust решают одну и ту же самую проблему: оба пришли в наш мир, чтобы сделать жизнь программистов проще. Go до безобразия упростил концепт конкурентного (ака многопоточного) программирования и мне кажется, сделал программирование приятным занятием, ведь код на Go действительно приятно читать. В то ж время, Rust подарил нам мощные zero-cost абстракции… для паттерн-матчинга. Звучит оправданно, не так ли? Шутки-шутками, но Rust действительно сделал многие непростые штуки проще (частое заблуждение: он не избавился от них). Его дьявольская система типов позволяет гарантировать безопасность памяти, и в том числе, избавиться от состояния гонки, что звучит очень заманчиво.
Если мне не изменяет память, Роб Пайк (папаша языка Go) как-то сказал, что очень удивился, как все обернулось. Go задумывался, как спасательный круг для программистов на С/C++, но в конце-концов, люди стали думать о нем, как об альтернативе или даже замене Ruby или Python! Я считаю, что это просто офигенно, это не могло обернуться лучше.
Хорошо, тогда какое отношение Go имеет к Rust? Rust смахивает на мощную и безопасную замену для C++, который, как оказалось, мало чего общего имеет с Go. Тогда чего этим ребятам вообще соревноваться? Мир, дружба, печеньки! Но нееееет:
- Оба языка появились примерно в одно время; оба обосраться, какие амбициозные;
- Оба появились, чтобы мы с вами могли проще писать надежный софт;
- Области применения часто пересекаются (серверный софт, системные утилиты, итд).
Те, кто считает, что самая большая проблема C++ это его «небезопасная» природа (давайте на минуточку забудем про умные указатели из последних стандартов, которые по своей природе, довольно безопасны) очень сильно заблуждаются. Самая большая проблема С++ заключается в том, что код на этом языке тяжело писать, читать, отлаживать, профилировать и поддерживать. В действительности, есть несколько известных путей для достижения безопасного управления памятью. Спросите у программистов на С++, это так-то мнимая проблема!
Повторюсь, программы на C++ тяжело читать, писать, отлаживать и поддерживать. И это мало относится к управлению памятью! Rust в этом ничем не отличается от С++. И вы не сможете решить эту проблему, умножая сущности, добавляя еще и еще концептов. Здесь очень классно справляется Go: «меньше» экспоненциально «больше» (прим. переводчика — less is exponentially more).
Что Go, что Rust — оба пытаются сделать нашу жизнь легче, не считая факта, что Go уже действительно поощряет своих программистов, помогая писать читабельный и легко поддерживаемый код с разумным количеством абстракций, в то времся как Rust охотится за великой и страшной проблемой Управления Памятью. Go и Rust всегда будут кровными врагами и несколько печально признавать, что последний уже проиграл эту войну.