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)

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

для этого там интерфейсы, писали же уже

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

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

А я про rust говорил. «Хотел сказать что у очень хорошо спроектированного языка для системного программирования нет нормального, безопасного и самое главное эффективного интерфейса к системе. »

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

Переход на личности? Плохая идея.

Боже упаси, всего лишь совет не заменять собственное понимание мнением авторитета.

Автор аккумулировал опыт сотен экспертов по программированию

Если эти эксперты были правы. Если их знания не устарели. Если автор правильно аккумулировал. Если не добавил этот кусок просто для объёма и, наконец, вы правильно его поняли. Плохая замена собственному пониманию.

Там, где длина массива не проверяется.

Так прямо в операции индексации проверяется, это сильно помогает? Вот увидел я, что индекс не тот, что дальше? Заменить его на length - 1? Заменить на остаток от деления на length? При чтении предположить, что прочиталось дефолтное значение, а запись проигнорировать?

Повторюсь, чем раньше будет обработана ошибка, тем лучше.
Повторюсь, чем раньше будет обработана ошибка, тем лучше.

Между «обработать ошибку там, где произошла» и «чем раньше, тем лучше» принципиальная разница: во втором случае необходим механизм передачи ошибки наверх. Удобный и лаконичный, иначе любимые макконеловские методы из 3-10 операций из-за обработки ошибок вырастут в 2-3 раза.

khrundel ★★★★
()
Ответ на: Поддерживаемость от anonymous

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

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

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

В лине таких проблем нет.

В лине много чего нет, потому что разделение труда сделало пользователя *nix-подобной системы обычным хомячком, не желающим разбираться в зависимостях между библиотеками и программами, которые у него есть (и работают, надеюсь, так как задумано). Всё решают дяди-мантейнеры дистрибутивов на уровне «выпекания готовых пирожков» - открывай только ротик.

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

Я и не говорил что LLVM это плохо, лишь опровергал утверждение «Rust написан на Rust».

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

Про обработку исключений забыть невозможно

Если нет ошибки компиляции - можно

они всегда кем-нибудь да обработаются

Никем

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

Толку то, что std::thread немного крив, хотя мог быть гораздо быстрее и проще, а проблеммы glibc могут быть и проблемами rust програм.

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

Примерно так (возможны ошибки, но в принципе это реализуемо):

Это дичайший говнокод. В реальности нужды писать так нет.

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

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

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

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

Специально для того чтобы объяснить уровню выше что происходит можно создать новый тип исключений/засунуть в него любую нужную информацию

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

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

Но ведь тогда go нельзя будет выучить за неделю же!

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

Если нет ошибки компиляции - можно

Нельзя. Исключения всегда проходят до точки обработки.

Никем

Такого не бывает.

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

В спеку языка для стандарта С++17 добавили 200+ страниц
Ещё меня повеселило, что регулярным вопросом докладчика к аудитории (а это явно не самые последние С++-программисты) был следующие: «Кто понимет, что у тут написано на слайде?».

Кресты изначально были созданы слишком переусложнёнными, а дальше их уже никто не пытался упростить.

Несмотря на такой сложный синтаксис С++, некоторым товарищам возможностей языка не хватает

Это всё по той простой причине, что кресты не разрабатывались гибким языком, в который можно будет легко вставлять что-то новое

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

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

Последние стандарты говорят об обратном.

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

У фейсбука большой опыт переписывать пакетные менеджеры просто по приколу

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

Не согласен. Нормальный Go код будет либо пробрасывать ошибку дальше (return err), либо присваивать какой-то safe default, либо делать panic.

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

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

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

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

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

Gopkg.toml and Gopkg.lock

Где-то я уже это видел =)

Тем не менее - это альфа, а не официальный и единственный способ. Ака разброд и шатание.

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

А зачем вообще это нужно когда можно либо держать в репе зависимости и обновлять их когда нужно либо из мастера тянуть сразу? Выглядит как подстилание соломы для пришедших с ноды/джавы.

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

Пересобирался LLVM40 под Rust - принцип тот же, что и с Qt, когда при необходимости собрать какую-нибудь фитюльку на Qt нужно распаковывать несколько-сот-мегабайтный архив с исходниками Qt, чего-то оттуда доставать, компилировать, а по завершении процесса сборки нужной нам 100 КБ фитюльки ненужное удалять

У тебя что привычка пересобирать программу вместе со всеми зависимыми библиотеками?

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

Так, раньше баловался PC-BSD, где KDE главная DE и довольно красивая, но пересборка Qt-программ таким вот образом выливалась в ненужное напряжение железа.

И после этого ты агитируешь за бздю?

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

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

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

Есть он там, три файлика всего, но есть

Как много. Прям основной язык

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

Ничего подобного.

Рекомендую ознакомиться с багом JDK-8043516 (статус won't fix). Даже сама JVM порой не может пережить недостаток памяти.

И как мне его сделать, если error создаётся в стандартной библиотеке?

Что-то я не понял, какую проблему мы решаем. Если системная библиотека вернула ошибку, то стектрейс нужен до вызова, все что в самой библиотеке не имеет значения.

Если хочется, можно определить свою ошибку. Но обычно и это не нужно.

А что делать, если в сообщении об ошибке нет имени файла?

Если это важно, создать свой тип ошибки, где будет имя файла, см. errors are values.

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

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

Так не удаляй. Зачем тебе их пересобирать rust с каждым минорным обновлением фокса?

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

отличный аргумент ко вкусу говна тоже можно привыкнуть

Так не бери язык, в котором в одном символе больше смысла чем в десяти на go, кто заставляет то? Кто виноват в том что твоя голова не в состоянии вместить перл целиком?

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

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

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

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

Может быть тогда ты предложишь самый доходный вид деятельности, который избавит меня от необходимости зарабатывать на Го?

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

А зачем вообще это нужно
держать в репе зависимости
обновлять их когда нужно
из мастера тянуть сразу

Чтобы не занимается этой рутиной.

Если вы не понимаете зачем нужен ПМ - мне вам не помочь. Качайте master ветки.

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

Не знаю, что такое монада, но у исключений недостатков нет.

«Не знаю важного понятия, напрямую относящегося к обсуждаемой теме, но Мнение имею», ага. Только цена этому мнению — грош.

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

Дружище, ты меня как-то невнимательно читаешь.

Нет, это ты чушь несёшь про то, что ошибки надо обрабатывать там, где они возникают.

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

А чего такого нового нету? Модули - тоже сахар? Или вы предлагаете GC добавить? Сомневаюсь, что какой-либо язык это переживёт.

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