Oberon space
General Category => Общий раздел => Тема начата: Wlad от Январь 12, 2014, 03:03:52 pm
-
КТо-то его уже серьёзно в проектах применял?
Какие, по первым итогам и впечатлениям, слюни, закатывания глаз и вырывания пейсов?
-
на мой взгляд, Rust более интересен и перспективен, хотя Google, конечно, та ещё махина, может и сможет продвинуть Go...
-
КТо-то его уже серьёзно в проектах применял?
Какие, по первым итогам и впечатлениям, слюни, закатывания глаз и вырывания пейсов?
Я применял по работе. На нем сейчас писана серверная часть сайта для сбора и визуализации околомедицинских данных с нашего прибора. Весь код сервера получился что-то около 800-900 строк.
В принципе, жить можно. Либы (для того применения что было у нас) вполне готовы (хотя, как обычно, есть мелкие нюансы, о которых я тут уже писал (http://oberspace.dyndns.org/index.php/topic,216.msg13256.html#msg13256)). Компилятор и язык стабильны. Хотя не консервативный сборщик мусора Go весьма пригодился бы.
Но есть пара нюансов - в Go значительно чаще чем в C++ используется какой-либо сорт динамической типизации (то есть проверка и приведение типов в рантайме), в том числе там где этого можно было бы не делать. Не мало этому способствует отсутствие какого-либо подобия шаблонов либо дженериков. И вот это реально меня бесило. То есть пока хватает встроенных в язык типов/контейнеров - всё ок. Типизация статическая, всё удобно и безопасно. Но как только нужно что-то иное (например какой-нибудь аналог std::map - то есть красно-черного дерева), так всё, привет-приплыли. Начинается вакханалия аля python. Тьху!
Ну и второе - нет исключений. И все функции из стандартной либы возвращают обычно по два значения за раз - код ошибки и интересующее тебя значение. После КАЖДОГО вызова таковой функции приходится втыкать if по сути с одним и тем же кодом в теле, либо не проверять код ошибки. Дико не удобно. Дикое дублирование кода и замусоривание исходников.
Да, ну и сериализация/десериализация из json там работает опять таки через rtti и довольно медленно, сейчас именно сериализация/десериализация из json'а составляет основные тормоза в сервере, и это надо переписывать (либо брать какую-то стороннюю json-либу, либо свою писать, либо от json отказываться).
Вот, как-то так.
-
Да, на всякий случай - вначале этот сервер мы писали на java, ну по взрослому - сервлеты там, tomcat.. Потом поняли что нам эта зверь-машина не нужна, что у нас всё довольно простое, и переписали на Go. Кода стало меньше, работать стало предсказуемей - если что-то глючит, то это наш, родной глюк скорее всего, а не где-то в недрах конфига tomcat'а не тот параметр выставлен, или он еще просто не "прогрелся" и потому тормозит.