Сразу после празднования своего 4-го дня рождения Go получает обновление с десятичной запятой. Может ли он вырваться из своей ниши?
Go-это замена Google для C, и поэтому он пытается быть простым и легким. Большая проблема, которую он стремится решить, — это сбалансировать простоту реализации при поддержке современных идей программирования. Большинство людей, которые сталкиваются с ним, действительно думают, что он делает хорошую работу, но только до тех пор, пока он идет. Существует множество сложных функций программирования, которые он не поддерживает и которые, по признанию его разработчиков, не знают, как включить в язык, не делая его похожим на другие языки высокого уровня.
По этой причине даже обновление с десятичной запятой рассматривается как возможность увидеть, что было и не было включено в язык.
Первое, что следует отметить, — это то, что языковая команда Go пытается чаще создавать обновления. Прошло всего 7 месяцев или около того с момента выпуска версии 1.1.
Самое большое изменение в языке-это введение нового трехиндексного среза. В Go срез — это часть массива. Это способ Go предоставить то, что выглядит как динамические массивы, но реализовано в виде представления статического массива. Например,
массив var [10] int
создает статический массив, содержащий десять целых чисел;
срез:=массив[2:4]
создает срез, который сопоставляет элементы массива массив[2] с массивом[3], т. Е. до массива[4], но не включая его. Срезы можно повторно применить, изменив способ их отображения на базовый массив. Новый синтаксис позволяет указать максимальную емкость среза. Например:
срез:=массив[2:4:7]
фиксирует срез максимум на пяти элементах, т. е. от 2 до 7, даже если он повторно используется. Это может быть использовано для ограничения доступа к данным в массиве за пределами заданной точки.
Другое важное изменение заключается в том, что гороутины более строго запланированы. Это исправляет что-то, что выглядело как ошибка в том, что Гороутина могла захватить систему, если она не возвращалась, и был доступен только один пользовательский поток. Однако для его работы вам все равно придется вызвать функцию, так как планировщик вызывается только при входе в функцию. В то же время был увеличен размер стека и снято ограничение на количество потоков.
Кроме того, стандартная библиотека была улучшена и добавлена, и теперь нулевые указатели обнаруживаются и обрабатываются.
В целом изменения невелики и не удовлетворят критиков, которые требуют дополнительных функций, таких как генераторы, исключения, оптимизация хвостовых вызовов и так далее.
Программистам, которые пробуют Go, похоже, нравится его подход, и все же они не склонны становиться фанатичными послами для него, как в случае с Ruby, Python, Haskell и т. Д. Возможно, Go просто недостаточно радикальна, или, возможно, это основная неопределенность в том, будет ли она по-прежнему в следующем году или через год. Быть открытым исходным кодом не дает ему безопасного будущего, когда Google держит бразды правления в своих руках.