Rust против Go

Перевод | Автор оригинала: John Arundel

Rust vs Go

Что лучше, Rust или Go? Какой язык выбрать для следующего проекта и почему? Как они соотносятся в таких областях, как производительность, простота, безопасность, функции, масштабирование и параллелизм? Что у них общего и чем они принципиально различаются? Давайте выясним это в дружественном и беспристрастном сравнении Rust и Golang.

Rust и Go потрясающие

Во-первых, действительно важно сказать, что и Go, и Rust - отличные языки программирования. Они современные, мощные, широко распространенные и предлагают отличные характеристики. Возможно, вы читали статьи и сообщения в блогах, цель которых - убедить вас, что Go лучше, чем Rust, или наоборот. Но это действительно бессмысленно; каждый язык программирования представляет собой набор компромиссов. Каждый язык оптимизирован для разных задач, поэтому ваш выбор языка должен определяться тем, что вам подходит, и проблемами, которые вы хотите решить с его помощью.

В этой статье я постараюсь дать краткий обзор того, где, на мой взгляд, Go - идеальный выбор, а где Rust - лучшая альтернатива. Я также попытаюсь дать представление о сущности обоих языков (Tao of Go и Rust, если хотите).

Хотя они очень разные по синтаксису и стилю, Rust и Go являются первоклассными инструментами для создания программного обеспечения. С учетом сказанного, давайте подробнее рассмотрим эти два языка.

Сходство

У Rust и Go много общего, и это одна из причин, по которой их часто упоминают вместе. Каковы общие цели обоих языков?

Rust - это низкоуровневый многопарадигмальный язык программирования со статической типизацией, ориентированный на безопасность и производительность. —Гинтс Дрейманис Go - это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения. —Golang.org

Безопасность памяти

И Go, и Rust относятся к группе современных языков программирования, приоритетом которых является безопасность памяти. За многие десятилетия использования старых языков, таких как C и C++, стало ясно, что одной из основных причин ошибок и уязвимостей системы безопасности является небезопасный или неправильный доступ к памяти. Rust и Go решают эту проблему по-разному, но оба стремятся быть умнее и безопаснее, чем другие языки в отношении управления памятью, и помочь вам писать правильные и эффективные программы.

Быстрые компактные исполняемые файлы

Оба они являются скомпилированными языками, что означает, что ваши программы транслируются непосредственно в исполняемый машинный код, так что вы можете развернуть свою программу как единый двоичный файл; В отличие от интерпретируемых языков, таких как Python и Ruby, вам не нужно распространять интерпретатор и множество библиотек и зависимостей вместе с вашей программой, что является большим плюсом. Это также делает программы Rust и Go чрезвычайно быстрыми по сравнению с интерпретируемыми языками.

Языки общего назначения

Rust и Go также являются мощными масштабируемыми языками программирования общего назначения, которые можно использовать для разработки всех видов современного программного обеспечения, от веб-приложений до распределенных микросервисов или от встроенных микроконтроллеров до мобильных приложений. Оба имеют отличные стандартные библиотеки и процветающую стороннюю экосистему, а также отличную коммерческую поддержку и большую базу пользователей. Оба они существуют уже много лет и будут широко использоваться еще долгие годы. Изучение Go или Rust сегодня будет хорошей инвестицией вашего времени и усилий.

Прагматичный стиль программирования

Ни один из них не является преимущественно функциональными языками (например, Scala или Elixir), и ни один из них не является исключительно объектно-ориентированным (например, Java и C#). Вместо этого, хотя и Go, и Rust имеют функции, связанные с функциональным и объектно-ориентированным программированием, это прагматические языки, нацеленные на решение проблем наиболее подходящим способом, а не на принуждение вас к определенному способу работы. (Однако, если вам нравится функциональный стиль программирования, вы найдете для него гораздо больше возможностей в Rust, потому что в Rust гораздо больше возможностей, чем в Go в целом.)

Мы можем спорить о том, что такое «объектно-ориентированный» язык, но справедливо будет сказать, что стиль объектно-ориентированного программирования, которого ожидают пользователи C++, Java или C#, отсутствует ни в Go, ни в Rust. — Джек Мотт

Масштабное развитие

И Rust, и Go имеют некоторые полезные функции, которые делают их подходящими для программирования в целом, будь то большие команды, большие базы кода или и то, и другое.

Например, в то время как программисты на C годами спорили о том, где поставить скобки и следует ли делать отступы в коде табуляцией или пробелами, и Rust, и Go полностью устраняют такие проблемы с помощью стандартного инструмента форматирования (gofmt для Go, rustfmt для Rust ), который автоматически переписывает ваш код в каноническом стиле. Дело не в том, что этот стиль так хорош сам по себе: это стандартизация, которую ценят программисты на Rust и Go.

Стиль gofmt никому не нравится, но gofmt нравится всем. — Роб Пайк

Еще одна область, в которой оба языка имеют высокие оценки, находится в стадии разработки. Оба имеют отличные встроенные высокопроизводительные стандартные инструменты сборки и управления зависимостями; Больше не нужно бороться со сложными системами сборки сторонних разработчиков и изучать новую каждые пару лет.

Создание кода на Go и Rust, начатое на основе опыта Java и Ruby в начале моей карьеры, казалось мне невыносимым грузом с плеч. Когда я работал в Google, было большим облегчением встретить сервис, написанный на Go, потому что я знал, что его будет легко создать и запустить. То же самое относится и к Rust, хотя я работал над этим только в гораздо меньших масштабах. Я надеюсь, что дни бесконечно настраиваемых систем сборки прошли, и все языки поставляются со своими собственными специализированными инструментами сборки, которые просто работают из коробки. — Сэм Роуз

Так о чем же весь этот шум?

Имея все это в виду и видя, что оба языка настолько хорошо спроектированы и мощны, вам может быть интересно, о чем все эти священные войны (я тоже). Почему люди так суетятся из-за «Go против Rust», разгневанных споров в социальных сетях и написания длинных сообщений в блогах о том, что только идиот может использовать Rust, или что Go не является настоящим языком программирования, или что-то еще? Это может помочь им почувствовать себя лучше, но это не совсем поможет вам, как человеку, пытающемуся решить, какой язык использовать для вашего проекта или какой вам следует выучить, чтобы продвинуться в своей карьере программиста. Мудрый человек не делает важный выбор, основываясь на том, кто кричит громче всех.

Давайте продолжим нашу взрослую дискуссию, рассмотрев некоторые области, в которых разумный человек может предпочесть один язык другому.

Производительность

Мы сказали, что и Go, и Rust создают чрезвычайно быстрые программы, потому что они скомпилированы в машинный код без использования интерпретатора или виртуальной машины. Однако производительность Rust особенно выдающаяся. Он сравним с C и C++, которые часто считаются наиболее производительными скомпилированными языками, но в отличие от этих более старых языков, он также обеспечивает безопасность памяти и безопасность параллелизма при практически нулевой скорости выполнения. Rust также позволяет создавать сложные абстракции без потери производительности во время выполнения.

Для сравнения: хотя программы Go также работают очень хорошо, Go в первую очередь рассчитан на скорость разработки (включая компиляцию), а не на скорость выполнения. Программисты Go склонны ценить ясный код над быстрым кодом. Компилятор Go также не тратит много времени на создание максимально эффективного машинного кода; он больше заботится о быстрой компиляции большого количества кода. Таким образом, Rust обычно превосходит Go в тестах времени выполнения.

Производительность Rust во время выполнения также последовательна и предсказуема, поскольку он не использует сборку мусора. Сборщик мусора Go очень эффективен, и он оптимизирован так, чтобы сделать паузы в режиме остановки как можно короче (и они становятся короче с каждым новым выпуском Go). Но сборка мусора неизбежно привносит некоторую непредсказуемость в поведение программ, что может быть серьезной проблемой для некоторых приложений, таких как встроенные системы.

Поскольку Rust стремится предоставить программисту полный контроль над базовым оборудованием, можно оптимизировать программы Rust, чтобы они были довольно близки к максимальной теоретической производительности машины. Это делает Rust отличным выбором для областей, где скорость выполнения превосходит все другие соображения, таких как программирование игр, ядра операционной системы, компоненты веб-браузера и системы управления в реальном времени.

Простота

Неважно, насколько быстрым является язык программирования, если никто не может понять, как его использовать. Go был сознательно задуман как реакция на постоянно растущую сложность таких языков, как C++; у него очень мало синтаксиса, очень мало ключевых слов и, действительно, мало функций. Это означает, что вам не понадобится много времени, чтобы выучить язык Go до такой степени, что вы сможете писать на нем полезные программы.

Го невероятно легко научиться. Я знаю, что об этом часто говорят, но я был очень удивлен тем, как быстро я смог работать продуктивно. Благодаря языку, документации и инструментам я писал интересный, коммитируемый код буквально через два дня. — Ранние впечатления от работы программиста на Rust

Ключевое слово здесь - простота. Конечно, простой - не то же самое, что легко, но маленький простой язык легче выучить, чем большой и сложный. Просто существует не так много разных способов делать что-то, поэтому весь хорошо написанный код Go имеет тенденцию выглядеть одинаково. Легко просто погрузиться в незнакомый сервис и понять, что он делает.

fmt.Println("Gopher's Diner Breakfast Menu")
for dish, price := range menu {
    fmt.Println(dish, price)
}

(В серии Code Club я делаю именно это: случайным образом выбираю проекты Go из GitHub и исследую их с группой новичков в Go, чтобы увидеть, какую часть кода мы можем понять. Это всегда оказывается больше, чем мы ожидал!)

Хотя основной язык невелик, стандартная библиотека Go очень мощная. Это означает, что ваша кривая обучения также должна будет включать в себя необходимые вам части стандартной библиотеки, а не только синтаксис Go. С другой стороны, перенос функциональности с языка в стандартную библиотеку означает, что вы можете сосредоточиться на изучении только тех библиотек, которые актуальны для вас прямо сейчас.

Go также предназначен для крупномасштабной разработки программного обеспечения с большими кодовыми базами и большими командами. В таких ситуациях важно, чтобы новые разработчики могли как можно быстрее освоиться. По этой причине сообщество Go ценит простые, очевидные, обычные и понятные программы.

С Go вы быстро справляетесь с задачами. Go - один из самых продуктивных языков, с которыми я когда-либо работал. Мантра:> Решайте реальные проблемы сегодня>. — Матиас Эндлер

Функции

Rust поддерживает большую сложность, чем несколько других языков программирования, поэтому с ним можно добиться большего. Например, он поддерживает дженерики. — Деватон

Rust специально разработан, чтобы включить множество мощных и полезных функций, которые помогают программистам делать максимальную работу с наименьшим количеством кода. Например, функция соответствия в Rust позволяет очень кратко писать гибкую, выразительную логику:

fn is_prime(n: u64) -> bool {
    match n {
        0...1 => false,
        _ => !(2..n).any(|d| n % d == 0),
    }
}

Поскольку Rust многое делает, это означает, что есть чему поучиться, особенно в начале. Но это нормально: есть чему поучиться на C++ или Java, и вы не получите расширенных функций, которые поставляются с Rust, таких как безопасность памяти. Критиковать Rust за то, что он сложный язык, упускается из виду: он спроектирован так, чтобы быть выразительным, что означает наличие множества функций, а во многих ситуациях именно этого вы и хотите от языка программирования. Конечно, есть кривая обучения, но как только вы начнете с ней работать, все будет в порядке.

Rust конкурирует за интеллектуальную собственность с C++ и D за программистов, которые готовы принять более сложный синтаксис и семантику (и предположительно более высокие затраты на удобочитаемость) в обмен на максимально возможную производительность. — Дэйв Чейни

В то время как Rust перенял некоторые функции Go, а Go перенимает некоторые из функций Rust (особенно общие, можно сказать, что Rust многофункционален, а Go - сравнительно легковесен).

Параллелизм

Большинство языков поддерживают в той или иной форме параллельное программирование (выполнение нескольких задач одновременно), но Go был разработан для этой работы с нуля. Вместо использования потоков операционной системы Go предлагает легкую альтернативу: горутины. Каждая горутина - это независимо выполняющаяся функция Go, которую планировщик Go сопоставляет с одним из потоков ОС, находящихся под его контролем. Это означает, что планировщик может очень эффективно управлять большим количеством параллельных горутин, используя только ограниченное количество потоков ОС.

Следовательно, вы можете запускать миллионы одновременных горутин в одной программе, не создавая серьезных проблем с производительностью. Это делает Go идеальным выбором для одновременных крупномасштабных приложений, таких как веб-серверы и микросервисы.

Go также предлагает быстрые, безопасные и эффективные способы для горутин общаться и обмениваться данными с помощью каналов. Поддержка параллелизма в Go кажется хорошо продуманной, и ею приятно пользоваться. В целом сложно рассуждать о параллельных программах, а создание надежных и правильных параллельных программ - задача для любого языка. Тем не менее, поскольку он был встроен в язык с самого начала, а не второстепенным, параллельное программирование в Go настолько же просто и хорошо интегрировано, насколько это могло бы быть разумно.

Go упрощает создание хорошо структурированного приложения, которое в полной мере использует преимущества параллелизма при развертывании в виде набора микросервисов. Rust тоже может делать это, но, возможно, немного сложнее. В некоторых отношениях одержимость Rust предотвращением уязвимостей системы безопасности, связанных с памятью, означает, что программисты должны изо всех сил выполнять задачи, которые были бы проще на других языках, включая Go. — Соня Коптьева

Для сравнения, история параллелизма в Rust очень нова и все еще стабилизируется, но находится в стадии очень активной разработки, так что следите за этой страницей. Например, библиотека Rust rayon предоставляет очень элегантный и легкий способ превращения последовательных вычислений в параллельные.

Облегченный синтаксис для создания подпрограмм Go и использования каналов - это действительно приятно. Это действительно показывает мощь синтаксиса: такие мелкие детали делают параллельное программирование намного приятнее, чем на других языках. — Ранние впечатления от работы программиста на Rust

Хотя реализация параллельных программ в Rust может оказаться немного менее простой задачей, это все же возможно, и эти программы могут использовать преимущества гарантий безопасности Rust. Хорошим примером является класс Mutex из стандартной библиотеки: в Go вы можете забыть получить блокировку мьютекса перед доступом к чему-либо, но Rust не позволит вам этого сделать.

Go ориентирован на параллелизм как первоклассную концепцию. Это не означает, что вы не можете найти аспекты параллелизма, ориентированного на акторов Go, в Rust, но это оставлено как упражнение для программиста. — Дэйв Чейни

Безопасность

Ранее мы видели, что и Go, и Rust по-разному нацелены на предотвращение большого класса распространенных ошибок программирования, связанных с управлением памятью. Но в особенности Rust делает все возможное, чтобы гарантировать, что вы не сможете сделать что-то небезопасное, чего не собирались делать.

Очень строгий и педантичный компилятор Rust проверяет каждую используемую вами переменную и каждый адрес памяти, на который вы ссылаетесь. Это позволяет избежать возможных состояний гонки данных и информирует вас о неопределенном поведении. Проблемы параллелизма и безопасности памяти принципиально невозможно решить в безопасном подмножестве Rust. - Почему Rust.

Это сделает программирование на Rust отличным от почти всех других языков, и поначалу это может быть сложно. Но для многих тяжелая работа того стоит.

Для меня ключевым преимуществом Rust является ощущение, что компилятор стоит за моей спиной и не пропустит ни одной ошибки, которую он мог бы обнаружить (серьезно, иногда это кажется волшебством). — Гжегож Носек

Многие языки, включая Go, имеют средства, помогающие программистам избегать ошибок, но Rust выводит это на новый уровень, так что потенциально некорректные программы даже не компилируются.

С Rust у программиста библиотеки есть много инструментов, чтобы предотвратить ошибки пользователей. Rust дает нам возможность сказать, что мы владеем определенной частью данных; Никто другой не может претендовать на право владения, поэтому мы знаем, что ничто другое не сможет его изменить. Я не могу вспомнить время, когда мне когда-либо давали столько инструментов для предотвращения случайного неправильного использования. Это прекрасное чувство. — Сэм Роуз

«Борьба с программой проверки заимствований» - распространенный синдром для начинающих программистов на Rust, но в большинстве случаев проблемы, которые она обнаруживает, являются настоящими ошибками (или, по крайней мере, потенциальными) в вашем коде. Это может вынудить вас коренным образом перестроить вашу программу, чтобы избежать этих проблем; и это хорошо, когда правильность и надежность - ваш главный приоритет. Какой смысл в языке, который не меняет способ программирования? Уроки безопасности, которые преподает Rust, могут быть полезны и при работе с другими языками.

Если вы выбираете Rust, обычно вам нужны гарантии, которые предоставляет язык: безопасность от нулевых указателей и гонок данных, предсказуемое поведение во время выполнения и полный контроль над оборудованием. Если вам не нужны какие-либо из этих функций, Rust может оказаться плохим выбором для вашего следующего проекта. Это потому, что за эти гарантии приходится платить: время наращивания мощности. Вам нужно будет отказаться от вредных привычек и изучить новые концепции. Скорее всего, вы будете много бороться со счетчиком займов, когда начнете. — Матиас Эндлер

Насколько сложной для вас модель программирования Rust, вероятно, будет зависеть от вашего предыдущего опыта работы с другими языками. Программисты Python или Ruby могут счесть это ограничивающим; другие будут в восторге.

Если вы программист на C или C++, потратившие недели на поиск ошибок, связанных с безопасностью памяти на этих языках, вы по достоинству оцените Rust. «Борьба с проверкой заимствований» превращается в «Компилятор может это обнаружить? Прохладный!" — Гжегож Носек

Масштаб

Сегодняшние серверные программы состоят из десятков миллионов строк кода, над ними работают сотни или даже тысячи программистов, и они обновляются буквально каждый день. Go был разработан и разработан, чтобы сделать работу в этой среде более продуктивной. Соображения по дизайну Go включают в себя строгое управление зависимостями, адаптируемость архитектуры программного обеспечения по мере роста системы и устойчивость вне границ между компонентами. — Роб Пайк

Когда вы работаете над проблемой самостоятельно или в небольших группах, выбор простого или насыщенного языка является делом ваших предпочтений. Но по мере того, как программное обеспечение становится больше и сложнее, а команды становятся больше, различия действительно начинают проявляться. Для больших приложений и распределенных систем скорость выполнения менее важна, чем скорость разработки: преднамеренно минимальный язык, такой как Go, сокращает время наращивания мощности для новых разработчиков и облегчает им работу с большой кодовой базой.

С Go младшему разработчику легче быть более продуктивным, а разработчику среднего уровня сложнее внедрять хрупкие абстракции, которые вызовут проблемы в будущем. По этим причинам Rust менее привлекателен, чем Go для разработки корпоративного программного обеспечения. — Лорис Кро

Когда дело доходит до разработки программного обеспечения в целом, ясно, лучше, чем умно. Ограничения Go на самом деле делают его более подходящим для предприятий и крупных организаций, чем более сложные и мощные языки, такие как Rust.

Различия

Хотя Rust и Go являются популярными, современными, широко используемыми языками, на самом деле они не являются конкурентами в том смысле, что намеренно нацелены на совершенно разные варианты использования. Подход Go к программированию в целом радикально отличается от подхода Rust, и каждый язык подходит одним людям, а других раздражает. Это абсолютно нормально, и если бы и Rust, и Go выполняли более или менее одинаковые вещи более или менее одинаково, нам действительно не понадобились бы два разных языка.

Итак, можем ли мы понять суть Rust и Go, найдя проблемы, к которым они используют совершенно разные подходы? Давайте разберемся.

Вывоз мусора

«Убирать мусор или не собирать мусор» - один из тех вопросов, на который нет правильного ответа. Сборка мусора и автоматическое управление памятью в целом позволяют быстро и легко разрабатывать надежные и эффективные программы, а для некоторых людей это очень важно. Но другие говорят, что сборка мусора с ее накладными расходами и остановками мира заставляет программы вести себя непредсказуемо во время выполнения и приводит к недопустимой задержке. Споры продолжаются.

Go - это совсем другой язык по сравнению с Rust. Хотя оба языка можно смутно описать как системные языки или замену C, у них разные цели и приложения, стили языковой разработки и приоритеты. Сборка мусора - действительно серьезное отличие. Наличие GC в Go делает язык намного проще и компактнее, и его легко рассуждать.

Отсутствие GC в Rust делает его действительно быстрым (особенно если вам нужна гарантированная задержка, а не просто высокая пропускная способность) и включает функции и шаблоны программирования, которые невозможны в Go (или, по крайней мере, без ущерба для производительности). — PingCAP

Близко к металлу

История компьютерного программирования - это история все более сложных абстракций, которые позволяют программисту решать проблемы, не слишком заботясь о том, как на самом деле работает базовая машина. Это упрощает написание программ и, возможно, делает их более переносимыми. Но для многих программ более важны доступ к оборудованию и точный контроль над выполнением программы. Rust нацелен на то, чтобы позволить программистам «приблизиться к металлу» с большим контролем, но Go абстрагирует архитектурные детали, чтобы позволить программистам приблизиться к проблеме.

Оба языка имеют разную сферу применения. Golang отлично подходит для написания микросервисов и типичных задач DevOps, но это не язык системного программирования. Rust лучше подходит для задач, где важны параллелизм, безопасность и/или производительность; но у него более крутая кривая обучения, чем у Go. — Матиас Эндлер

Должен ли Go быть быстрее

Многие согласны с тем, что для большинства программ производительность менее важна, чем удобочитаемость. Но когда производительность имеет значение, это действительно имеет значение. Rust делает ряд компромиссов в дизайне для достижения максимально возможной скорости выполнения. В отличие от этого, Go больше заботится о простоте и ради нее готов пожертвовать некоторой производительностью (во время выполнения). Но скорость сборки Go непревзойденная, и это важно для больших кодовых баз.

Rust быстрее Go. В приведенных выше тестах Rust был быстрее, а в некоторых случаях и на порядок быстрее. Но прежде чем вы откажетесь писать все на Rust, примите во внимание, что Go не так уж сильно отстал от него во многих из этих тестов, и он все еще намного быстрее, чем подобные Java, C#, JavaScript, Python и т.д.

Если вам нужна высочайшая производительность, вы будете впереди всех, выбрав любой из этих двух языков. Если вы создаете веб-сервис, который обрабатывает высокую нагрузку, и хотите, чтобы его можно было масштабировать как по вертикали, так и по горизонтали, любой язык вам идеально подойдет. — Эндрю Лейдер

Правильность

С другой стороны, программа может быть сколь угодно быстрой, если ей не нужно работать должным образом. Большая часть кода не пишется для долгосрочного использования, но часто удивительно, как долго некоторые программы могут оставаться в рабочем состоянии: в некоторых случаях на многие десятилетия. В таких ситуациях стоит потратить немного больше времени на разработку, чтобы убедиться, что программа правильная, надежная и не требует значительного обслуживания в будущем.

Go и Rust нацелены на то, чтобы помочь вам писать правильные программы, но по-разному: Go предоставляет, например, превосходную встроенную среду тестирования, в то время как Rust сосредоточен на устранении ошибок времени выполнения с помощью своей программы проверки заимствований.

Мое мнение: выберите код, который должен выйти завтра, а Rust - код, который должен работать без изменений в течение следующих пяти лет. — Гжегож Носек

Хотя и Go, и Rust являются отличным выбором для любого серьезного проекта, рекомендуется как можно лучше узнать о каждом языке и его характеристиках. В конечном счете, не имеет значения, что думают другие: только вы можете решить, что подходит вам и вашей команде.

Если вы хотите развиваться быстрее, возможно, из-за того, что вам нужно написать много разных сервисов или у вас большая команда разработчиков, то Go - ваш предпочтительный язык. Go дает вам возможность параллелизма как первоклассного гражданина и не допускает небезопасного доступа к памяти (как и Rust), но не заставляет вас управлять всеми мельчайшими деталями. Go быстрый и мощный, но он не утомляет разработчика, вместо этого сосредоточиваясь на простоте и единообразии. Если, с другой стороны, необходимо выжать максимум из производительности, тогда Rust должен быть вашим выбором. — Эндрю Лейдер

Вывод

Я надеюсь, что эта статья убедила вас в том, что и Rust, и Go заслуживают серьезного внимания. Если это вообще возможно, вы должны стремиться получить хотя бы некоторый уровень опыта в обоих языках, потому что они будут невероятно полезны для вас в любой технической карьере или даже если вы любите программирование в качестве хобби. Если у вас есть время только на то, чтобы хорошо изучить один язык, не принимайте окончательного решения, пока не используете Go и Rust для множества различных программ, больших и малых.

А знание языка программирования - это лишь малая часть того, чтобы быть успешным инженером-программистом. Безусловно, наиболее важными навыками, которые вам понадобятся, являются дизайн, инженерия, архитектура, коммуникация и сотрудничество. Если вы преуспеете в этом, вы станете отличным инженером-программистом независимо от того, какой язык вы выберете. Удачного обучения!

Сравнение кода Rust и Go

Есть отличный веб-сайт Programming-idioms.org, на котором есть «шпаргалка», показывающая, как выглядит код Rust и Go для более чем 200 общих задач программирования:

Начиная

Если вы хотите научиться программировать на Rust and Go, вот несколько ресурсов, которые могут оказаться вам полезными.

Идти

Rust

Благодарности

Как говорится, я недостаточно молод, чтобы знать все, поэтому я очень благодарен ряду выдающихся сусликов и рустообразных, которые нашли время, чтобы просмотреть и исправить эту статью, а также дать несколько действительно полезных советов. Я особенно благодарен Биллу Кеннеди, Гжегожу Носеку, Сэму Роузу, Джеку Мотту, Стиву Клабнику, М. Н. Марку, Оле Нордстром, Леви Лавлоку, Эмилю Пелсу, Себастьяну Лауэрсу, Карлу Лершу и всем, кто внес свой вклад. Читая популярные онлайн-версии, у вас может сложиться впечатление, что сообщества Rust и Go не ладят. По моему опыту, нет ничего более далекого от истины; у нас были очень цивилизованные и плодотворные обсуждения черновика статьи, и это сильно повлияло на конечный продукт. Еще раз спасибо.