«Go»: недостатки
Я уже успел написать на «Go» пару тысяч строк (не считая удалённого кода) и должен сказать, что этот язык мне нравится. Этакий «Си» с человеческим лицом. Правда обработка ошибок через panic/defer мне до сих пор кажется сомнительным удовольствем.
Почему же этот язык столько непопулярен? Всё-таки появился уже два года назад и о нём скорее забыли, чем говорят. Есть несколько причин.
Самая главная — язык до сих пор не стабилизировался. К пример, пятого мая этого года вышел релиз №57), где кардинально изменился способ которым можно проверить закрылся ли канал. Вместо функции closed канал просто возвращает два значения. Из других примеров могу вспомнить как после очередного обновления компилятора мне пришлось везде в коде заменить вызов Open на OpenFile.
Вторая сильная причина — мало документации. По языку есть только одна книга, о которой мало кто знает (кстати, рекламирую: «Learning Go» Miek Gieben, книга на английском), в официальной документации по модулям чаще всего перечислены только методы, без какого-либо описания. Это сильно повышает порог вхождения, что неблагоприятно сказывается на размере сообщества языка.
Третья причина менее очевидна, чем предыдущая. Я называю «Go» языком «Си» с человеческим лицом, при это «Go» отстаёт от «Си» отсутствием предпроцессора. Когда я делал MakeCorner мне хотелось сделать кроссплатформенное определение количества процессоров (сейчас этот код удалён), для этого пришлось использовать вызовы, которые есть на одно системе, но отстутствуют на другой.
В «Go» это означает ошибку при компиляции. Нет никакого внутреннего средства для того, чтобы сообщить компилятору «не смотри сюда, если это freeBSD». Эту ситуацию мне пришлось разрешать при помощи файла make.
Нет худа без добра, вчера ночью я наконец-то детально изучил синтаксис make-файлов, все эти годы я их мог с грехом пополам читать, теперь умею их писать.
Но. Это очень мешает и раздражает, особенно когда переходишь с такого динамического языка как «Пайтон». В больших проектах это должно вносить ужасную путаницу, так как придётся готовить несколько файлов для разных платформ (я так и сделал в своём проекте) и выделять куски кода в эти файлы не из-за внутренней логики, а только из-за того, что язык не имеет предпроцессора.
У меня уже есть задумка что писать на «Go» дальше. Правда я в сомнениях. «Go» настолько непопулярен, что выгоднее делать следующий проект на каком-нибудь PHP или Пайтоне.
Кажется, что если к «Go» будут подходить как к «„Си“ с человеческим лицом», то у него будущего нет.
Если подходить как к языку для построения решений, активно использующих многопоточность. То тут всплывают набравший популярность Erlang/OTP с отличной инфраструктурой, библиотеками, комьюнити, документацией и книгами(4 + 3 готовятся к выпуску, если я не путаю) и самое главное с реальными проектами за спиной. Легко ускоряется с помощью NIF/с-driver/etc. Предоставляет прозрачную работу на кластере. Не забываем про Scala с акторами и JVM. Кажется, что сравнивать их вполне корректно, т. к. я уверен, что никому в голову не придет использовать Go как числодробилку.
Евгений, не кажется ли вам, что Go опоздал лет на 10 минимум(Limbo появился в 95-ом, erlang для людей в 98)?
Комментарий для anonymous:
Почему вам так кажется? Посмотрите вот на эту таблицу: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Си — второй (!) по популярности язык программирования.
«Гоу» на 31-м, Scala — 48-е, Erlang не вошёл в top 50.
Именно потому что Си второй по популярности(и видно, что первый в своей области/отрасли) и на его поле Go его не побьет.
Если честно, я не очень понимаю, что показывает tiobe. Я как-то больше верю своим наблюдениям: по erlang куча книг, есть активное и адекватное комьюнити и серьезные открытые(и закрытые :)) проекты.
Ну это даже не смешно. Мы же не будем серьезно относиться к этому индексу? :) В одном из первых выпусков ПФП была статья Ott, насчет Дозор-Джет, и как раз хвастался, что кода на схеме получилось в 10 раз меньше чем в аналогиченом решении на С++(20к loc vs 200к loc).
Ой, брежу. Прошу прощения.
Комментарий для anonymous:
Не побъёт, конечно. По крайней мере, в таком виде. Ему ещё очень долго развиваться для того, чтобы для этого появились предпосылки. Но какую-то долю рынка Гоу тут может оттяпать.
Кроме того, можно ожидать, что оттяпается доля рынка у скриптовых языков. Писать на Гоу быстро, работает тоже быстро.