metaclass: (дзедline)
metaclass ([personal profile] metaclass) wrote2013-03-12 03:24 pm
Entry tags:

Неиспользование статической типизации

Столкнулся с тем, что наиболее внятно задача, которую я решаю, укладывается в 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 на предмет того, чтобы типовыводилка генерила еще и метаданные, но в итоге получится что-то совсем печальное и малопонятное.

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

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

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

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

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

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

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

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