LINUX.ORG.RU

Go 1.3

 


1

3

Версия 1.3 выпущена спустя шесть месяцев после версии 1.2 и не содержит изменений в языке. Основная работа была произведена над реализацией, что обеспечило точную сборку мусора, рефакторинг тулчейна, результатом которого стала более быстрая сборка, особенно больших проектов, и значительное улучшение производительности. Как всегда, Go 1.3 держит обещание совместимости, и с новой версией почти все приложения будут продолжать собираться и запускаться без изменений.

Главные улучшения:

  • Прекращена поддержка Windows 2000.
  • Появилась экспериментальная поддержка Dragonfly BSD.
  • Вернулась поддержка Native Client (NaCl).
  • Добавлена экспериментальная поддержка Plan 9.
  • Добавлена экспериментальная поддержка Solaris.
  • Изменилась реализация стеков горутин: прежняя, «сегментированная» модель заменена на непрерывную, что устраняет старую проблему «горячей точки», когда вычисление многократно выходит за границу сегмента. Подробности, включающие статистику производительности, можно посмотреть здесь.
  • Долгое время сборщик мусора был точным при изучении значений в куче. В версии 1.3 аналогичная точность добавлена для значений в стеке. Это значит, что значения Go, не являющиеся указателями (например, целые), больше не будут ошибочно приниматься за указатели и препятствовать повторному использованию незанятой памяти.

А также многое другое.

>>> Подробности

anonymous

Проверено: Shaman007 ()

более быстрая сборка, особенно больших проектов

пруф на особенно большие проекты на Go

Kompilainenn ★★★★★ ()

А что значит - «точную сборку мусора»?

Не ужели есть еще «неточная сборка мусора»? О_о

AF ★★★ ()


Главные улучшения:

Прекращена поддержка Windows 2000.


*trollface*

frozenix ★★★ ()

Уже обгоняет Java по производительности?

st4l1k ★★ ()
Ответ на: комментарий от AF

значения Go, не являющиеся указателями (например, целые), больше не будут ошибочно приниматься за указатели и препятствовать повторному использованию незанятой памяти

crowbar ()

я как-то решил с файликом в utf16 поработать чутка на go, больше в его сторону смотреть не буду.

RedPossum ★★★★★ ()

Прекращена поддержка Windows 2000.

Теперь винде точно капец!

a1batross ★★★★★ ()
Ответ на: комментарий от RedPossum

больше в его сторону смотреть не буду

В сторону UTF16, или в сторону Go?

one_more_hokum ★★★ ()
Ответ на: комментарий от nerdogeek

А вот C++ поддерживает Windows 2000

Не путай грешное с праведным. С++ - язык, Go - язык и компилятор. Именно компилятор перестал поддерживать Win2000, что не мешает тебе написать компилятор под Win2000 или портировать существующий.

eReSik ★★ ()
Ответ на: комментарий от htower_

Ждем подробностей :)

да все просто, надо было прочитать 180 файликов вида xxx%d, и по 30 штук их посоединять, а между соединяемыми что-нибудь добавить. Я обычно на таких простеньких задачках смотрю какие-нибудь новые языки, вдруг понравятся.

прочитать и сосплитить по 30 было даже приятно.

Накидать вставку строки между каждым из 30 соединяемых файлов было тоже несложно, но я получил вместо содержимого каждого второго файлика - иероглифы. А все потому что utf-16 и BOM.

Пришлось загонять строки из utf-16 в utf-8(или наоборот, неважно). А стандартных механизмов я для этого не нашел, в общем копипаст и немного кода подправило ситуацию.

Но я быдлокодер. Я не хочу ничего знать о BOM, я хочу раз-два и в продакшн.

RedPossum ★★★★★ ()

Как сейчас дела обстоят с бинарными файлами? А то раньше - написал Hello World, а он размером в пару метров.

Razip ★★ ()
Ответ на: комментарий от RedPossum

Чисто из интереса. А чем бы ты воспользовался, если бы не хотел экспериментировать?

anonymous ()
Ответ на: комментарий от anonymous

А чем бы ты воспользовался, если бы не хотел экспериментировать?

у меня для души scala, ей и пользуюсь в основном. Оттуда и utf-16.

RedPossum ★★★★★ ()
Ответ на: комментарий от Razip
package main

import "fmt"

func main() {
        fmt.Println("Hello world!")
}
slowpoke@linux-wocy:~/tmp> /usr/local/go/bin/go version
go version go1.3 linux/386
slowpoke@linux-wocy:~/tmp> /usr/local/go/bin/go build hello_world.go
slowpoke@linux-wocy:~/tmp> du -h hello_world
1,5M    hello_world
Ja-Ja-Hey-Ho ★★ ()
Ответ на: комментарий от Kompilainenn

Это ж хипсторы. Для них и hello, world это уже очень большой и серьезный проект.

anonymous ()
Ответ на: комментарий от AF

Еще есть консервативная сборка мусора, когда ранайм не умеет отличать числа от указателей и на всякий случай считает все указателями.

anonymous ()
Ответ на: комментарий от Ja-Ja-Hey-Ho
razip@elementaryOS:~$ go version
go version go1
razip@elementaryOS:~$ go build hello_world.go
razip@elementaryOS:~$ ls -lh hello_world
-rwxrwxr-x 1 razip razip 1,3M июня  19 13:24 hello_world
Razip ★★ ()

Кстати, что в го придумали с динамическими библиотеками? все статически линкуется?

loz ★★★★★ ()
Ответ на: комментарий от Razip

Учитывая, что ты не прочитал даже вводную часть по ЯП, что бы понять почему так, то дела обстоят плохо.

umren ★★★★★ ()
Ответ на: комментарий от Kompilainenn

docker же, ну и стандартная библиотека собирается за 10с в отличии от.

umren ★★★★★ ()
Ответ на: комментарий от Razip

У меня небольшая программа, работает с интернетом и GTK. На 1.2 — 22.9 Мб, на новой — 14 Мб. Всё равно много, но потихоньку пилят.

Weres ★★ ()
Ответ на: комментарий от umren

Просветите. В бинарный файл закладыватся язык, необходимые программе библиотеки и код программы? Где про это прочитать?

Razip ★★ ()
Ответ на: комментарий от Razip

Есть только одна книга по Go: «Программирование на Go». Возможно, имеется ввиду, что

если файл app.go зависит от файла pkg1.go, который, в свою очередь, зависит от файла pkg2.go ... все, что экспортирует pkg2.go, включено в объектный модуль для файла pkg1.go, поэтому для компиляции app.go достаточно иметь только объектный модуль для файла pkg1.go.

anonymous ()
Ответ на: комментарий от RedPossum

А что не так было? Я примерно тоже самое могу про python сказать...

deterok ★★★★★ ()

оно реально стало быстрее, это чувствуется

ещё бы copy-on-write в go и у него будет оптимизированный рантайм

anonymous ()
Ответ на: комментарий от RedPossum

А в книге это было достаточно подробно описано если не ошибаюсь.

deterok ★★★★★ ()

Прекращена поддержка Windows 2000

Ну вот, а я только успел поставить... :3

anonymous ()
Ответ на: комментарий от deterok

Я примерно тоже самое могу про python сказать

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

А в книге это было достаточно подробно описано если не ошибаюсь.

хых, не хочу ничего читать, хочу раз-два и в продакшн. Я к тому что потыкать просто взял жеж.

RedPossum ★★★★★ ()

значения Go, не являющиеся указателями (например, целые), больше не будут ошибочно приниматься за указатели

А как это сделано, кто-нибудь знает? Они типизировали стек?

unsigned ★★★ ()
Ответ на: комментарий от RedPossum

2014 год

В 2014 году использовать UTF-16 для ввода-вывода — очень странная затея.

quantum-troll ★★★★ ()
Ответ на: комментарий от Razip

как вы задолбали уже с размером бинарных файлов в Go. неужели так сложно понять, что по умолчанию там включен статический линковщик, вот и собирает все либы в одну кучу, вот тебе и такой большой объем бинарника. используй динамическую линковку и получишь очень маленький бинарник.

shamkir ()
Ответ на: комментарий от Razip
➜  ~  cat name.go
package main

func main() {
    println("Hello, 世界")
}
➜  ~  /usr/local/go/bin/go build -ldflags "-s" name.go
➜  ~  du -su name
du: illegal option -- u
usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m | -g] [-x] [-I mask] [file ...]
➜  ~  du -sh name
500K	name
➜  ~
shamkir ()
Ответ на: комментарий от shamkir

используй динамическую линковку и получишь очень маленький бинарник.

500K name

/0

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

можно убрать отладочную информацию. размер бинарника уменьшится не существенно, но станет меньше. в любом случае, если вас так напрягают бинарники по 2 метра используйте gccgo

shamkir ()
Ответ на: комментарий от shamkir

товарищам придраться не к чему, купили винты на 5 гб, проблемы с местом :) ну а FAQ почитать они не хотят.

umren ★★★★★ ()
Ответ на: комментарий от quantum-troll

С чего бы это? Многие операции с юникодом намного быстрее могут быть, вот внутри haskell Data.Text, емнип, utf-16.

А по поводу bot - костыль, лучше стандартом le/be в проекте/протоколе/etc. закрепить, или в имени файла обозначать.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.