metaclass: (Default)
[personal profile] metaclass
Исходник на хаскеле, 2.8 мега, 6000 строк, экспорт из базы данных. GHC при компиляции падает с переполнением стека.

PS: Собралось:

D:\Programm\Haskell\ghc-6.10.2\bin\ghc.exe --make -o test2.exe "test2.hs" +RTS -K100000000
В процессе сожрало 1.5 гигабайта памяти :)

Екзешник получился 43 мегабайта. Отрабатывает сортировку списка и вывод проекции из него достаточно быстро.
Теперь мне пришло в голову, что можно сделать экспорт в более гуманный формат (CSV или вообще бинарный), а из метаданных, которые живут в базе, сгенерить его читалку, тогда компилироваться будет быстро, и можно будет проверить на больших объемах данных.

Date: 2009-12-14 12:51 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Ага, сказали суровые сибирские мужики.

Date: 2009-12-14 01:05 pm (UTC)
From: [identity profile] aamonster.livejournal.com
2.8 мега и 6000 строк - это далеко не "ага", а не слишком-то большой проект.

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

Date: 2009-12-14 01:07 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Это не проект, это один файл, с списком из 6000 кортежей с 27 полями.

Date: 2009-12-14 01:17 pm (UTC)
From: [identity profile] aamonster.livejournal.com
А... Интересно, сломаются ли на таком (что три метра кода - это один объект) более привычные компилеры.

Date: 2009-12-14 01:23 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
нет. мне на бородатом SunCC Pro года так 2000 --- 2001 случалось компилировать стабы перла, размером 90 мегабайт файл и более.

Date: 2009-12-14 01:24 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, меня этот вопрос тоже интересовал, но писать экспорт из проги на дельфи в код на дельфи или C# мне влом :)

Date: 2009-12-14 08:48 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
C# компилирует 40-50 мб исходники нормально. Но студиевскому интеллисенсу начинает становиться непредсказуемо плохо (ака хаотичные подтормозы)

Date: 2009-12-14 01:24 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Сгенерированный, что-ли?

Date: 2009-12-14 01:51 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, экспорт из дельфи :)

Date: 2009-12-14 01:55 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Ах, вот в чём дело.
GHC очень не любит дельфи, а дух его
обязательно просочился при экспорте.

(Там с самого начала было написано,
что это экспорт из базы, и я этого не заметил,
или ты сейчас это дописал?)

Date: 2009-12-14 02:10 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Было написано :)
А вообще да, использовать дельфи совместно с GHC это такое междурасовое скрещивание, что ощущаешь себя доктором менгеле в командировке в отряде 731.

Date: 2009-12-14 02:19 pm (UTC)
From: [identity profile] nivanych.livejournal.com
> Было написано :)

Вот блин, одну строчку прочитать не могу, устал, что-ли...

> дельфи совместно с GHC

Если на уровне генерации кода, то не страшно.
А вот с FFI, это, думается, дааа %)

Date: 2009-12-14 02:29 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Я до FFI еще не добрался.
Сильно хотелось бы сложные типы данных передавать между дельфи и GHC, но чувствую, что проще будет в дельфи сериализовать, в хаскеле парсить. Вплоть до использования protobuf.

Date: 2009-12-14 02:34 pm (UTC)
From: [identity profile] nivanych.livejournal.com
> проще будет в дельфи сериализовать, в хаскеле парсить

В смысле, проще, чем FFI? Уверен, что проще.

Date: 2009-12-14 01:10 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Я, как бы, ни разу ни спорю. Применимость хаскелла в продакшене для меня была и остается вопросом. На который я пока не вижу для себя ответа.

Date: 2009-12-14 12:52 pm (UTC)
From: [identity profile] kiryl.livejournal.com
Софт вообще дерьмо.

Date: 2009-12-14 01:26 pm (UTC)
From: [identity profile] zelanton.livejournal.com
ололо
http://lurkmore.ru/Haskell

Date: 2009-12-14 01:52 pm (UTC)
From: [identity profile] metaclass.livejournal.com
"Хаскель — это как ламборджини в деревне. Немного подрочил — и пошел работать на тракторе."
Вот, примерно так и есть. :)

Date: 2009-12-14 01:48 pm (UTC)
From: [identity profile] potan.livejournal.com
Без оптимизации?

Date: 2009-12-14 02:34 pm (UTC)
From: [identity profile] potan.livejournal.com
Можно попробовать с -H поиграться.

Date: 2009-12-14 02:48 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Собралось, обновил пост.

Date: 2009-12-14 02:30 pm (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Сделай доброе дело, добавь тикет.

Date: 2009-12-14 02:32 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Я еще не пробовал размер стека менять для рунтайма в GHC.

Date: 2009-12-14 02:49 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Все, собралось :)

Date: 2009-12-14 02:31 pm (UTC)
From: [identity profile] vromanov.livejournal.com
нафиг-нафиг.. Еще и с такими глюками бороться...

Date: 2009-12-14 02:51 pm (UTC)
From: [identity profile] clayrat.livejournal.com
я ж грил надо было в commonlisp гнать =D

Date: 2009-12-14 02:59 pm (UTC)
From: [identity profile] metaclass.livejournal.com
И потом парсить его хаскелем?

Date: 2009-12-14 03:12 pm (UTC)
From: [identity profile] clayrat.livejournal.com
лучше, конечно, самим лиспом, но на худой конец почему бы и не хаскеллом? интерпретатор lisp->haskell не то чтобы очень сложная программа, см http://www.defmacro.org/ramblings/lisp-in-haskell.html - около 200 строчек: лямбда синтаксис и s-expressions концептуально сходны.

Date: 2009-12-14 03:25 pm (UTC)
From: [identity profile] potan.livejournal.com
Теперь то же самое с -O3 :-)

А вообще вполне приемлемое решение - выдавать отчет ввиде программы, которая осуществляет по нему навигацию. Ночью компилируется, а днем запускается.

Date: 2009-12-14 04:44 pm (UTC)
From: [identity profile] metaclass.livejournal.com
c -O3 получился 13 мег бинарник, компилировался 6 минут, сожрал где-то 1.2 гига памяти при компиляции.

Date: 2009-12-14 04:55 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
>В процессе сожрало 1.5 гигабайта памяти :)

А вот это уже характерно. Когда лучшая программа на Хаскелле (которую всегда называют при просьбе показать большой проект) ест столько памяти на небольшом и довольно безобидном инпуте. Real World Haskell как он есть.

Date: 2009-12-14 05:05 pm (UTC)
From: [identity profile] http://users.livejournal.com/_zerg/
У меня плюсы (gcc) сжирают около двух гигов памяти при компиляции.

Date: 2009-12-14 05:09 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Трехмегабайтного файла?

Date: 2009-12-14 05:14 pm (UTC)
From: [identity profile] http://users.livejournal.com/_zerg/
не скажу точно на какой файле это происходит, но весь проект на три с половиной мега.

Date: 2009-12-14 05:57 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
ну таки есть разница.

Date: 2009-12-14 07:35 pm (UTC)
From: [identity profile] kiryl.livejournal.com
При агрессивном использовании препроцессора/шаблонов размер исходного файла значения не имеет.

Date: 2009-12-15 03:52 am (UTC)
From: [identity profile] http://users.livejournal.com/_zerg/
Так оно и есть.

Date: 2009-12-15 03:51 am (UTC)
From: [identity profile] http://users.livejournal.com/_zerg/
Я хотел сказать, что 1.5G отъеденных GHC не так уж и плохо.

Date: 2009-12-14 05:52 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Какая она лучшая? Это банальный тест, сгенеренный из базы исходник (просто данные) и к нему два файла обвязки коротеньких.

Я вообще проверяю идею "можно ли обрабатывать большие объемы данных хаскелем". Вообще судя по результатам - можно, вот только прикручу еще загрузку данных из внешнего файла, и запилю туда гига два экспорта из базы :)

Date: 2009-12-14 05:53 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Лучшая известная программа на хаскелле --- это компилятор хаскелла

Date: 2009-12-14 05:56 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А-а, еле дошло :)

Date: 2009-12-14 11:20 pm (UTC)
From: [identity profile] holmic.livejournal.com
и чем же этот инпут небольшой и безобидный? 6000 сущностей в одном модуле, которые нужно оттайпчекать хиндли-милнером - по-моему вполне ожидаемое поведение.
Можно и строчку придумать, которая будет там выдавать какой-нибудь тапл в миллион полей и ghc на такой строчке тоже сломается.

Date: 2009-12-15 12:52 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да вроде Хиндли-Милнер сам по себе много памяти не требует. Я бы еще понял, если бы там были мегабайты сложного кода с классами и семействами типов и пр. А тут просто табличка. Получается по 10 КБ на одну переменную...

Date: 2009-12-15 12:57 pm (UTC)
From: [identity profile] palm-mute.livejournal.com
Хиндли-Милнера можно свести с ума простым кодом:
let f1 x = (x, x)
let f2 x = f1 (f1 x)
let f3 x = f2 (f2 x)
let f4 x = f3 (f3 x)
let f5 x = f4 (f4 x)
let f6 x = f5 (f5 x)
let f7 x = f6 (f6 x)

Date: 2009-12-15 01:35 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ууу, какая полезная шиза:)

Date: 2009-12-15 02:11 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Скормил Окамлу, он надолго задумался, но в константной памяти - 2 мега всего. Что подтверждает мои слова выше.

Date: 2009-12-15 02:19 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Сейчас для сравнения сгенерил исходник с 6000 туплами по 27 элементов (инты, флоаты и строки) и скормил его Окамлу.
Компиляция в байткод заняла 3 секунды и 32 мега памяти.
Компиляция в нативный код заняла 19 секунд, из которых секунды 3 работал окамл, а все остальное время - масм. Памяти съел 37 мегов.
Значит, проблема не Хиндли-Милнере.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 1st, 2025 01:14 am
Powered by Dreamwidth Studios