دسته ابزارِ هسکل - Stack
ترجمهی بخشی از صفحهی اصلیِ مستنداتِ Stack .۱۴۰۰/۳/۱۱Stack یک برنامهی چندسکویی برای توسعه ِ پروژههای هسکله. و برای هسکلنویسهای تازهکار و همچنین باتجربه درست شده.
قابلیتهاش اینها هستن:
نصبِ خودکارِ GHC در محلی مجزا.
نصب بستههای لازم برای پروژهها.
ساختن ِ پروژهها.
تست کردنِ پروژهها.
سنجش ِ پروژهها.
طریقهی نصب/ارتقا
ترجمهی صفحهی نصب/ارتقای مستنداتِ Stack .۱۴۰۰/۳/۱۱برای اکثرِ سیستم عاملهای Un*x (شاملِ macOS)، فقط کافیه دستورِ زیر رو اجرا کنین:
curl -sSL https://get.haskellstack.org/ | shیا:
wget -qO- https://get.haskellstack.org/ | shدقت کنید که این دستور برای استفاده از مدیر بسته ِ سیستمعاملتون و نصب در آدرسِ /usr/local/bin نیاز به دسترسی ریشه با استفاده از sudo داره. اگه ترجیح میدین اختیار بیشتری در نصب داشته باشین، به راهنمای دستیِ مربوط به سیستمعاملِ مورد نظرتون در ادامهی این مطلب مراجعه کنین.
باینریهای لازم برای نصبِ Stack در بقیهی سیستم عاملها، در زیر و همچنین در صفحهی انتشارات ِ GitHub لیست شدن. اگه درخواست پشتیبانی سیستم عاملِ دیگهای رو دارین، لطفاً یه ایشیو در GitHub ارسال کنید.
بستههای باینری با این کلیدِ امضا امضا شدن.
اگر هم دارین دستور ای مینویسین که لازم به دانلودِ جدیدترین باینری داره، میتونین از URLهایی با فرمتِ
https://get.haskellstack.org/stable/<پسوند>.<سیستم عامل>استفاده کنین (به عنوان مثال: https://get.haskellstack.org/stable/linux-x86_64.tar.gz) اینطوری همیشه به آخرین نسخهی پایدار اشاره میکنین.
ویندوز
ما پیشنهاد میکنیم با این نصبکنندهها در آدرسِ پیشفرض نصب کنین تا دستورهای stack install و stack upgrade راحت و درست کار کنن.
اگه شک دارین: بهتره که از نسخهی ۶۴-بیتی استفاده کنین.
اگه موقعِ اجرای نصبکننده پیغامِ Windows Defender SmartScreen prevented an unrecognized app from starting رو دیدین، روی More info، و بعد روی دکمهی Run anyway کلیک کنین.
دانلودِ دستی
آخرین انتشار رو دانلود کنین: ویندوز ۶۴-بیت
فایلی که دانلود کردین رو از zip خارج کنین و stack.exe رو یه جایی از %PATH% ِتون قرار بدین (به بخشِ پایین در خصوصِ Path مراجعه کنین)، و بعد میتونین stack رو از command line اجرا کنین.
حالا میتونین stack رو از ترمینال اجرا کنین.
مَک او-اِس
ما عموماً روی نسخهی حاضرِ macOS تست میکنیم و سعی میکنیم با سه نسخهی اساسی ِ آخر سازگار نگهش داریم. Stack ممکنه روی نسخههای قدیمیتر هم کار کنه (YMMV).
دستور ِ نصب
این رو اجرا کنین:
curl -sSL https://get.haskellstack.org/ | shدانلودِ دستی
آخرین انتشار رو دانلود کنین: مک او-اِس ۶۴-بیت
فایلی که دانلود کردین رو از zip خارج کنین و stack رو یه جایی از %PATH% ِتون قرار بدین (به بخشِ پایین در خصوصِ Path مراجعه کنین).
حالا میتونین stack رو از ترمینال اجرا کنین.
با استفاده از Homebrew
اگه ابزارِ محبوبِ brew رو دارین، دستورِ زیر کافیه:
brew install haskell-stackبطریها و فرمولهای Homebrew غیررسمی، و یه ذره عقبتر از انتشارهای رسمیِ Stack هستن، ولی معمولاً در عرضِ یکی-دو روز بهروزرسانی میشن.
بطورِ معمول Homebrew از یه باینری ِ از پیش ساختهشده نصب میکنه (که به این کار از بطری ریختن هم میگن)، ولی اگه brew شروع کرد همهچیز رو از منبع build کنه (که چند ساعتی طول میکشه)، دلیلش یکی از موردهای زیر میتونه باشه (گرفته شده از بخشِ سؤالات متداولِ Homebrew):
تنظیمات (یا پرچمهایی) به دستورِ نصب داده شدن؛ یعنی دستورِ
brew install <formula>از یه نسخهی بطری شده استفاده میکنه، اما
brew install --enable-bar <formula>از منبع build میکنه.
از پرچمِ --build-from-source استفاده شده.
دستگاه یه نسخهی پشتیبانیشدهی macOS رو نداره، چون همهی بطریها فقط برای نسخههای پشتیبانیشدهی macOS ایجاد میشن.
Homebrew جایی غیر از /usr/local ِ استاندارد نصب شده (البته بعضی بطریها این رو پشتیبانی میکنن).
نکته
بعد از نصب، اجرای stack setup ممکنه با پیغامِ
configure: error: cannot run C compiled programs.شکست بخوره، که اون موقع باید دستورِ زیر رو اجرا کنین:
xcode-select --installاز macOS نسخهی 10.14 به بعد (Mojave)، اجرای دستورِ بالا ممکنه کافی نباشه. در اون حالت لازمه با اجرای دستورِ زیر هِدِرهای دیگهای هم نصب کنین:
cd /Library/Developer/CommandLineTools/Packages/
open macOS_SDK_headers_for_macOS_10.14.pkgاگه از نسخهی 10.11 ِمک او-اِس (El Capitan) استفاده میکنین، ممکنه با دو مشکل زیر مواجه بشین (راه حلها گرفته شده از بخشِ سؤالاتِ متداول):
GHC نسخهی 7.8.4 با پیغامِ /usr/bin/ar: permission denied شکست میخوره
نسخهی 7.8.4 از GHC با System Integrity Protection سازگاری نداره. در نسخهی 7.10.2 این مشکل برطرف شده، پس فقط برای کاربرهای 7.8.4 مشکلسازه. اگه نمیتونین از نسخهی 7.10.2 استفاده کنین، میتونین با غیرفعال کردنِ System Integrity Protection این مشکل رو دور بزنین.
هشدار: غیرفعال کردنِ SIP به شدت امنیتِ سیستمتون رو میاره پایین، پس فقط اگه واقعاً مجبور هستین این کار رو انجام بدین!
DYLD_LIBRARY_PATH نادیده گرفته میشه
در نسخهی 10.11 مک او-اِس System Integrity Protection رو معرفی کرد. این قابلیت با بخشهایی از سیستم فایلبندی رفتار متفاوتی داره تا جلوی دستکاریِ سیستم توسط اونها رو بگیره. یکی از عواقب اضافه شدن این امنیتِ بیشتر، اینه که executable ها در آدرسِ /bin مثلِ /bin/sh قبل از احضار شدن، متغیرِ DYLD_LIBRARY_PATH رو از محیط حذف میکنن.
از اونجایی که ghc و hsc2hs و بقیهشون در واقع دستوراتِ shell هستن که از #!/bin/sh استفاده میکنن، قبل از اجرا اون متغیرِ DYLD_LIBRARY_PATH رو از محیط حذف میکنن.
یه راهحلِ احتمالی اینه که /bin/sh رو به آدرسِ homeتون کپی کنین و مسیرِ #! رو در دستورِ shell ِ موردِ نظرتون تغییر بدین تا از اون کپی استفاده کنه.
راهحلِ دیگهای هم که حتماً کار میکنه، غیرفعال کردنِ System Integrity Protection هست.
هشدار: غیرفعال کردنِ SIP به شدت امنیتِ سیستمتون رو میاره پایین، پس فقط اگه واقعاً مجبور هستین این کار رو انجام بدین!
اوبونتو
از راهنمایِ لینوکسِ جامع استفاده کنین.
البته برای Ubuntu 16.10 به بالا یه بسته ِ اوبونتو وجود داره، اما نسخهی Stack از این انتشار، یه کم عقبه. به همین خاطر پیشنهاد میکنیم بعد از نصب، دستورِ stack upgrade --binary-only رو اجرا کنین. برای نسخههای قدیمیترِ Stack که --binary-only رو پشتیبانی نمیکنن، احتمالاً stack upgrade به تنهایی کار کنه.
دِبیَن
از راهنمایِ لینوکسِ جامع استفاده کنین.
یه بسته ِ دِبیَن هم برای Stretch و جدیدتر وجود داره، اما نسخهی Stack یه کم عقبه، پس اجرای stack upgrade --binary-only بعد از نصب پیشنهاد میشه. برای نسخههای قدیمیترِ Stack که --binary-only رو پشتیبانی نمیکنن، احتمالاً stack upgrade کافیه.
سِنتوس / کلاه قرمز / لینوکس آمازون
از راهنمایِ لینوکسِ جامع استفاده کنین.
یه مخزنِ کوپر ِ غیررسمی هم هست. دقت کنین که این نسخه از Stack ممکنه کمی عقب باشه، پس پیشنهاد میکنیم بعد از نصب، stack upgrade رو اجرا کنین.
فِدورا
از راهنمایِ لینوکسِ جامع استفاده کنین.
فِدورا خودِش شامل buildهایی از Stack هست، اما ممکنه نسخهش کمی عقب باشه. به همین خاطر پیشنهاد میکنیم بعد از نصب دستورِ stack upgrade رو اجرا کنید.
SUSE Linux Enterprise / openSUSE
از راهنمایِ لینوکسِ جامع استفاده کنین.
یه بسته ِ غیررسمیِ SUSE هم وجود داره. دقت کنین که این نسخهی Stack ممکنه یه کم عقب باشه، پس پیشنهاد میکنیم بعد از نصب stack upgrade رو اجرا کنین. برای نصب:
۱.
مخزنِ OBS ِ متناسب رو اضافه کنین:
برای openSUSE Tumbleweed هرچیزی که لازمه تویِ انتشار هست.
openSUSE Leap
sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/haskell/openSUSE_Leap_42.1/devel:languages:haskell.repoSUSE Linux Enterprise 12
sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/haskell/SLE_12/devel:languages:haskell.repo۲.
نصب کنین:
sudo zypper in stackآرچ لینوکس
یه بسته ِ رسمی در مخزن ِ Arch وجود داره، پس با دستور زیر میتونین راحت نصبش کنین:
sudo pacman -S stackدقت کنین که این نسخه ممکنه عقب باشه، اما معمولاً در طول یک روز بهروزرسانی میشه. هر وقت هم یکی از وابستگیهای پکیج بهروزرسانی میشن، خودِ پکیج بازسازی میشه.
stack: جدیدترین نسخهی پایدار
haskell-stack-git: نسخهی git
برای استفاده از دستورِ stack setup با نسخههای قدیمیترِ GHC یا روی یه سیستمِ ۳۲-بیتی، ممکنه لازم باشه پکیجِ ncurses5-compat-libs رو نصبشده داشته باشین. اگه این بسته نصب نشده باشه، ممکنه Stack نتونه نسخههای قدیمیتر (قبل از 7.10.3) یا ۳۲-بیتیِ GHC رو نصب کنه.
اگه از مخزن ِ ArchHaskell استفاده کنین، میتونین بسته ِ haskell-stack-tool هم از همونجا بگیرین.
نیکس او-اِس
کاربرهایی که کانالِ nixos-unstable یا شاخه ِ master از Nixpkgs رو دنبال میکنن، میتونن با اجرای دستور زیر جدیدترین انتشار ِ stack رو تویِ پروفایلشون نصب کنن:
nix-env -f "<nixpkgs>" -iA stackدر غیر اینصورت، میشه با قدمهای زیر بسته رو از منبع ساخت.
۱.
مخزن ِ git رو کلون کنین:
git clone https://github.com/commercialhaskell/stack.git۲.
یک فایلِ shell.nix درست کنین:
cabal2nix --shell ./. --no-check --no-haddock > shell.nixدقت کنین که تستها روی نیکس او-اِس شکست میخورن، پس با --no-check غیرفعالشون کنین. در حال حاضر هم haddock برای Stack کار نمیکنه، پس --no-haddock غیرفعالش میکنه.
۳.
Stack رو در پروفایلِ کاربریتون نصب کنین:
nix-env -i -f shell.nixلینوکس (جامع)
دستور ِ نصب
این رو اجرا کنین:
curl -sSL https://get.haskellstack.org/ | shیا:
wget -qO- https://get.haskellstack.org/ | shدانلودِ دستی
آخرین انتشار رو دانلود کنین: لینوکس ۶۴-بیت (ایستا)
فایلی که دانلود کردین رو از حالتِ فشرده خارج کنین و stack رو یه جا تویِ $PATH ِتون قرار بدین (به بخشِ پایین در خصوصِ Path مراجعه کنین).
مطمئن بشین که وابستگیهای سیستمیِ لازم رو نصبشده دارین. اینها شاملِ GCC، GNU make، xz، perl، libgmp، و zlib میشن. ما Git و GPG هم پیشنهاد میکنیم. برای نصب اینها با مدیرِ بستهِتون:
دِبیَن یا اوبونتو:
sudo apt-get install g++ gcc libc6-dev libffi-dev libgmp-dev make xz-utils zlib1g-dev git gnupg netbaseفِدورا یا سِنتوس:
sudo dnf install perl make automake gcc gmp-devel libffi zlib zlib-devel xz tar git gnupg(برای سنتوس و نسخهی ۲۱ و قدیمیترِ فدورا، بجای dnf از yum استفاده کنین)
فدورا ۲۴: برای استفاده از stack setup روی یه سیستمِ ۳۲-بیتی، ممکنه لازم باشه دستورِ sudo dnf install ncurses-compat-libs رو اجرا کنین. اگه این بسته نصب نشده باشه، Stack ممکنه نتونه نسخههای ۳۲-بیتیِ GHC رو نصب کنه.
آرچ لینوکس:
sudo pacman -S make gcc ncurses git gnupg xz zlib gmp libffi zlibبرای استفاده از دستور stack setup با نسخههای قدیمیترِ GHC یا روی یه سیستمِ ۳۲-بیتی، ممکنه لازم باشه پکیجِ ncurses5-compat-libs رو نصبشده داشته باشین. اگه این بسته نصب نشده باشه، ممکنه Stack نتونه نسخههای قدیمیتر (قبل از 7.10.3) یا ۳۲-بیتیِ GHC رو نصب کنه.
کاربرهای Gentoo مطمئن باشن که پکیجِ ncurses رو با USE=tinfo دارن (بدونِ اون Stack نمیتونه GHC رو نصب کنه).
حالا میتونین از ترمینال stack رو اجرا کنین.
مسیر
برای نصبِ Stack میشه در هرجایی از متغیرِ محیط ِ PATH کپیش کرد. پیشنهادِ ما اینه که همون جایی نصبش کنین که Stack خودش اجراپذیرها رو نصب میکنه. این آدرس توی ویندوز میشه %APPDATA%\local\bin، برای مثال: c:\Users\Michael\AppData\Roaming\local\bin. برای بقیهی سیستمها از آدرسِ $HOME/.local/bin استفاده کنین.
اگه اون آدرس رو توی PATH ِتون ندارین، ممکنه لازم باشه PATH ِتون رو آپدیت کنین (یعنی مثلاً ~/.bashrc رو ویرایش کنین).
تکمیلِ خودکار در Shell
اگه میخواین دستوراتی که توی bash وارد میکنین با زدنِ دکمهی tab خودبهخود تکمیل بشن، دستور زیر رو اجرا کنین (یا توی .bashrc اضافه کنین):
eval "$(stack --bash-completion-script stack)"برای دستوراتِ مرتبط با بقیهی shell ها میتونین به این صفحه مراجعه کنین.
ارتقا
اساساً چهار راه برای ارتقای Stack وجود داره:
ابزارِ stack خودش با یه دستورِ upgrade عرضه میشه، که یه باینری ِ stack دانلود میکنه (یا از منبع میسازه) و در آدرسِ پیشفرض نصب میکنه (مثلاً ~/.local/bin یا %APPDATA%\local\bin؛ بخشِ Path در بالا رو نگاه کنین). با stack upgrade میتونین جدیدترین نسخهی رسمی رو بگیرین، و با stack upgrade --git میتونین از Git نصب کنین و کاملاً بهروز باشین. مطمئن باشین که آدرسِ پیشفرض ِ نصب روی PATH ِتون هست و نسبت به stackای که سیستم نصب کرده اولویت داره، یا stack رو از اون آدرس به محلِ سیستم کپی کنین.
اگه از یه مدیرِ بسته استفاده میکنین و با باینریهای رسماً منتشرشده از انتشار (که ممکنه از جدیدترین نسخهی Stack خیلی عقبتر باشن) راضی هستین، فقط کافیه استراتژیهای مدیرِ بسته تون برای ارتقا رو دنبال کنین (مثلاً apt-get update && apt-get upgrade).
دستور ِ دانلود از get.haskellstack.org، آرگومان (یا همون پرچم) ِ -f رو برای نوشتن رویِ اجراپذیر ِ فعلیِ Stack پشتیبانی میکنه. برای مثال:
curl -sSL https://get.haskellstack.org/ | sh -s - -fیا:
wget -qO- https://get.haskellstack.org/ | sh -s - -fبه صورتِ دستی مراحلِ بالا رو دنبال کنین تا جدیدترین باینریها رو از صفحهی انتشار دانلود کنین و با باینری ِ قدیمی جایگزین کنین.
نصب نسخههای قدیمیتر
برای نصب یه نسخهی بهخصوص، در صفحهی انتشاراتِ GitHub نسخهی موردِ نظرتون رو پیدا کنین و لینکِ متناسب در بخشِ Assets رو کلیک کنید.
راهِ دیگه اینه که از URLهایی با فرمتِ زیر استفاده کنین:
https://github.com/commercialhaskell/stack/releases/download/v<نسخه>/stack-<پسوند>.<سیستمعامل>-<نسخه>برای مثال، تاربال (م. فایل آرشیو با فرمتِ tar) ِ Stack 2.1.0.1 برای osx-x86_x64 در آدرسِ
https://github.com/commercialhaskell/stack/releases/download/v2.1.0.1/stack-2.1.0.1-osx-x86_64.tar.gzقرار داره.