саша
напоминает динамическую или слабую типизацию. Сейчас флоат а потом бац - интежер.
По факту является обратным - сильной статической типизацией
Pawel
понял, спасибо
если бы вы видили в какой говнокод превращается работа со значениями таких типов на практике - развесистый паттернматчинг, ужасы с отбивкой пробелами при рефакториге, десяток враперов для простого инта и т.д. -, вы бы не благодарили
Alexander
на вики пишут, что это Дизъюнктное объединение, то есть общая часть отбрасывается и остается то, чего нет в первой + то , чего нет во второй?
Anonymous
По факту является обратным - сильной статической типизацией
суть понял, спасибо. Но зачем тогда нужна такая сильная статическая, когда логичнее отдельно пользоваться флоатом и интежером например?
саша
на вики пишут, что это Дизъюнктное объединение, то есть общая часть отбрасывается и остается то, чего нет в первой + то , чего нет во второй?
Значение типа суммы - это всегда значение типа + метка типа, от этого дизъюнктивное объединение, ибо количество значений для объединения типов A и B всегда равно сумме количества значений обоих типов.
саша
суть понял, спасибо. Но зачем тогда нужна такая сильная статическая, когда логичнее отдельно пользоваться флоатом и интежером например?
Бывают ситуации когда нужна возможность хранить где-то значение либо одного типа, либо другого. Например, типичная ситуация - обработка ошибок.
саша
конечные автоматы - тоже хороший пример
саша
Ещё один канонический пример - AST
Anonymous
конечные автоматы - тоже хороший пример
Честно говоря, для меня это похоже на теорию, которая применима нигде. В том смысле, что подходящих случаев ноль.
саша
Честно говоря, для меня это похоже на теорию, которая применима нигде. В том смысле, что подходящих случаев ноль.
Это типичное "я не знаю того, что я не знаю". Пока вы с этим не сталкивались и особо то и не знаете что это такое, поэтому и не понимаете зачем это нужно.
Alexander
Что за книгу?
ммм, проехали. я думал вы из скалоидов.
Pawel
Честно говоря, для меня это похоже на теорию, которая применима нигде. В том смысле, что подходящих случаев ноль.
подходящие случаи бывают на самом деле. они относятся матану и теории категорий на уровне докторской диссертации. Ни один из мальчиков, с упоением рассказывающих про ФП, об этом даже не догадывется)
Pawel
обычные проверки в сишном стиле вкупе с операторами if break return читаются на много проще чем паттерн матчинг типов сум. ФП в принципе не может ничего упростить - строго только усложнить. И для задач его применяют соответствующих
Pawel
нет, не видел. А что не так?
саша
обычные проверки в сишном стиле вкупе с операторами if break return читаются на много проще чем паттерн матчинг типов сум. ФП в принципе не может ничего упростить - строго только усложнить. И для задач его применяют соответствующих
Есть множество людей которые с вами не согласятся. Вообще читаемость в данном контексте крайне субъективна и очень зависит от бэкграунда каждого конкретного программиста.
Vladislav
Ну так посмотрите. Там объявление интерфейса с приватным методом, который ничего не делает. Потом на нужных типах эти методы «реализуют». И все для того чтобы в качестве аргумента можно было передать только конечное множество типов. А внутри касты интерфейсов к типам.
саша
Даже в сишке это делается не так костыльно
Vladislav
А в сочетании с утиной типизацией вообще невозможно найти все типы которые можно передать внутрь.
Anonymous
в смысле ? стейт-машины никогда не писали ?
ну, разве что свичами и иф-зенами.
Anonymous
Vladimir
Свитчем?? И кастом значения из "* void*?
Daniel
погодите
Daniel
вам по-любому нужен там switch или пачка if
Pawel
Вот именно. Можно подумать паттернамтчинг чем то лучше
Daniel
потому как параметр вы получили, но на разные параметры вам нужна разная обработка, правда?
Vladimir
потому как параметр вы получили, но на разные параметры вам нужна разная обработка, правда?
Да, все верно. Просто парень выше говорит, что паттерн метч - говно не читабельное
Vladimir
Так если тот же свитч, только безопасный, в чём не читабельность?
Pawel
Я так регулярно делаю в случаях работы с деревьями с разнотипными нодами. Switch, даункаст из интрфейса (не пустого). Ни разу проблем не возникало. Никакие стат. гарантии на фиг не впёрлись. Проблема высасона из пальца
Daniel
но вот то, как именно реализуется этот самый тип-сумма в го - это мерзко. я вот только что (позавчера) нарисовал сообщения, которые у меня уходят в канал, и каждое реализует пустой метод IAmCommand
саша
Vladimir
Но ладно, раз стат гарантии не нужны - тут все понятно, зачем тогда вообще брать язык компилируемый? На питончике ж быстрее кодится, ещё меньше гарантий
Daniel
коллега, хватит вот этого, а?
Daniel
нет, на питончике не быстрее
Daniel
и нет, не всем нужны эти самые гарантии
Daniel
вожно понимать, зачем нам вообще нужна статическая строгая типизация
Daniel
вот вам - зачем?
саша
вот вам - зачем?
Чтобы проще было писать, читать и поддерживать.
Vladimir
вот вам - зачем?
Сильная типизация позволяет часть контрактов протолкнуть на уровень компилятора
Pawel
Если вы меня спрашиваете - то мне проще код читать со стат. гарантиями.
саша
это общие слишком слова
тогда > Сильная типизация позволяет часть контрактов протолкнуть на уровень компилятора благодаря этому мне проще писать, читать и поддерживать код, т.к. контракты описанные в документации устаревают(если они вообще описаны), а без контрактов в языке компилятор просто не скомпилирует код
Daniel
понятно
Daniel
так вот
Daniel
существует масса способов написать херню
Daniel
и, к сожалению, 90% херни появляются на этапе модификации ПО
Vladimir
это самоцель?
Ну вообще это промежуточный уровень. Дальше логика такая же как с любыми контрактами - код присказуемее, легче расширять, легче интегрировать.
Daniel
и статическая строгая - она часть этой херни написать не позволяет
Daniel
самую простую херню она останавливает
Daniel
но - останавливает
Daniel
путем - та-дам - УСЛОЖНЕНИЯ написания кода
Daniel
не облегчения, и увеличения удобста
Daniel
усложнения самого процесса создания ПО
Daniel
ы?
саша
усложнения самого процесса создания ПО
тех самых 10% за которыми последует 90% модификации?
Daniel
всех 100%
Vladimir
Ну смотри, кто-то написал вебырецмворк, у которого есть метод "ендпоинт" с внутренними контрактами, но эти контракты не покрыты, он написал его очень быстро, но при этом все юзера страдают. Ну и такое же представь, только альтернативный вариант.
Daniel
и, в общем, похер уже, как именно выглядит конкретный синтаксис конкретного языка
саша
всех 100%
Но строгая статическая типизация упрощает написание и рефакторинг кода, когда кода становится много
Daniel
Но строгая статическая типизация упрощает написание и рефакторинг кода, когда кода становится много
не упрощает. усложняет. но усложняет написание херни существенно больше, чем написание совместимого кода
Daniel
совместимую херню при этом можно продолжать писать, ни что не мешает
Pawel
Если конмпелятор гарантирует целостность switch-а по всем веткам - это хорошо, Но в Го он всё равно не гарантирует, даже в случае IAmComand. Не сказал бы я что это вызывает сильную боль
саша
не упрощает. усложняет. но усложняет написание херни существенно больше, чем написание совместимого кода
Так, стоп, я вот рефакторил библиотеку на расте и обновлял зависимости. После написания кода я просто прошёлся по всем ошибкам компиляции и поправил их. Это при том, что зависимости обновились нехило так, вплоть до перехода с однопоточного евентлупа на тредпул
Daniel
и?
саша
и?
Если бы не компилятор, который подсказал мне где и что не так, то я бы потратил на это значительно больше времени, отлавливая баги в рантайме.