Tôi đã hy vọng nhúng một trình thông dịch Haskell bằng cách sử dụng hintđể tôi có thể viết các plugin trong Haskell để sử dụng với chương trình của mình. Tôi không muốn phải vận chuyển toàn bộ nền tảng Haskell cho các tệp thực thi của mình.
Thông thường, các tệp thực thi Haskell khá khép kín. Ví dụ: xóa PATHkhông gây ra vấn đề:
$ PATH=. Hello
Hello world
Tuy nhiên, một chương trình thử nghiệm đơn giản sử dụng runInterpreterbom nếu tôi xóa PATH:
$ PATH=. TryHint
GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n"
Những thư viện hoặc thực thi nào phải có sẵn trong môi trường để nó hoạt động?
otool không đưa ra nhiều hướng dẫn:
otool -L TryHint
TryHint:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0)
Mã kiểm tra TryHintkhông làm được gì nhiều:
import Control.Monad
import Language.Haskell.Interpreter
main = do
f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int)
case f of
Left e -> print e
Right r -> mapM_ (print . r) [1..10]
Nó chỉ liên kết fvới một chức năng Test.hsđể được giải thích tại thời gian chạy. Test.hstrông như thế này:
module Test where
f :: Int -> Int
f x = x + 1
PATH=., chẳng hạn như các tệp giao diện cho Prelude và mọi thứ mà nó nhập quá mức, các tệp thư viện thực tế cho cơ sở và ghc-prim và số nguyên-gmp và settingstệp GHC . (Về cơ bản, mọi thứ được cài đặt bên dưới /usr/lib/ghchoặc thư mục tương đương cho cài đặt của bạn.)
PATH= ./TryHintmọi thứ diễn ra suôn sẻ: nó in một vài số, sau đó thoát ra. Tôi cũng đang sử dụng GHC 7.8.3. Bạn đang xây dựngTryHintnhư thế nào?