標籤:

為什麼絕大多數 Haskell 的書籍都不講 FFI ?

補充一下,不是為了找資料學習,只是想知道為什麼正式出版的書里很少提及這麼一大塊領域。


我翻了下手頭的Haskell書籍。以下所列均有對Haskell FFI的介紹:

Beginning Haskell

Haskell 2010 Language Report

Haskell Wikibook

Parallel and Concurrent Programming in Haskell

Programming with Refinement Types: An Introduction to LiquidHaskell

Real World Haskell

The Glorious Glasgow Haskell Compilation System User』s Guide

What I Wish I Knew When Learning Haskell

但是沒必要都看過去,我覺得照ghc手冊和Haskell wiki寫一些例子就足夠入門了。

Haskell的FFI能用的就JavaScript FFI和C FFI。JavaScript FFI是Fay/Haste/GHCJS等Haskell -&> JavaScript編譯器使用的介面,每個編譯器的FFI的API寫法不同,具體請參考相應文檔。

C FFI是ghc支持的唯一FFI,使用時需要關注Haskell值和C值之間的marshalling,注意內存和異常管理,避免資源泄露。使用C FFI需要寫不少boilerplate code,尤其是處理複雜的C數據結構,這個時候有一些輔助工具可以幫助生成這些代碼,包括hsc2hs/c2hs/greencard,以及FPComplete最近發布的inline-c。在了解了ghc FFI的基本用法以後,可以參考以下文章,了解這些輔助工具的使用:

The Haskell Preprocessor Hierarchy : Inside 736-131

Call C functions from Haskell without bindings


因為Wiki和GHC文檔已經很詳細了呀


推薦閱讀:

Robert Harper 不支持Haskell 的理由是?
從字元串到能用的數據結構到底有多遠?——Haskell的Parsec實戰
什麼是 Type Driven Development ?
如何評價即將正式 release 的 GHC 8.2.1 ?
[C++]代數數據類型與模式匹配

TAG:Haskell |