Чому Go і Rust не суперники, а чортові вороги

Прим. перекладача - це всього лише переклад статті, яка відображає альтернативну точку зору на тему «Go проти Rust». Зовсім не зобов'язано показувати свою незгоду з думкою автора на кармі перекладача, спасибі.


Ця стаття - невелика відповідь до запису в блозі Дейва Чейні «Чому Go і Rust не суперники». Я рекомендую вам почитати його доводи! Ймовірно, вам також сподобається чудова дискусія на реддіті.

Насправді, Go і Rust вирішують одну і ту ж саму проблему: обидва прийшли в наш світ, щоб зробити життя програмістів простішим. Go до неподобства спростив концепт конкурентного (ака багатопоточного) програмування і мені здається, зробив програмування приємним заняттям, адже код на Go дійсно приємно читати. У той же час, Rust подарував нам потужні zero-cost абстракції... для патерн-матчингу. Звучить виправдано, чи не так? Жарти-жарти, але Rust дійсно зробив багато непростих штук простішим (часта омана: він не позбувся їх). Його диявольська система типів дозволяє гарантувати безпеку пам'яті, і в тому числі, позбутися стану гонки, що звучить дуже привабливо.

Якщо мені не зраджує пам'ять, Роб Пайк (татко мови Go) якось сказав, що дуже здивувався, як все обернулося. Go замислювався, як рятувальне коло для програмістів на С/С + +, але в кінці-кінців, люди стали думати про нього, як про альтернативу або навіть заміну Ruby або Python! Я вважаю, що це просто офігенно, це не могло обернутися краще.

Добре, тоді яке відношення Go має до Rust? Rust скидається на потужну і безпечну заміну для C++, який, як виявилося, мало чого спільного має з Go. Тоді чого цим хлопцям взагалі змагатися? Мир, дружба, печиво! Але нееееет:

  • Обидві мови з'явилися приблизно в один час; обидва обісратися, які амбітні;
  • Обидва з'явилися, щоб ми з вами могли простіше писати надійний софт;
  • Області застосування часто перетинаються (серверний софт, системні утиліти, ітд).

Ті, хто вважає, що найбільша проблема C++ це його «небезпечна» природа (давайте на хвилиночку забудемо про розумні покажчики з останніх стандартів, які за своєю природою, досить безпечні) дуже сильно помиляються. Найбільша проблема C++ полягає в тому, що код цією мовою важко писати, читати, налагоджувати, профілювати і підтримувати. Насправді, є кілька відомих шляхів для досягнення безпечного управління пам'яттю. Запитайте програмістів на С++, це так-то уявна проблема!

Повторюся, програми на C++ важко читати, писати, налагоджувати і підтримувати. І це мало стосується управління пам'яттю! Rust у цьому нічим не відрізняється від C++. І ви не зможете вирішити цю проблему, множачи сутності, додаючи ще й ще концептів. Тут дуже класно справляється Go: «менше» експоненційно «більше» (прим. перекладача - less is exponentially more).

Що Go, що Rust - обидва намагаються зробити наше життя легшим, не рахуючи факту, що Go вже дійсно заохочує своїх програмістів, допомагаючи писати читабельний і легко підтримуваний код з розумною кількістю абстракцій, в той час як Rust полює за великою і страшною проблемою Управління Пам'яттю. Go і Rust завжди будуть кровними ворогами і дещо сумно визнавати, що останній вже програв цю війну.