metaclass: (Default)
[personal profile] metaclass
Рунтайм хаскеля под винду все-таки укуренный какой-то. На каждый вызов hs_init/hs_exit создается поток и больше не убивается, даже после того, как либа с хаскелем выгружается.
Даже если в хаскеле вообще ничего не вызывать - только инициализировать и деинициализировать.
В общем, перспективы интеграции либ на хаскеле в другие приложения весьма смутные, разве что один раз рунтайм создать и закрывать только при выходе. И то - есть ненулевая вероятность, что это все помрет в зависимости от фазы луны. Сейчас вот еще под AppVerifier гляну, как оно себя ведет.

Date: 2011-11-04 08:29 pm (UTC)
From: [identity profile] kkirsanov.livejournal.com
Можно матрешку!
Заэмбедить в приложение Питон, а в питон хаскель.
Потом прибивать питон и смотреть на развалины.

Date: 2011-11-04 08:33 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Ну, может, лет через 10 допилят. Или загнётся.
Вообще есть ощущение, что хаскель - больше не для реальных задач, а для обучения программированию. Правда, каков процент тех, кто для кода на хаскеле оценит время и требуемый объём памяти - я не знаю.

Date: 2011-11-04 08:34 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Суровое решение - запускать хаскельную либу в отдельном процессе. Для полноты картины общаться с ней через npapi (как плагины в браузерах).

Date: 2011-11-04 08:53 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, заебатый костыль. Общаться впрочем можно и через перенаправление stdin/stdout, как сейчас иногда запускают старые досовские расчетные проги, от которых алгоритмы давно забыты, авторы умерли или сошли с ума, а считать надо :)

Date: 2011-11-05 02:34 pm (UTC)
From: [identity profile] trueblacker.livejournal.com
одумайтесь, ребе
дальше только героин

Date: 2011-11-05 04:54 pm (UTC)
From: [identity profile] blackyblack.livejournal.com
Правильней через сокеты. А чо, любопытная штука получится.

Date: 2011-11-04 10:15 pm (UTC)
From: [identity profile] max630.livejournal.com
А это вообще предусмотренная авторами хаскеля задача - использовать хаскель как либу? Может, проще целиком программу на хаскеле сделать?

Date: 2011-11-04 10:22 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, предусмотренная, в документации несколько разделов на эту тематику.

Date: 2011-11-05 10:08 am (UTC)
From: [identity profile] awson.livejournal.com
А нахера hs_init/hs-exit вызывать больше одного раза? Нет, правда интересно, что это за юзкейс такой, где оно необходимо?

Чудес там никаких нет и в зависимости от фазы луны там ничего не помирает. У меня, по кр. мере, все работало всегда и, насколько можно судить по косвенным признакам, у Аугустссона в Креди-Свиссе тоже все работало, причем это (DLL, сделанные с помощью GHC) у них была едва ли не единственная модель деплоймента приложений на Хаскелле.

Возможно, грабли какие-то были, но если и так, то совершенно типичные и обычные, решил и забыл. Я, например, не помню.

Date: 2011-11-05 10:33 am (UTC)
From: [identity profile] metaclass.livejournal.com
Можно не вызывать, да.

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

У меня нет желания наткнутся на "программа выдает странную ошибку с цифрами" где-нибудь у клиентов, поэтому я заранее прогоняю все мыслимые и немыслимые вариации использования.

Я сейчас уже откопал место, где оно валится с ошибкой, сижу в gdb отлаживаю. По стилю более всего похоже, что при hs_exit забывают обнулить какой-то из глобальных указателей.

Date: 2011-11-05 10:55 am (UTC)
From: [identity profile] awson.livejournal.com
Я совершенно не исключаю, что hs_exit привинтили просто для красоты (для симметрии - раз есть hs_init, сделаем hs_exit) и, типа, на будущее, но это будущее пока так и не наступило, потому что это никому не понадобилось, поэтому я ни в коем случае не стал бы трактовать это как "там не все хорошо".

Непонятно, о чем "утечка хендлов при этом" и "оно валится с ошибкой"? Где это? когда? После hs_exit и нового hs_init? Тогда просто рекомендую забить - время потеряете много, а умнее станете ненамного, если вообще. Лучше всего сделать багрепорт или фичереквест - кто-нибудь и откликнется, возможно, просто прокомментирует. Для чела в теме (Marlow?) это 3 секунды делов, а вам - неделю ковыряться. Просто считайте, что никакого hs_exit нет в природе да и все.

Date: 2011-11-05 11:07 am (UTC)
From: [identity profile] metaclass.livejournal.com
Нет уж, красота или не красота там - если ресурсы аллоцируются, их нужно корректно грохать, особенно если речь идет о базовых вещах типа рунтаймов языков программирования.

Чтобы создать багрепорт, его нужно сформулировать.
Впрочем, нужное место я уже нашел, они там глобальную/tls переменную myTask не очищают при freeTask

Date: 2011-11-05 08:11 pm (UTC)
From: [identity profile] awson.livejournal.com
Если б hs_exit вообще б не существовал, то и вопросов бы не было. Типа, мы такой возможности не представляем - механизмы ОС вам в руки. Они это начали, но бросили, поскольку геморрой есть, а спроса - нет. Главное - это не симптом каких-то бОльших проблем, а просто компромисс в условиях недостатка manpower.

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

Однако, нащет багрепортов. Это - наш долг перед комьюнити. Я, например, минимум десяток в разное время зафайлил и все (кроме http://hackage.haskell.org/trac/ghc/ticket/4931, для которого мне так и приходится таскать локальный патч) были пофикшены с благодарностями.

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 Oct. 4th, 2025 04:22 am
Powered by Dreamwidth Studios