саша
жяль, что не все понимают, что лишнее (не нужное) - это тоже тяжелая работа :(
Не хочешь, не пользуйся лишним, не тебе же компилятор писать и поддерживать
Алексей
(a, b, c) - кортеж type SType enum { Int int String string Nothing } s := SType.Int(5) switch s { case SType.Int(i): ... case SType.String(str): ... case SType.Nothing: ... }
ааа, то есть если мы сейчас пишем if err != nil { return err }, то с adt мы сможем писать здоровый switch вместо этого
Алексей
прям отлично
Алексей
С адт не проблема добавить оператор ?
да и сейчас не такая уж проблема на самом деле, только всё равно не добавляют
саша
почему?
Что делать, если возвращаемых значений несколько? А если ошибку надо преобразовать?
саша
И ещё какие-то корнер кейсы были, из кстати тут же обсуждали
Алексей
ну вообще да, есть корнер кейсы, но их не так уж и много
Алексей
но был где-то даже issue на гитхабе
Алексей
который как раз предлагал ввести оператор позволяющий преобразовать ошибку перед возвратом
Алексей
правда я его не найду сейчас скорее всего
саша
ну вообще да, есть корнер кейсы, но их не так уж и много
С генериками, адт, интерфейсами и их частичной автоимплементацией корнер кейсов не будет совсем
саша
а ещё, помню в русте было интересное RFC с таким синтаксисом: let SType::Int(i) = s else { ... };
саша
типа если значение сматчилось, то всё ок, идём дальше, иначе исполняется блок кода после else
Алексей
С генериками, адт, интерфейсами и их частичной автоимплементацией корнер кейсов не будет совсем
и ни каких проблем бы не было изначально, если бы в go ввели всё таки исключения
саша
на го это бы выглядело как-то так SType.Int(i) := s else { ... }
Алексей
так и так приходится пробрасывать ошибки вверх по стеку
Алексей
по любому
Алексей
только в Go это делается либо руками
Алексей
либо через исключения для бедных (panic/recover)
саша
хотя в го конечно тоже не очень, по сути в го альтернатива unchecked ексепшнам, что такое себе
саша
либо через исключения для бедных (panic/recover)
они не бесплатные, собственно как и обычные исключения
саша
а ещё они способствуют написанию кода игнорирующего ошибки совсем
Алексей
хотя в го конечно тоже не очень, по сути в го альтернатива unchecked ексепшнам, что такое себе
многие считают наоборот как раз, что джавовские checked эксепшены - это зло
Алексей
они не бесплатные, собственно как и обычные исключения
сборка мусора к примеру тоже не бесплатна, совершенно не бесплатна
саша
зло это когда из сигнатуры функции нельзя понять, может ли она выкинуть ексепшен/вернуть ошибку или нет
Алексей
любая функция
саша
хотя по мне когда нельзя понять из сигнатуры чистая функция или нет - это уже зло
Алексей
и в го тоже кстати
Алексей
любая функция может вызвать panic
Диёр
тогда на хаскеле пиши
Там тоже самое)
саша
любой код всегда может выкинуть ошибку
ну тут нужно понимать разницу между паникой из-за переполнения стека или из-за того, что ОС приказала упасть и обычной ошибкой, которая должна быть обработана
саша
Там тоже самое)
как же, там все нечистые функции имеют тип IO a
Диёр
как же, там все нечистые функции имеют тип IO a
Там чистая функция тоже может упасть.
Алексей
Там чистая функция тоже может упасть.
кстати да, что-то такое припоминаю
саша
Там чистая функция тоже может упасть.
ну это да, к сожалению бывают программисты, которые абузят боттом в хаскеле
Диёр
Даже банальное деление на 0
Алексей
И вообще я убеждён, что разделение ошибку на фатальную и не фатальную - уже не очень хорошая вещь
саша
Даже банальное деление на 0
перед банальным делением на ноль нужно всегда проверять знаменатель
саша
Не все же проверят
да, собственно, если бы все всегда проверяли всё когда нужно, то немалая часть плюсов статической строгой типизации бы отпала
Алексей
Не, точнее есть уж совсем фатальные ошибки, типа кончился стек, кончилась память, после которых скорее всего просто невозможно восстановиться
aadz
перед банальным делением на ноль нужно всегда проверять знаменатель
Нет, не нужно! Тут полно паарней, которые были бы счкстливы дженерикам, и чтобы деление на ноль проверялось в рантайме, а программы работали бы, словно на ассемблере под процессор писаные
aadz
да ничего не нужно. выдумки это все
aadz
Go - нормакльный язык!
aadz
в смысле, годный
Алексей
Вообще реально, обработка ошибок в Go - это самая больная вещь, которая на мой взгляд сильно мешает нормальному процессу кодинга на Go. То как это сделано сейчас - не в какие рамки не лезет. Вот поэтому мой первый петпроджект на Go, который я сейчас пишу станет последним. И писать я на этом языке, плодящим копипасту я больше не буду.
саша
для системных администраторов - может быть, для программистов, которые какие-то непростые задачи, которые ещё никто нормально решил, решают, нет
Алексей
да
Алексей
причём "обработка" - это громко сказано
Алексей
потому что в 90% случаев это просто проброс выше по стеку
Алексей
потому что как правило ошибка не может быть полностью корректна обработана в том месте, где она возникла
Алексей
потому что если бы это было не так, то такой вещи как "исключение" вообще бы не существовало ни в одном языке
саша
явная обработка ошибок - это плохо? Мешает кодингу?
Проверить есть ли ошибка и вернуть - это обработка? Почему это операцию нельзя было уместить в один символ вместо 3-х строк, если она такая частая?
aadz
Алексей, обработака ошибок - это не громко сказано. Просто это твоя работа, а не громко сказано. Никто не мешает не обрабатывать - сам будешь виноват, как программист
Алексей
чего?
aadz
того! Тебя, тупиздень, заставляют проверять ошибки
Алексей
я вообще про то, что в большей части кода ошибка просто не должна обрабатываться, а должна быть тупо проброшена вверх по стеку
Заур
Алексей
того! Тебя, тупиздень, заставляют проверять ошибки
НЕЕЕЕТ! Меня заставляют ПОСТОЯННО проверять ошибки. Во всех местах, просто во всех, а не только в тех, где их действительно нужно и вообще возможно обработать
aadz
ДА
Алексей
Причём как правильно упомянул другой Александр, если бы меня заставляли бы для этого писать лишь один символ, то я бы и не бомбил сейчас здесь в чате
Алексей
но приходится постоянно КОПИПАСТИТЬ одинаковые if
Алексей
вот в чём проблема
Alexander
Коллеги
aadz
Коллеги. а зачем вам Go?
Alexander
Дискуссия уж очень жаркая стала. Сейчас админы набегут
Constantine️
я тут
Алексей
Коллеги. а зачем вам Go?
Мне вот он нужен для моего проекта, потому что у него есть замечательные и нужные мне горутины
Constantine️
кого-то надо банить?