Сегодня мне удалось немного с другой стороны посмотреть на Rust, что дало интересную пищу для размышлений. В общем случае я склонялся к мнению, что Rust – это, конечно, прекрасно, но по уровню сложности он мало чем уступает C++, а при таком раскладе зачем нужно разбираться с еще одним монстром? Но, похоже что, эта позиция может быть довольно большим заблуждением.
Суть истории в том, что одной из наших команд (назовем её команда Ы, что бы ну никто не догадался о ком речь), состоящей из C# разработчиков уровня новичок + относительно квалифицированного тимлида, понадобилось написать нативную, кроссплатформенную библиотеку. Отдавать в другую команду, по политическим соображениям, эту штуку команда Ы на отрез отказалась, но так как библиотека не велика, то никто сильно и не настаивал. После некоторого размышления, писать на С++ они не решились, так как “страшно, сложно, куча стандартов/книг и не понятно что делать и какая-то хрень с управлением памятью”. Но особенно их опечалило то, как сложно выглядит пайплайн для C++ проекта, который позволяет обеспечить достаточно высокое качество кода на выходе, с линтерами, санитайзерами, запускалками тестов… ну а CMake даже стойких C++-разработчиков часто повергает в дикое уныние. Шальная мысль “Haskell же тоже компилируемый язык” проскочила мимо и вывела каким-то магическим образом на Rust. Шумиха вокруг Rust довольно большая, так что зарядившись позитивными эмоциями они принялись за изучение и написание библиотечки.
На выходе получилась небольшая библиотечка в 3K LOC на Rust, которая, внезапно, не падает, не течет, не имеет дедлоков, и довольно шустро шлет данные в сеть. Код читабельный, не Go, конечно, но плакать от ужаса не хочется, да и отсутствие ООП не могло не пойти проекту на пользу. В итоге я задумался, а вышло ли бы такое на C++ при таких вводных? Точно знаю что на Go бы вышло, но там было сразу отсечение из за невозможности собрать DLL для Windows, но вот C++? На радостях Ы сделали небольшую презенташку о своей героической победе над нативными библиотеками и в качестве одного из главных плюсов Rust они обозначили отличные диагностические сообщения компилятора с рекомендациями по потенциальному исправлению ошибки. Вспоминая то, как выглядит диагностика об ошибках со стороны C++ компилятора признаю, учиться писать с хорошими подсказками явно должно быть проще.
В итоге в очередной раз подумал о том, что брать C++ как для нового проекта, так и для модульного расширения уже существующего в современном мире выглядит не разумным шагом. Для меня это довольно грустно, с учетом того сколько сил и времени потрачено на C++, но игнорировать реальность тоже нет смысла.
Интересно узнать почему нет возможности собрать DLL для Windows?
Вроде как с Go 1.10 такая возможность есть
https://golang.org/doc/go1.10#compiler
Да, спасибо большое, что-то я упустил этот момент в то время. Не уверен какая версия Go у нас тогда исползовалась, мне кажется 1.9, хотя может и 1.10.