LINUX.ORG.RU

Go 1.6.2

 


0

2

20 апреля вышел релиз языка Go 1.6.2 с исправлением критических ошибок из 21 отчёта в:

  • компиляторе, среде выполнения, утилитах, документации
  • пакетах mime/multipart, net/http, sort.

>>> Закрытые отчёты об ошибках

★★★★★

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

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

Ну так это и есть перспективность ЯП. Пистон, жаба, теперь го. А ты знаешь другую метрику перспективности?

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

ну, а если если серьезно - какова его гибкость, возможность адаптации под новые вызовы?

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

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

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

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

Почему сразу тупые школьники? Может людям реально хочется поэкспериментировать. Сидел человек, писал код и думает — а что будет, если выкинуть эксепшены? А давай сделаем такой язык и посмотрим, насколько удобно на нём писать. Не зря же у языков выходят ломающие изменения в новых версиях — сначала придумали новую концепцию, а потом в процессе использования оказывается, что это не так и того не хватает, приходится выпускать новые версии.

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

а что будет, если выкинуть эксепшены?

И что будет? Чем какой-нибудь тип Error? = Some val ⋁ Error err, ну или тот же гошный err код хуже эксепшнов? Кроме того, что (ужас какой) позволяют писать более безопасный код, а также положительно влияют на производительность?

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

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

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

а go это уг.

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

Ну так это и есть перспективность ЯП. Пистон, жаба, теперь го. А ты знаешь другую метрику перспективности?

this

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

Чем какой-нибудь тип Error? = Some val ⋁ Error err, ну или тот же гошный err код хуже эксепшнов?

Тем что если ты вызвал его через 100 функций, а обработать нужно наверху, то тебе на каждом уровне надо писать этот Some val ⋁ Error err. Куча лишнего кода.

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

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

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

это-же полная жесть. хуже питона. как он собирается потеснить с/с++

Это рынок. Будет спрос – вытеснит. Но только не С, ибо там он вообще не конкурент. Ссылку на githutinfo уже давали (http://githut.info/)

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

Куча лишнего кода.

Какого лишнего кода? В твой любимый язык паттерн матчинг не завезли? Ты хочешь автоматического проброса исключения по стеку на 100 уровней вверх? Ну привет небезопасный говнокод, о том я и говорил. Эксепшн = goto в совершенно неизвестную заранее точку в программе. return хоть возвращается тому, кто вызвал, а это вообще жесть.

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

Какого лишнего кода?

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

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

o\

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

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

Тогда пусть напишут, как пробросить ошибку на 10 уровней вверх по стеку, кроме if-else на всех уровнях.

В го - только через жопу. В rust так: let data = try!(get_data()); Ну а макрос try!() развернётся match, который извлечёт результат успешного исполнения из Result<r,e>, либо выйдет из текущей функции, вернув Result<r2, e2> с ошибкой, возможно сконвертив e в e2, случае если это разные типы.

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

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

То есть язык заставляет тебя обрабатывать ошибки, это плохо?

o\

Разучился по-человечески писать? Ты знаешь, куда вернется управление, если ты выбросишь исключение? Ты знаешь, на каком уровне его обработают, смогут ли его обработать? На, просветись, «умный»:

http://www.lighterra.com/papers/exceptionsharmful/

http://www.stroustrup.com/except.pdf

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

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

Ну дак вот изучи githut.info повнимательнее. Для 22к+ и 2009 года это довольно показательно, каким бы тебе ЯП не показался.

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

Это рынок. Будет спрос – вытеснит. Но только не С, ибо там он вообще не конкурент. Ссылку на githutinfo уже давали (http://githut.info/)

так это наоборот - проходящее, а не перспективное. какие перспективы у джаба?

и потом - рыночные аллегории тут не при делах. для нового языка нет никакого рынка. это революционная инновация. рынок под нее только надо создать.

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

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

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

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

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

Мне вот в чем-то и жаба бесит, но это не значит что ее уровень в ынтыпрайзе можно оспаривать.

если короче сказать - «оспаривать go - богохульство» ?

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

если короче сказать - «оспаривать go - богохульство» ?

Нет, просто это значит что безосновательно лучше не богохульствовать. Можно сказать «ЯП - УГ». Но нужны аргументы ж. xD

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

Можно сказать «ЯП - УГ». Но нужны аргументы ж. xD

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

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

ЯП говно, но поскольку он будет продавливаться корпорацией и адептами в интырпрайс с этим приходится мириться.

Ну вот еще. Это не показатель «говняности» языка. По таким критериям почти все ЯП говно, за исключением парочки действительно добротных.

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

То есть язык заставляет тебя обрабатывать ошибки, это плохо?

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

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

Суть именно в том, что тебе не нужно этого знать. Ты сообщил об ошибке, а дальше кто-то где-то её обработает.

Угадай, умный, почему тупые людишки из комитета С++ не сделали автоматический проброс исключений?

Что, там тоже надо на каждом уровне ловить?

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

Что, там тоже надо на каждом уровне ловить?

А, мамин жаба-гений познает мир.

а дальше кто-то где-то её обработает.

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

So if you're in the middle of modifying data, and an exception occurs, you could easily end up leaving the data in a half-baked state. That is really, really dangerous, because it invites the possibility of silent data corruption. In most cases, any clearly visible error signal, even program termination, is by far preferable to the possibility of silent data corruption. And exception handling simply isn't a clearly visible error signal. Most of the calling code can, and does, simply ignore exceptions, assuming some code further back will catch and handle them.

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

So if you're in the middle of modifying data, and an exception occurs, you could easily end up leaving the data in a half-baked state.

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

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

вызвал эксепшен

В том-то и проблема: я его не вызывал, он сам может вылететь откуда угодно с какого-нибудь нижнего уровня.

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

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

В том-то и проблема: я его не вызывал, он сам может вылететь откуда угодно с какого-нибудь нижнего уровня.

Может. И в чём проблема?

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

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

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

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

Так а в каких популярных языках есть проброс исключений по стэку?

Тем что если ты вызвал его через 100 функций, а обработать нужно наверху

Сам же вскукарекнул, давай посмотрим.

В си, го, си++, rust, swift, обжектив си, пистон — этого нет. Там, где исключения есть, их все равно нужно обрабатывать и явно передавать наверх, если хочется. Чем в этом смысле го отличается от с++/python, если там исключения — тот же возврат ошибок, разве что еще положить программу могут?

Может. И в чём проблема?

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

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

Так а в каких популярных языках есть проброс исключений по стэку?

Как минимум питон ещё. Другие я глубоко не изучал, не могу сказать.

В си, го, си++, rust, swift, обжектив си, пистон — этого нет. Там, где исключения есть, их все равно нужно обрабатывать и явно передавать наверх, если хочется.

Да ну. Усомнился, проверил прямо сейчас в питоне. При стеке f1 <- f2 <- f3 и возбуждении исключения в f1 его можно поймать в f3, а f2 ничего о нём не знает.

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

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

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

Тебе не нужно ничего ожидать.

Всмысле не нужно?

Вот у тебя код:

data1.modify()
data2.modify()
data3.modify()
data1.save()
data2.save()
data3.save()

Что произойдет, если data2.save() вывалится с исключением? Что произойдет с потоком исполнения, куда ты попадешь? Что будет с данными, какая часть данных будет записана?

anonymous
()

Эффективные менеджеры из Гугла настаивают на том, что Go хороший язык!

anonymous
()

Очень приятный язык в чем-то сходный по духу с поздними виртовскими языками, но только учитывающий современные реалии. То есть, например, исходники из книжки Разработка операционной системы и компилятора Вирта и Гуткнехта прекрасно перекладываются на го в уме прямо с листа.

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

Что произойдет, если data2.save() вывалится с исключением? Что произойдет с потоком исполнения, куда ты попадешь? Что будет с данными, какая часть данных будет записана?

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

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

Что произойдет с data3? Будет ли data3 записана, если при data2 вылетит исключение? Будет ли data1 записана?

то ты можешь обработать эксепшен так же

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

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

Что произойдет с data3? Будет ли data3 записана, если при data2 вылетит исключение? Будет ли data1 записана?

Я же ответил: это зависит от того, используешь ты транзакции или нет.

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

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

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

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

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

Образ предсказуем, он зависит от обработчика.

Образ будет предсказуем только в одном случае: если ты каждый вызов функции обернешь в try/catch.

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

Я же ответил: это зависит от того, используешь ты транзакции или нет.

При чем тут транзакции, ты тупой что ли? Ну очевидно же, что data1 запишется, потому что оно записалось до исключения, data3 — нет, потому что data2.save() выкинет исключение. Вопрос был не про data2, а про код, который идет после исключения. Ты же умный, знаешь, как столько языков исправить, а вопрос прочитать не в состоянии.

Вопрос на засыпку, почему в с++ нельзя выбрасывать исключения в конструкторе?

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

Ну очевидно же, что data1 запишется, потому что оно записалось до исключения

Нет, транзакция откатится и ничего не запишется.

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

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

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

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

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

Ну если у тебя даже в рамках одной функции творися непойми что, то что говорить о проекте?

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

Тогда пусть напишут, как пробросить ошибку на 10 уровней вверх по стеку, кроме if-else на всех уровнях.

Не проектировать как мудак, очевидно же!

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

почему баги закрытые?

Надо в FSF написать! Надо общественность растревожить!

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

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

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