LINUX.ORG.RU

Go 1.9

 


1

6

Команда разработчиков Go представила релиз Go 1.9. Релиз доступен на странице загрузки. В данном релизе имеется много изменений в языке, стандартной библиотеке, среде выполнения и инструментарии. Большая часть усилий разработчиков была положена на усовершенствование среды выполнения и инструментария.

Наиболее важным изменением языка является введение псевдонимов типов. Объявление псевдонима типа выглядит следующим образом:

type T1 = T2

Это объявление вводит псевдоним Т1 для типа Т2, таким же образом, как byte всегда был псевдонимом для uint8. Дизайн-документ псевдонимов типов и статья о рефакторинге объясняют это дополнение более детально.

Новый пакет math/bits предоставляет функции подсчета и обработки битов для целых беззнаковых чисел, которые, когда это возможно, реализуются специальными инструкциями CPU. Например, в системах x86-64 bits.TrailingZeros(x) использует инструкцию BSF.

Пакет sync добавил новый тип Map, безопасный для многопоточного доступа. Важно понимать, что это не общая замена типа Map; обратитесь к документации, чтобы узнать, когда она должна использоваться.

В пакет testing также добавлено дополнение. Новый метод Helper, добавленный к testing.T и testing.B, отмечает вызывающую функцию в качестве тестовой вспомогательной функции. Когда тестовый пакет печатает информацию о файле и строке, он показывает местоположение вызова вспомогательной функции вместо строки в самой вспомогательной функции.

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

Наконец, в рамках усилий, направленных на ускорение работы компилятора, Go 1.9 компилирует функции в пакете одновременно.

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

Чтобы отпраздновать релиз, группы пользователей Go по всему миру проводят вечеринки.

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



Проверено: Klymedy ()
Последнее исправление: Klymedy (всего исправлений: 3)

Ответ на: комментарий от mersinvald

Я все равно не понимаю на кой черт чего собирать из исходников.

Задай этот вопрос мантейнерам своего дистрибутива. Они поопытнее меня - скажут ответ.

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

Хотят

Они могут хотеть это целую вечность ещё

Ну, в плюсах шаблонами пытаются заменить макросы

В очень узком смысле. В то время как макросы могли бы превращать поле в свойство(к примеру)

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

Ничего ты не уронишь

Уронится как минимум написанное приложение.

Отрабатывает обработчик ошибок по умолчанию

И предлагает завершить приложение, не так ли?

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

Для бутстрапа Go нужен какой-нибудь сишный компилятор, производящий первоначальный код для запуска основной сборки

Так что, go написан на сишке?

По-моему, так с любым языком программирования в Unix-системе

И что мешает включить в компилятор абсолютно все необходимые зависимости?

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

Сборка Rust мне потянула безальтернативную пересборку уже установленного в системе пакета llvm40-4.0.1 (который, в свою очередь, используется для графической подсистемы X.org Mesa 3D). Он собрался абсолютно с теми же опциями, что и установленный. Это ли не маразм?!

Так обратись к мейнтерам, пусть поправят

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

Шизофрения отдельного ЛОРовца-бздуна, я думаю, слабо интересует разработчиков Firefox и любых других продуктов с ЦА, не ограничивающейся полутора калеками шизофреничных лоровцев-бздунов.

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

Меня не устраивает 98% мёртвого кода в системе

Методику подсчёта в студию

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

Ну так вот уведомляю, что у GUI приложения никакой обработки в main быть не может. Оно не должно падать в принципе. И unchecked exceptions этому не способствуют.

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

Не дай б-г девушкам или православным прочитать это вне контекста обсуждения

Нам вообще лучше не соприкасаться. Слишком большая разница в мышлении, способная привести ко многим фатальным последствиям.

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

После установки Gtk-либ почему-то их исходники больше не требуются ни для чего.

Qt тоже не нужны.

Как вы вообще собираете свою бздю, не зная таких основных вещей?

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

Для бутстрапа Go нужен какой-нибудь сишный компилятор, производящий первоначальный код для запуска основной сборки. По-моему, так с любым языком программирования в Unix-системе.

FreePascal, например написан сам на себе. Бутстрап только установкой пакетов от какой-нибудь бинарно-совместимой системы, наугад.

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

Сборка Rust мне потянула безальтернативную пересборку уже установленного в системе пакета llvm40-4.0.1 (который, в свою очередь, используется для графической подсистемы X.org Mesa 3D). Он собрался абсолютно с теми же опциями, что и установленный. Это ли не маразм?!

Так это может порт такой, или из чего вы собираете.

PS. У меня llvm 4.0.1 собирается за час (оба x86_64 и i686), но памяти на сборщике до потолка и рамдиск.

Started Tue, 22 Aug 2017 00:24:57 EEST
Completed Tue, 22 Aug 2017 01:27:47 EEST

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 2)
Ответ на: комментарий от RazrFalcon

Маразм - это сборка из сорцов всей ОС вручную.

Мантейнеры твоего дистрибутива, наверное, получают ОСь и бинарные пакеты для передачи тебе в пользование напрямую из астрала, раз ты так говоришь. :))

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

Стектрейс действительно иногда удобен. Но лучше добавлять в ошибку контекст, необходимый пользователю, чтобы понять, что пошло не так. Стектрейс очень редко для этого необходим. В таких случаях его можно добавить.

Контекст добавить можно. Стектрейс этому не помеха. Если пользователь настолько тупой, что не может читать исходный код, стектрейс надо записывать в файл лога и прикладывать к отчёту об ошибке.

Ошибка, отраженная в сигнатуре функции.

Этот подход не работает. Checked Exceptions в Java это доказали.

Видимо, ты просто не ловил падений на проде из-за необработанных исключений.

Ловил и радовался. Фикс бага по исключению это чаще всего 2 минуты. Куда лучше, чем падение без исключения.

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

Да получайте вы шитый бинарный код сразу с сайта производителя - чего терять время на какие-то репозитории и подключение левых репозиториев с запрещёнными исповедуемой религией кодеками...

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

Уронится как минимум написанное приложение.

Не уронится, а штатно завершит работу. Уронится это когда у тебя в середине выполнения процесса SIGSEGV и вся виртуальная машина бу-бух с бэктрейсом из JIT.

И предлагает завершить приложение, не так ли?

Работа завершается, когда завершается выполнение функции main. В данном случае она завершилась из-за необработанного исключения.

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

Ну так вот уведомляю, что у GUI приложения никакой обработки в main быть не может.

У GUI приложения всегда есть обработка в event loop, которая ловит все исключения и каким-то образом реагирует, например показывает пользователю сообщение об ошибке, сохраняет всю информацию в лог и завершает работу.

Оно не должно падать в принципе.

Ещё как должно. Как только возникло подозрение на непредвиденную ситуацию, нормальное GUI приложение обязано с грохотом упасть.

Legioner ★★★★★
()
Ответ на: комментарий от NextGenenration
> ls -h /usr/local/include/gtk-2.0/gtk/*.h | wc -l
     215

Для Qt было нужно что-то ещё.

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

У GUI приложения всегда есть обработка в event loop, которая ловит все исключения

В GTK+ и Qt - нет.

сохраняет всю информацию в лог

Конечному пользователю пофиг на лог. Ему нужно чтобы прога не падала.

нормальное GUI приложение обязано с грохотом упасть

А потом жалуются, что плазма падает. Ну нельзя использовать подходы серверной разработки в GUI.

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

Не уронится, а штатно завершит работу

Хорошое «штатно». Допустим создавался xml файл. Половина файла есть, второй половины нет. Это и есть «штатно»?

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

Нытьё моё

О безальтернативном положении дел, когда в *nix-системе оказывается 98% ненужного кода и его приходится поддерживать в актуальном состоянии.

Потому что: линуксоидам захотелось включить в X.Org Intel/KMS-модель графических драйверов на основе LLVM; потому что в Mozilla отказались от Gtk2 и перешли на Gtk3 (при этом Gtk2 из системы никуда не девается - он продолжает использоваться как зависимость того же Gtk3); Firefox в будущих версиях невозможно собрать без Rust'а, который завязан на особенную сборку LLVM специально для него. И во FreeBSD нужно держать (пока) две версии LLVM - одну системную 4.0.0, другую прикладную 4.0.1 - для X.Org Mesa 3D, Rust и других безальтернативных программ на C++ типа Chromium). Весело, правда?

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

В этом парсере нечего обрабатывать «на месте». Любая ошибка должна быть проброшена наверх.

Это вполне реализуемо. Достаточно внутри библиотеки использовать паники, а в библиотечной функции верхнего уровня (Parse, например) с помощью recover превращать панику в ошибку. В некоторых библиотеках так и сделано.

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

Этот подход не работает. Checked Exceptions в Java это доказали.

Я далёк от мира java и не могу опровергнуть этот довод, но мне кажется, что не всё так просто и Checked Exceptions в Java не взлетели не потому, что они Checked. Ну и небольшой поиск показывает, что холивары на эту тему еще не утихли.

Ловил и радовался. Фикс бага по исключению это чаще всего 2 минуты. Куда лучше, чем падение без исключения.

Ну, мне видится, что отсутствие падения еще лучше.

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

исправденным пакетным менеджером

dep уже переехал в namespace golang. Он пока еще не называется официальным, но видится мне, временно.

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

Поставлю вопрос таким образом: есть функция получающая аргумент какого-то типа, что то с ним делающая и возвращающая объект этого типа. Какой тип выведет go с его преобразованием к интерфейсам?

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

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

А мне это зачем, переть против апстрима?

«Тут не чинить, тут всё надо менять!» - как в одном известном анекдоте.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)

Спешу напомнить всем кричащим в этом итт треде что «Go написан на Go», что 1) Это правда только начиная с версии 1.5 2) Гофаги смогли добиться этого только написав тулзу, которая автоматический перегнала их сишный код в Go.

Таким образом, правильнее говорить, что начиная с версии 1.5, Go написан на неподдерживаемом мессе из автоматический переписанного на Go С.

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

В go плохо то что переменная живёт отдельно от своего значения, всегда

Ты явно пытался тут что-то донести, но не преуспел.

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

Нет ничего, более явного, чем unchecked исключение. В любом вызове функции может прилететь что угодно, некоторые встроенные функции кидают конкретные исключения, вот и всё. Что может быть более явного?

Если забить на традиции, исключения - это всего лишь ещё один способ выйти из функции и передать значение. Непроверяемые исключения - это что-то типа динамической типизации, как в каком-нибудь js, возвращаем непонятную хрень и попробуй разберись. Также как в динамической типизации, непроверяемые исключения удобней, появилась необходимость вернуть что-то другое - возвращаешь и не надо по всему стеку вызовов параметры менять. Но и, как в динамической языке, за такое удобство платится надёжностью. Но есть одно различие: основной путь исполнения тестируется чаще, если какая функция вместо числа отдаст массив, то при отладке на такой случай почти наверняка наткнёшься, а вот проблемы времени исполнения встречаются реже и тесты на них писать сложнее. Соответственно, непроверяемые исключения убирают контроль компилятора с самых непротестированных частей.

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

Го не очень подходит для ФП

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

А для вышепреведенного обычно методом мутируют объект, и ничего не возвращают или возвращают ошибку, если она возможна.

Это всего лишь частный случай. Можно придумать не один пример, когда из-за такой реализации я создаю объект дочернего типа, передаю его куда-то, а оттуда получаю объект родительского типа.

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

Не знаю как в Rust'e, но в Go panic рекомендуется использовать в исключительных ситуациях. Равно как и перехватывать их. Например - в вебсервисах нужно перехватывать панику, ибо грохнется весь сервис.

https://github.com/golang/go/wiki/PanicAndRecover

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

Checked Exceptions в Java не взлетели не потому, что они Checked.

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

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

А мне это зачем, переть против апстрима?

Страдаешь ведь

«Тут не чинить, тут всё надо менять!» - как в одном известном анекдоте

И что ты менять собрался?

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

Ты явно пытался тут что-то донести, но не преуспел.

В примере кода для демонстрации ошибки создаётся переменная. Чтоб компилятор не жаловался на то что она не проинициализирована её инициализируют мусором. И лишь в случае успешного применения она будет содержать полезное значение.

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

Что в моих силах - меняю.

Заполняешь темы сообщениям о длинной сборке rust-а?

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