@haskellru

Страница 438 из 1551
Aleksey
27.09.2017
06:37:06
Ага

Автоматическое приведение типов, не являющихся сродными, я бы сказал - целые с вещественными взаимопреобразовывать многие статические языки умеют :)

Евгений
27.09.2017
07:22:06
Автоматическое приведение типов, не являющихся сродными, я бы сказал - целые с вещественными взаимопреобразовывать многие статические языки умеют :)
А есть какие-то языки с автоматическим приведением, в которых какие-то сложные типы приводятся автоматически? Максимум что я видел — из сложного типа данных в строчку и обратно

Google
Aleksey
27.09.2017
07:27:15
"сродные", это не очепятка была. Имел в виду "родственные типы" - как целые и дробные, т.е. "чиселки"

"Сложные типы" к булеву значению, например, много где приводятся - ссылка на объект не null, значит "True" :)

Aleksey
27.09.2017
07:29:07
Кстати да, в JS вообще всё к строке приводится - отсюда "[object]"

Евгений
27.09.2017
07:29:25
Ну приведение к строке как раз много где есть

Yuriy
27.09.2017
07:29:30
в Перле между скалярами скалярами и списками автоматическая конверсия, если я правильно помню

во всех ООП языках автоматическое приведение вверх по наследованию и иногда вниз

Aleksey
27.09.2017
07:30:13
Ну приведение к строке как раз много где есть
неявное приведение к строке есть не везде. Много где есть .toString(), это верно

Евгений
27.09.2017
07:30:57
Но например неявное приведение к строке можно объяснить неявной типизацией вместо String (ToString a => forall a. a)

Yuriy
27.09.2017
07:31:24
в питоне преведение последовательностей к итераторам в for считается?

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

Google
Евгений
27.09.2017
07:32:33
по-моему, частный случай слабой. разве остальные правила слабой типизации некорректны?
Почему это сабтайпинг разновидность слабой типизации? Может тогда постановка в хиндли-милнера тоже?

Yuriy
27.09.2017
07:33:20
Разновидность сабтайпинга же
нет, итерируемые и итераторы не связаны родством. скорее, разновидность сахара

Евгений
27.09.2017
07:33:21
Или в экзистенциальные типы?

Yuriy
27.09.2017
07:33:58
в динамических языках тоже можно сказать, что все типы — подтипы Object или String

Евгений
27.09.2017
07:36:34
На самом деле я склоняюсь к тому, что никакой слабой типизации нет. Точнее есть, но как разновидность некорректной типизации :)

Aleksey
27.09.2017
07:38:38
Абслоютно слабой нет, есть слабые местами системы типов (а местами сильные)

Питон чутка сильнее чем ЖС

Mikhail
27.09.2017
07:39:12
Почему это сабтайпинг разновидность слабой типизации? Может тогда постановка в хиндли-милнера тоже?
ООП сабтайпинг /= ХМ-лайк сабтайпинг разумеется, это разные формализмы.

Yuriy
27.09.2017
07:39:22
ассемблер — абсолютно слабый

Питон чутка сильнее чем ЖС
да ладно! Питон почти везде сильный, ЖС почти везде слабый

Aleksey
27.09.2017
07:40:25
Питон почти везде сильный, это правда.

Yuriy
27.09.2017
07:40:27
ах да, есть ещё "утиная типизация", которую легко спутать с динамической или со слабой

Aleksey
27.09.2017
07:40:53
утиная типизация, это не признак слабины же!

Yuriy
27.09.2017
07:41:16
именно!

Aleksey
27.09.2017
07:41:38
Кроме случая "всё выглядит, как boolean, значит будет boolean" :)

Yuriy
27.09.2017
07:42:49
Я где-то такое говорил?
ты экстраполировал с одного на другое

Google
Aleksey
27.09.2017
07:43:35
ах да, есть ещё "утиная типизация", которую легко спутать с динамической или со слабой
утиная в большей степени и имеет смысл в условиях динамических типов - в рантайме объект может доказать, что гож

Евгений
27.09.2017
07:44:18
ты экстраполировал с одного на другое
Я не экстраполировал, я рассмотрел их общие свойства (которые объективно есть)

Aleksey
27.09.2017
07:44:20
что ты имеешь в виду?
В питоне всё что угодно "имеет смысл" в булевом контексте - bool(any) сработает всегда

Alexander
27.09.2017
08:38:10
Ближайшие конференции: Ноябрь ?? - Москва, в Kaspersky https://mobile.twitter.com/cblp_su/status/912940905757396992 Декабрь 2 - Москва fpconf http://fpconf.ru/ Декабрь 17 - F(by) Conf http://fby.by

Andrei
27.09.2017
08:38:16
@cblp "Строгая" == "Сильная" == "Strong" в паре с "типизация", смирись уже (я вот мирюсь) :) "Строгая динамическая типизация" - уже устоявшееся словосочетание, пусть и неверное.
Сильная и строгая разные вещи. Сильная — это когда нет имплицитного каста, строгая, это когда тип вычисляется раз и навсегда (в компайлтайме)

Aleksey
27.09.2017
08:38:51
Строгая==Статическая, что ли?

Andrei
27.09.2017
08:40:16
Да.

Yuriy
27.09.2017
08:42:37
первый раз такую интерпретацию слышу

зачем называть статическую строгой?

Alexander
27.09.2017
08:43:05
эм?

>>> a = "a" >>> a+1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects

строгая, динамическая

переменная a имеет "runtime-тип" str

Yuriy
27.09.2017
08:44:39
строгая, динамическая
не строгая, а сильная

Aleksey
27.09.2017
08:45:00
В питоне переменная не имеет типа. Объект, на который она ссылается, имеет

Alexander
27.09.2017
08:45:01
ок, strong

что такое переменная?

Yuriy
27.09.2017
08:45:23
стронгая типизация, ага

Aleksey
27.09.2017
08:45:23
имя-ссылка

Google
Yuriy
27.09.2017
08:45:43
в строко типизированном языке

Aleksey
27.09.2017
08:46:21
String dynamic typing - знакомая штука

Alexander
27.09.2017
08:46:37
врочем сейчас открыл tappl и потом тырнеты и не нашёл на что согласться говоря про строгая

Aleksey
27.09.2017
08:47:20
В бейсике, кстати, типизация strong :) Строки с чиселками не складываются ну никак

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

Alexander
27.09.2017
08:48:23
ну считать ли теги типами вопрос открытый

и согласно таплу это не хорошо, но исторически сложилось

так что я думаю эту часть дискуссии можно в очередной раз не развивать?

Aleksey
27.09.2017
08:49:18
можно не развивать, это правда

Denis
27.09.2017
09:11:51
https://github.com/mckayb/phantasy-recursion-schemes/blob/master/src/functions.php :D

кто поведает мне о loeb / moeb ? зачем и почему?

в линзах есть cosmos зачем?

Aleksey
27.09.2017
10:53:47
там ещё и базар есть :)

Andrei
27.09.2017
10:55:50
Дмитрий
27.09.2017
10:57:21
Питон чутка сильнее чем ЖС
До тех пор пока к жс не подключается современный стек

В flowtype мощный статический type inference

Причём выводится без хаков, через честные bounds. Ковариантность, контрвариантность в комплекте. Динамические хаки языка — за бортом



Aleksey
27.09.2017
11:05:56
В flowtype мощный статический type inference
Это просто в питоне за пределами PyCharm можно сказать нет стат анализа.

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

Google
Aleksey
27.09.2017
11:07:48
Так что "сначала напишем, а потом анализатор прогоним" работает плохо, ибо "потом прогоним анализатор" выливается в "тут-то точно всё ок будет, поэтому поставим игнор-коммент"

Дмитрий
27.09.2017
11:08:30
Весь код by default считаем забагованным пока не доказанно обратное Так как можно из любого mixed пошагово вывести доказательство корректности любого разумного типа, то это вполне естественная рабочая ситуация

Как винить производителей ножей, что ими не только картошку чистят

Aleksey
27.09.2017
11:10:15
Если есть язык, где нельзя выключить статическую типизацию и прострелить себе всё, то лучше использовать этот язык

Дмитрий
27.09.2017
11:20:52
А то unsafeCoerce, не комильфо как-то

Alexander
27.09.2017
11:22:06
да ладно

-defer-type-errors

и вперёд

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 ...

Дмитрий
27.09.2017
11:23:38
Тоже хороший вариант, да)

Alexander
27.09.2017
11:23:41
вон скомпилялось

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)

ошибки типов в рантайме, все как у взрослых

• Couldn't match type ‘StM m ()’ with ‘()’ Expected type: IO (StM m ()) Actual type: IO () ну вот опять : (

Страница 438 из 1551