Bonart
Гвидо в начале располовинил сообщество переходом на питон3, так что может и правильно что уходит, он конечно молодец, но решения у него странные
Он вроде вначале собственно питон и придумал. С учетом тогдашних конкурентов, питон как основной скриптовый язык - далеко не самый плохой вариант
Bonart
Вангую следущую драму Скала3 vs Скала2. Многие, я думаю, не примут
Хм, те кто писали на скале как на лучшей яве тоже прочувствуют разницу? Если так, то в джетбрайнс могут пить шампанское
Ayrat
Хм, те кто писали на скале как на лучшей яве тоже прочувствуют разницу? Если так, то в джетбрайнс могут пить шампанское
там больше функциональщины ради функциональщины местами. Мне-то норм, но именно те кто хотел просто лучшую джаву будут в афиге
Анна
https://habr.com/post/417047/
Надо быстрее переписывать свою балалайку с питона
Vasily
Может, на пользу пойдет
Vasily
Хотя тут фиг знает
Vasily
Питон это действительно такой vbs
Nikolay
А коррекцию зрения никто не делал? 🤔
Vasily
Для data science
Igor
Igor
Привет, помогите придумать ФП решение для следующей задачи. На входе есть JSON с коллекцией элементов, разного типа. На выходе надо получить коллекцию строк. При решение этой задачи встает две подзадачи: 1) Как в "типах" (десериализовано) должна выглядить эта JSON-коллекция разных объектов? 2) Как трансформировать эту коллекцию в коллекцию строк? И самое сложное, как это сделать с учетом expression-problem (те добавлять новые типы и трансформации, не меняя старый код)?
Vasily
Ну, начнем с того, что JSON типов ограниченное количество :)
Ayrat
JArray.Parse text |> Seq.map string следующий!
Ayrat
:D
Igor
Ну, начнем с того, что JSON типов ограниченное количество :)
[ { type: "person", name: "alex", age: 20 }, { type: "city", contry: "russia", iscapital: false }, { type: ... } ... ]
Vasily
А что на выходе-то надо?
Igor
А что на выходе-то надо?
List<string> Функция трансфорации должна быть для каждого "типа" своя (типа нужен полиморфизм)
Vasily
Почему своя, кстати?
Igor
Почему своя, кстати?
Потому что expression-problem, нужна расширяемость
Vasily
Ну пока я тут expression-problem не вижу
Vasily
Вложенные типы есть?
Igor
Нет
Vasily
Т.е. тупой плейн список значений с указанием типа?
Igor
Вложенные типы есть?
Ты предлагаешь взять размеченную-сумму?
Vasily
Берешь DU и не паришься
Vasily
String|Int|Bool whatever
Igor
Берешь DU и не паришься
ОК, а завтра с сервера приходит новый тип. Что делать? (код менять нельзя)
Vasily
Какой?
Igor
Новый
Vasily
Новый простой тип придумают или что?
Vasily
Мда
Ayrat
ну в дотнете у всех объектов есть ToString(), пусть все вновь приходящие объекты его реализуют и всё
Ayrat
хотя мы не знаем в рантайме у какого типа вызвать ToString
Igor
Новый простой тип придумают или что?
Чем мне помогут простые тип, что бы десерелизовать это? [ { type: "person", name: "alex", age: 20 }, { type: "city", contry: "russia", iscapital: false }, { type: ... } ... ]
Vasily
type Custom={Type:string;Props:Map<string,myDU>}
Vasily
Такое пойдет?
Vasily
Пихай чо угодно
Vasily
У тебя кастомный тип описывается метадатой
Vasily
В которой имя типа
Vasily
Плюс набор ключ-значение
Igor
хотя мы не знаем в рантайме у какого типа вызвать ToString
Это да, но мне не подходит станартный toString, да и вообще перевод в строку это просто пример. Допустим завтра мне надо перевод в int или byte[] и тп
Ayrat
ну тащи сериализованный экспрешн который говорил бы что ты хочешь сделать в рантайме куда тебя пихнуть
Ayrat
мы его скомпайлим и выполним
Vasily
Или тебе надо типа рекорды?
Vasily
С полями
Igor
Или тебе надо типа рекорды?
Ну вообще да, хотелось бы не работать хешмапами
Vasily
Ну тогда твоя задача в общем виде не решается, извини
Igor
Ну тогда твоя задача в общем виде не решается, извини
Даже в хаскеле? (к f# это вообще не привязаная задача)
Vasily
А хаскель умеет типы на лету строить?
Ayrat
стопе, а что нам мешает IL код генерить на лету?
Ayrat
:D
Vasily
Тайп провайдер называется
Vasily
Такой генератор
Igor
А хаскель умеет типы на лету строить?
Ну ты можешь объявить несколько заранее (как и в f#), никто и не говорил что надо именно типы на лету генерить
Vasily
Ты всегда можешь написать обертку с нужными тебе полями, если так уж приспичит
Vasily
Просто контекста задачи маловато, мягко выражаясь
Vasily
Пока выглядит велосипедно
Ayrat
Если б прилетела такая задача, я сначала попробовал отговорить её решать ТАК
Ayrat
но если всё же в теории её решать ТАК
Vasily
Ну и я о том же
Ayrat
то генерация IL - нормальный костыль
Ayrat
считал данные, сгенерил тип, подгрузил тип, работаем
Vasily
Вообще неясно, откуда данные приходят, куда должны уйти
Vasily
В каком виде
Igor
Пока выглядит велосипедно
Я вообще думал подвести к мысли и "тайп-классах" и гетерогенных коллекциях (HList)
Vasily
А, ты хочешь пофлудить на тему тайп классов
Vasily
ПОнял тебя
Igor
считал данные, сгенерил тип, подгрузил тип, работаем
Не надо ничего генерить, вот все проще. У тебя в JSON приходит коллекция 2-х типов. [ { type: "person", name: "alex", age: 20 }, { type: "city", contry: "russia", iscapital: false } ] Как их выразить в типах? (что были рекорды)
Vasily
Где-то выше я писал тип
Vasily
Под который они все подходят
Igor
type Something = | Person of (name : string) * (age : int) | City of (country: string) * (isCapital: bool)
Vasily
Не
Vasily
Неверный подход
Igor
Не
без хешмап
Vasily
Без хешмапа список рекордов вида {Name:string;Value:MyDU}
Ayrat
эээ. так вопрос в том что MyDU ограничен и нерасширяем
Ayrat
т.е. завтра прилетит тип Project а его там нет
Vasily
Количество простых типов у нас небольшое
Ayrat
так речь не про простые типы