A64m
ну в такой ситуации, когда кто-то просто накостылил парсинг формата в дерево таким образом, недоопределив инстансы библиотеки сериализации, то лучше, наверное, да, сериализацию для этого дерева объектов самому не писать
Leonid 🦇
Вообще конечно парсить можно и без инстансов и классов
Anton
Привет всем, 526 Хаскелистов!
Кто знает как у Stack спросить версию конкретного пакета?
Можно выудить с помощью shell магии из `stack list-dependencies`, но должен-же быть эллегантный путь спросить это через Stack.
Misha
А почему грепнуть не варик?
Misha
там же каждая строка — это name version
Misha
грепни и разбей по пробелу
Misha
(извиняюсь за не так уж релевантный ответ)
Cheese
stack exec -- ghc-pkg field mtl version
Cheese
или https://www.stackage.org/lts-9.9/package/mtl
Alexander
как убедить ghc что констрейнты не redundant?
Alexander
поскольку без них он не выводит тип
Leonid 🦇
перейти на 8.2
Leonid 🦇
там был баг
Alexander
уже 8ю2
Alexander
оно у нас явно включено
A64m
так там же это не ошибка вроде
Alexander
с -Werror не собирается
Alexander
ну я отключил на файле этот warning
Alexander
отключение warning-ов на функцию ещё не запилили кстати?
A64m
а собирались?
Alexander
до включения ворнинга - собирались
Alexander
это канал об аниме? как в одном никсфайле перепределить конфигурацию нескольких пакетов?
Alexander
есть
let blabla = haskellLib.overrideCabal package (drv: {
configureFlags = ....
и много остального})
in blabla.overrideAttrs( attrs: {....})
Alexander
мне бы добавить ещё blablabla1 пакет
Leonid 🦇
in { blabla = blabla.overrideAttrs... ; blablabla1 = ...}?
Leonid 🦇
в каком смысле "добавить"?
Alexander
в смысле чтобы blablabla1 который haskellLib.overrideCabal another-package бы оверрайженным подгрузился
Alexander
там зависимость от package если что
Alexander
в смысле package зависит от package1 у которого яхочу поменять флаги сборки
Alexander
@lonokhov ^
Alexander
если я просто сделаю blablabla1 = .. то все хорошо будет?
Leonid 🦇
зависимости оверрайдятся через оверрайд вызова callPackage. т.е
let dep = overrideWhatever blablah1
blabla1 = blabla.override { dep = dep }
in blabla1.overrideAtttrs....
Alexander
+
Alexander
спасибо
Leonid 🦇
короче формалсы для пакета оверрайдятся через pkg.override
Leonid 🦇
и вообще используй в примерах вменяемые имена - foo,bar и т.д.
Leonid 🦇
а то я запутался
Alexander
foo, зависит от bar
Alexander
есть
let acme-foo = haskellLib.overrideCagal foo (drv: { configureFlags = ... ....})
in acme-foo.overrideAttrs( attrs: {...}
Alexander
foo зависит от bar
Alexander
хочу для bar тоже поменять флаги
Alexander
вот
eahqzsr
Всем привет, написал программу: https://pastebin.com/iVWvWn4S
eahqzsr
Работает как надо, но производительность убийственно низкая - генерация файла размером 1Гб занимает примерно 35 секунд.
eahqzsr
Есть идеи куда копать?
eahqzsr
Программа в двух словах делает следующее: читает список строк. Каждая строка - это префикс и суффикс, разделенные пробелом. После генерирует список всех комбинаций префиксов и суффиксов.
A64m
можно bytestring использовать, например
eahqzsr
Пробовал, не сильно помогает (нужно хотя бы раз в 10 быстрее).
A64m
быстрее байтстринга точно ничего нет, хотя смотря как писать, конечно
eahqzsr
Сейчас написал на питоне - питон3 в 2 раза медленнее, pypy в 2.5 раза быстрее.
Зигохистоморфный
а как же Text?
A64m
@xgrommx text тормозной
A64m
@eahqzsr входной бы файл для замеров
eahqzsr
Сейчас сделаю файл.
eahqzsr
Вот версия с байтстрингом: https://pastebin.com/M0EfHXme
eahqzsr
Опции ghc: -dynamic -O2 -optc-O3
Кабачок
О, интересно.
eahqzsr
Тестовый файл: https://pastebin.com/49zGQ6Zt
eahqzsr
Эквивалентная программа на питоне: https://pastebin.com/BAj1AFMJ
eahqzsr
Тайминги на моей машине: питон2: 27сек, pypy: 13сек, haskell/ByteString.Lazy: 39 сек.
eahqzsr
Надо отметить, что реальный файл на порядок больше, соответственно генерируется порядка 100Гб, т.е. совсем строгая реализация не катит.
Кабачок
https://ideone.com/EktuDG
eahqzsr
eahqzsr
Тут не в буферизации дело, грузит ядро на 100%.
Dmitry
ввод вывод тормозит
Dmitry
в питоне с печатью всего этго стафа занимает так мало?
eahqzsr
Не понял, какого стаффа? Вывод во время тестирования в /dev/null перенаправляю.
eahqzsr
Эта программа работает продьюсером для другой программы, и консьюмер очень быстрый.
eahqzsr
time ./gen2 < sample_input.txt > /dev/null
Ilya
может у хаскеля и питона разная модель использования памяти в этой задаче? код питона не смотрел, код хаскеля выглядит правильным
Ilya
надо бы аккуратно разобрать, где там что копируется / не копируется
eahqzsr
Код питона куда уж проще, два вложенных цикла.
Dmitry
ну, например, посчитать суммы длин получившихся строк - у меня 4 секунды, а напечатать весь стаф в /dev/null - 30 секунд
eahqzsr
Ну понятно, там же конструкторы ленивых строк и т.п.
Dmitry
ну вот написал 13 vs 15 - pypy vs haskell, но все равно непорядок
eahqzsr
Могу написать на C для поднятия челленжда.
adam
Напиши тардис на С для поднятия челленджа.
eahqzsr
Без обид. Я прост в последний раз на хаскеле лет 15 назад серьезно писал, ну вот решил на простой задаче вспомнить как оно и получил не оч результат.
A64m
смешно, но программа четверть времени на ГЦ тратит