metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-09-23 07:30 am

Доказательство программ? Поедание грибов!

Завел таки этот долбанише Сopilot. Ну вуду, что тут еще можно сказать.

1) Скачать cabal
2) Запустить cabal, разобраться с тем, чего он от меня хочет. А хотел он чтобы я скачал список пакетов с hackage и чтобы у него был конфиг (конфиг-то он сам создает, в user/AppData/cabal/config)
3) Разобраться почему он ложит хер на опции в конфиге. Пока до меня дошло, что в созданном конфиге большинство опции закоментарено -- и это надо убрать чтобы опции работали, я перекопал и ghc-pkg, и кэш пакетов и прочая и прочая и прочая, команду же удаления пакетов так и не нашел.

3) Загрузить оный копилот в ghci. Задолбался искать нужную команду. Вывод :? показывает тыкву, т.к. на один экран не помещается, а скролла на предыдущие экраны в винде нет.
Офигенно логичное действие :m + Language.Copilot
Хорошо, что глянул неймспейс этого дела, потому как неоткуда это не следует.

4) Загрузить пример fib, который там приведен первым. Очевидно, он нихера не грузится и не компилирует, т.к. к этому примеру еще идет 20 строк импорта модулей, которые они "случайно" не привели. Чтобы загрузился - нужно посмотреть http://github.com/leepike/Copilot/raw/master/Language/Copilot/Examples/Examples.hs и вытащить оттуда эти импорты в пример.
команды тоже логичные
:cd f:\
:l fib.hs

5) выполнить compile fib "fib" baseOpts. Подывыцца бредовому сообщению
*Main Language.Copilot> compile fib "fib" baseOpts
Trying to create (if missing) ./ ...
*** Exception: CreateDirectory ".": permission denied (Access is denied.)

6) переместить fib.hs в папку на уровень ниже, перейти туда и повторить
:cd f:\2\
:l fib.hs
подывыцца еще одному бредовому сообщению:
*Main Language.Copilot> compile fib "fib" baseOpts
Trying to create (if missing) ./ ...
Compiling Copilot specs to C ...
Generated fib.c and fib.h
Moving fib.c and fib.h to ./ ...
*** Exception: .\.copyFile3164.tmp: copyFile: permission denied (Access is denied.)

7) Обнаружить что файлы fib.c и fib.h оно таки создало, в отличие от шага 5
8) Собрать их gcc, который идет в комплекте хаскеля. Указав полный путь к gcc, само собой, тут вам не линукс. Собралось.
9) Запускаем
a.exe 10 -> нормально, последовательность фибоначчи
a.exe 120 -> бред сивой кобылы
a.exe 50 -> бред сивой кобылы
a.exe 47 -> последовательность фибоначчи

Смысл? Переполнение 32 битов после 47 числа фибоначчи. Офигенно валидная программа получилась.

[identity profile] nealar.livejournal.com 2010-09-23 09:40 am (UTC)(link)
Разве оно по умолчанию не считает, что HOME="X:\Documents and Settings\metaclass" ?
И таки проблемы с кабалой бывают. Самая частая - отсутствие ./configure .

[identity profile] geovit.livejournal.com 2010-09-23 10:17 am (UTC)(link)
Считает, просто в нём неудобно работать, туда даже винда сама не пишет ничего, кроме ntuser.*.
Остальное всё в подкаталогах держит, девелоперсгайд, все-таки.

Были, наверное, проблемы, но по мелочи. А так, конечно, игрушечное оно всё пока.

[identity profile] nealar.livejournal.com 2010-09-23 10:25 am (UTC)(link)
Неудобно, но я уже туда попихал всякое .ssh и прочее. :)

На *NIX вполне реальная система пакетов, работает и не жужжит. На винде - кой-чего ставится влёт, кой-чего - пошаманив, а некоторые пакеты интересно выступают: есть в платформе какой-нибудь xyz-0.7.5.3, а оно тянет xyz-0.7.5.4, с ним собирается, и в рантайме отваливается с ошибкой загрузки DLL. Если стукнуть молотком объяснить, что надо использовать xyz-0.7.5.3, то всё живёт.
Хотя до энтерпрайзности кабалу ещё пилить и пилить.

[identity profile] geovit.livejournal.com 2010-09-23 11:52 am (UTC)(link)
О, вот-вот, именно это и вылезало.

[identity profile] nealar.livejournal.com 2010-09-23 12:22 pm (UTC)(link)
Причём, я не понял магии: почему у xyz-0.7.5.3, которая идёт с платформой, с DLL всё в порядке, а xyz-0.7.5.4 собирается без ошибок, но DLL получается косая.

[identity profile] geovit.livejournal.com 2010-09-23 12:45 pm (UTC)(link)
Когда я пытался похожую проблему разрешить, я даже требуемый номер версии менял, как у мозилловских расширений при апгрейде мозиллы, но там какие-то вложенные зависимости - одному разрешишь версией на последнюю единичку меньше, начинает вопить следующий по иерархии пакет. Я плюнул.