
Евгений
19.12.2017
10:07:58

A64m
19.12.2017
10:08:20

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

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

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

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

Index
19.12.2017
11:10:01

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
порвал чат

Alexander
19.12.2017
11:10:53

A64m
19.12.2017
11:12:26

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

Index
19.12.2017
11:27:59

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
Специально обученный модуль, это класс со статическими методами