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

Это для плавных переходов между версиями апи, чтобы в какой то промежуток времени можно было реализовывать обе версии (подробнее можно найти в блоге гоу, вроде). Например google app engine без этой фитчи не мог обновить версию гоу не сломав обратную совместимость.

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

Возникла ошибка в библиотеке, от того что её вызвали с неверными параметрами. Где нужно обрабатывать эту ошибку?

Закончив написание кода, мы замораживаем версию библиотеки и всё вместе тестируем. Благодаря этому в боевоем режиме функции вызываются с правильными параметрами.

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

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

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

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

Тем кому не нравится отпечаток могут не писать на гоу

Тут проблема гораздо больше. Популярность языка определяет доступность средств(всяких там библиотек, ide, ...) и опять таки популярность(рекурсия таки). В результате свободно выбиратья язык программирования я могу только лишь для каких-то домашних проектов. Я не могу пойти на работу и сказать - так, с этого дня мы переходим на вот этот язык. Я не могу придти в какой-то существующий проект и сменить там язык. Даже если я найду много времени для переписывания чего-то крупного, то опять таки я вряд ли смогу убедить пользоваться конкретно моей реализацией. Просто по той причине что у гугла есть миллиарды денег и кучи человекочасов для пиара, а у меня нет ни того ни другого

Мне после гоу даже си не хочется трогать, не говоря уже на питоне

Они примерно на том же уровне по удобству, где то выше а где-то ниже

NextGenenration ★★
()

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

В конце-концов, это инструмент.

Пока на Go мало вакансий. Но уже платят ~140, это радует.

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

Закончив написание кода, мы замораживаем версию библиотеки и всё вместе тестируем. Благодаря этому в боевоем режиме функции вызываются с правильными параметрами.

Допустим забыли про валидацию одного из параметров(в приложении, не в библиотеке). Где должна быть обработка ошибки?

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

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

Большинству обитателей лора денег он приносить не будет.

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

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

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

Кроме питона и си больше ничего нет? На дврое 2017 год, создать свой компилируемый язык проще простого, но нет сравнивают нечто из нулевых

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

Допустим забыли про валидацию одного из параметров(в приложении, не в библиотеке). Где должна быть обработка ошибки?

Валидацию? Размытое понятие. Валидация на тип производится при компиляции. Валидация на формат (строки, например) производится во время исполнения.

Давай возьмём валидацию на формат строки. В какой-то функции строка разбивается на части, которые затем передаются дальше. Разбивается в соответствии с шаблоном. И если строка не соответствует ему, где-то будет nil. Что, в свою очередь, вызовет падение приложения.

Что можно сделать?

1. Один раз проверять входные данные. «Каков стол, таков и стул».

2. Если лень проверять один раз, проверяй несколько раз: в каждой функции, которая будет пользоваться производными данными. Это «легче», конечно.

3. При несоответствии полученных данных ожидаемым - контролируемо выполнять альтернативный сценарий. Например, если это чтение звукового файла, можно либо закрыть программу, либо взять предыдущий байтик, либо интерполировать звукоряд и тем самым «восстановить» звук.

Что нам даёт try/begin?

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

2. Обычно уводит нас на уровень выше (на 10 уровней выше). И там мы уже не имеем доступа к изначальным данным, и не может восстановиться.

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

Ога, поэтому Go и будет на пару секунд быстрее

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

Большинству обитателей лора денег он приносить не будет.

Начнут жить самостоятельно, жрать захочется, станет.

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

недоязычёк

«язычок» же. Зачем здесь «ё» вместо «о»? Вот школа скоро откроется - там тебя научат правильно писать.

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

Когда ты заранее знаешь как программа должна работать, у тебя не возникает проблем вроде «забыли валидацию».

Если же ты заранее не знаешь, то это проблемы управления. И даже прекрасный Ruby с его begin-rescue-end не в силах помочь с начальником-идиотом и постоянным бардаком в требованиях.

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

Большинству обитателей лора денег он приносить не будет

Самая точка! Где сейчас география его востребованности (кроме кулуаров гугла)? Баловаться левыми синтаксисами было интересно в прыщавой юности, но когда тебе за 30 разбирать еще одно проходное овно нет никакого желания

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

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

Если ошибки действительно обрабатывать, то такого не происходит.

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

В случе с try catch библиотека кинет ошибку и её можно отлавливать уже где нужно

Обычно уводит нас на уровень выше (на 10 уровней выше)

Где поставишь, там и будет

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

Начнут жить самостоятельно, жрать захочется, станет

Даже тому кто уже работает к примеру на java? Или вакансии по go уже открылись в каждом городе?

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

В случе с try catch библиотека кинет ошибку и её можно отлавливать уже где нужно

Какая библиотека? Ты сказал про приложение.

По остальным тезисам что скажешь?

Не, если ты хочешь сказать что без обработки исключений программировать нельзя, то нам не о чем спорить. Говори конкретнее.

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

Когда ты заранее знаешь как программа должна работать, у тебя не возникает проблем вроде «забыли валидацию».

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

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

Даже тому кто уже работает к примеру на java? Или вакансии по go уже открылись в каждом городе?

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

Или вакансии по go уже открылись в каждом городе?

Ну работай удалённо.

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

Зачем мне язык 2017 года?

Намёк на то что языков чуть больше чем три не понятен?

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

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

По остальным пунктам что скажешь?

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

Это просто человек забил на обработку ошибки

Или на что-то отвлёкся и не дописал

но это все-таки обычный говнокод

Это не должно собираться

хоть на расте написать

Нельзя. Так подобный код не соберётся

Если ошибки действительно обрабатывать, то такого не происходит

err сравнивается с nil -> обработка ошибки есть

NextGenenration ★★
()

Наиболее важным изменением языка является введение псевдонимов типов.

И этот язык ещё сравнивали с божественным растом?

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

Какая библиотека? Ты сказал про приложение.

Приложение использует библиотеку. Приложение передаёт неверные данные библиотеке

По остальным тезисам что скажешь?

В итоге ты предлагаешь обрабатывать ошибки уровнем выше

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

В результате выясняется что go ничем не лучше других языков

Поддерживаю предыдущего оратора

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

Что цитируешь ты?

Я ничего не цитирую, а говорю так, как думаю, исходя из своего опыта.

Вот есть у тебя приложение, которое выполняет сетевые запросы. Допустим, у тебя в одном из запросов возникла ошибка (например, таймаут запроса или сеть отвалилась), и тебе нужно в каждом отдельном случае принять решение, что делать дальше — повторить запрос (возможно, не более N раз, возможно, после некоторого таймаута, который может расти с числом попыток), перейти в оффлайн-режим, и т.д. Ты это будешь делать из функции, которая выполняет запросы? Информация, на основе которой ты можешь принять это решение, не доступна функции, которая выполняет запрос, она может быть на много уровней выше, в том числе на уровне конфига.

Я таких примеров могу ещё много придумать.

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

список говна на котором люди зарабатывают деньги крайне велик

И что?

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

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

Добавлю в игнор, жалко на тебя времени

как аргументировано. рискну предположить что и в остальных темах ты так же компетентен и помощи от тебя я бы всё равно не получил

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

Я ничего не цитирую, а говорю так, как думаю, исходя из своего опыта.

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

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

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

Но исключение в духе «NetConnError» малоинформативно. Десятью уровнями выше ты не сможешь автоматически понять на каком этапе разорвалось соедиенние и что с данными делать.

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

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

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

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

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

Go1.9 с помощью Go1.4 собирается за 3 минуты. Rust-1.19 собирается с помощью LLVM/Clang 4.0.1 уже больше часа и я не уверен, что я не прерву это досрочно. Почему Rust написан на C++, а Go написан на самом себе?

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

На питоне такое делается в три строчки

свежо придание, ты про асинхронность ? Нужно валиться с лупами. Или про конкаренси ? Там много подводных камней в общении между потоками. И это не смотря на то что в Го зеленые потоки которые создаются одним ключевым словом, без ненужных импортов и прочего хлама. Я люблю питон, но многопоточное программирование там боооль.

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

не надо возиться чтобы завести многопоточность

От дедлоков всё равно не спасает.

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

заменять типы

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

одно уг другим уг

а, так ты из этих, печально

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

А зачем? Ошибки нужно обрабатывать там, где они возникают.

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

Если у меня контактные данные человека хранятся в виде JSON, и я хочу отправить ему письмо, то ошибка парсинга JSON является фатальной. Если же я хочу отрендерить его домашнюю страничку с фотографией, биографией и контактами, то ровно та же самая ошибка парсинга фатальной не является, потому что контактные данные можно заменить разумными умолчаниями в виде пустых строк или слова unknown. Ошибка одна и та же, место возникновения ошибки одно и то же. Обработка разная.

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

Видимо, тебе бесполезно говорить, что с помощью Go люди зарабатывают хорошие деньги.

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

Zenom ★★★
()

Как там в go с simd в компиляторе/поддержкой интрисинков? А то у ржавого пока только в nightly

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

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

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

Ошибки нужно обрабатывать. И поэтому в Java придумали ПРОВЕРЯЕМЫЕ исключения. Но хипстеры поднасрали испортили идею НЕПРОВЕРЯЕМЫМИ исключениями.

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

Ну то, что исключения на голову удобней всей этой ручной тягомотины

Обработка исключений порождает слабочитаемую лапшу в коде не хуже goto. При этом unchecked-исключения ещё и никак не отражаются в сигнатуре функции, что и приводит к тому, что про их обработку забывают. Да и checked вариант провоцирует пофигистический подход к исключениям. Нормальный подход — это как раз монада Try, которая позволяет всё то же, что и выброс исключений, но свободна от недостатков этого подхода.

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