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)

Инструмент должен быть простым как палка (Го) или быть супер мощный тулинг и автоматизация. Иначе получиться пусть С++, где да, крутые специалиста но всего-навсего пару десятков.

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

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

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

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

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

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

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

По этой же причине и руби почти издох

Не было никакого руби. Были рельсы и специально разработанный для низ язык. Потом в ПХП добавили классы, в ПХП-фреймворки перенесли все фичи из рельс и рельсы закономерно перестали быть

makoven ★★★★★
()

Т.к. тред опять скатывается в обсуждение Rust vs. Go хочу напомнить что это слишком разные языки с разными целями что-бы их можно было свободно во всём сравнивать. Единственная область где их можно хоть как-то противопоставлять это вебдев, и то Rust, который продумывался как системный язык, на эту область совсем не ориентировался , что, впрочем, хипстеров не остановило и теперь на нём куча «веб-фреймворков».

Так скоро C с PHP будут сравнивать.

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

нужен ещё компилятор C++

Насколько я знаю - не нужен. Нужен только LLVM, который не «компилятор C++».

То есть Rustc не существует без C++.

Сам компилятор не содержит C++.

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

О какой гордости идёт речь? Я лишь указал, что Rust написан не на C++.

То есть не no_std Rust программы ещё и немного C программы.

no_std - это про другое. libc тут не при чём.

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

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

В Java есть генерики, а по деньгам даже смешно сравнивать.

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

Для таких редких случаев существует уже несколько генераторов кода на замену дженерикам.

В C вообще радных макросов хватало для дженериков.

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

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

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

Почему Rust написан на C++, а Go написан на самом себе?

Раст написан на самом себе, освежи свою память.

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

Потому что в Гоу нет ничего, а в Расте есть много чего.

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

Дык Go не умеет и 10% фич раста.

Не умеет синтаксического сахара или что-то принципиально не умеет?

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

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

На C++ написан только llvm и интерфейс к нему.

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

Потому что в Гоу нет ничего, а в Расте есть много чего.

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

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

происходит автоматом или через ?.

Ну справедливости ради, в Rust это появилось не так давно.

И, кстати, не уверен, что читаемость такого кода сильно лучше. Вопрос вкуса.

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

Нужен только LLVM, который не «компилятор C++».

Нужен только LLVM, который написан на C++

То есть Rustc не существует без C++.

Сам компилятор не содержит C++.

Это только Rust -> llvm ir компилятор возможно не содержит C++, а вот в компиляции Rust -> {инструкции для конкретной реальной машины} задействано много C++ кода.

Я лишь указал, что Rust написан не на C++.

Да, Rustc написан на Rust c использованием библиотеки написанной на C++.

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

Можно собрать rust с системным llvm, у меня так -dev собирается.

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

Ну справедливости ради, в Rust это появилось не так давно.

try! был с 1.0. Да - это макрос, но в Go и их нет...

Про вкус никто и не говорит. Я про количество кода.

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

А что в языках с прекрасными новыми исключениями как-то иначе?Например Java от Orcle машина просто вылетает с ошибкой :) Игнорируя ulimits, кстати.

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

Если он нужен, там где возникла ошибка, нужно сделать свой error, делов то.

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

Но обычно это не нужно, чтобы понять, что файл с таким-то именем не существует, трейс не нужен.

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

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

Любовь мозилы к закрытию проектов как-то препятствует гуглу, с теми же симпатиями, от закрытия Go?

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

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

А его там и не должно быть.

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

Ко ко ко Можно сколь угодно фантазировать, но что есть то есть. Го стал мейнстримом и заваевывает умы. Лучше язык с недостатками но пользователями и комьюнити чем матэматически выверенный никому не нужный язык

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

Зачем каждый раз собирать Qt?

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

Rust сильно зависит от LLVM. Go - абсолютно не зависит от рантайма компилятора, его можно собрать как в окружении (системного) LLVM/Clang, так и в окружении GCC.

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

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

Всё же это разные вещи.

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

свою libc, на своём же asm, как Go?

У Go нет libc написанной на асме, там только обёртки над сисколами где только функция 'syscall()' написана на асме для каждой платформы отдельно.
Хотел сказать что у очень хорошо спроектированного языка для системного программирования нет нормального, безопасного и самое главное эффективного интерфейса к системе.

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

Почему Rust написан на C++

https://github.com/rust-lang/rust Rust 95.8%. Где ты тут видишь c++?

Rust-1.19 собирается с помощью LLVM/Clang 4.0.1 уже больше часа и я не уверен, что я не прерву это досрочно

Тыж вроде хвастался что не используешь rust? Или у тебя мода такая - собирать rust двадцать раз в день?

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

Ну и имея свои обёртки над сиколами можно можно заодно и нормально реализовать std::thread который сейчас работает поверх глючной и медленной реализации pthreads из glib, тем самым став ещё быстее и безопаснее.

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

пересборка Qt-программ таким вот образом выливалась в ненужное напряжение железа

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

Rust сильно зависит от LLVM. Go - абсолютно не зависит от рантайма компилятора

Так и запишем: Rust не подходит фанатам сборки из сорцов.

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

нет нормального, безопасного и самое главное эффективного интерфейса к системе.

Go дёргает сисколы ядра, написанного на сишке. О какой безопасности речь?

эффективного интерфейса к систем

А за пределами std есть эта эффективность? Последний раз когда я смотрел, ffi был жутко затратным.

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

Тот счётчик не учитывает директорию src/libllvm.

Хотел скаать `src/llvm.`

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

На Rust написан только компилятор Rust -> llvm

И все бы так. В широкой перспективе полезнее испльзовать (а значит и развивать) gcc или llvm для кодогенерации, вместо того, чтобы каждый раз переизобретать велосипед.

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

Я и не претендую на обратное. Изначальный вброс был про то, что Rust написан на C++.

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

Go дёргает сисколы ядра, написанного на сишке. О какой безопасности речь?

А Rust дёргает функции libc которая дёргает сисколы ядра. В два раза небезопаснее

А за пределами std есть эта эффективность? Последний раз когда я смотрел, ffi был жутко затратным.

А когда ffi в Rust бы затратным?

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

Почитай, что я написал после этого своего «ошибочного» вопроса с утверждением.

Нет - я не собираю Rust каждый день. Но решил попробовать собрать свежую версию на фоне нового Go19. Ведь Rust будет включен в качестве build-зависимости с новыми версиями Firefox и больше не отвертишься от его сборки - ага, как Node.js для сборки Chromium/Iridium. Чёт мне это не нравится, когда новая версия Firefox или Chromium требуют присутствия Rust или Node.js на десктопе во время сборки. Лениво как-то сначала их ставить, а потом удалять (чтобы не пересобирать по часу) на очередной минорный релиз этих браузеров.

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