Igor
а теперь давай, скажи мне, что это в ооп не нужно
Прикинь 20 лет развития c# / java и никто не умер без тайпклассов
Ilya
После обычных методов остаётся добавить статические. Хотя бы последовательно.
Mikhαil
Архитектор с моей предыдущей работы говорил что экстеншны не нужны
Mikhαil
Говорит - без них жил
Roman
Прикинь 20 лет развития c# / java и никто не умер без тайпклассов
так-то до джавы никто не умер от си. А до этого от ассемблера
Mikhαil
(ну архитектор это громкое слово, он себя сам так нарек)
Roman
Прикинь 20 лет развития c# / java и никто не умер без тайпклассов
Я че-т не понимаю. Ты из тех, кто не жил хорошо, вот и начинать не стоит?
Ilya
Архитектор с моей предыдущей работы говорил что экстеншны не нужны
Ну экстеншены -- это ж просто сахар над статическими функциями и их параметрами, нет разве?
Ilya
А вот тайпклассы не совсем.
Roman
Ilya
В чём-то он был, я про это. Штука для синтаксиса поприятнее.
Roman
то есть статические методы в интерфейсах вас не заинтересовали
ну в фшарпе их можно экстеншнами накинуть, это покрывает многие случаи, поэтому не так остро ощущается потеря
Igor
Я че-т не понимаю. Ты из тех, кто не жил хорошо, вот и начинать не стоит?
Я из тех кто не любит расширять языки и неявность (привет скала). А любит мономорфные чистые функции, которые трансформируют данные.
Roman
тайпклассы никакой неявности не добавляют, если что
Igor
смотря как реализовать, нормально с coherence или еб_нуто на имлиситах, как в скала)
Roman
имплиситы это имплиситы. Название, какбэ, намекает) Я говорю за тайпклассы
Roman
То, что в скале что-то там сделано через жопу, не значит, что везде должно быть через жопу
Igor
а по другому и не сделаешь поверх ооп-vm (как .net или jvm)
TOV_MULTIMASSO
Eta, frege?
Roman
вот блять откуда?
TOV_MULTIMASSO
В этих двух языках вполне себе тайпклассы для jvm
Igor
ну вот откуда такая инфа?
Ну думашь Одерски дурак и не смог нормально сделать?
TOV_MULTIMASSO
Если чо, тайпклассы резолвятся статически
Roman
да при чем тут одерски?
Roman
Что, если у одерски что-то не получилось, это в принципе невозможно?
Igor
В этих двух языках вполне себе тайпклассы для jvm
Эх, там интероп с java на уровне ffi те это набор костылей несовместимый со всей экосистемой ну и они обе мертвые
TOV_MULTIMASSO
А в скале было принято решение оставить совместимость с объектной моделью жавы
TOV_MULTIMASSO
Да я бы в жаву и через ffi тыкал бы только, если бы этот ffi был с трёхметровой ручкой
TOV_MULTIMASSO
Это печально, да
TOV_MULTIMASSO
Костылей?
Igor
Короче, ребят, C# переживет любой кол-во фич) и тайп классы туда тоже влезут. И очевидно, что Мэдс сможет "красиво" воткнуть тайп-классы в язык с 20-летним легаси и VM (и несомненно будет лучше чем в скала). Правда, хрен его знает, на кой ляд вам моноиды в продакшене сдались, но я в чужие дела не лезу, нужны значит есть зачем... 😉
Ilya
А не переживёт, так и хрен с ним.
Doge
я ж правильно понимаю, что тайпкласс — это как возможность присобачить произвольный интерфейс к чужому типу?
Не только, у них есть правила инференса, которые рулят тем, как из инстансов для одних типов, можно получить инстансы для других
Doge
а по другому и не сделаешь поверх ооп-vm (как .net или jvm)
Сделаешь, проблемы скалы в этом плане не из-за интеропа,а из-за осознанного решения Одерски
Doge
Основная претензия к имплиситам - это именно отсутствие когерентности и всё т.п.
Igor
Конечно сделаешь, если будешь дизайнить язык с 0 и контролировать компляцию до асембелера
Doge
Конечно сделаешь, если будешь дизайнить язык с 0 и контролировать компляцию до асембелера
Т.е. в хаскеле, если отрубить специализацию, то тайпклассы будут тупо в дополнительный параметр компилиться
Doge
dictionary passing, все дела
TOV_MULTIMASSO
Для бля, в frege сделали же. Тот факт, что язык умер не указывает на невозможность нормальной реализации.
Igor
Как язык с ffi может считаться нормальными? (и забудим, про то что не было 20 лет легаси)
TOV_MULTIMASSO
Что тебе не нравится в ffi? Оно там только потому, что систему типов жавы надо за километр обходить
Vasiliy
TOV_MULTIMASSO
И в жаве тоже есть своё ffi, в виде native-методов
Igor
Ох_енный план, давайте сделаем D# с ffi в C#, НО с тайплкассами и блекджком
Igor
Mikhαil
Есть пример на яблоках?
Спасибо, а то я постеснялся как-то
Doge
Есть пример на яблоках?
С тем же show: class Show a where show :: a -> String instance Show Int where show = undefined instance (Show a) => [a] where show xs = "[" ++ intercalate "," (map show xs) ++ "]" И таким образом у нас автоматически есть инстанс Show для списка элементов тех типов, у которых есть инстанс Show
Ilya
Это точно яблоки?
Ilya
Хотя ладно. Я понял, наверное.
Doge
Это точно яблоки?
Ну это аналог ToString
Vladislav
@omgszer надо тебе пиво купить будет за помощь со стрелочками
Vladislav
@Liminiens open Hopac open Hopac.Infixes open System let src = Stream.Src.create<int>() let stream = Stream.Src.tap src let rnd = Random() let producerJob i = job { let ms = rnd.Next(100,2000) do! timeOutMillis ms do! Stream.Src.value src i return i+1 } stream |> Stream.consumeFun (printfn "stream - %A") Job.iterateServer 0 producerJob |> start stream |> Stream.groupByFun (fun _ ack group -> ack, group) (fun _ -> 0) |> Stream.mapJob (fun (ack, group) -> timeOutMillis 1000 >>=. ack >>=. Stream.toSeq group) |> Stream.iterFun (printfn "%A") |> run аутпут stream - 0 stream - 1 seq [0; 1] stream - 2 stream - 3 seq [2; 3] stream - 4 stream - 5 stream - 6 seq [4; 5; 6] stream - 7 stream - 8 seq [7; 8] stream - 9 stream - 10 stream - 11 seq [9; 10; 11] stream - 12 stream - 13 seq [12; 13] stream - 14 stream - 15 stream - 16 stream - 17 seq [14; 15; 16; 17]
Igor
Хотя ладно. Я понял, наверное.
Можно просто один раз пройти https://stepik.org/course/75/syllabus и тогда будешь понимать и про яблок и груши Так сказать - подготовиться к C# 10
Mikhαil
Или подписка
Igor
БЕС - ПЛАТ - НО
Mikhαil
БЕС - ПЛАТ - НО
О - ХУ - ЕТЬ
Igor
Там еще есть вторая часть https://stepik.org/course/693/syllabus но она очень сложная
Vladimir
верно я говорю?)
Ayrat
я так понимаю что не только интерфейс, а и его имплементацию тоже
ну так как ты докидываешь к типу, то обязан и имплементацию предоставить, конечно
Ayrat
теперь System.IO.Stream у нас IEnumerable и вот как это выглядит ...
Ayrat
и теперь по стриму можно делать Select Where ToList
Ayrat
КОСМОС
Vladimir
👍
Ayrat
если бы торгерсен дал такой пример, щас бы весь пронет гудел
Ayrat
но нет, сука. Моноид на интах
Ayrat
сука. моноид.
Vladimir
так понимаю что самому такое не захочется писать, должны либы с тайпклассами появляться
Ayrat
но ты можешь объявить в одной сборке доменные модели, а потом по мере надобности докидывать к ним разные интерфейсы из других сборок
Vladislav
сука. моноид.
пожилой моноид
Roman
тяжело придумать юзкейс(
вот у нас сегодня именно такой юзкейс был. Есть модели в доменной сборке, но к ним надо докинуть интерфейс один, чтобы запихать в код, который работает с эластиком. В результате сделали 2 набора идентичных моделей и маппинг к ним