Вышел Go 1.5

    Сегодня, 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
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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.
                      Не правильно понял комментарий.

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