আমি হ্যাস্কেল দোভাষীকে ব্যবহার করে এম্বেড করার আশা করছিলাম hint
যাতে আমি আমার প্রোগ্রামের সাথে ব্যবহার করতে হাস্কেলের প্লাগইন লিখতে পারি। আমি আমার এক্সিকিউটেবলের জন্য পুরো হাস্কেল প্ল্যাটফর্মটি জাহাজে রাখতে চাই না।
সাধারণত, হাস্কেল এক্সিকিউটেবলগুলি বেশ স্ব-অন্তর্ভুক্ত। উদাহরণস্বরূপ, মুছে ফেলা PATH
কোনও সমস্যা সৃষ্টি করে না:
$ PATH=. Hello
Hello world
তবে runInterpreter
বোমা ব্যবহার করে একটি সাধারণ পরীক্ষা প্রোগ্রাম যদি আমি মুছে ফেলি 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"
এটি কাজ করার জন্য কোন লাইব্রেরি বা এক্সিকিউটেবলের পরিবেশে উপলব্ধ থাকতে হবে?
otool
খুব বেশি দিকনির্দেশনা দেয় না:
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)
এর জন্য পরীক্ষার কোডটি TryHint
খুব বেশি কিছু করে না:
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]
এটি কেবল রান-টাইমে ব্যাখ্যা করার f
জন্য একটি ফাংশনের সাথে আবদ্ধ Test.hs
। Test.hs
এটা এমন দেখতে:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, যেমন প্রিলিওডের জন্য ইন্টারফেস ফাইল এবং এটি ট্রান্সজিটিভ ইমপোর্ট করে এমন সমস্ত কিছুই, যার জন্য প্রকৃত লাইব্রেরি ফাইলগুলি বেস এবং জিএইচসি-প্রাইম এবং পূর্ণসংখ্যা-জিএমপি এবং জিএইচসি settings
ফাইল। (মূলত, /usr/lib/ghc
আপনার ইনস্টলেশনের জন্য ইনস্টল করা সমস্ত কিছু বা সমতুল্য ডিরেক্টরি))
PATH= ./TryHint
সবকিছু মসৃণ হয়: এটি কয়েকটি সংখ্যক মুদ্রণ করে, তারপরে প্রস্থান করে। আমি জিএইচসি 7.8.3 ব্যবহার করছি। আপনি কিভাবে তৈরি করছেনTryHint
?