Чому Go і Rust не суперники

У цьому невеликому пості я розповім, чому я вважаю, що Go і Rust не є суперниками.

Чому деякі вважають, що 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.