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 ()
Последнее исправление: CYB3R (всего исправлений: 1)

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

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

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 ★★
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от 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
()

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

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

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

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

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

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

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

RedPossum ★★★★★
()

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

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

unsigned ★★★★
()
Ответ на: комментарий от 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
()
Ответ на: комментарий от tailgunner

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

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

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

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

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

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

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