هاسكل (لغة برمجة)

(تم التحويل من Haskell (programming language))

هاسكل Haskell /ˈhæskəl/[27] هي لغة برمجة للأغراض العامة، مكتوبة بشكل ثابت، وظيفية بحتة مع استدلال النوع وذات تقييم حسب الحاجة.[28][29] تم تطوير هاسكل لتكون مناسبة للتدريس والبحث والتطبيقات الصناعية، وقد كانت رائدة في عدد من ميزات لغة البرمجة المتقدمة مثل فئات النوع، والتي تتيح التحميل الزائد للمشغل من النوع الآمن. تطبيق هاسكل الرئيسي هو مترجم گلاسكو هاسكل (GHC). سميت على اسم عالم المنطق هاسكل كيري.[1]

Haskell
Logo of Haskell
ParadigmPurely functional
Designed byLennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, Simon Peyton Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
First appeared1990; 33 years ago (1990[1]
الإصدار المستقر
Haskell 2010[2] / يوليو 2010; 12 years ago (2010-07
الإطلاق الپروڤة
Haskell 2020 announced[3]
Typing disciplineInferred, static, strong
OSCross-platform
Filename extensions.hs, .lhs
Websitehaskell.org
Major implementations
GHC, Hugs, NHC, JHC, Yhc, UHC
اللهجات
Helium, Gofer
Influenced by
Clean,[4] FP,[4] Gofer,[4] Hope and Hope+,[4] Id,[4] ISWIM,[4] KRC,[4] Lisp,[4] Miranda,[4] ML and Standard ML,[4] Orwell, SASL,[4] Scheme,[4] SISAL[4]
Influenced
Agda,[5] Bluespec,[6] C++11/Concepts,[7] C#/LINQ,[8][9][10][11] CAL,[بحاجة لمصدر] Cayenne,[8] Clean,[8] Clojure,[12] CoffeeScript,[13] Curry,[8] Elm, Epigram,[بحاجة لمصدر] Escher,[14] F#,[15] Frege,[16] Hack,[17] Idris,[18] Isabelle,[8] Java/Generics,[8] LiveScript,[19] Mercury,[8] Ωmega,[بحاجة لمصدر] PureScript,[20] Python,[8][21] Raku,[22] Rust,[23] Scala,[8][24] Swift,[25] Timber,[26] Visual Basic 9.0[8][9]

تستند دلالات هاسكل تاريخياً إلى تلك الخاصة بلغة البرمجة ميراندا، والتي عملت على تركيز جهود مجموعة عمل هاسكل الأولية.[30] تم إجراء آخر مواصفات رسمية للغة في يوليو 2010، بينما استمر تطوير تطبيق GHC في توسيع هاسكل عبر ملحقات اللغة. المواصفات الرسمية التالية مخطط لها لعام 2020.[3]

تستخدم هاسكل في الأوساط الأكاديمية[31][32] والصناعة.[33][34] اعتباراً من سبتمبر 2020، احتلت هاسكل هي لغة البرمجة الأكثر شيوعاً ذات رقم 28 من حيث عمليات البحث على گوگل[35]للدروس التعليمية وشكلوا أقل من 1٪ من المستخدمين النشطين في مخزن شيفرة مصدر گيت‌هب.[36]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تاريخ

بعد إصدار ميراندا من قبل شركة ريسيرش سوفتوير المحدودة في عام 1985، ازداد الاهتمام بـ اللغات الوظيفية حسب الحاجة. بحلول عام 1987، كان هناك أكثر من اثنتي عشرة لغات برمجة وظيفية بحتة غير دقيقة. كانت ميراندا هي الأكثر استخداماً، لكنها كانت برمجيات احتكارية. في مؤتمر لغات البرمجة الوظيفية والبنى الحاسوبية (FPCA '87) في پورتلاند، أوريگون، كان هناك إجماع قوي على تشكيل لجنة لتحديد معيار مفتوح لهذه اللغات. كان الغرض من اللجنة هو دمج اللغات الوظيفية الموجودة في لغة شائعة لتكون بمثابة أساس للبحث في المستقبل في تصميم اللغة الوظيفية.[37]


هاسكل من 1.0 إلى 1.4

تم اقتراح فئات النوع، التي تمكّن التحميل الزائد للمشغل بشكل آمن، لأول مرة بواسطة فيليپ وادلر وستيفن بلوت لـ إم‌إل معيارية ولكن تم تنفيذها لأول مرة في هاسكل بين 1987 والإصدار 1.0.[38][39]

تم تحديد الإصدار الأول من هاسكل ("هاسكل 1.0") في عام 1990.[1] نتج عن جهود اللجنة سلسلة من تعريفات اللغة (1.0, 1.1, 1.2, 1.3, 1.4).

 
فئات النوع التي نشأت في هاسكل

هاسكل 98

في أواخر عام 1997، بلغت السلسلة ذروتها في Haskell 98، الذي يهدف إلى تحديد نسخة مستقرة، ومحدودة، ومحمولة من اللغة و مكتبة قياسية مناسبة للتدريس، وكقاعدة للملحقات المستقبلية. وقد رحبت اللجنة صراحة بإنشاء ملحقات ومتغيرات لـ هاسكل 98 من خلال إضافة ودمج الميزات التجريبية.[37]

في فبراير 1999، تم نشر معيار لغة هاسكل 98 في الأصل باسم تقرير هاسكل 98.[37] في يناير 2003، تم نشر نسخة منقحة باسم هاسكل 98 اللغة والمكتبات: التقرير المنقح.[29] حيث تستمر اللغة في التطور بسرعة، مع تطبيق مترجم گلاسكو هاسكل (GHC) الذي يمثل المعيار الواقعي الحالي.[40]

هاسكل 2010

في أوائل عام 2006، بدأت عملية تحديد خليفة لمعيار هاسكل 98، المسمى بشكل غير رسمي هاسكل پرايم.[41] كان القصد من ذلك أن يكون عملية تدريجية مستمرة لمراجعة تعريف اللغة، وإنتاج مراجعة جديدة تصل إلى مرة واحدة في السنة. تم الإعلان عن المراجعة الأولى، المسماة هاسكل 2010، في نوفمبر 2009[2] وتم نشرها في يوليو 2010.

هاسكل 2010 هو تحديث تدريجي للغة، يشتمل في الغالب على العديد من الميزات المستخدمة جيداً وغير المثيرة للجدل والتي تم تمكينها مسبقاً عبر العلامات الخاصة بالمترجم.

  • أسماء الوحدات الهرمية. يُسمح لأسماء الوحدات النمطية بأن تتكون من تسلسلات مفصولة بالنقاط لمعرفات بأحرف كبيرة، بدلاً من معرف واحد فقط. يتيح ذلك تسمية الوحدات بطريقة هرمية (على سبيل المثال، Data.List بدلاً من List)، على الرغم من أن الوحدات النمطية من الناحية الفنية لا تزال في فضاء اسم واحد متجانس. تم تحديد هذه الإضافة في ملحق هاسكل 98 وقد تم استخدامه بشكل شامل.
  • تسمح واجهة الدوال الخارجية (FFI) بالربط بلغات البرمجة الأخرى. تم تحديد الارتباطات بـ سي فقط في التقرير، لكن التصميم يسمح بربط لغة أخرى. لدعم ذلك، تم السماح لإعلانات نوع البيانات بعدم احتواء أي مُنشئين، مما يتيح أنواعاً قوية مناسبة للبيانات الخارجية التي لا يمكن إنشاؤها في هاسكل. تم تحديد هذا الملحق مسبقاً في ملحق لتقرير هاسكل 98 وتم استخدامها على نطاق واسع.
  • ما يسمى بأنماط n+k (تعريفات الشكل fact (n+1) = (n+1) * fact n) لم يعد مسموحاً بها. يحتوي هذا التجميل اللغوي على دلالات مضللة، حيث بدت الشفرة وكأنها تستخدم العامل (+)، ولكنها في الواقع تم إلغاء وصفها باستخدام (-) و (>=)
  • تم تخفيف قواعد استدلال النوع للسماح لمزيد من البرامج بالقيام بتحقق النوع.
  • تم إصلاح بعض مشكلات التركيب اللغوي (التغييرات في القواعد النحوية الرسمية): تمت إضافة حماية النمط، مما يسمح بمطابقة الأنماط داخل الحماية؛ تم تحديد قرار ثبات العوامل بطريقة أبسط تعكس الممارسة الفعلية؛ تمت معالجة حالة طرفية في تفاعل بناء اللغة معجمياً للعوامل والتعليقات، وتم تعديل تفاعل التدوين و if-then-else لإزالة الأخطاء التركيبية غير المتوقعة.
  • تم تحديد توجيه LANGUAGE. بحلول عام 2010، لقد تم استخدام العشرات من ملحقات اللغة على نطاق واسع، وقدمت GHC (من بين المترجمين الآخرين) LANGUAGE لتحديد الملحقات الفردية مع قائمة المعرفات. حيث يتم طلب مترجمي هاسكل 2010 لدعم الملحق Haskell2010 ويتم تشجيعهم على دعم العديد من الملحقات الأخرى، والتي تتوافق مع الملحقات المضافة في هاسكل 2010.

الميزات

تتميز هاسكل بالتقييم حسب الحاجة وتعبيرات لامدا و مطابقة النمط و قائمة الإدراك و فئة النوع و تعدد الأشكال. فهي لغة وظيفية بحتة، مما يعني أن الوظائف عموماً ليس لها آثار جانبية. توجد بنية مميزة لتمثيل الآثار الجانبية، متعامد مع نوع الدوال. يمكن أن تُرجع الدالة البحتة تأثيراً جانبياً يتم تنفيذه لاحقاً، بنمذجة دوال غير بحتة للغات أخرى.

تمتلك هاسكل نظاماً قوياً، ثابتاً يعتمد على استدلال نوع هندلي - ميلنر. ابتكاراتها الرئيسية في هذا المجال هي فئات النوع، التي تم تصورها في الأصل كطريقة مبدئية لإضافة التحميل الزائد إلى اللغة،[42]ولكن منذ العثور على العديد من الاستخدامات.[43]

التركيب الذي يمثل الآثار الجانبية هو مثال على موناد. موناد عبارة عن إطار عام يمكنه نمذجة أنواع مختلفة من الحسابات، بما في ذلك معالجة الأخطاء، عدم التحديد، تفسير الكلمة و ذاكرة معاملات البرمجيات. يتم تعريف موناد على أنها أنواع بيانات عادية، لكن هاسكل توفر بعض التجميل اللغوي لاستخدامها.

هاسكل لها مواصفات مفتوحة منشورة، [29] و توجد تطبيقات متعددة. تطبيقه الرئيسي، مصرِّف گلاسگو هاسكل (GHC)، هو مترجم و مترجم كود أصلي يعمل على معظم الأنظمة الأساسية. تمت ملاحظة GHC لنظامها الغني الذي يشتمل على الابتكارات الحديثة مثل نوع البيانات الجبرية المعمم ومجموعات النوع. تسلط لعبة معايير لغة الحاسب الضوء أيضاً على تنفيذها عالي الأداء لـ التزامن و التوازي.[44]

يتواجد مجتمع نشط ومتزايد حول اللغة، وتتوفر أكثر من 5400 مكتبة وأدوات مفتوحة المصدر تابعة لجهات خارجية في مستودع قرصنة الحزم عبر الإنترنت.[45]

أمثلة على الشيفرة

برنامج "Hello، World!" في هاسكل (السطر الأخير فقط هو الضروري للغاية):

module Main (main) where          -- not needed in interpreter, is the default in a module file

main :: IO ()                     -- the compiler can infer this type definition
main = putStrLn "Hello, World!"

تم تعريف الدالة العاملية في هاسكل، بعدة طرق مختلفة:

-- Type annotation (optional, same for each implementation)
factorial :: (Integral a) => a -> a

-- Using recursion (with the "ifthenelse" expression)
factorial n = if n < 2
              then 1
              else n * factorial (n - 1)

-- Using recursion (with pattern matching)
factorial 0 = 1
factorial n = n * factorial (n - 1)

-- Using recursion (with guards)
factorial n
   | n < 2     = 1
   | otherwise = n * factorial (n - 1)

-- Using a list and the "product" function
factorial n = product [1..n]

-- Using fold (implements "product")
factorial n = foldl (*) 1 [1..n]

-- Point-free style
factorial = foldr (*) 1 . enumFromTo 1

نظراً لأن النوع عدد صحيح يحتوي على دقة عشوائية، فإن هذا الرمز سيحسب قيماً مثل factorial 100000 (رقم مكون من 456،574 رقماً)، بدون فقدان الدقة.

تنفيذ خوارزمية مشابهة لـ الفرز السريع على القوائم، حيث يتم أخذ العنصر الأول كمحور:

-- Type annotation (optional, same for each implementation)
quickSort :: Ord a => [a] -> [a]

-- Using list comprehensions
quickSort []     = []                               -- The empty list is already sorted
quickSort (x:xs) = quickSort [a | a <- xs, a < x]   -- Sort the left part of the list
                   ++ [x] ++                        -- Insert pivot between two sorted parts
                   quickSort [a | a <- xs, a >= x]  -- Sort the right part of the list

-- Using filter
quickSort []     = []
quickSort (x:xs) = quickSort (filter (<x) xs)
                   ++ [x] ++
                   quickSort (filter (>=x) xs)

التطبيقات

يتم توزيع جميع التطبيقات المدرجة بموجب تراخيص مفتوحة المصدر.[46]

تشمل التطبيقات التي تتوافق تماماً أو تقريباً مع معيار هاسكل 98 ما يلي:

  • يجمع مصرِّف گلاسگو هاسكل (GHC) إلى كود أصلي في العديد من بنى المعالجات المختلفة، وإلى آنسي سي، عبر واحد من لغتين وسيطتين: سي--، أو في الإصدارات الأحدث، LLVM (المعروف سابقاً باسم آلة افتراضية منخفضة المستوى).[47][48] أصبحت GHC هي اللغة القياسية الفعلية.[49]هناك مكتبات (على سبيل المثال، روابط لـ جي‌إل المفتوحة) التي تعمل فقط مع GHC. يتم توزيع GHC أيضاً مع منصة هاسكل.
  • يؤكد Jhc، مترجم هاسكل الذي كتبه جون ميشام، على سرعة وكفاءة البرامج التي تم إنشاؤها واستكشاف تحولات البرامج الجديدة.
    • Ajhc هو فرع Jhc.
  • مترجم أوتريخت هاسكل (UHC) هو تطبيق هاسكل من جامعة أوتريخت.[50] الذي يدعم جميع ميزات هاسكل 98 تقريباً بالإضافة إلى العديد من الإضافات التجريبية. يتم تنفيذه باستخدام قواعد النحو ويستخدم حالياً في الغالب للبحث في أنظمة الكتابة المُولدة وملحقات اللغة.

تشمل التطبيقات التي لم تعد تتم صيانتها بشكل فعال ما يلي:

  • نظام گوفر لمستخدم هاسكل (هگز) هو مترجم بايت‌كود. كانت إحدى التطبيقات الأكثر استخداماً على نطاق واسع، إلى جانب مترجم [51] ولكن تم استبدالها في الغالب بـ GHCi. كما يأتي مع مكتبة رسومات.
  • HBC هو تطبيق أولي يدعم هاسكل 1.4. تم تنفيذه من قبل لنارت أوگستسن في إم‌إل حسب الحاجة والمستندة إليها. لم يتم تطويره بفعالية لبعض الوقت.
  • nhc98 هو مترجم للبايت‌كود والذي يركز على تقليل استخدام الذاكرة.
    • كان مترجم يورك هاسكل (Yhc) فرعاً لـ nhc98، بهدف أن يكون أبسط وأكثر قدرة على النقل والفعالية، ودمج الدعم لهات، متتبع هاسكل. كما أن لديها خلفية جاڤا سكرپت، مما يسمح للمستخدمين بتشغيل برامج هاسكل في متصفحات الوب.

تتضمن التطبيقات غير المتوافقة مع هاسكل 98 بشكل كامل، وتستخدم لغة هاسكل المتغيرة:

  • إيتا و فريج هما لغات من هاسكل تستهدفان آلة جاڤا الافتراضية.
  • گوفر كانت لغة تعليمية لهاسكل، مع ميزة تسمى فئات المنشئ، التي طورها مارك جونز. وقد حل محله هگز (نظام گوفر لمستخدم هاسكل).
  • هليوم، وهي لغة أحدث من هاسكل. ينصب التركيز على تسهيل التعلم عبر رسائل خطأ أوضح. يفتقر حالياً إلى الدعم الكامل لفئات النوع، مما يجعله غير متوافق مع العديد من برامج هاسكل.

التطبيقات البارزة

في الصناعة

  • لغة SystemVerilog بلوزسپك (BSV) وهي لغة لتصميم أشباه الموصلات وهي ملحق لـ هاسكل. أيضاً، يتم تنفيذ أدوات شركة بلوزسپك في هاسكل.
  • تم تطبيق كرپتول، وهي لغة وأدوات لتطوير الخوارزميات [[علم]التعمية|التعمية] والتحقق منها، في هاسكل.
  • ينفذ فيسبوك برامج مكافحة البريد العشوائي[55] في هاسكل، والحفاظ على مكتبة الوصول إلى البيانات الأساسية كـبرمجيات مفتوح المصدر.[56]
  • قام گيت‌هَب بتطبيق الدلاليات، وهي مكتبة مفتوحة المصدر لتحليل وتنويع وتفسير شيفرة المصدر غير الموثوق بها، في هاسكل.[57]
  • seL4، أول نوية، تم التحقق منها رسمياً[58] وقد تم استخدام هاسكل كلغة نماذج أولية لمطور نظام التشغيل.[58]:p.2في الوقت نفسه، حددت شيفرة هاسكل مواصفات قابلة للتنفيذ يمكن من خلالها التفكير، للترجمة الآلية بواسطة أداة إثبات المبرهنات.[58]:p.3 وهكذا فإن شيفرة هاسكل كانت بمثابة نموذج أولي وسيط قبل التنقيح النهائي للغة سي.[58]:p.3


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

في الوب

تتضمن إطارات عمل الوب البارزة المكتوبة لـ هاسكل:[59]

الانتقاد

ناقش يان-ڤيليم مايسين، في عام 2002، و سيمون پيتون جونز، في عام 2003، المشكلات المرتبطة بالتقييم حسب الحاجة مع الاعتراف أيضاً بالدوافع النظرية لذلك.[60][61] بالإضافة إلى اعتبارات عملية بحتة مثل تحسين الأداء،[62] وقد لاحظوا أنه بالإضافة إلى إضافة بعض النفقات العامة للأداء، فإن التقييم البطيء يجعل من الصعب على المبرمجين التفكير في أداء الشيفرة الخاصة بهم (خاصة استخدام المساحة الخاصة بها). لاحظ كل من باستيان هيرين، ودان ليين، وأريان ڤان إيجيندورن في عام 2003 أيضاً بعض العقبات أمام متعلمي هاسكل: "تعد البنية الدقيقة ونظام النوع المتطور في هاسكل سيفاً ذا حدين - يحظى بتقدير كبير من قبل المبرمجين ذوي الخبرة ولكنه أيضاً مصدر إحباط بين المبتدئين، لأن عمومية هاسكل تؤدي غالباً إلى رسائل خطأ مشفرة."[63]لمعالجة هذه المشكلات، طور باحثون من جامعة أوترخت مترجماً متقدماً يسمى هيليوم، مما أدى إلى تحسين سهولة استخدام رسائل الخطأ عن طريق الحد من عمومية بعض ميزات هاسكل، وعلى وجه الخصوص إزالة دعم فئات النوع. قام بن لپماير بتصميم دسايپل[64]باعتبارها لغة صارمة افتراضياً (وحسب الحاجة من خلال التعليقات التوضيحية الصريحة) هاسكل مع نظام النوع والتأثير، لمعالجة صعوبات هاسكل في التفكير حول التقييم البطيء وفي استخدام هياكل البيانات التقليدية مثل المصفوفات.[65]وقد ناقش (p. 20) بأن "التحديث الهدام يزود المبرمج بأداتين مهمتين وقويتين ... مجموعة من هياكل البيانات الشبيهة بالمصفوفات لإدارة مجموعات الكائنات، و ... القدرة على بث قيمة جديدة لجميع أجزاء البرنامج بأقل عبء على المبرمج."

أعطى روبرت هارپر، أحد مؤلفي إم‌إل المعيارية، أسبابه لعدم استخدام هاسكل لتعليم البرمجة التمهيدية. من بين هذه صعوبة التفكير حول استخدام الموارد مع التقييم غير الصارم، وهذا التقييم حسب الحاجة يقوم بتعقيد تعريف أنواع البيانات والاستدلال الاستقرائي،[66] و "دونية" نظام الفصل (القديم) في هاسكل مقارنة بنظام الوحدات النمطية في إم‌إل.[67]

تعرضت أداة بناء هاسكل، كابال ، تاريخياً لانتقادات بسبب سوء التعامل مع إصدارات متعددة من نفس المكتبة، وهي مشكلة تُعرف باسم "كابال هل". تم إنشاء مخدم التكديس و المكدس رداً على هذه الانتقادات.[68] لدى كابال نفسها الآن نظام بناء أكثر تعقيداً، مستوحى بشكل كبير من نكس،[69] والذي أصبح الافتراضي مع الإصدار 3.0.

اللغات المرتبطة

كلين وهي لغة قريبة وأقدم قليلًا من هاسكل. أكبر انحراف لها عن هاسكل هو استخدام نوع التفرد بدلاً من مونادز للإدخال / الإخراج والآثار الجانبية.

تم تطوير سلسلة من اللغات المستوحاة من هاسكل، ولكن بأنظمة مختلفة، بما في ذلك:

تشمل اللغات الأخرى المرتبطة:

  • كيري، لغة برمجة وظيفية / منطقية مبنية على هاسكل.

تشمل متغيرات هاسكل البارزة ما يلي:

  • هاسكل عامة، وهي نسخة من هاسكل مع دعم نظام النوع لـ البرمجة العامة.
  • هيوم، وهي لغة وظيفية صارمة لـ الأنظمة المضمنة والتي تعتمد على العمليات مثل التلقائية عديمة الحالة عبر نوع من مجموعات قنوات صندوق بريد عنصر واحد حيث يتم الاحتفاظ بالحالة عن طريق التغذية العكسية في علب البريد، ووصف تخطيط من المخرجات إلى القنوات مثل الأسلاك الصندوقية، مع لغة تعبير وصيغة تشبه هاسكل.

المؤتمرات وورشات العمل

يلتقي مجتمع هاسكل بانتظام لأنشطة البحث والتطوير. والأحداث الرئيسية هي:

منذ عام 2006، حدثت سلسلة من "الهاكاثونات" المنظمة، سلسلة هاك، والتي تهدف إلى تحسين أدوات لغة البرمجة والمكتبات.[70]

المراجع

  1. ^ أ ب ت Hudak et al. 2007.
  2. ^ أ ب قالب:Cite mailing list
  3. ^ أ ب قالب:Cite mailing list
  4. ^ أ ب ت ث ج ح خ د ذ ر ز س ش Peyton Jones 2003, p. xi
  5. ^ Norell, Ulf (2008). "Dependently Typed Programming in Agda" (PDF). Gothenburg: Chalmers University. Retrieved 9 February 2012.
  6. ^ Hudak et al. 2007, pp. 12–38, 43.
  7. ^ Stroustrup, Bjarne; Sutton, Andrew (2011). "Design of Concept Libraries for C++" (PDF). Archived from the original (PDF) on 10 February 2012. Cite journal requires |journal= (help)
  8. ^ أ ب ت ث ج ح خ د ذ ر Hudak et al. 2007, pp. 12-45–46.
  9. ^ أ ب Meijer, Erik (2006). "Confessions of a Used Programming Language Salesman: Getting the Masses Hooked on Haskell". Oopsla 2007. CiteSeerX 10.1.1.72.868.
  10. ^ Meijer, Erik (1 October 2009). "C9 Lectures: Dr. Erik Meijer – Functional Programming Fundamentals, Chapter 1 of 13". Channel 9. Microsoft. Retrieved 9 February 2012.
  11. ^ Drobi, Sadek (4 March 2009). "Erik Meijer on LINQ". InfoQ. QCon SF 2008: C4Media Inc. Retrieved 9 February 2012.CS1 maint: location (link)
  12. ^ Hickey, Rich. "Clojure Bookshelf". Listmania!. Archived from the original on 3 October 2017. Retrieved 3 October 2017.
  13. ^ Heller, Martin (18 October 2011). "Turn up your nose at Dart and smell the CoffeeScript". InfoWorld. Retrieved 2020-07-15.
  14. ^ "Declarative programming in Escher" (PDF). Retrieved 7 October 2015.
  15. ^ Syme, Don; Granicz, Adam; Cisternino, Antonio (2007). Expert F#. Apress. p. 2. F# also draws from Haskell particularly with regard to two advanced language features called sequence expressions and workflows.
  16. ^ Wechsung, Ingo. "The Frege Programming Language" (PDF). Retrieved 26 February 2014.
  17. ^ "Facebook Introduces 'Hack,' the Programming Language of the Future". WIRED. 20 March 2014.
  18. ^ "Idris, a dependently typed language". Retrieved 26 October 2014.
  19. ^ "LiveScript Inspiration". Retrieved 4 February 2014.
  20. ^ Freeman, Phil (2016). "PureScript by Example". Leanpub. Retrieved 23 April 2017.
  21. ^ Kuchling, A. M. "Functional Programming HOWTO". Python v2.7.2 documentation. Python Software Foundation. Retrieved 9 February 2012.
  22. ^ "Glossary of Terms and Jargon". Perl Foundation Perl 6 Wiki. The Perl Foundation. Archived from the original on 21 January 2012. Retrieved 9 February 2012.
  23. ^ "The Rust Reference: Appendix: Influences". Retrieved 3 February 2016.
  24. ^ Fogus, Michael (6 August 2010). "MartinOdersky take(5) toList". Send More Paramedics. Retrieved 9 February 2012.
  25. ^ Lattner, Chris (3 June 2014). "Chris Lattner's Homepage". Chris Lattner. Retrieved 3 June 2014. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  26. ^ "Timber/History". Retrieved 7 October 2015.
  27. ^ قالب:Cite mailing list
  28. ^ Type inference originally using Hindley-Milner type inference
  29. ^ أ ب ت Peyton Jones 2003.
  30. ^ Edward Kmett, Edward Kmett – Type Classes vs. the World
  31. ^ "Haskell in education". Retrieved 15 February 2016.
  32. ^ "Haskell in research". Retrieved 15 February 2016.
  33. ^ Mossberg, Erik (2020-06-08), erkmos/haskell-companies, https://github.com/erkmos/haskell-companies, retrieved on 2020-06-22 
  34. ^ "Haskell in industry - HaskellWiki". wiki.haskell.org. Retrieved 22 June 2020.
  35. ^ "PYPL PopularitY of Programming Language index". pypl.github.io (in الإنجليزية). 22 January 2021. Archived from the original on 17 September 2020. Retrieved 22 January 2021.
  36. ^ Frederickson, Ben. "Ranking Programming Languages by GitHub Users". www.benfrederickson.com. Retrieved 6 September 2019.
  37. ^ أ ب ت Peyton Jones 2003, Preface.
  38. ^ "Type classes, first proposed during the design of the Haskell programming language, ..." —John Garrett Morris (2013), "Type Classes and Instance Chains: A Relational Approach"
  39. ^ Wadler, Philip (October 1988). "How to make ad-hoc polymorphism less ad hoc".
  40. ^ "Haskell Wiki: Implementations". Retrieved 18 December 2012.
  41. ^ "Welcome to Haskell'". The Haskell' Wiki.
  42. ^ Wadler, P.; Blott, S. (1989). "How to make ad-hoc polymorphism less ad hoc". Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM: 60–76. doi:10.1145/75277.75283. ISBN 978-0-89791-294-5. S2CID 15327197.
  43. ^ Hallgren, T. (January 2001). "Fun with Functional Dependencies, or Types as Values in Static Computations in Haskell". Proceedings of the Joint CS/CE Winter Meeting. Varberg, Sweden.
  44. ^ Computer Language Benchmarks Game
  45. ^ "HackageDB statistics". Hackage.haskell.org. Archived from the original on 3 May 2013. Retrieved 26 June 2013.
  46. ^ "Implementations" at the Haskell Wiki
  47. ^ "The LLVM Backend". GHC Trac.
  48. ^ (2010) "An LLVM Backend for GHC"., ACM Press. 
  49. ^ C. Ryder and S. Thompson (2005). "Porting HaRe to the GHC API"
  50. ^ Utrecht Haskell Compiler
  51. ^ Hudak et al. 2007, pp. 12–22.
  52. ^ "The Haskell Cabal". Retrieved 8 April 2015.
  53. ^ "Linspire/Freespire Core OS Team and Haskell". Debian Haskell mailing list. May 2006.
  54. ^ xmonad.org
  55. ^ "Fighting spam with Haskell". Facebook Code (in الإنجليزية). 26 June 2015. Retrieved 11 August 2019.
  56. ^ "Open-sourcing Haxl, a library for Haskell". Facebook Code (in الإنجليزية). 10 June 2014. Retrieved 11 August 2019.
  57. ^ Parsing, analyzing, and comparing source code across many languages: github/semantic, GitHub, 7 June 2019, https://github.com/github/semantic, retrieved on 7 June 2019 
  58. ^ أ ب ت ث A formal proof of functional correctness was completed in 2009. (October 2009) "seL4: Formal verification of an OS kernel".. 
  59. ^ "Web/Frameworks – HaskellWiki". wiki.haskell.org. Retrieved 11 August 2019.
  60. ^ Jan-Willem Maessen. Eager Haskell: Resource-bounded execution yields efficient iteration. Proceedings of the 2002 Association for Computing Machinery (ACM) SIGPLAN workshop on Haskell.
  61. ^ Simon Peyton Jones. Wearing the hair shirt: a retrospective on Haskell. Invited talk at POPL 2003.
  62. ^ "Lazy evaluation can lead to excellent performance, such as in The Computer Language Benchmarks Game".
  63. ^ Heeren, Bastiaan; Leijen, Daan; van IJzendoorn, Arjan (2003). "Helium, for learning Haskell" (PDF). Proceedings of the 2003 ACM SIGPLAN Workshop on Haskell: 62–71. doi:10.1145/871895.871902. ISBN 1581137583. S2CID 11986908.
  64. ^ "DDC – HaskellWiki". Haskell.org. 3 December 2010. Retrieved 26 June 2013.
  65. ^ Ben Lippmeier, Type Inference and Optimisation for an Impure World, Australian National University (2010) PhD thesis, chapter 1
  66. ^ Robert Harper. "The point of laziness". قالب:Closed access
  67. ^ Robert Harper. "Modules matter most". قالب:Closed access
  68. ^ "Solving Cabal Hell". www.yesodweb.com. Retrieved 11 August 2019.
  69. ^ "Announcing cabal new-build: Nix-style local builds". Retrieved 1 October 2019.
  70. ^ "Hackathon – HaskellWiki".

للاستزادة

التقارير
الكتب التدريسية
دورات تعليمية
تاريخ


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

وصلات خارجية

هناك كتاب ، Haskell، في معرفة الكتب.


هناك كتاب ، Write Yourself a Scheme in 48 Hours، في معرفة الكتب.


  • خطأ لوا في وحدة:Official_website على السطر 90: attempt to index field 'wikibase' (a nil value).
  • Official wiki


الكلمات الدالة: