در این مطلب با مقاله معرفی زبان برنامه نویسی Haskell در خدمت شما هستیم. زبان برنامه نویسی Haskell (هسکل) بخاطر منطق دان Haskell Brooks Curry به این اسم نامیده شد که کار وی در منطق ریاضی به عنوان پایه ای برای زبان های برنامه نویسی تابعی استفاده می شود. Haskell همچنین محاسبات lambda را اجرا می کند، بنابراین آرم انتخاب شده برای Haskell حاوی نماد lambda است. Haskell یک زبان برنامه نویسی تابعی است که مخصوص محاسبات نمادین و برنامه های کاربردی پردازش لیست طراحی شده است. برنامه نویسی تابعی بر اساس توابع ریاضی است. علاوه بر Haskell، برخی از زبان های محبوب دیگر که پارادایم برنامه نویسی تابعی را دنبال می کنند عبارتند از: Lisp، Python، Erlang، Racket، F#، Clojure و غیره. در برنامه نویسی قراردادی، دستورالعمل ها به عنوان مجموعه ای از اعلامیه ها در یک سینتکس یا فرمت خاص صورت می گیرد، اما در مورد برنامه نویسی تابعی، تمام محاسبات به عنوان ترکیبی از توابع ریاضی جداگانه محسوب می شوند.
معرفی زبان برنامه نویسی Haskell
هسکل یک زبان برنامه نویسی پیشرفته با قابلیت استفاده عام و متنباز است که حاصل بیش از بیست سال پیشرفت و تحقیق میباشد که اجازهٔ توسعه سریع، پیاپی و مختصر و صحیح نرمافزار را میدهد. این زبان با پشتیبانی قوی از یکپارچهسازی با سایر زبانها، همزمانی داخلی ساختمانی، پشتیباتی از برنامههای همروند، بررسی استاتیک انواع داده پیش از اجرا و مجهز بودن به پروفایلر و کتابخانهٔ غنی، ساخت نرمافزار قابل انعطاف و قابل نگهداری با کیفیت بالا را ساده میکند. در پی انتشار زبان میراندا توسط Research Software Ltd در سال ۱۹۸۵، علاقه به زبانهای تابعی تنبل افزایش یافت. تا سال ۱۹۸۷، زبانهای تابعی خالص بسیاری بهوجود آمده بودند. از بین اینها، میراندا بیشترین زبانی بود که استفاده میشد، ولی برنامهها انحصاری بودند. در کنفرانسی دربارهٔ زبانهای برنامهنویسی تابعی و معماری کامپیوتر (FPCA ’87) در پورتلند، اورگن، یک جلسه برگزار شد که در آن شرکتکنندگان بر تشکیل یک کمیته برای تعریف استانداردهای باز برای زبانهای اینچنینی توافق کردند.
جالب ترین جنبه Haskell شامل پشتیبانی از توابع بازگشتی و انواع داده ای، مطابقت با الگو، درون یابی لیست و عبارات دفاعی می باشد. ترکیب این خصوصیات می تواند توابعی را بسازد که نوشتن آنها در زبان برنامه نویسی شیوه ای سخت خواهد بود ولی غالباً اجرای آن در Haskell آسان است در سال ۲۰۰۲، این زبان یک زبان تابعی است که اغلب تحقیقات روی آن صورت گرفته است. چندین گونه از این زبان توسعه یافته اند: نسخ همگون با MIT و Glasgow ، هر دو Haskell مشابه نامیده می شوند. نسخی که بیشتر نظیر دارند و تقسیم شده اند، Haskell تقسیم شده خوانده می شوند (سابقاً Goffin) و Eden ، نسخه ارزیابی نظری ، Haskell خواهان نامیده می شود و چندین نسخ شی گرا: Haskell ++ ، Mondrian و O’ Haskell . یک زبان مشابه Haskell نیز موجود است که روش های جدید پشتیبانی از پیشرفت GUI را ارائه می دهد که کاملاً همگام نامیده می شود. بزرگترین تفاوت این زبان با Haskell در استفاده از انواع یکتا برای ورودی به دلیل ضدیت با واحدیت است.
ویژگی های زبان برنامه نویسی Haskell
هسکل دارای ویژگیهای ارزیابی تأخیری (تنبل)، تطبیق الگویی، فهم لیستها، تایپ کلسها، و چند ریختی تایپی است. زبانی محضاً تابعی است، به این معنی که بهطور کلی توابع در هسکل اثر فرعی ندارند. ساختاری متمایز برای بیان کردن آثار فرعی وجود دارد، که متعامد با تایپ توابع است. یک تابع محض میتواند اثر فرعی ای را برگرداند که متعاقباً اجرا میشود، و توابع ناخالص زبانهای دیگر را پیادهسازی میکند. هسکل یک زبان با تایپهای سخت و ایستا بر پایه استنتاج تایپ هیندلی-میلنر است. نو آوری اصلی هسکل در این مسئله اضافه کردن تایپ کلسها است، که در اصل به عنوان راهی اصولی برای اضافه کردن سربارگذاری به این زبان ساخته شدن اند ولی پس از آن اسفتادههای دیگری یافته هم یافتهاند.
ساختاری که آثار فرعی را بیان میکند مثالی از یک مونَد است. مونَدها چارچوبی کلی هستند که میتوانند انواع مختلفی از محاسبات، مانند رفع خطا، غیر قطعی بودن، تجزیه کردن، و حافظهٔ معاملاتی نرمافزاری را مدلسازی کنند. مونَدها به عنوان دیتا تایپهای معمولی تعریف شدهاند. اما هسکل برای استفاده از آن تعدادی زیبایی زبانی اراعه میدهد. هسکل مشخصات باز و منتشر شده دارد که چند پیادهسازی از آن وجود دارد. پیادهسازی اصلی آن کامپایلر باشکوه هسکل گلاسگو (جی اچ سی)، هم تفسیر گر و هم کامپایلر بومی است که در اکثر پلتفورمها اجرا میشود. جی اچ سی بخاطر تایپ سیستم غنی ای که نو آوریهای اخیر همچون دیتا تایپهای جبری عمومی و خانوادههای تایپ را در خود جای میدهد مورد ملاحظه است. بازی معیار زبانهای کامپیوتری نیز کارایی بالای پیادهسازی همزمانی و همسانی این زبان را به برجستگی نشان میدهد. اجتماعی فعال و در حال رشد در اطراف این زبان وجود دارد؛ و بیش از ۵۴۰۰ کتابخانه و ابزار متن باز سوم شخص در مخزن بسته آنلاین هکیج موجود است. Haskell (هسکل) یک زبان تابعی است که به طور گسترده ای استفاده می شود. در اینجا چند نکته را ذکر می کنیم که این زبان را از سایر زبان های برنامه نویسی رایج مانند جاوا، C، C ++، PHP و غیره متمایز می کند:
- ساخت سریع برنامه یا نمونه کار با کتابخانه های متععد آن
- دارای اکوسیستم قوی
- عملکرد بهتر
- کاملا استاندارد
- همه منظوره
- چند پارادایمی
- زبان تابعی
- ارزیابی تنبل
- Haskell یک زبان برنامه نویسی استاتیک است و از نوع سیستم هندی-میلنر برای اطمینان از ایمنی نوع استفاده می کند. همچنین کلاس های نوع را معرفی می کند
- بدون هیچ بیانیه یا دستور العمل
مثال فاکتوریل در برنامه نویسی Haskell
یک مثال ساده که معمولاً برای اثبات دستور زبان تابعی به کار میرود، تابع فاکتوریل برای اعداد صحیح نامنفی میباشد که درهسکل به صورت زیر نوشته میشود
factorial :: Integer -> Integer factorial 0 = 1 factorial n | n> 0 = n * factorial (n-1)یا در یک خط به شکل زیر
factorial n = if n> 0 then n * factorial (n-1) else 1
این مثال بالا فاکتوریل را به عنوان تابع بازگشتی شرح میدهد با یک مبنای پایان بخش (فرض استقرا). تعریف این تابع توسط کدهای هسکل شبیه به گزاریهای موجود در کتب درسی است. خط اول تابع فاکتوریل نوع تابع را شرح میدهد زمانی که اختیاری است یک نوع خوب برای شامل شدن آن مطرح است.
as the function factorial (factorial) has type (::) from integer to integer (Integer -> Integer)
این یک عدد صحیح به عنوان ارگومان میگیرد ویک عدد صحیح دیگر بازمیگرداند. اگر برنامهنویس نوع تابع را مشخص نکرده باشد این نوع تعریف بهطور اتوماتیک استنباط میشود. خط دوم اشاره به تطبیق الگو دارد که یک خصوصیت مهم هسکل است. یادداشتی که پارامترهای تابع ان در پرانتز نیستند به وسیله فاصله از دوم جدا شدهاست. وقتی که ارگومانهای تابع صفر میشوند عدد صحیح به صورت یک برگردانده میشود. برای همهٔ موارد ذیگر خط سوم آزموده شده. یک حایل خط سوم را از اعداد منفی که فاکتوریل آنها تعریف نشده حفظ میکند بدون حایل این تابع بدون رسیدن به مورد اصلی از طریق همهٔ اعداد منفی تکرار میشود. همانطور که هست تطبیق الگو کامل نیست. اگر عدد صحیح منفی به عنوان ارگومان عبور کند برنامه با یک خطای زمان اجرا شکست میخورد. مورد آخر میتواند برای این خطای وضعیت چک شود و در عوض یک خطای مناسب چاپ میکند.
مانند راه حلهای گوناگون سری فیبوناچی که در بالا نشان داده شد از یک هم بازگشت برای ساخت یک لیست از اعداد به محض درخواست استفاده میکند. شروع از پایه یعنی ۱ و ساختد موارد جدید که نسبت به سایر اعضا حق تقدم دارد آغاز میشود. تکین ها-اتم ها- ورودی /خروجیها هسکل به عنوان یک زبان خالص اثرات جانبی توابع را ندارد این یک رقابت برای برنامههای واقعی است که در میان بقیهٔ موارد احتیاج پیدا میکند به تأثیرات محیط برنامهنویسی هسکل این مشکل را با نوع دادهای اتم حل کردهاست. سیستم تایپ به ترتیب دستورات امری یک تناسب بر قرار میکند. یک مثال نوعی از این سیستم شامل حالات بیثبات همزمانی حافظهٔ تراکنشی مدیریت استثناء و انتشار خطاست ولی اتمها برای رسیدن به بسیاری اهداف مفیدند. هسکل یک ترکیب ویژه برای عبارات اتمی ارائه کردهاست پس برنامههایی که اثر جانبی دارند میتوانند به نوعی شبیه زبانهای امری نوشته شوند برنامهٔ زیر یک نام را از ورودی دریافت میکند و در خروجی یک پیغام خوشامد گویی چاپ میکند.
main = do putStrLn "What's your name?" name <- getLine putStr ("Hello, " ++ name ++ "!\n")
do عبارات با این اصطلاح کار با اتمها را آسان میکنند این عبارت با عبارت قبلی یکسان میباشد ولی تقریباً برای نوشتن آسانتر و قابل فهمتر از De-sugared که از اپراتور اتم بهطور مستقیم استفاده میکند.
main = putStrLn "What's your name?">> getLine>>= \ name -> putStr ("Hello, " ++ name ++ "!\n")
پیاده سازی های زبان برنامه نویسی Haskell
-
Glasgow Haskell Compiler (GHC
به کد اصلی به تعداد معیارهای اصلی با استفاده از «سی» به عنوان زبان حیاتی جی اچ سی مشهورترین کامپایلر هسکل میباشد. هسکل به تعداد نسبتاً زیادی کتابخانههای مفید دارد که فقط با جی اچ سی کار میکند.
- Gofer
یک لهجه یا گویش جدید آموزشی هسکل است با ویژگی به نام کلاسهای سازنده به وسیلهٔ مارک جونز توسعه داده شد.
- HBC
یکی دیگر از کامپایلر کد اصلی هسکل میباشد این کامپایلر بهطور فعالانه کار نمیکند و توسعه داده نمیشود ولی در بعضی موارد قابل استفاده میباشد.
- Helium
یک گویش جدید برای هسکل است. تمرکز روی این لهجه باعث میشود که آموختههای ما در مورد پیغامهای خطا روشنتر شود. این در همان حالت یک تایپ را کم دارد و اجرای آن با بسیاری از برنامههای هسکل ناسازگار است.
- Hugs, the Haskell User’s Gofer System,
یک مترجم بایت کد میباشد که باعث کامپایل و اجرای سریع خواهد شد. همچنین با کتابخانههای گرافیکی ساده نیز همراه است. برای افرادی که در زبان هسکل مبتدی هستند این مترجم مفید است ولی به معنای یک اجرای ساده و بچگانه نیست بلکه بسیار قابل حملتر در اجرا درون هسکل میباشد.
- Jhc
یک کامپایلر هسکل است که این کامپایلرتأکید بر سرعت و کارایی بالای برنامهها دارد چنانچه تغییراتی در برنامه اعمال شود.
- nhc98
یک کامپایلر بایت کد هسکل است باید توجه داشت بایت کد اجرای بسیار سریعتری دارد توجه به استفادهٔ کمتر و بهینه تر از حافظه از مزایای این کامپایلر است و یک انتخاب مناسب برای کامپیوترهای قدیمی و کم مصرف است.
- Yhc, the York Haskell Compiler
یک شاخه از ان اچ سی ۹۸ میباشد با اهداف سادهتر شدن قابل حمل شدن تأثیرگذار تر شدن. پشتیبانی تمام و کمال برای هت. همچنین ویژگیها یی برای جاوا نیز دارد که اجازه میدهد به کار برانی که در محیط شبکه کار میکنند هسکل را نیز اجرا کند.
کتابخانهها در زبان برنامه نویسی Haskell
از ژانویهٔ ۲۰۰۷ کتابخانهها و موارد کاربردی در یک بسته به نام Hackage جمع شوند یک پایگاه داده ان لاین از برنامهٔ هسکل که از وسیلهای به نام بستهکنندهٔ cabal استفاده میکند. از دسامبر ۲۰۰۸ ۹۱۰ بسته قابل استفاده برای کاربران گذاشته شدهاست.
- “Hackage”
یک نقطهٔ میانی برای توزیع هسکل میبا شد به وسیلهٔ cabal فعالیتهای توسعه آفرینی هسکل به صورت یک قطب درآمده نصب برنامههای جدید هسکل به وسیلهٔ Hackage و وسایل نصب cabal امکانپذیر است. این نصبها بازگشتی و نیاز به وابستگیها یی دارد که اینها با وجود ان در دسترس هستند. امروزه نصب کد هسکل بسیار اسانتر از قبل میباشد.
منبع ۱
منبع ۲
خودآموز زبان برنامهنویسی Haskell
یادگیری زبان هسکل، که یک زبان برنامهنویسی کاملاً فانکشنال است، مانند یادگیری برنامهنویسی برای اولین بار سرگرمکننده بوده و شما را مجبور میکند تا متفاوت فکر کنید. به طور کلی، در زبانهای دستوری شما با دادن دنبالهای از تَسکها به کامپیوتر و سپس اجرای آنها یکی پس از دیگری دست به توسعهٔ یک برنامه میزنید و این در حالی است که تَسکهای مد نظرتان در حال اجرا میتوانند تغییر حالت دهند (برای مثال شما متغیر a را با ۵ مقداردهی میکنید، یکسری توابع را اجرا میکنید و سپس مقدار آن را جایگزین میکنید.)
Learn You a Haskell یک خودآموز برای کسانی که تجربهٔ برنامهنویسی با زبانهایی مانند C++ ،C ،Java و Python دارند اما در عین حال با یک زبان فانکشنال مانند OCaml ،ML و به خصوص Haskell هنوز برنامهای ننوشتهاند، مناسب است.
Learn You a Haskell: خودآموز زبان برنامهنویسی هسکل
همچنین ۶،۹۵۴ بسته موجود است. در اینجا نمونه ای از رایج ترین موارد است :
bytestring | Binary data | base | Prelude, IO, threads |
network | Networking | text | Unicode text |
parsec | Parser library | directory | File/directory |
hspec | RSpec-like tests | attoparsec | Fast parser |
monad-logger | Logging | persistent | Database ORM |
template-haskell | Meta-programming | tar | Tar archives |
snap | Web framework | time | Date, time, etc. |
happstack | Web framework | yesod | Web framework |
containers | Maps, graphs, sets | fsnotify | Watch filesystem |
hint | Interpret Haskell | unix | UNIX bindings |
SDL | SDL binding | OpenGL | OpenGL graphics system |
criterion | Benchmarking | pango | Text rendering |
cairo | Cairo graphics | statistics | Statistical analysis |
gtk | Gtk+ library | glib | GLib library |
test-framework | Testing framework | resource-pool | Resource pooling |
conduit | Streaming I/O | mwc-random | High-quality randoms |
QuickCheck | Property testing | stm | Atomic threading |
blaze-html | Markup generation | cereal | Binary parsing/printing |
xml | XML parser/printer | http-client | HTTP client engine |
zlib | zlib/gzip/raw | yaml | YAML parser/printer |
pandoc | Markup conversion | binary | Serialization |
tls | TLS/SSL | zip-archive | Zip compression |
warp | Web server | text-icu | Text encodings |
vector | Vectors | async | Async concurrency |
pipes | Streaming IO | scientific | Arbitrary-prec. nums |
process | Launch processes | aeson | JSON parser/printer |
dlist | Difflists | syb | Generic prog. |
The post معرفی زبان برنامه نویسی Haskell appeared first on آموزش برنامه نویسی.