LINUX.ORG.RU

Go 1.13

 


1

5

Вышел язык программирования Go 1.13, основные нововведения:

  • Язык Go теперь поддерживает более унифицированный и модернизированный набор префиксов числовых литералов, в том числе для двоичных, восьмеричных, шестнадцатеричных и мнимых литералов.
  • Совместимость с Android 10.
  • Поддержка TLS 1.3 включена по умолчанию в пакете crypto/tls.
  • Поддержка Error wrapping.
  • Unicode 11.0 теперь доступен из пакета Go Unicode.

Это последний выпуск, который будет работать на Native Client (NaCl).

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

★★

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

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

It should be noted here that exceptions can be implemented with zero cost in the non-error case — and some C++ compilers do this. The cost comes at throw time and involves table lookups.

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

го в принципе мог бы козырнуть нулевой стоимостью при дефолтном пути и около-нулевой стоимостью разворачивания стека (но не сборки мусора). но в любом случае исключения генерируют мусор.

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

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

zero cost - это вообще такой маркетинговый приём типа «без гмо». создаёт видимость того, что у других «с гмо». его просто лепят везде, если речь идёт про zero cost, то 99.999999% это фуфло.

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

Если нет, то просто билдишь под арм и запускаешь, никакая поддержка и JNI не нужны.

Там полная статика поддерживается или завязка на бионик?

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

На андроиде с помощью Go из репозиториев Termux у меня не получилось собрать что-либо с флагом CGO_ENABLED=0. Думаешь, они бионик в 10 версии сломали и понадобилась «поддержка»?

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

Был интересный тред в девелопменте, где den73 эмулировал ексепшоны на паниках из Го. Волне нормальные ексепшоны получились.

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

Очередное бессмысленое поделие на jvm (я знаю про натив) на которое слетелись мухи. Ничего нового и полезного там нет, а сам язык довольно неказистый. Ответ на вопрос «зачем» — один единственный — «чтобы не не пистаь на джаве», так себе обоснование существования язычка.

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

У крестов с 11 стандарта исключения zero-cost при дефолтовом пути

Почему с 11-го? Это от стандарта не зависит, афаик. Зависит от реализации.

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

Ну я вижу, что в кросс-таргетах есть linux/arm, но что это именно за arm? armel? armhf? Пока не попробуешь, не узнаешь.

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

zero cost - это вообще такой маркетинговый приём типа «без гмо». создаёт видимость того, что у других «с гмо»

Так и есть, почти у всех языков абстракции не zero cost. А конкретно исключения и в C++ раньше всегда были платные.

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

Не поделишься чем строки лучше полноценных объектов исключений?

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

Да, таки сработало под armhf:

$ env CGO_ENABLED=0 GOARCH=arm GOOS=linux GOARM=7 GOPATH=$(pwd) go build

$ file arkov
arkov: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped

$ adb push arkov /data/local/tmp/

$ adb shell
root@Nokia 8110 4G:/ # cd /data/local/tmp/                                     
root@Nokia 8110 4G:/data/local/tmp # ./arkov
NAME:
   exercismarkov - Create fake exercism nitpicks

Спасибо. А для стрипа сразу можно правило указать?

Upd: сам нашёл: env CGO_ENABLED=0 GOARCH=arm GOOS=linux GOARM=7 GOPATH=$(pwd) go build -ldflags="-s -w"

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

Лол, вот это просвещение, половина относится только к плюсами и немного к джаве, а другая половина тупо для воды, типа нет документации на исключения или нет «структуры». Последнее вобще относится ко всему проекту но автор заострил внимание тупо на исключениях. Кароче неосилил, ну удачи ему со строками, что еще сказать, назад в 80ые.

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

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

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

А мужики то и не знают. Просветишь?

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

Joe_Bishop
()

дропнули поддержку Windows XP и Vista.

как и прочие хипсторские язычки типа раста.

Лишь C и C++ вечен, С++20 компиляторы есть и для DOS и для Windows 95 и для всего остального(типа оригинальных Mac на мотороловских процах)

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

как и прочие хипсторские язычки типа раста

Дропнута поддержка std, а не языка.

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

дропнули поддержку Windows XP и Vista.

долго держались, ведь микрософт ещё раньше дропнул

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

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

во-первых это, в определённом смысле, не raii. во-вторых эта лапша плохо оптимизируется. ну и вообще лапша - это лапша. это конечно не такая лапша как асинк, но всё равно лапшисто.

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

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

Проблема найти, в какой catch блок надо придти, потому что тип исключения динамический, и надо на каждый вариант делать проверку через rtti. Поэтому весь процесс ловли исключения мало того, что не быстрый, не прогнозируемый (может легко занять в 100-1000 раз больше времени, чем просто вывалиться). Именно поэтому исключения забраны забанены в hard realtime софте.

Очень хорошие описаниет проблемы Сатттер и Niall Douglas сделали в своем предложении детерминистичных безоверхедных исключений (ловить не по типу, а по значению, которое 2 слова. Что-то типа «если вернулся -1, то проверить errno»). Может в какие-нибудь 22е плюсы и добавят...

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

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

Спасибо, поржал. И часто у тебя, скажем, ядро обрабатывает ошибки типа «файл не найден»? Они ж именно там и возникают.

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

компилятор это всё может выяснить во время компиляции, дальше в рантайме обычный поиск в таблице по типу выброшеного исключения. но речь шла не про это, чувак из фейсбука в видео показывает «zero cost exceptions» и там на дефолтном пути типа нет лишних инструкций. просто офигительное достижение и мегаоптимизация которую никто раньше не видел и которая всё изменит (на самом деле нет). cost конечно же возникает когда исключение выбрасывается, а не когда не выбрасывается.

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

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

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

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

он учит людей писать говнокод

Согласен.

Владимир

anonymous
()

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

По итогу голосования среди петухов в Го теперь подвезли всякое говно типа 0o644, и 0b0110. Скачал бинарь и блеванул на него.

Поддержка Error wrapping.

Ага, ещё один тупизм, сигнал о сливе Го на дно. Т.е. ошибку можно завернуть в ошибку, но варианта со списком равнозначных ошибок нету.

kostyarin_ ★★
()

os.UserConfigDir

Неплохо конечно, только это дерьмо пихнули в os а не в os/user потому что os/user в то время не был совместим с cgo и эту совместимость туда же добавили.

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

Индустрия лол. Простейший пример: dgraph против orient DB или neo4j.

  1. dgraph младше, написан при этом как полное Г., но не падает, в отличии от глючного ориент дебе.
  2. dgraph младше, написан при этом как полное Г., но не падает, в отличии от глючной неы 4жо.
Joe_Bishop
()
Ответ на: комментарий от kostyarin_

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

Смысл следующий:

func As(err error, target interface{}) bool

а на деле target должен быть указателем на значение типа реализующего error, а иначе будет паника.

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

Ничего нового и полезного там нет, а сам язык довольно неказистый.

То что нужно для продакшена!!11

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

Потому что вы наслушались пропаганды.

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

Можно. Пока не попадёшь в нормальную команду.

Пункт 1. Командир всегда прав

Пункт 2. Если командир не прав, см. пункт 1

Ты почитал статейку-то? С перечнем ненормальных команд, которые сеют панику в тысячах мест?

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

Был интересный тред в девелопменте, где den73 эмулировал ексепшоны на паниках из Го. Волне нормальные ексепшоны получились.

Да там ничего эмулировать не надо. Паника - это ровно и есть exception, причём даже в чём-то получше сконструированный. Просто её назвали по-другому, чисто из идеологических целей.

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

И дело как раз в небрежной обработке ошибок, к которой предрасполагают исключения.

ну мне серьёзно интересно. Покажи пожалуйста популярный код на go, где ошибки нормально обрабатываются. Обработать их можно, я не спорю. Но где реально это сделано?

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

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

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

КВН отдыхает :)

Просвещайся: https://mortoray.com/2012/04/02/everything-wrong-with-exceptions

Этот же человечек написал статью:
Why switch is better than if-else

Мой тебе совет, прочитай вот это
https://i.pinimg.com/originals/66/fe/3c/66fe3c34ea8f166784399cf3fa856215.jpg

PS Диванным программистам обязательно нужно что-то, что бы объяснить почему они не могут просто писать рабочий код в срок.
С Java столько людей пытались перейти на «более выразительные языки», groovy, scala теперь вот еще kotlin
- результат всегда один и тот же (никакой).
Проблемы, которые решает не диванный программист не лежат в области написать на два символа больше или меньше, иначе бы unzip был бы самым популярным препроцессором. Проблемы в правильной объектной декомпозиции, алгоритмах, интеграции (на которую многие тратят более 50% времени) и тестировании.

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

Этот же человечек написал статью:
Why switch is better than if-else

И что? Он прав.

Владимiр

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

Это явная обработка ошибок

В чём здесь состоит обработка?

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

Внимательно читал эту чушь, но после «bulky syntax» терпение лопнуло, вкладку закрыл, понятно, что там вода одна. Да там вообще никакой критики нет. Там смех один. Надо быть дебилом чтобы такое писать.

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

И дело как раз в небрежной обработке ошибок, к которой предрасполагают исключения.

Бред какой-то

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

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

Так это огромный плюс как раз и вообще замечательно.

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

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

Ахахаха. Смешной.

Объясняю:

Исключения - это явная обработка ошибок, таким образом в какой-то момент тебе всё равно придётся её обработать.

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

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

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