Разобрался с этим гуглоизобретением (Go). Итоги и выводы, которые я сделал для себя под катом.
Преимущества:
- Легковесные треды (goroutines) — функционал аналогичный перловому модулю Coro, только интегрированный в синтаксис язык
- В отличии от Coro, goroutines могут автоматически раскидываться по системным тредам;
- Лёгкие, значит очень лёгкие. На своей машине я за пару секунд запустил миллион goroutines, и это съело всего лишь 2.5G RSS.
- Простой и удобный механизм обмена сообщениями между goroutines (channels), с соответствующим синтаксическим сахаром. Coro + AnyEvent отдыхают;
- Компилируемый;
- Кроссплатформенный;
- Есть как родной компилятор, так и поддержка в gcc;
- Простая кросс-компиляция;
- Для мултиплексирования умеет сам пользоваться epoll (об этом программисту можно не думать);
- Есть замечательнее учебные материалы в сети, разобраться в самом языке можно за 1-2 дня;
- Отличные инструменты профайлинга и отладки;
Недостатки:
- Система типов — до haskell как до луны пешком, по сути это калька с C + возможность добавлять методы для структур;
- Полное отсутствие перегрузки функций. Для задач где она нужна — используются reflections, да еще и это заявляется как фича (reflections в компилируемых языках предпочитаю считать грязным хаком, который стоит обходить всеми возможными способами);
- static методы отсутствуют принципиально;
- Странная система экспорта функций/переменных из модулей (экспортируются все, что начинается с большой буквы);
- Понятное дело никакой перегрузки операторов и прочего синтаксического сахара;
- В бинарник линкуется все что только можно и нельзя (gccgo умеет так не делать, но его версия Go отстает от основной);
Итог — по практическому применению — идеальная замена для Java. Писать на нем любые многопоточные сервисы — одно удовольствие. Код компактее, читабельнее, быстрее и масштабируемее.
Для всяких мелких утилиток, хоть он и становится очень модным, все же код существенно более громоздкий чем у Perl. Зато компилируемый.