Dmitry
если б не жвм.
A64m
в хаскеле что-то малое кол-во строк уже давно не приветствуется
Dmitry
кмпв, jvm будет запрещена
Dmitry
@A64m_qb0 кем не приветствуется? если так, то это начало конца
Евгений
в хаскеле что-то малое кол-во строк уже давно не приветствуется
When I was young, малое количество SLOC было декларируемым преимуществом...
A64m
да уже годы, сколько я хаскель помню, есть какое-то движение писать подлиннее
A64m
да, то что мало строк по сравнению с условной Явой - это и сейчас декларируется
A64m
но вообще много всякого движения против линз, тайпклассов, за страшные имена, за полную калификацию, за детализированные импорты
Dmitry
@A64m_qb0 а где это движение? какие-то важные люди это говорят? это в рамках движения что бы ублажить ньюкамеров или что?
Евгений
да уже годы, сколько я хаскель помню, есть какое-то движение писать подлиннее
А пример конкретный можно? Фреймворка, либы и чего-нибудь такого, где стремятся
Dmitry
против линз понять можно, хотя надо не против линз, а за какие-то более лучшие линзы
Dmitry
против тайпклассов - в голове не укладываются
Max
Малое количество LoC - это плохо. Ломает систему KPI.
Dmitry
за полную квалификацию тоже
Dmitry
это если в KPI есть LOC
Max
Всегда были )
Max
Почему Go и JS в фаворе?
Dmitry
да где были то?
Dmitry
опять же, жс должен давать меньше строк, чем go
Dmitry
go специально для квадратно-гнездовых людей
Max
Схреналь?
Евгений
Там где популярны LOC в KPI господствует java, а не JS или go
Dmitry
ну он типа скобок, только со странным синтаксисом
Max
Ну, ява по умолчанию
Max
Синглтон фабрики фабрик фасадов классов
Евгений
ну он типа скобок, только со странным синтаксисом
По мне так го это типа питона, только с указателями и сишным синтаксисом
A64m
Хотя если подумать, и против тайпклассов гонзалес писал, и полную квалификацию продвигал он, и на адовый for-loop стиль с операторов он переходил
Dmitry
ну ок, я очень примерно представляю. много раз слышал, что ecmascript мощный, как скобки
A64m
но нет, не только Гонзалес.
Arsen
Синглтон фабрики фабрик фасадов классов
bean потерялся https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html
Dmitry
но тайпклассы то чем?
A64m
Вот Диль против ТХ и дерайвингов агитирует, это ж тоже за увиличение числа строк
Dmitry
против дерайвинга понятно - тормоза и в компайл тайме, и в рантайме
Dmitry
но нужен какой-то более лучший дерайвинг, пожалуй
Leonid 🦇
я вот за явные импорты. и еще я за плагины это автоматизирующие
Leonid 🦇
вот на пурсе очень удобно в емаксе
A64m
я против явных импортов потому что это недосигнатуры
Leonid 🦇
явные импорты улучшают форвард компатибилити
A64m
но тайпклассы то чем?
программный манифест тайпклассохейтеров это вот это вот http://www.haskellforall.com/2012/05/scrap-your-type-classes.html
A64m
явные импорты улучшают форвард компатибилити
сигнатуры улучшают, а явные импорты это кучи плохоподдерживаемого непереиспользуемого ужаса
Leonid 🦇
сигнатуры это этот ваш бэкпэк? /me дикий, на ML не писал
Dmitry
нам нужен какой-то другой хаскель. куда не будут пускать психов.
A64m
в бекпаке это все тяжеловесно слишком
Leonid 🦇
@A64m_qb0 как ты там говорил "Бэкпэк как разрабатывался для уничтожения стэка, так и развивается"
Dmitry
а какой сейчас статус бэкпака?
A64m
в 8.2.2 как-то работает, но все еще куча багов, вроде несовместимости с CPP.
A64m
у него два пользователя сейчас - автор и Кметт, так что кучу еще нарепортят
Leonid 🦇
еще Остин писал что балуется
Leonid 🦇
https://github.com/haskell/cabal/issues/4206#issuecomment-352053590 во
A64m
да, я вспомнил, что @int_index еще
Leonid 🦇
опять злой кабал против коммэрции
Зигохистоморфный
https://github.com/andorp/grin
A64m
был еще репозиторий, в котором был ГРИН из jhc очищенный от остального jhc
A64m
в бекпаке плохо, что у формата файлов в котором много модулей можно объявлять нету нормальной поддержки и не предполагается (по замыслу автора это для написания тестов). Когда модули можно в одном файле объявлять это удобно же
A64m
но сам многомодульный формат адово тяжеловесный, вообще в бекпаке все безжалостно карает за его использование, потому что он "предназначен для организации кода в крупных масштабах, а не для мелочей всяких"
Dmitry
пытаюсь читать описание бакпэка - но TL;DR - это как в окамле?
A64m
При том, что потенциально он легковеснее эмельных модулей может быть потому, что у миксинов применение "функторов" автоматическое
A64m
пытаюсь читать описание бакпэка - но TL;DR - это как в окамле?
отдаленно, разве что. не как в окамле то, что это миксины, второе поколение эмельных модулей, которых в эмелях нету. Во вторых не как в окамле потому, что раздельно не билдится, т.е. в этом смысле как в mlton-е скорее
A64m
а, еще неудобное там, что очень тупой матчинг сигнатуры к имплементации, без всяких сабтайпингов для сигнатур функций, только один в один
A64m
т.е. например, вот тот бойлерплейт ужас из vector где дженерик-функции специализируются в специальных модулях бекпаком не победить
A64m
вообще вектор с этими его сишными макросами для генерации инстансов и прочими ужасами хороший индикатор того, что в хаскеле проблема с модулями, только каогда там все красиво можно будет сделать - тогда и можно сказать, что ситуация с модулями исправилась
Влод
генерация инстансов это как специализация темплейтов в плюсах? и как помогут модули?
A64m
не совсем. там просто зиллион бойлерплейтных иснтансов, которые отличаются типами в основном
A64m
и чтоб их руками не писать - там сишные макросы
Vladislav
т.е. например, вот тот бойлерплейт ужас из vector где дженерик-функции специализируются в специальных модулях бекпаком не победить
Почему не победить? Если эти generic функции бэкпэком параметризовать, то их и специализировать вручную не надо
A64m
#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 🦇
порвал чат
A64m
Почему не победить? Если эти generic функции бэкпэком параметризовать, то их и специализировать вручную не надо
ну если дженерик вектора делать на бекпаке, а не на классах - да, но классы тут удобнее. Речь о том, что бекпак не может сделать из дженерик модулей специализированные анбоксед, сторабл и боксед, а эмельные модули могут, там сигнатуры применяются не один в один а с сабтайпингом
Vladislav
Чем классы тут удобнее?
Vladislav
Я пока что только путался от того, что тридцать с половиной штук названо Vector
Vladislav
Хорошо хоть для MVector дали название другое.
Vladislav
Могли бы и для класса дать CVector
Vladislav
А без класса еще лучше
A64m
там тогда констрейнты надо параметром
так это бекпак может как раз
A64m
но не факт, что это и понадобится даже
Alexander
в смысле, если контрейнт параметром - то проблема решится
Alexander
я про это
A64m
А без класса еще лучше
чем лучше-то? Тогда обобщенный код для любого вектора как писать?