هسکل (زبان برنامه‌نویسی)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

هسکل (به انگلیسی: Haskell) یک زبان برنامه‌نویسی تابعی خالص (به انگلیسی: purely functional)، استاندارد شده و همه منظوره با نوع داده مستحکم است که به یاد دانشمند حوزه منظق و استدلال به نام هسکل کاری نام گذاری شده است.

هسکل یک زبان برنامه‌نویسی پیشرفته با قابلیت استفاده عام و متن‌باز است که حاصل بیش از بیست سال پیشرفت و تحقیق می‌باشد که اجازهٔ توسعه سریع، پیاپی و مختصر و صحیح نرم‌افزار را می‌دهد. این زبان با پشتیبانی قوی از یکپارچه سازی با سایر زبان‌ها، همزمانی داخلی ساختمانی، پشتیباتی از برنامه‌های همروند، بررسی استاتیک انواع داده پیش از اجرا و مجهز بودن به پروفایلر و کتابخانهٔ غنی، ساخت نرم‌افزار قابل انعطاف و قابل نگهداری با کیفیت بالا را ساده می‌کند.

تاریخچه[ویرایش]

در پی انتشار زبان میراندا توسط  Research Software Ltd در سال 1985 ، علاقه به زبان های تابعی تنبل افزایش یافت. تا سال 1987، زبان های تابعی خالص بسیاری بوجود آمده بودند.از بین این ها، میراندا بیشترین زبانی بود که استفاده میشد، ولی برنامه ها انحصاری بودند. در کنفرانسی درباره زبان های برنامه نویسی تابعی و معماری کامپیوتر (FPCA '87) در پورتلند، اورگن، یک جلسه برگزار شد که در آن شرکت کنندگان بر تشکیل یک کمیته برای تعریف استاندارد های باز برای زبان های این چنینی توافق کردند.

هسکل ۱.۰ تا ۱.۴[ویرایش]

اولین ورژن هسکل ("Haskell 1.0") در سال ۱۹۹۰ تعریف شد. تلاش های کمیته به مجموعه ای از تعاریف زبان منجر شد (۱.۰، ۱.۱، ۱.۲، ۱.۳، ۱.۴).

هسکل ۹۸[ویرایش]

در اواخر سال ۱۹۹۷، این مجموعه تعاریف در هسکل ۹۸ به اوج خود رسید، که قرار شد یک ورژن پایدار، حداقلی (Minimal)، و قابل حمل از زبان بهمراه یک کتابخوانه استاندارد برای آموزش،و به عنوان پایه ای برای گسترش های آینده معین کنند و کمیته صریحا از ایجاد نسخه های متفاوت از هسکل ۹۸ بهمراه اضاف کردن ویژگی های تجربی در این نسخه ها استقبال کرد.

در فوریه ۱۹۹۹، استاندارد زبان هسکل ۹۸ بصورت عمومی با عنوان گزارش هسکل ۹۸ رسما منتشر شد. در ژانویه ۲۰۰۳، یک ورژن بازبینی شده با عنوان زبان هسکل ۹۸ و کتابخوانه هایش : گزارش بازبینی منتشر شد. زبان به رشد سریع خودش ادامه داد که با پیاده سازی Glasgow Haskell Compiler ( مختصرآن GHC) استاندارد فعلی هسکل ارائه شد.

هسکل 2010[ویرایش]

در اوایل سال ۲۰۰۶، فرایند تعریف یک جانشین برای استاندارد هسکل ۹۸، که بصورت غیر رسمی به آن هسکل پرایم میگفتند، آغاز شد. بنا بر این گذاشته شد که هر ساله تعریف زبان بازبینی شود و یک نسخه جدید در هر سال تولید شود. اولین بازبینی، که هسکل 2010 نام داشت، در نوامبر 2009 معرفی شد و در جولای 2010 منتشر شد.

هسکل 2010 رابط توابع خارجی (Foreign Function Interface) را به هسکل اضافه کرد، و اجازه داد تا به زبان های برنامه نویسی دیگر bind شود. همچنین تعدادی مشکل در سینتکس را برطرف کرد، و الگوی n-plus-k-patterns را ممنوع کرد که برای همین استفاده از تعریفی به این فرم fact (n+1) = (n+1) * fact n دیگر مجاز نبود. این تغییرات منجر به ایجاد یک Language-Pragma-Syntax-Extension شد که نیازمند گسترش های مشخصی برای زبان هسکل بود. نام این گسترش ها در هسکل ۲۰۱۰ به شرح زیر است :

DoAndIfThenElse, HierarchicalModules, EmptyDataDeclarations, FixityResolution, ForeignFunctionInterface, LineCommentSyntax, PatternGuards, RelaxedDependencyAnalysis, LanguagePragma و NoNPlusKPatterns

ویژگی ها[ویرایش]

هسکل دارای ویژگی های ارزیابی تاخیری(تنبل)، تطبیق الگویی، فهم لیست ها، تایپ کلس ها، و چند ریختی تایپی است. زبانی محضا تابعی است، به این معنی که به طور کلی توابع در هسکل اثر فرعی ندارند. ساختاری متمایز برای بیان کردن آثار فرعی وجود دارد، که متعامد با تایپ توابع است. یک تابع محض میتواند اثر فرعی ای را برگرداند که متعاقبا اجرا می شود، و توابع ناخالص زبان های دیگر را پیاده سازی می کند.

هسکل یک زبان با تایپ های سخت و ایستا بر پایه استنتاج تایپ هیندلی-میلنر است. نو آوری اصلی هسکل در این مساله اضافه کردن تایپ کلس ها است، که در اصل به عنوان راهی اصولی برای اضافه کردن سربارگذاری به این زبان ساخته شدن اند ولی پس از آن اسفتاده های دیگری یافته هم یافته اند.

ساختاری که آثار فرعی را بیان می کند مثالی از یک مونَد است. مونَد ها چارچوبی کلی هستند که می توانند انواع مختلفی از محاسبات، مانند رفع خطا، غیر قطعی بودن، تجزیه کردن، و حافظه ی معاملاتی نرم افزاری را مدل سازی کنند. مونَد ها به عنوان دیتا تایپ های معمولی تعریف شده اند. اما هسکل برای استفاده از آن تعدادی زیبایی زبانی اراعه می دهد.

هسکل مشخصات باز و منتشر شده دارد که چند پیاده سازی از آن وجود دارد. پیاده سازی اصلی آن کامپایلر باشکوه هسکل گلاسگو(جی اچ سی)، هم تفسیر گر و هم کامپایلر بومی است که در اکثر پلتفورم ها اجرا می شود. جی اچ سی بخاطر تایپ سیستم غنی ای که نو آوری های اخیر همچون دیتا تایپ های جبری عمومی و خانواده های تایپ را در خود جای می دهد مورد ملاحضه است. بازی معیار زبان های کامپیوتری نیز کارایی بالای پیاده سازی همزمانی و همسانی این زبان را به برجستگی نشان میدهد.

اجتماعی فعال و در حال رشد در اطراف این زبان وجود دارد. و بیش از 5400 کتاب خانه و ابزار متن باز سوم شخص در مخزن بسته آنلاین هکیج موجود است.

مثال‌ها[ویرایش]

یک مثال ساده که معمولاً برای اثبات دستور زبان تابعی به کار می‌رود، تابع فاکتوریل برای اعداد صحیح نامنفی می‌باشد که درهسکل به صورت زیر نوشته می‌شود

 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")

برای اطلاعات بیشتر به مراجع زیر مراجعه کنید. also wikibooks:Transwiki:List of hello world programs#Haskell

پیاده‌سازی‌ها[ویرایش]

  • Glasgow Haskell Compiler (GHC

به کد اصلی به تعداد معیارهای اصلی با استفاده از «سی» به عنوان زبان حیاتی جی اچ سی مشهورترین کامپایلر هسکل می‌باشد. هسکل به تعداد نسبتاً زیادی کتابخانه‌های مفید دارد که فقط با جی اچ سی کار می‌کند.

  • Gofer

یک لهجه یا گویش جدید آموزشی هسکل است با ویژگی به نام کلاسهای سازنده به وسیلهٔ مارک جونز توسعه داده شد.

  • HBC

یکی دیگر از کامپایلر کد اصلی هسکل می‌باشد این کامپایلر به طور فعالانه کار نمی‌کند و توسعه داده نمی‌شود ولی در بعضی موارد قابل استفاده می‌باشد.

  • Helium

یک گویش جدید برای هسکل است تمرکز روی این لهجه باعث می‌شود که اموخته‌های ما در مورد پیغام‌های خطا روشن تر شود. این در همان حالت یک تایپ را کم دارد واجرای ان با بسیاری از برنامه‌های هسکل نا سازگار است.

  • Hugs, the Haskell User's Gofer System,

یک مترجم بایت کد می‌باشد که باعث کامپایل و اجرای سریع خواهد شد. همچنین با کتابخانه‌های گرافیکی ساده نیز همراه است. برای افرادی که در زبان هسکل مبتدی هستند این مترجم مفید است ولی به معنای یک اجرای ساده وبچگانه نیست بلکه بسیار قابل حمل تر در اجرا درون هسکل می‌باشد.

  • Jhc

یک کامپایلر هسکل است که این کامپایلرتاکید بر سرعت و کارایی بالای برنامه‌ها دارد چنانچه تغییراتی در برنامه اعمال شود.

  • nhc98

یک کامپایلر بایت کد هسکل است باید توجه داشت بایت کد اجرای بسیار سریعتری دارد توجه به استفادهٔ کمتر و بهینه تر از حافظه از مزایای این کامپایلر است و یک انتخاب مناسب برای کامپیوترهای قدیمی و کم مصرف است.

  • Yhc, the York Haskell Compiler

یک شاخه از ان اچ سی ۹۸ می‌باشد با اهداف ساده‌تر شدن قابل حمل شدن تأثیر گذار تر شدن. پشتیبانی تمام و کمال برای هت. همچنین ویژگی‌ها یی برای جاوا نیز دارد که اجازه می‌دهد به کار برانی که در محیط شبکه کار می‌کنند هسکل را نیز اجرا کند.

کتابخانه‌ها[ویرایش]

از ژانویهٔ ۲۰۰۷ کتابخانه‌ها و موارد کاربردی در یک بسته به نام Hackage جمع شوند یک پایگاه داده ان لاین از برنامهٔ هسکل که از وسیله‌ای به نام بسته کنندهٔ cabal استفاده می‌کند. از دسامبر ۲۰۰۸ ۹۱۰ بسته قابل استفاده برای کاربران گذاشته شده است.

  • "Hackage"

یک نقطهٔ میانی برای توزیع هسکل میبا شد به وسیلهٔ cabal فعالیت‌های توسعه آفرینی هسکل به صورت یک قطب در آمده نصب برنامه‌های جدید هسکل به وسیلهٔ Hackage و وسایل نصب cabal امکان‌پذیر است. این نصب‌ها بازگشتی و نیاز به وابستگی‌ها یی دارد که اینها با وجود ان در دسترس هستند. امروزه نصب کد هسکل بسیار اسانتر از قبل می‌باشد.

منابع[ویرایش]