В этом небольшом посте я расскажу, почему я считаю, что Go и Rust не являются соперниками.
За счет повсеместного навязывания «простоты», Go делает большие команды разработчиков эффективнее. Комплексные идеи или идеи, которые ведут к неортогональному поведению отсекаются. Rust метит на класс софта, который не допускает небезопасное использование памяти или сколько существенного оверхеда.
Rust соревнуется за внимание программистов на C++ и D, которые готовы к гораздо более сложному синтаксису и семантике (и что тоже важно, к значительному понижению читабельности) взамен на высокую производительность. Микроконтроллеры, ААА-игры, движки рендеринга веб-страниц. Go соревнуется за внимание компаний формата Интернет 2.0, которые просто переросли такие языки, как Ruby, Python или Node (V8) и уже не могут терпеть высокие требования языков с JVM.
Почему некоторые считают, что Go и Rust соперники?
- Rust и Go анонсировали в примерно одно и то же время. Разработку языка Go начали в 2007 и в ноябре 2009 он уже увидел свет. Rust появился несколько месяцев спустя, в 2010, тем не менее Грейдон отмечает, что разработку начали гораздо раньше. В любом случае, у обоих языков достаточно явно различаются влиятельные предшественники. В случае Go, это CSP Хоара, Alef, и Newsqueak Пайка. Rust рассматривается, как расширение семейства ML-языков.
- Что Rust, что Go — оба считаются безопасными (по части управления памятью). В то время, как это утверждение абсолютно правдиво, оба языка не поощряют использование unsafe кода; что более важно, сегодня мир просто не примет язык без подобных гарантий надежности. Просто так получилось, что Go и Rust — это первые языки, которым удалось доказать, спустя десятилетия доказательств, что в реальности программисты просто не могут безопасно обращаться с памятью вручную.
- Оба очень молоды: Go достиг 1.0 в 2012, а Rust в середине 2015 года. Оба более, чем амбициозны и явно готовы потеснить «старожил».
Почему я считаю, что Go и Rust таки не соперники?
- Фокус Rust лежит на “free of charge” абстракциях. Звучит знакомо, не так ли? Последние несколько десятилетий, это был боевой клич всех С++ программистов! Так как Go делает слишком много вещей во время исполнения программы, то приходится несколько пожертвовать производительностью в пользу простоты и ортогональности.
- Rust изначально делали совместимым с языком C; код на Rust, по определению, легко встраивается в программы, которые поддерживают вызовы из С. Go также совместим с конвенцией вызовов С через cgo, но пользоваться им стоит только тогда, когда это действително необходимо.
- Фокус Go лежит на первоклассной, приоритетной реализации конкуррентности. Не то, чтобы аспекты этой конкуррентности нельзя было найти, например, в Rust, но в Go они являются частью языка.
- В отличии от Rust, Go целит на максимальную производительность на протяжении всего цикла разработки.
Rust и Go не соперники
За счет повсеместного навязывания «простоты», Go делает большие команды разработчиков эффективнее. Комплексные идеи или идеи, которые ведут к неортогональному поведению отсекаются. Rust метит на класс софта, который не допускает небезопасное использование памяти или сколько существенного оверхеда.
Rust соревнуется за внимание программистов на C++ и D, которые готовы к гораздо более сложному синтаксису и семантике (и что тоже важно, к значительному понижению читабельности) взамен на высокую производительность. Микроконтроллеры, ААА-игры, движки рендеринга веб-страниц. Go соревнуется за внимание компаний формата Интернет 2.0, которые просто переросли такие языки, как Ruby, Python или Node (V8) и уже не могут терпеть высокие требования языков с JVM.