March 1st, 2020

Океан. Rust

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

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

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

Collapse )