دسته ابزارِ هسکل - 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.repo

  • SUSE 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

    قرار داره.