@haskellru

Страница 689 из 1551
Евгений
19.12.2017
10:07:58
да уже годы, сколько я хаскель помню, есть какое-то движение писать подлиннее
А пример конкретный можно? Фреймворка, либы и чего-нибудь такого, где стремятся

Dmitry
19.12.2017
10:08:21
против линз понять можно, хотя надо не против линз, а за какие-то более лучшие линзы

против тайпклассов - в голове не укладываются

Google
Max
19.12.2017
10:08:32
Малое количество LoC - это плохо. Ломает систему KPI.

Dmitry
19.12.2017
10:08:36
за полную квалификацию тоже

это если в KPI есть LOC

Max
19.12.2017
10:09:01
Всегда были )

Почему Go и JS в фаворе?

Dmitry
19.12.2017
10:09:38
да где были то?

опять же, жс должен давать меньше строк, чем go

go специально для квадратно-гнездовых людей

Max
19.12.2017
10:10:03
Схреналь?

Евгений
19.12.2017
10:10:11
Там где популярны LOC в KPI господствует java, а не JS или go

Dmitry
19.12.2017
10:10:24
ну он типа скобок, только со странным синтаксисом

Max
19.12.2017
10:10:27
Ну, ява по умолчанию

Синглтон фабрики фабрик фасадов классов

Google
Евгений
19.12.2017
10:11:12
ну он типа скобок, только со странным синтаксисом
По мне так го это типа питона, только с указателями и сишным синтаксисом

A64m
19.12.2017
10:11:42
Хотя если подумать, и против тайпклассов гонзалес писал, и полную квалификацию продвигал он, и на адовый for-loop стиль с операторов он переходил

Dmitry
19.12.2017
10:11:46
ну ок, я очень примерно представляю. много раз слышал, что ecmascript мощный, как скобки

A64m
19.12.2017
10:11:55
но нет, не только Гонзалес.

Arsen
19.12.2017
10:12:02
Синглтон фабрики фабрик фасадов классов
bean потерялся https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html

Dmitry
19.12.2017
10:12:04
но тайпклассы то чем?

A64m
19.12.2017
10:12:21
Вот Диль против ТХ и дерайвингов агитирует, это ж тоже за увиличение числа строк

Dmitry
19.12.2017
10:12:39
против дерайвинга понятно - тормоза и в компайл тайме, и в рантайме

но нужен какой-то более лучший дерайвинг, пожалуй

Leonid
19.12.2017
10:13:46
я вот за явные импорты. и еще я за плагины это автоматизирующие

вот на пурсе очень удобно в емаксе

A64m
19.12.2017
10:14:37
я против явных импортов потому что это недосигнатуры

Leonid
19.12.2017
10:15:44
явные импорты улучшают форвард компатибилити

A64m
19.12.2017
10:15:50
но тайпклассы то чем?
программный манифест тайпклассохейтеров это вот это вот http://www.haskellforall.com/2012/05/scrap-your-type-classes.html

явные импорты улучшают форвард компатибилити
сигнатуры улучшают, а явные импорты это кучи плохоподдерживаемого непереиспользуемого ужаса

Leonid
19.12.2017
10:17:19
сигнатуры это этот ваш бэкпэк? /me дикий, на ML не писал

Dmitry
19.12.2017
10:17:37
нам нужен какой-то другой хаскель. куда не будут пускать психов.

A64m
19.12.2017
10:17:39
в бекпаке это все тяжеловесно слишком

Leonid
19.12.2017
10:18:08
@A64m_qb0 как ты там говорил "Бэкпэк как разрабатывался для уничтожения стэка, так и развивается"

Dmitry
19.12.2017
10:25:33
а какой сейчас статус бэкпака?

Google
A64m
19.12.2017
10:26:38
в 8.2.2 как-то работает, но все еще куча багов, вроде несовместимости с CPP.

у него два пользователя сейчас - автор и Кметт, так что кучу еще нарепортят

Leonid
19.12.2017
10:27:43
еще Остин писал что балуется

https://github.com/haskell/cabal/issues/4206#issuecomment-352053590 во

A64m
19.12.2017
10:28:17
да, я вспомнил, что @int_index еще

Leonid
19.12.2017
10:28:20
опять злой кабал против коммэрции

Denis
19.12.2017
10:28:26
https://github.com/andorp/grin

A64m
19.12.2017
10:30:44
был еще репозиторий, в котором был ГРИН из jhc очищенный от остального jhc

в бекпаке плохо, что у формата файлов в котором много модулей можно объявлять нету нормальной поддержки и не предполагается (по замыслу автора это для написания тестов). Когда модули можно в одном файле объявлять это удобно же

но сам многомодульный формат адово тяжеловесный, вообще в бекпаке все безжалостно карает за его использование, потому что он "предназначен для организации кода в крупных масштабах, а не для мелочей всяких"

Dmitry
19.12.2017
10:38:52
пытаюсь читать описание бакпэка - но TL;DR - это как в окамле?

A64m
19.12.2017
10:39:47
При том, что потенциально он легковеснее эмельных модулей может быть потому, что у миксинов применение "функторов" автоматическое

A64m
19.12.2017
10:41:02
пытаюсь читать описание бакпэка - но TL;DR - это как в окамле?
отдаленно, разве что. не как в окамле то, что это миксины, второе поколение эмельных модулей, которых в эмелях нету. Во вторых не как в окамле потому, что раздельно не билдится, т.е. в этом смысле как в mlton-е скорее

а, еще неудобное там, что очень тупой матчинг сигнатуры к имплементации, без всяких сабтайпингов для сигнатур функций, только один в один

т.е. например, вот тот бойлерплейт ужас из vector где дженерик-функции специализируются в специальных модулях бекпаком не победить

вообще вектор с этими его сишными макросами для генерации инстансов и прочими ужасами хороший индикатор того, что в хаскеле проблема с модулями, только каогда там все красиво можно будет сделать - тогда и можно сказать, что ситуация с модулями исправилась

? animufag ?
19.12.2017
11:07:17
генерация инстансов это как специализация темплейтов в плюсах? и как помогут модули?

A64m
19.12.2017
11:08:16
не совсем. там просто зиллион бойлерплейтных иснтансов, которые отличаются типами в основном

и чтоб их руками не писать - там сишные макросы

Index
19.12.2017
11:10:01
т.е. например, вот тот бойлерплейт ужас из vector где дженерик-функции специализируются в специальных модулях бекпаком не победить
Почему не победить? Если эти generic функции бэкпэком параметризовать, то их и специализировать вручную не надо

Google
A64m
19.12.2017
11:10:29
#define primMVector(ty,con) \ instance M.MVector MVector ty where { \ {-# INLINE basicLength #-} \ ; {-# INLINE basicUnsafeSlice #-} \ ; {-# INLINE basicOverlaps #-} \ ; {-# INLINE basicUnsafeNew #-} \ ; {-# INLINE basicInitialize #-} \ ; {-# INLINE basicUnsafeReplicate #-} \ ; {-# INLINE basicUnsafeRead #-} \ ; {-# INLINE basicUnsafeWrite #-} \ ; {-# INLINE basicClear #-} \ ; {-# INLINE basicSet #-} \ ; {-# INLINE basicUnsafeCopy #-} \ ; {-# INLINE basicUnsafeGrow #-} \ ; basicLength (con v) = M.basicLength v \ ; basicUnsafeSlice i n (con v) = con $ M.basicUnsafeSlice i n v \ ; basicOverlaps (con v1) (con v2) = M.basicOverlaps v1 v2 \ ; basicUnsafeNew n = con `liftM` M.basicUnsafeNew n \ ; basicInitialize (con v) = M.basicInitialize v \ ; basicUnsafeReplicate n x = con `liftM` M.basicUnsafeReplicate n x \ ; basicUnsafeRead (con v) i = M.basicUnsafeRead v i \ ; basicUnsafeWrite (con v) i x = M.basicUnsafeWrite v i x \ ; basicClear (con v) = M.basicClear v \ ; basicSet (con v) x = M.basicSet v x \ ; basicUnsafeCopy (con v1) (con v2) = M.basicUnsafeCopy v1 v2 \ ; basicUnsafeMove (con v1) (con v2) = M.basicUnsafeMove v1 v2 \ ; basicUnsafeGrow (con v) n = con `liftM` M.basicUnsafeGrow v n } #define primVector(ty,con,mcon) \ instance G.Vector Vector ty where { \ {-# INLINE basicUnsafeFreeze #-} \ ; {-# INLINE basicUnsafeThaw #-} \ ; {-# INLINE basicLength #-} \ ; {-# INLINE basicUnsafeSlice #-} \ ; {-# INLINE basicUnsafeIndexM #-} \ ; {-# INLINE elemseq #-} \ ; basicUnsafeFreeze (mcon v) = con `liftM` G.basicUnsafeFreeze v \ ; basicUnsafeThaw (con v) = mcon `liftM` G.basicUnsafeThaw v \ ; basicLength (con v) = G.basicLength v \ ; basicUnsafeSlice i n (con v) = con $ G.basicUnsafeSlice i n v \ ; basicUnsafeIndexM (con v) i = G.basicUnsafeIndexM v i \ ; basicUnsafeCopy (mcon mv) (con v) = G.basicUnsafeCopy mv v \ ; elemseq _ = seq }

Leonid
19.12.2017
11:10:52
порвал чат

A64m
19.12.2017
11:12:26
Почему не победить? Если эти generic функции бэкпэком параметризовать, то их и специализировать вручную не надо
ну если дженерик вектора делать на бекпаке, а не на классах - да, но классы тут удобнее. Речь о том, что бекпак не может сделать из дженерик модулей специализированные анбоксед, сторабл и боксед, а эмельные модули могут, там сигнатуры применяются не один в один а с сабтайпингом

Index
19.12.2017
11:12:57
Чем классы тут удобнее?

Я пока что только путался от того, что тридцать с половиной штук названо Vector

Хорошо хоть для MVector дали название другое.

Могли бы и для класса дать CVector

А без класса еще лучше

A64m
19.12.2017
11:15:24
там тогда констрейнты надо параметром
так это бекпак может как раз

Admin
ERROR: S client not available

A64m
19.12.2017
11:15:44
но не факт, что это и понадобится даже

Alexander
19.12.2017
11:15:49
в смысле, если контрейнт параметром - то проблема решится

я про это

A64m
19.12.2017
11:16:05
А без класса еще лучше
чем лучше-то? Тогда обобщенный код для любого вектора как писать?

Leonid
19.12.2017
11:17:42
а пишут ли такой код?

A64m
19.12.2017
11:17:43
понятно что на бекпаке можно сделать вектор вообще по другому, и соотвественно все пользователи вектора типа вектор алгоритмс будут параметризованными, это даже поэффективнее будет, но неудобно же

Leonid
19.12.2017
11:19:05
ну вот вектор алгоритмс только для MVector же

а, понял

Google
A64m
19.12.2017
11:31:59
потому что тяжеловесно, а для тайпклассов все само работает, словарики подставляет

даже эмельные модули для такого много ручного труда требуют

а тут вообще адище какое-то (но потенциально можно сильно улучшить, тем более что миксины, всего этого эмельного ехал функтор через функтор не надо)

Alexander
19.12.2017
12:36:07
я понимаю что это неуместный канал, но как в питоне принято делать dependency injection/global state?

Aleksey
19.12.2017
12:38:32
используй мою либу, лол :)

Alexander
19.12.2017
12:38:43
какую?

Aleksey
19.12.2017
12:39:07
https://github.com/astynax/yadic

Alexander
19.12.2017
12:39:08
вообще я хочу очень малого у меня в модуче Bla.stdlib есть фунция def blabla(name):

мне нужно чтобы у неё был доступ к окружению (aka Reader) в котором пара констант определены

то чтобы не было доп параметров у функции и она не была куском объекта

само же окружение определяется на момент старта программы

(это интерпретатор если что)

Aleksey
19.12.2017
12:40:30
ну ты можешь ещё искать выше по стэку во фреймах :)

Так делают магический request во фреймворке Flask

Alexander
19.12.2017
12:41:13
жуть какая

Vasiliy
19.12.2017
12:41:19
просто глобальная переменная на уровне модуля, не?

Aleksey
19.12.2017
12:41:33
Глобальная переменная, это несейфно

Надо тогда thread locals юзать

Alexander
19.12.2017
12:41:48
она не уровня модуля, ну я могу специально обученный модуль сделать и импортировать везде где надо

тредов нету, гарантировано

а если есть, то ссзб и оно не будет работать на других уровнях

Aleksey
19.12.2017
12:42:18
Специально обученный модуль, это класс со статическими методами

Страница 689 из 1551