هسکل (زبان برنامهنویسی)
| در متن این مقاله از هیچ منبع و مأخذی نام برده نشدهاست. شما میتوانید با افزودن منابع برطبق اصول اثباتپذیری و شیوهنامهٔ ارجاع به منابع، به ویکیپدیا کمک کنید. مطالب بیمنبع احتمالاً در آینده حذف خواهند شد. |
|
|
ممکن است این مقاله نیازمند ویکیسازی باشد تا با استانداردهای کیفی ویکیپدیا همخوانی یابد. خواهشمندیم با افزودن پیوندهای داخلی مرتبط، یا با بهبود چیدمان به بهبود آن کمک کنید.
برای جزئیات بیشتر روی [نمایش] کلیک کنید.
هیچ دلیلی برای این برچسب ویکیسازی ذکر نشدهاست. میتوانید دلیلتان را با استفاده از پارامتر
|
هاسکل یک زبان برنامه نویسی خالص و کارامد با معانی ساده میباشد که بعد از منطق دانی به نام هاسکل کری نام گذاری شده است اهداف این زبان به شرح زیر میباشد هاسکل یک زبان برنامه نویسی پیشرفتهٔ کاملاً کارامد میباشد یک محصول اپن سرس (منبع باز) است که حاصل بیش از بیست سال پیشرفت و تحقیق میباشد که اجازهٔ توسعهٔ پیاپی سالم و مختصر و صحیح نرمافزاررا میدهد با پشتیبانی قوی از یکپارچه سازی با سایر زبان ها، همزمانی داخلی ساختمانی و موازی کار کردن و پیدا کردن باگها در سورس برنامه و پروفایلر و کتابخانهٔ غنی و ساخت نرمافزار قابل انعطاف و قابل نگهداری با کیفیت بالا را ساده میکند.
محتویات |
تاریخچه [ویرایش]
پس از بیرون آمدن نسخهٔ میراندا توسط ریسرچ سافت ور ال تی دی در سال هزارو نهصدوهشتادو پنج علاقه به زبانهای اصلی کند افزایش پیدا کرد. در سال هزارو نهصد هشتادو پنج بیش از دو زبان برنامه نویسی خالص و کارامد با معانی ساده وجود داشت. بین این زبان نشستی برگزار شد که در طی آن شرکت کنندهها به توافق قطعی رسیدند که یک کمیته باید شکل بگیرد که وظیفهٔ آن تعریف استانداردهای بازی برای زبانها این چنینی باشداین کار با هدف صریح یکی کردن زبانهای موجود به یک زبان مشترک به کار میرود، به منظور ایجاد پایهای تحقیقات آیندگان در طراحی زبان انجام شد اولین نسخهٔ زبان در سال هزا ونهصد ونود نتیجهٔ تلاشهای کمیته در سری تعاریف زبان در اواخرهزارو نهصد ونودو هشت به حد اعلی رسید، که بر آن بود که یک نسخهٔ زبان پایدار، کوچک و قابل حمل که یک کتابخانه استاندارد برای تدریس ضمیمه آن بود و همچنین پایهای برای تکاملها در آینده باشد، را تعیین کند کمیته صریحاً از به وجود آمدن تکاملهای اضافی و مغایر با از راه اضافه کردن و بهم پیوستن طرحهای تجربی استقبال کرد.
در ژانویهٔ نود و نه استانداردهای زبان به صورت نسخهٔ معتبر و اصلی با نام ریویزد ریپرت منتشر شد ی یک نسخهٔ اصلاح شده با نام منتشر شد به خاطر پیاده سازی استاندارد حال حاضر را به نمایش می گذارد، این زبان به نمو پیاپی خود ادامه میدهد در اوایل سال فرایند تعریف کردن جانشین برای نسخهٔ استاندارد که به طور غیر رسمی نام گرفته است، شروع شده است این فرایند اقدام به ساخت نسخهٔ فرعی کرده است تکاملها و خصیصه ها خصیصهٔ بارز زبان هاسکل شامل تطبیق الگو، قوهٔ ادراک به صورت لیست، حائل ها، عملگرهای قابل تعریف و تک گماری است زبان همچنین قابلیت پشتیبانی از تابعهای بازگشت پذیر و انواع دادههای جبری را به خوبی ارزیابی کند را دارد فکرهای بی همتا شامل یکهها و کلاسهای الگو میباشد ترکیب این خصیصهها میتواند توابعی بسازد که نوشتن آن بوسیلهٔ زبانهای برنامه نویسی روندی دشوار است اما انجام آن در زبان جزئی و آسان میباشد چندین گونهٔ مغایر توسعه پیدا کرده، از جمله نسخهٔ موازات شده از ام ای تی وگلس گو بیشتر نسخههای موازی و توزیع شده نامیده میشدند نسخهٔ ارزیابی مبتکرانه ادن نامیده شد و چندین نسخهٔ شیئ گرا نامیده میشوند. خویشاوند نزدیکی به کنکورنت کلین میباشد که بزرگترین انحراف از در استفاده از گونههای یکتایی برای ورودی به جای یکهها میباشد.
کاربردها [ویرایش]
قدرت هاسکل به خوبی برای بعضی از پروژهها به کار بسته شده است این زبان به طور زیاد شونده درموقعیتهای ارتباطی به کار برده میشود. Audrey Tang's Pugs پیاده ساز برای آیندهٔ دور زبان پرل شش که دارای مفسر و کامپایلر میباشد که کارامد بودن آن را بعد از چند ماه بیرون آمدن آن اثبات کرده است؛ به طور مشابه، جی اچ سی معمولاً برای خصیصهٔ برنامه نویسی پیشرفتهٔ تابعی و بهینه سازی آزمایش میشود دارس یک سیستم کنترل تجدید نظرهمراه چندین خصیصهٔ ابتکاری است.لینوکس زبان هاسکل را برای توسعهٔ ابزار سیستم انتخاب کرده است.ایکس مناد که یک مدیریت پنجره برای ایکس ویندو سیستم میباشد، به طور کلی با هاسکل نوشته شده است.بلو اسپیس سیستم وریلوگ یک زبان برای طراحی نیمه هادی میباشد که تکاملی از میباشد به علاوه .بلو اسپیس ای ان سی ابزار در زبان انجام شده است.
مثالها [ویرایش]
یک مثال ساده که معمولاً برای اثبات دستور زبان تابعی به کار میرود، تابع فاکتوریل برای اعداد صحیح نا منفی میباشد که درهاسکل به صورت زیر نوشته میشود
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)
این یک عدد صحیح به عنوان ارگومان میگیرد ویک عدد صحیح دیگر بازمیگرداند.اگر برنامه نویس نوع یادداشت را ذخیره نکرده باشد این نوع تعریف به طور اتوماتیک استنباط شده است. خط دوم اشاره به تطبیق الگو دارد یک خصوصیت مهم هاسکل. یادداشتی که پارامترهای تابع ان در پرانتز نیستند به وسیله فاصله از دوم جدا شده است.وقتی که ارگومانهای تابع صفر میشوند عدد صحیح به صورت یک برگردانده میشود.برای همهٔ موارد ذیگر خط سوم ازموده شده. یک حایل خط سوم را از اعداد منفی که فاکتوریل انها تعریف نشده حفظ میکند بدون حایل این تابع بدون رسیدن به مورد اصلی از طریق همهٔ اعداد منفی تکرار میشود.همانطور که هست تطبیق الگو کامل نیست. اگر عدد صحیح منفی به عنوان ارگومان عبور کند برنامه با یک خطای زمان اجرا شکست میخورد. مورد اخر میتواند برای این خطای وضعیت چک شود و در عوض یک خطای مناسب چاپ میکند. مقدمه یک تعدادی از توابع کوچک مشابه کتابخانه استاندارد است با استفاده از مقدمهها میتوانیم توابع فاکتوریل را مانند زیر شرح دهیم.
fac n = product (enumFromTo 1 n)
همانطور که نام نمیتواند به وضوح تابع شرکت کند این تابع ممکن است بیان بهتری باشد در نوع هدف خاص ارگومانهای نا معین.استفاده از عملگر تابع ترکیب اپراتور برای هدف تولید تابع.
fac = product . enumFromTo 1
در مفسر محکم شمتا معمولاً نیاز به تعریف تابع و استفاده از ان در همان خط جدا شده به وسیلهٔ کجا یا در یا... دارید.به این منظور که شما احتیاج به داخل کردن ان برای تست مثالهای بالا و دیدن خروجی دارید. مترجم جی اچ سی این محدودیت را ندارد و تعریف توابع میتواند داخل یک خط شود و بعداً فراخوانی کند. مثالهای پیچیدهٔ بیشتر یک ماشین حساب نشانه گذاری لهستانی معکوس ساده با تابع اردر بالا –تابع فلد 1-ارگومان اف در جائیکه عبارت از الگوی تطبیق استفاده میکند.
calc :: String -> [Float] calc = foldl f [] . words where f (x:y:zs) "+" = y+x:zs f (x:y:zs) "-" = y-x:zs f (x:y:zs) "*" = y*x:zs f (x:y:zs) "/" = y/x:zs f xs y = read y : xs
لیست خالی به عنوان مرحله اغازین است و حرف اف یک کلمه را در یک لحظه ترجمه میکند.هر دو عدد تطبیق شده از بالای لیست و قرار داده شده در نتایجه یا تجزیهٔ کلمه به عنوان عدد با ممیز شناور به ابتدای لیست اضافه میشود.
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
یک لیست نا متناهی که به وسیلهٔ هم بازگشت ساخته میشود اخرین یا دومین مقدار لیست به محض تقاضای شروع از دو ایتم صفر و یک استفاده میکند.این نوع از تعریف به ارزیابی لیست بستگی دارد که یک ویژگی مهم از هسکل است. به عنوان مثال چگونگی ارزیابی رشد مقدار فیبوناچیی که شش مقدار محاسبه و نشان داده شده که مقدار بعدی به مقدار قبلی وابسته است. تابع مشابه نوشته شده بوسیلهٔ ترکیب لیست موازی ادراکی جی اچ سی.برای اطلاعات بیشتر
fibs = 0 : 1 : [ a+b | a <- fibs | b <- tail fibs ]
تابع فاکتوریل نیز میتواندبا یک تابع مشابه پیاده سازی شود.
fac n = (foldl (.) id [\x -> x*k | k <- [[1..n]]) 1
به طور قابل ملاحظه تابع مختصر شدهای که مقدار یک لیست را بر می گرداند به عبارت دیگر
hamming = 1 : map (2*) hamming `merge` map (3*) hamming `merge` map (5*) hamming where merge (x:xs) (y:ys) | x <y = x : xs `merge` (y:ys) | x> y = y : (x:xs) `merge` ys | otherwise = x : xs `merge` ys
مانند راه حلهای گوناگون سری فیبوناچی که در بالا نشان داده شد از یک هم بازگشت برای ساخت یک لیست از اعداد به محض درخواست استفاده میکند. شروع از پایه یعنی 1 و ساختد موارد جدید که نسبت به سایر اعضا حق تقدم دارد اغاز میشود. تکین ها-اتم ها- ورودی /خروجی ها هسکل به عنوان یک زبان خالص اثرات جانبی توابع را ندارد این یک رقابت برای برنامههای واقعی است که در میان بقیهٔ موارد احتیاج پیدا میکند به تاثیرات محیط برنامه نویسی هسکل این مشکل را با نوع دادهای اتم حل کرده است. سیستم تایپ به ترتیب دستورات امری یک تناسب بر قرار میکند. یک مثال نوعی ازاین سیستم شامل حالات بی ثبات همزمانی حافظهٔ ترا کنشی مدیریت استثناو انتشار خطاست ولی اتمها برای رسیدن به بسیاری اهداف مفیدند. هسکل یک ترکیب ویژه برای عبارات اتمی ارائه کرده است پس برنامه هائی که اثر جانبی دارند میتوانند به نوعی شبیه زبانهای امری نوشته شوند برنامهٔ زیر یک نام را از ورودی دریافت میکند ودر خروجی یک پیغام خوشامد گوئی چاپ میکند.
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
نقد [ویرایش]
جان ویلیام در 2002و پیتون در 2003 در مورد مشکلات به هم پیوستن ارزیابی کند که هم چنین تصدیق کردهاند انگیزهٔ نظری بر ان را. انها به علاوه اظهار داشتند به اضافه کردن بعضی از سر فصلها که کندی باعث میشود که برنامه نویسان در هدفشان دچار مشکل شوند در مورد اجرای کدهایشان نیز برخورد کنند به خصوص نسبت به استفاده از حافظه. هرن لیجن زندرن در2003مشاهده کردهاند بعضی از اموزندگان هسکل به یک مانع در نوشتن برنامهها برخورد کردند. این مشکل بزرگ و پیچیده در هسک شمشیر ذو لبه است.عبارت پائین مطابق هسکل 98 میباشد.
"The subtle syntax and sophisticated type system of Haskell are a double edged sword — highly appreciated by experienced programmers but also a source of frustration among beginners, since the generality of Haskell often leads to cryptic error messages."[16]
implementations [ویرایش]
- Glasgow Haskell Compiler (GHC
به کد اصلی به تعداد معیارهای اصلی با استفاده از "سی" به عنوان زبان حیاتی جی اچ سی مشهورترین کامپایلر هسکل میباشد.هسکل به تعداد نسبتاً زیادی کتابخانههای مفید دارد که فقط با جی اچ سی کار میکند.
- Gofer
یک لهجه یا گویش جدید اموزشی هسکل است با ویژگی به نام کلاسهای سازنده به وسیلهٔ مارک جونز توسعه داده شد.
- HBC
یکی دیگر از کامپایلر کد اصلی هسکل میباشد این کامپایلر به طور فعالانه کار نمیکند و توسعه داده نمیشود ولی در بعضی موارد قابل استفاده میباشد.
- Helium
یک گویش جدید برای هسکل است تمرکز روی این لهجه باعث میشود که اموختههای ما در مورد پیغامهای خطا روشن تر شود.این در همان حالت یک تایپ را کم دارد واجرای ان با بسیاری از برنامههای هسکل نا سازگار است.
- Hugs, the Haskell User's Gofer System,
یک مترجم بایت کد میباشد که باعث کامپایل و اجرای سریع خواهد شد.همچنین با کتابخانههای گرافیکی ساده نیز همراه است.برای افرادی که در زبان هسکل مبتدی هستند این مترجم مفید است ولی به معنای یک اجرای ساده وبچگانه نیست بلکه بسیار قابل حمل تر در اجرا درون هسکل میباشد.
- Jhc
یک کامپایلر هسکل است که این کامپایلرتاکید بر سرعت و کارایی بالای برنامهها دارد چنانچه تغییراتی در برنامه اعمال شود.
- nhc98
یک کامپایلر بایت کد هسکل است باید توجه داشت بایت کد اجرای بسیار سریعتری دارد توجه به استفادهٔ کمتر و بهینه تر از حافظه از مزایای این کامپایلر است و یک انتخاب مناسب برای کامپیوترهای قدیمی و کم مصرف است.
- Yhc, the York Haskell Compiler
یک شاخه از ان اچ سی 98 میباشد با اهداف ساده تر شدن قابل حمل شدن تاثیر گذار تر شدن .پشتیبانی تمام و کمال برای هت.همچنین ویژگیها یی برای جاوا نیز دارد که اجازه میدهد به کار برانی که در محیط نت کار میکنند هسکل را نیز اجرا کند.
کتابخانهها [ویرایش]
از ژانویهٔ 2007 کتابخانهها و موارد کاربردی در یک بسته به نام هکیج جمع شوند یک پایگاه داده ان لاین از برنامه ی هسکل که از وسیلهای به نام بسته کنندهٔ کیبل استفاده میکند. از دسامبر 2008 910 بسته قابل استفاده برای کاربران گذاشته شده است.
- "Hackage"
یک نقطهٔ میانی برای توزیع هسکل میبا شد به وسیلهٔ کابیل فعالیتهای توسعه افرینی هسکل به صورت یک قطب در امده نصب برنامههای جدید هسکل به وسیلهٔ هکیج و وسایل نصب کابیل امکان پذیر است. این نصبها بازگشتی و نیاز به وابستگیها یی دارد که اینها با وجود ان در دسترس هستند. امروزه نصب کد هاسکل بسیار اسانتر از قبل میباشد.
|
|||||||||||
|
|||||||||||||||||||||||||||||||||||||||||