metaclass: (дзедline)
[personal profile] metaclass
Столкнулся с тем, что наиболее внятно задача, которую я решаю, укладывается в Clojure и не укладывается (без частичного выкидывания статической типизации) в скалы-хаскели-C#-F#.
Вернее даже не выкидывание, а просто получается имитация типичного для Clojure типа данных Map[Symbol,Any] и использование его во все поля.

Можно, конечно, было бы убрать вообще всю логику, вплоть до SQL-запросов, из БД и писать запросы для ORM типа slick, но это в данном случае натягивание совы на глобус, более чем бессмысленное, т.к. статически типизированный результат запроса в ORM нужно будет превратить обратно в нихрена не типизированнный датасет типа Seq[Map[Symbol,Any]] и сериализовать его в json для клиента.
Или прикрутить shapeless (https://github.com/milessabin/shapeless) и навернуть extensible records поверх HList на предмет того, чтобы типовыводилка генерила еще и метаданные, но в итоге получится что-то совсем печальное и малопонятное.

Date: 2013-03-12 12:29 pm (UTC)
From: [identity profile] theiced.livejournal.com
ещё годик-другой и наконец у тебя зародится моск!

Date: 2013-03-12 12:36 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да тупо какая-то сегрегация классов задач.
Некоторые ну влет укладываются на статическую типизацию, какие-то статические маппинги, ОРМ и прочее.

А вот тупо "взять из базы результат запроса и показать пользователю" тут даже никакое ООП нахрен не нужно, ибо каждого из действующих классов экземпляр строго один, наследование только где-то во внутренностях используемых библиотек, разве что реализация доступа к БД сделана через фабрики коннектов :)
И FP тут только если сильно повезет и результат запроса нужно будет как-то нетривиально обработать.

Date: 2013-03-12 01:47 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Зависит от объема задачи и количества внешних нетипизированных концов. Если у тебя с одной стороны - SQL-база, для которой надо жесть писать чтобы типы прилепить, с другой стороны - JSON-сервис, а посередине совсем децл логики - типизировать такое на порядок геморойнее чем написать без типов.

С этой точки зрения мне очень симпатичен подход typescript-а - хочешь смотри на ворнинги, хочешь забей и смотри как оно реально в рантайме падает.

Date: 2013-03-12 12:59 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Если ваша задача не укладывается в статические типы, либо у вас недостаточно полиморфизма, либо зависимых типов. Ваш КО.

Date: 2013-03-12 12:59 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
А тип Any в хаскеле есть.

Date: 2013-03-12 01:10 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Мне бы хватило, но результат, боюсь, никого не обрадует :)
Цель же не статические типы ради них самих, а упрощение себе жизни.

Date: 2013-03-14 06:00 am (UTC)
From: [identity profile] nivanych.livejournal.com
(Я уже забыл и плохо представляю задачу)
А макросы не подходят? Они очень сложные и в них запросто быстро запутаться?

Date: 2013-03-12 01:47 pm (UTC)
From: [identity profile] norian.livejournal.com
в кутях придумали хорошее решение проблемы типизации - тип QVariant

с одной стороны, тип динамический и снаружи любые данные выглядят как QVariant, в коем виде их можно запихивать в любые контейнеры или контролы
с другой, его можно проверить или извлечь как статический с помощью встроенного или прикрученного метода вроде toInt()

Date: 2013-03-12 01:53 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Ты кстати type providers из F# не пробовал?

Date: 2013-03-12 01:56 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Я никак F# 3.0 не втащу себе :)

Date: 2013-03-12 01:58 pm (UTC)
From: [identity profile] besm6.livejournal.com
Из описания задачи следует, что у тебя, по сути, задача на преобразование текста регулярными выражениями. Ну, или каким-то другим парсером, но из текста в текст. Другой взгляд - задача написания транслятора языка. При этом другом взгляде оно в статические типы укладывается, но по-другому - мы делаем типы для языка, а не для конкретных выражений на этом языке (типы твоей конкретной задачи). Если у тебя нет задачи обрабатывать эти данные внутри себя, а надо только передать в клиента, то нет смысла делать типы для каждой структуры.

Date: 2013-03-12 02:07 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Нет, это финансовая и тому подобная отчетность. Оно в 90% случаев сводится к sql запросам с group by и совсем чуть чуть постобработки, которая на sql плохо укладывается. И дальше результат в виде json отдается клиенту.

И получается что типы почти всегда нужно выводить из результата SQL запроса, и прямо так и отдавать и показывать пользователю, только иногда нужно что-то с ними делать.

Date: 2013-03-12 05:49 pm (UTC)
From: [identity profile] andrew kondratovich (from livejournal.com)
судя по названию первой поделки - делал русский

Date: 2013-03-12 06:40 pm (UTC)
From: [identity profile] voidex.livejournal.com
> наиболее внятно задача ... укладывается в Clojure
Это же абсурд

Date: 2013-03-12 07:11 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Абсурд наиболее внятно укладывается в Clojure.

Date: 2013-03-13 08:27 am (UTC)
From: [identity profile] migmit.livejournal.com
Всё, я передумал писать что-либо по делу.

Date: 2013-03-14 06:01 am (UTC)
From: [identity profile] nivanych.livejournal.com
Зря. Многим было бы любопытно.

Date: 2013-03-12 08:03 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Архитектуру определяет образ мысли архитектора. Так что ничего удивительного.
Ну и задача тоже немного роль играет.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 06:44 am
Powered by Dreamwidth Studios