Aleksei (astynax)
ах да, есть ещё "утиная типизация", которую легко спутать с динамической или со слабой
утиная в большей степени и имеет смысл в условиях динамических типов - в рантайме объект может доказать, что гож
Евгений
ты экстраполировал с одного на другое
Я не экстраполировал, я рассмотрел их общие свойства (которые объективно есть)
Aleksei (astynax)
что ты имеешь в виду?
В питоне всё что угодно "имеет смысл" в булевом контексте - bool(any) сработает всегда
Alexander
Ближайшие конференции: Ноябрь ?? - Москва, в Kaspersky https://mobile.twitter.com/cblp_su/status/912940905757396992 Декабрь 2 - Москва fpconf http://fpconf.ru/ Декабрь 17 - F(by) Conf http://fby.by
Andrei
@cblp "Строгая" == "Сильная" == "Strong" в паре с "типизация", смирись уже (я вот мирюсь) :) "Строгая динамическая типизация" - уже устоявшееся словосочетание, пусть и неверное.
Сильная и строгая разные вещи. Сильная — это когда нет имплицитного каста, строгая, это когда тип вычисляется раз и навсегда (в компайлтайме)
Aleksei (astynax)
Строгая==Статическая, что ли?
Andrei
Да.
Cheese
первый раз такую интерпретацию слышу
Cheese
зачем называть статическую строгой?
Alexander
эм?
Alexander
>>> a = "a" >>> a+1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects
Alexander
строгая, динамическая
Alexander
переменная a имеет "runtime-тип" str
Cheese
строгая, динамическая
не строгая, а сильная
Aleksei (astynax)
В питоне переменная не имеет типа. Объект, на который она ссылается, имеет
Alexander
ок, strong
Alexander
что такое переменная?
Cheese
стронгая типизация, ага
Aleksei (astynax)
имя-ссылка
Cheese
в строко типизированном языке
Aleksei (astynax)
String dynamic typing - знакомая штука
Alexander
врочем сейчас открыл tappl и потом тырнеты и не нашёл на что согласться говоря про строгая
Aleksei (astynax)
В бейсике, кстати, типизация strong :) Строки с чиселками не складываются ну никак
Aleksei (astynax)
А вот переменные не знают о типе содержимого, поэтому все ошибки типизации - только в рантайме
Alexander
ну считать ли теги типами вопрос открытый
Alexander
и согласно таплу это не хорошо, но исторически сложилось
Alexander
так что я думаю эту часть дискуссии можно в очередной раз не развивать?
Aleksei (astynax)
можно не развивать, это правда
Зигохистоморфный
https://github.com/mckayb/phantasy-recursion-schemes/blob/master/src/functions.php :D
Зигохистоморфный
кто поведает мне о loeb / moeb ? зачем и почему?
Зигохистоморфный
в линзах есть cosmos зачем?
Aleksei (astynax)
там ещё и базар есть :)
Дима
Питон чутка сильнее чем ЖС
До тех пор пока к жс не подключается современный стек
Дима
В flowtype мощный статический type inference
Дима
Причём выводится без хаков, через честные bounds. Ковариантность, контрвариантность в комплекте. Динамические хаки языка — за бортом
Дима
Aleksei (astynax)
В flowtype мощный статический type inference
Это просто в питоне за пределами PyCharm можно сказать нет стат анализа.
Aleksei (astynax)
Но покуда сам язык слабый, всегда остаётся вероятность пропустить багу из-за недостаточного ума анализатора
Aleksei (astynax)
Так что "сначала напишем, а потом анализатор прогоним" работает плохо, ибо "потом прогоним анализатор" выливается в "тут-то точно всё ок будет, поэтому поставим игнор-коммент"
Дима
Весь код by default считаем забагованным пока не доказанно обратное Так как можно из любого mixed пошагово вывести доказательство корректности любого разумного типа, то это вполне естественная рабочая ситуация
Дима
Как винить производителей ножей, что ими не только картошку чистят
Aleksei (astynax)
Если есть язык, где нельзя выключить статическую типизацию и прострелить себе всё, то лучше использовать этот язык
Дима
А то unsafeCoerce, не комильфо как-то
Alexander
да ладно
Alexander
-defer-type-errors
Alexander
и вперёд
Alexander
qnikst@qwork ~ $ cat 1.hs i :: Int i = 1 s :: String s = "s" p :: Bool p = i + s main = print p qnikst@qwork ~ $ ghc 1.hs -fdefer-type-errors -fforce-recomp [1 of 1] Compiling Main ( 1.hs, 1.o ) 1.hs:8:5: warning: [-Wdeferred-type-errors] • Couldn't match expected type ‘Bool’ with actual type ‘Int’ • In the expression: i + s In an equation for ‘p’: p = i + s 1.hs:8:9: warning: [-Wdeferred-type-errors] • Couldn't match type ‘[Char]’ with ‘Int’ Expected type: Int Actual type: String • In the second argument of ‘(+)’, namely ‘s’ In the expression: i + s In an equation for ‘p’: p = i + s Linking 1 ...
Дима
Тоже хороший вариант, да)
Alexander
вон скомпилялось
Alexander
qnikst@qwork ~ $ ./1 1: 1.hs:8:9: error: • Couldn't match type ‘[Char]’ with ‘Int’ Expected type: Int Actual type: String • In the second argument of ‘(+)’, namely ‘s’ In the expression: i + s In an equation for ‘p’: p = i + s (deferred type error)
Alexander
ошибки типов в рантайме, все как у взрослых
Alexander
• Couldn't match type ‘StM m ()’ with ‘()’ Expected type: IO (StM m ()) Actual type: IO () ну вот опять : (
Alexander
при MonadBaseControl IO m
Alexander
и StM IO () ~ ()
Anatolii
ошибки типов в рантайме, все как у взрослых
промышленный язык получился, и быстро разработка будет идти
Дима
Придётся всё на MLTT переписывать
Anatolii
@qnikst а я правильно понимаю что UnliftIO сномановское решает туже проблему что и MonadBaseControl ?
Alexander
без понятия
Alexander
это moand-control без автовывода и только над IO ?
Anatolii
я насчет первого не очень понял
Alexander
хотя тут ошибка по делу
Alexander
правда не понимаю почему оно работало до этого
Alexander
@cblp_su помнишь на на monad-control ругался
Alexander
я нашёл у себя проблему похоже
Alexander
правда я теперь не понимаю, почему оно раньше работало
Alexander
я ещё минимальный case говорил что покажу
Alexander
у меня withAsync не работало, когда поидее конексты все определяются
Cheese
а, это
Cheese
ты ругался, что сообщение об ошибке не соответствует реальной ошибке
Alexander
да
Alexander
это основной point
Alexander
он остается
Alexander
ура
Влод
ассемблер — абсолютно слабый
Ну он хотя бы не приводит всё к строке