Пользователь
12,0
рейтинг
19 августа 2015 в 22:14

Разработка → Вышел Go 1.5

Go*
Сегодня, 19 августа 2015, проект Go с гордостью представляет Go 1.5 — шестой стабильный релиз языка Go.



В этой версии было сделано множество серьезных изменений в реализации языка. Компилятор и рантайм был транслирован с C на Go, убрав последние остатки C из кодовой базы Go. Сборщик мусора был полностью переписан, что позволило уменьшить паузы во время сборки мусора на порядки. Сопутствующие изменения в планировщике рантайма, позволили нам изменить значение GOMAXPROCS (количество одновременно исполняющихся горутин) с 1 до количества логических CPU. Изменения в линкере позволили распространять Go пакеты в виде динамических библиотек, которые можно линковать как с Go, так и с C программами (дизайн).

(первая часть является вольным переводом анонса в блоге Go от Andrew Gerrandblog.golang.org/go1.5)

Данный релиз также включает в себя улучшения в инструменты разработки Go. Поддержка «внутренних» пакетов позволяет шарить имплементацию между пакетами. Экспериментальная поддержка вендоринга внешних зависимостей станет шагом вперед в стандартизации способа управления внешними зависимостями в Go. Новая утилита «go tool trace» позволяет визуализировать ход выполнения программы в мельчайших деталях прямо во время исполнения. Новый «go doc» дает более удобный интерфейс командной строки для просмотра документации Go.

Также добавлено несколько новых поддерживаемых систем и архитектур. Самыми зрелыми из них являются darwin/arm и darwin/arm64 (Apple iPhone и iPad) и linux/arm64. Также добавилась экспериментальная поддержка ppc64 и ppc64le (IBM 64-bit, bit/little endian).

Поддержка darwin/arm64 и новый функционал динамической линковки является ключевым для проекта Go mobile — эксперимента для создания приложений под Android и IOS. (Go mobile сам по себе не является частью этого релиза, это отдельный проект).

Единственное изменение в языке (обратно-совместимое, разумеется) — это уменьшение ограничений на литералы для map, это позволяет сделать их гораздо более читабельными и удобными в ряде случаев.

Стандартная библиотека также получила массу улучшений и добавлений. Пакет flag теперь показывает вывод usage-сообщения гораздо более красиво. В пакет math/big добавилася тип Float для работы с большими числами с плавающей точкой произвольной точности. Улучшение в DNS-резолвере для Linux и BSD-систем позволило отвязаться от CGO для программ, которым нужен был DNS. Пакет go/types переехал в стандартную библиотеку из golang.org/x/tools репозитория. (Пакеты go/constant и go/importer переехали аналогично). В пакете reflect добавились функции ArrayOf и FuncOf, по аналогии с уже существующей SliceOf. И, конечно, целый список более мелких исправлений и улучшений.

Все подробности и детали релиза вы может найти на странице релиза. Скачать релиз для вашей системы можно тут.

Установка


Если вы решили поставить Go 1.5, то процедура установки такая же, как всегда — на официальной странице golang.org/dl скачиваете свой установщик, или .tar.gz-архив с бинарниками, или исходники — как вам удобнее. Первый метод предпочтительней.


Если же вы хотите оставить предыдущий релиз (Go 1.4) и иметь возможность на лету переключаться между предыдущим и свежим релизом (к примеру, для сравнения сборок для версий), то проще всего скачать бинарные .tar.gz пакеты и распаковать в (стандартную) /usr/local:
$ ls /usr/local/go*
go142
go15

и создать симлинк на /usr/local/go для нужной версии. Это легко обернуть в алиас или скрипт, при надобности.
$ cd /usr/local
$ ln -nfs go142 go
$ ln -nfs go150 go


Ссылки


golang.org/doc/go1.5
blog.golang.org/go1.5
divan0 @divan0
карма
132,0
рейтинг 12,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (25)

  • +2
    Изменения в линкере позволили распространять Go пакеты в виде динамических библиотек, которые можно линковать как с Go, так и с C программам

    Я правильно понял, что наконец-то динамическая линковка появилась?
    • 0
      Именно. Но причины её появления больше вынужденные — для упаковки отдельных пакетов в linux-дистрибутивы (в deb/rpm/etc) и для Go mobile нужно было.
      • +8
        Да пофигу какие там причины, наконец-то можно делать .so на Go, это же здорово.
  • –9
    А с MVC-фреймворками всё так же печально, как было?
    • +4
      Во первых с ними все хорошо.
      А во вторых они в Go не особо нужны, все работает из коробки.
      • 0
        Тогда как на Go сделать то же самое что на Python+Django или Scala+Play2?
        • +1
          Я, к сожалению, не знаю какую именно задачу вы хотите решить.
          Вот например REST сервис на Go + Mongodb очень приятно писать.
          Еще есть же куча различных framework'ов: ASP.NET, JavaEE, RoR, тут можно с десяток-другой перечислить, и все будут отличными.
          Как раз выбор языка и framework зависит от задачи которую вы решаете.
          Если у вас enterprise, то ASP.NET или JavaEE, без вариантов (в 90-95% случаев).
          Если стартап… тут уж вам решать, все равно, если дело пойдет, придется переписывать.
          Не нужно пытыться решать все задачи одним инструментом.
        • 0
          Посмотрите на Revel или Beego.
  • –9
    Раст все еще лучше Go, даже по конкуррентности.
    • +6
      1) Пост о Go и ваш Rust тут не нужен нафиг
      2) Кто вам сказал такую глупость
      • +12
        ingrysty — гофер и друг автора статьи, а комментарий — дружеская шутка. А Раст на самом деле люблю я, а не они.
        • +6
          Зато зашло, целых -18 :)
    • +5
      Напишите, пожалуйста, статью про это.
  • +9
    Шарить имплементацию!

    Ньювый рашевый лэнгвич.
    • 0
      Ну, если подскажете удачный перевод, буду благодарен.
      • 0
        Так это вообще не перевод.
        Поддержка «внутренних» пакетов позволяет делить часть кода между пакетами.
        • 0
          Нет, «share implementation» это не «делить часть кода». Скорее, «разделять реализацию», хотя тоже смысл не передает.
          • 0
            Это именно «делить часть кода». А «разделять реализацию» — вообще буквальный перевод и имеет в точности тот же смысл.
      • 0
        делить/разделять реализацию/код
  • +3
    Ребят, где можно подробнее почитать про алгоритмы GC, которые реализованы в Go? Очень интересно.
  • –3
    Alex_At_Net youROCK
    спасибо за ссылки, но данные документы не отвечают на мои вопросы, а скорее добавляют новых

    ingrysty
    Благодарю, хоть и в большинстве случае разговоры данного подкаста вызывали у меня facepalm, но ответ на вопрос о алгоритме я получил. Стало понятно, что ничего нового они не придумали в этой области. Остался вопрос, можно ли настраивать выбор GC в GO как это сделано в Java?

    P.S. для тех кто не хочет слушать подкаст скажу что go использует concurrent mark-sweep. В общем в области сборки мусора все по старому, новых алгоритмов пока никто не придумал)
    • 0
      Updated.
      Не правильно понял комментарий.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.