Go ... to hell, for god's sake
Про Go.
В целом нейтрально из https://sorhed.livejournal.com/615220.html :
Я искренне офигеваю от наглой тупости го. Это язык, где тупость и очевидность ценится, возводится на пьедестал и является объектом поклонения (если вы думали что это питон, то го превосходит его на десятичный порядок как минимум).
Ну то есть, для начала:
1) Там нет generics. Но есть указатели (со сборкой мусора, не волнуйтесь), и есть возможность, соответственно, передавать by value (c копированием) и by reference (что позволяет не выделять место на куче для каждой фигни — крайне нетривиальный вопрос в джаве).
2) Очень тупое ООП, напоминающее таковое в раннем перле (если кто застал). Ссылка на this передаётся первым аргументом в функции (выделяется отдельными скобками, чтоб никто не перепутал).
3) Нет и не будет map, reduce и filter. Роб Пайк сказал, что они не нужны. Вася, не выпендривайся и слушай песню про валенки циклом for, как в прошлом веке. Чтобы ни у кого не было соблазна написать их самому (что несложно), Роб превентивно сделал это сам, выложил на гитхаб и сказал, что использование вот такого функционального гейства discouraged. Мужик!
4) Да, кстати, ровно два вида коллекций в стандартной библиотеке — массив с неизменным размером (и немного синтаксического сахара для копирования данных в новый массив, если прежний стал слишком мал), и map. Should be enough for everyone, не так ли? Впрочем, Lua вообще обходится одной коллекцией, ничо, живут.
5) Иммутабельности тоже, разумеется, нет. Кто-то таки сделал персистентные структуры данных и выложил их на гитхаб. Правда, не вполне понятно зачем они нужны в отсутствие простейших функциональных примитивов. Разве что тренироваться в рекурсии, почитывая SICP.
При этом нельзя сказать, что это быдлоязык навроде PHP (хотя с первого взгляда может так показаться). В быдлоязыках (это не только PHP, хотя не будем показывать пальцем) помимо простоты хуже воровства существует ещё множество неочевидных corner cases, про которые нужно знать и обходить стороной. Тут такого нет — всё брутально просто и вырублено топором, оставлено только самое нужное (concurrency-примитивы входят в число самого нужного). Это внушает уважение. Вообще, Роб Пайк дал нам целый Plan9, и быдлокодером его считать нельзя.
В общем, рекомендую, особенно для душевного отдыха и зализывания ран после скалы.
Более негативно из http://dlang.ru/faq :
Go не простой, Go -- примитивный. Go не позволяет делать элементарные обобщения и, как следствие, на нем практически невозможно писать алгоритмы и обрабатывать данные. Структура языка Go стимулирует программистов к написанию лапшеобразного трудноподдерживаемого говнокода. Больше кода, больше ошибок, тяжелее поддержка, дольше разработка, сложнее тестирование, отладка, рефакторинг. В Go полностью отсутствуют инструменты управления сложностью, вроде шаблонов/дженериков, нормального ООП или (спорно) исключений, что фактически делает Go не пригодным для разработки больших проектов.
Go Хорош только для:
- людей, не знающих ничего другого;
- людей, не писавших на нём ничего, кроме хеллоуворлдов;
- людей, исповедующих copypaste-driven programming.
А ваши впечатления от Go, особенно в сравнении с другими ЯП? Долго плевались или, наоборот, радовались?