
???????
22.07.2018
20:50:39

Слава
22.07.2018
20:50:44

A64m
22.07.2018
20:51:13
в книжке Харпера другой подход (который дана скотт придумал) излагается, что в "динамических" "языках" тип один

Alister
22.07.2018
20:51:58
Everything e?

Google

Pig
22.07.2018
20:51:59
Кто-нибудь уже написал что Erlang это ООП, ибо message passing?
Одмены, спасите от китайского спама, он вернулся.

Yuriy
22.07.2018
20:53:35

A64m
22.07.2018
20:54:51
А под каким углом нужно читать TAPL, чтобы там что-то подобное вычитать?
> A type system is a tractable _syntactic_ method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute.
выделено мной
> Terms like “dynamically typed” are arguably misnomers and should probably be replaced by “dynamically checked,” but the usage is standard.

Евгений
22.07.2018
20:54:54
Я даже цитату найду

A64m
22.07.2018
20:55:44

Евгений
22.07.2018
20:57:00
http://newstar.rinet.ru/~goga/tapl/tapl003.html#toc1
Система типов — это гибко управляемый синтаксический метод доказательства отсутствия в программе определенных видов поведения при помощи классификации выражений языка по разновидностям вычисляемых ими значений.

???????
22.07.2018
20:57:19

Yuriy
22.07.2018
20:57:31

Евгений
22.07.2018
20:58:03
Иногда слово <<статический>> добавляется явным образом — например, говорят о <<языках программирования со статической типизацией>>, — чтобы отличить тот анализ, который производится при компиляции, и который мы рассматриваем здесь, от динамической (dynamic) илилатентной (latent) типизации в языках вроде Scheme (Sussman and Steele, 1975, Kelsey, Clinger, and Rees, 1998, Dybvig, 1996), в которых теги типов (type tags) используются для различения видов объектов, находящихся в куче. Термин <<динамически типизированный>>, по нашему мнению, неверен (его следовало бы заменить на <<динамически проверяемый>>), но такое употребление уже общепринято.
Т.е. Пирс подчёркивает, что "динамическая типизация" это фразеологизм, не оч. связанный с типами собственно


Vyacheslav
22.07.2018
20:58:10
А подскажите кто-нибудь по либе streaming.
Мне нужно написать след стрим, типа:
retrierStream :: Monad m => (a -> HandleResult) ->Stream (Of a) m () -> Stream (Of a) m ()
Он работает так:
1. Ждет значение переданного стрима
2. Запускает на нем функию handle
3. Если handle возвращает ok, то он просто делает yield этого значения
4. Если handle возвращает not_ok, то я жду n секунд и ухожу в рекурсию
я так понял что использовать конструкторы из Streaming.Inernal плохо, но как без них это сделать (да и с ними честно говоря) не понимаю

Google

A64m
22.07.2018
20:59:03
Иногда слово <<статический>> добавляется явным образом — например, говорят о <<языках программирования со статической типизацией>>, — чтобы отличить тот анализ, который производится при компиляции, и который мы рассматриваем здесь, от динамической (dynamic) илилатентной (latent) типизации в языках вроде Scheme (Sussman and Steele, 1975, Kelsey, Clinger, and Rees, 1998, Dybvig, 1996), в которых теги типов (type tags) используются для различения видов объектов, находящихся в куче. Термин <<динамически типизированный>>, по нашему мнению, неверен (его следовало бы заменить на <<динамически проверяемый>>), но такое употребление уже общепринято.
Т.е. Пирс подчёркивает, что "динамическая типизация" это фразеологизм, не оч. связанный с типами собственно
легаси термин вроде "электродвижущая сила", которая вовсе не сила

Евгений
22.07.2018
21:00:03

Yuriy
22.07.2018
21:01:20

Vyacheslav
22.07.2018
21:01:37
ну пусть будет MonadIO, вместо Monad)
в pipes есть await, а как тут? потому что next тебя сразу уводит из стримов

???????
22.07.2018
21:10:32
тэгов
Я всё ещё не вижу принципиальной разницы. Т.е. звучит просто так будто хотят на языки с тайпчекерами навесить дополнительный налёт элитарности сказав что "Нет тайпчекера и типов тогда у вас тоже нет". Да типы служат для того, чтобы гарантировать с какой-то точностью корректность валидной программы. Но если в условном Erlang ты пытаешься сложить слона с звездолётом и он тебе выйдёт ошибку о несоответствии типов во время выполнения, то это тоже проверка и тоже гарантия того, что у тебя не будет выполняться откровенная лапша.

Yuriy
22.07.2018
21:14:54

A64m
22.07.2018
21:22:12


Yuriy
22.07.2018
21:24:07
в pipes есть await, а как тут? потому что next тебя сразу уводит из стримов
боюсь, в стриминге нет втстроенной рекурсии, и именно next надо использовать
retrierStream
:: MonadIO m
=> (a -> HandleResult) -> Stream (Of a) m () -> Stream (Of a) m ()
retrierStream handle input = do
e <- lift $ next input
case e of
Left () -> pure ()
Right (a, input') -> do
case handle a of
Ok -> yield a
NotOk -> liftIO $ threadDelay $ 2 * 1000 * 1000
retrierStream handle input'


???????
22.07.2018
21:24:10
вопрос терминологический, разница есть, вот я и называю по-разному. я человек простой, пирс пишет "Terms like “dynamically typed” are arguably misnomers and should probably be replaced by “dynamically checked,”" - я заменяю
Ещё раз. Я полностью согласен с тем, что динамически типизированный это очень странный термин, он непонятный, он легаси и т.д., но чекаются динамически таки типы и более менее пофиг называешь ты их типами или тегами типов(если есть теги типов то логично, что должны быть где-то типы, нет?)

A64m
22.07.2018
21:25:20
совсем не логично. у АлгТД есть теги конструкторов которые в рантайме чекаются, никакого отношения к типам не имеют, например. точно так же и в скриптах

Imants
22.07.2018
21:26:37

Ilya
22.07.2018
21:28:37
Можно обобщить наверное. Интерпретируемый ЯП -- не язык вовсе.
Как дин типы не типы

???????
22.07.2018
21:28:59

Евгений
22.07.2018
21:29:17

Ilya
22.07.2018
21:29:27
Стикеры тут не приветствутся, выражайте эмоции буковами

A64m
22.07.2018
21:29:48

Евгений
22.07.2018
21:30:02
"Динамические типы" и "Статические типы" только тем общи, что это CS аналоги множества
Но интенсионального, определяемого в рамках CS, единства между ними нет

Google

Imants
22.07.2018
21:30:43

A64m
22.07.2018
21:32:43
вместо нее и соотвествующих инстансов можно было бы использовать тупл и инстанс функтора для него, который многие сейчас так ненавидят

Imants
22.07.2018
21:34:32

A64m
22.07.2018
21:34:55
он в streaming и объявлен

Антон
22.07.2018
21:34:55

A64m
22.07.2018
21:35:21
да это не особо важно, так для удобства сделано

Imants
22.07.2018
21:37:23

Евгений
22.07.2018
21:42:20
@qnikst, а спор о понятиях, кстати, в этом чате разрешается? По-моему это тема для блах :)

Alexander
22.07.2018
21:47:32
хз

???????
22.07.2018
21:50:19

Евгений
22.07.2018
21:50:49
Они устроены по разному

Alexander
22.07.2018
21:51:11

Евгений
22.07.2018
21:52:10
Ну и множествам ни то, ни другогое не изоморфно. Слава проблеме останова

Alexander
22.07.2018
21:53:45
@beizero может возьмешь тайм-аут на перечитывание первых двух глав пирса?
а то как-то по кругу пошло, тем более ты попросил определение, тебе привели, а ты дальше говоришь "как ты видишь", и хочешь чтобы согласились? и все по кругу идет
(я может конечно не внимательно прочитал, что выше было)
чот я токсичный сегодня

???????
22.07.2018
21:57:26
Они устроены по разному
У Пирса к слову, определение системы типов даётся по предназначению, а не по устройству. Из устройства там только говориться о том, что это синтаксический способ, но даже в том же JS ты объекты разных типов(или называйте это как хотите) синтаксические описываете по разному. Я из Haskell могу выкинуть декларацию типов у функций и оставить только определения их поведения, а компилятор мне всё выведет, код будет выглядеть так будто у меня типов вообще нигде нет от этого они в общем-то никуда не денутся.

Антон
22.07.2018
21:58:57

Google

Антон
22.07.2018
21:59:03
А вообще спать надо

Alexander
22.07.2018
21:59:42
нет, я всегда добрый и пушистый, даже сегодня

Ilya
22.07.2018
22:00:27
хз
а мог бы и бритвой полосонуть
так что да, добрый

Антон
22.07.2018
22:00:48

Admin
ERROR: S client not available

Alexander
22.07.2018
22:01:00

Антон
22.07.2018
22:01:52
D:

???????
22.07.2018
22:04:05


Alexander
22.07.2018
22:04:52
язык не даёт гарантии что твоя программа, которая хочет делать бред - будет принята
типы в js это flow и вот это все
а не то, что внутри самого js
точно так же если бы в Haskell была только одна ADT:
data Q = I Int | T Text ...
то ты бы мог написать:
plus (I i) (I j) = I (I+j)
plus _ _ = error "bad tags"
это бы не были типы, а была бы проверка тегов
тоже самое происходит в динамических языках
причем нельзя сказать что это ПЛОХО, это просто есть
если взять того же пирса, то у него описаны формы полиморфизма доступные только в динамических языках
так ты можешь в рантайме гарантировано узнать теги типов и в зависимости от тегов выполнить или сгенерировать определенный код

Google

Alexander
22.07.2018
22:09:05
причем мощность тегов может быть достаточно большой
так это могут быть определенные ограничения на значение, информация о вложенности в другие типы и т.п.
механизм достаточно мощный, переизобретать который типами может быть сложно

???????
22.07.2018
22:10:49
это бы не были типы, а была бы проверка тегов
ADT по определению это сумма типов произведений. I Int, T Text, I, T таки будут являться типами по определнию ADT, насколько сильно это бы не ломало гарантии корретности программы написанной в таком стиле.

Alexander
22.07.2018
22:11:42
типами по определению ADT?! WUT?
какому к черту определению?!
давай ты уже тоже ссылками на статьи и книги общаться будешь?

???????
22.07.2018
22:12:25
ADT это тип равный сумме типов-произведений, разве нет?

Alexander
22.07.2018
22:13:30
у нас есть Q - конструктор типа и I, T - конструкторы данных
промоушн немного ломает эту аккуратную вещь, но можно его игнорировать пока
так I :: Int -> Q, принимает параметр типа Int и создаёт данные типа Q
типа I нигде нету
это тег который говорит как из типа суммы получить проекцию на одно из слагаемых

???????
22.07.2018
22:22:13

Alexander
22.07.2018
22:24:34
для лучшего понимания пирса наверное подойдёт пример js и flow
для Erlang тоже же был какой-то линтер, который пытался типы притащить