При создавании настольных приложений GUI, которые звонят или в OCaml или в Haskell — действительно ли это - поручение дурака?

И в Haskell и в OCaml, возможно звонить на язык из программ C. Как выполнимый это должно было бы создать Исходные приложения или для Windows, Mac или для Linux, который сделал широкое применение этой техники?

(Я знаю, что существуют библиотеки GUI как wxHaskell, но предполагают тот, требуемый, чтобы просто иметь часть Вашей прикладной логики на иностранном языке.)

Или действительно ли это - ужасная идея?

6
задан Rob Lachlan 24 April 2010 в 00:09
поделиться

5 ответов

Я широко использую это, компилируя общие библиотеки haskell, которые вызываются вне Haskell.

обычно задействованные задачи заключаются в

  1. создании надлежащих внешних деклараций экспорта
  2. создании хранимых экземпляров для любых типов данных, которые вам необходимо маршалировать
  3. создания структур C (или структур на языке, который вы используете) чтобы прочитать эту информацию
  4. , поскольку я не хочу вручную инициализировать haskell RTS, я добавляю код инициализации / завершения в саму библиотеку. (dllmain в окнах __attribute__ ((конструктор)) в unix)
  5. , поскольку они мне больше не нужны, я создаю файл .def, чтобы скрыть все функции закрытия и rts от нахождения в таблице экспорта (окна)
  6. использовать GHC для компиляции всего вместе

Эти задачи довольно роботизированы и структурированы до такой степени, что вы можете написать что-нибудь для их автоматизации. Фактически, то, что я сам использую для этого, - это созданный мною инструмент, который отслеживает зависимости от функций, которые вы пометили для экспорта, и он завершит их и скомпилирует для вас общую библиотеку, а также предоставит вам объявления на C / C ++.

(к сожалению, этот инструмент еще не взломан, потому что есть кое-что, что мне еще нужно исправить и протестировать, прежде чем я смогу это сделать)

Инструмент доступен здесь http: // hackage .haskell.org / package / Hs2lib-0.4.8

3
ответ дан 8 December 2019 в 12:58
поделиться

Вы также можете встроить OCaml в C (см. руководство ), хотя это не так часто делается, как расширение OCaml с помощью C .

4
ответ дан 8 December 2019 в 12:58
поделиться

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

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

Я бы сказал, если есть веские причины использовать C для передняя часть (например, у вас есть устаревшее приложение), и вам действительно нужна библиотека Haskell, или вы хотите использовать Haskell по какой-то другой причине, тогда да, сделайте это. Главный риск заключается в том, что этим занимается не так много людей, поэтому меньше документации и примеров, чем для вызова другим способом.

5
ответ дан 8 December 2019 в 12:58
поделиться

Или это ужасная идея?

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

2
ответ дан 8 December 2019 в 12:58
поделиться

Я считаю, что лучший подход, даже если и графический интерфейс, и логика написаны на одном языке, - запустить два процесса, которые обмениваются данными через удобочитаемый , текстовый протокол (своего рода DSL). Эта архитектура применима и к вашему случаю.

Преимущества очевидны: графический интерфейс можно отсоединить и заменить, автоматические тесты проще, регистрация и отладка намного проще.

4
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: