هاسكل

هاسكل ( تُلفظ / ˈhæskəl / [ 25 ] ) هي لغة برمجة عامة الأغراض ، ذات كتابة ثابتة ، ووظيفية بحتة ، مع استنتاج الأنواع والتقييم الكسول . [ 26 ] [ 27 ] وقد ريادت هاسكل العديد من ميزات لغات البرمجة ، بما في ذلك فئات الأنواع لتحميل المعاملات الزائد الآمن من حيث النوع، والإدخال /الإخراج الأحادي . سُميت نسبةً إلى عالم المنطق هاسكل كاري . [ 1 ] يُعد مُصرّف غلاسكو هاسكل (GHC) التنفيذ الرئيسي لهاسكل .

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

تُستخدم لغة هاسكل في الأوساط الأكاديمية والصناعية. [ 29 ] [ 30 ] [ 31 ] اعتبارًا من مايو 2021 كانت لغة البرمجة Haskell في المرتبة الثامنة والعشرين من حيث الشعبية في عمليات البحث على جوجل عن الدروس التعليمية، [ 32 ] وشكلت أقل من 1% من المستخدمين النشطين على مستودع شفرة المصدر GitHub . [ 33 ]

تاريخ

بعد إصدار برنامج ميراندا من قِبل شركة ريسيرش سوفتوير المحدودة عام ١٩٨٥، ازداد الاهتمام بلغات البرمجة الوظيفية الكسولة. وبحلول عام ١٩٨٧، كان هناك أكثر من اثنتي عشرة لغة برمجة وظيفية بحتة غير صارمة . وكانت ميراندا الأكثر استخدامًا، لكنها كانت برنامجًا احتكاريًا . وفي مؤتمر لغات البرمجة الوظيفية وهندسة الحاسوب (FPCA '87) في بورتلاند، أوريغون ، كان هناك إجماع قوي على تشكيل لجنة لوضع معيار مفتوح لهذه اللغات. وكان هدف اللجنة هو دمج لغات البرمجة الوظيفية الموجودة في لغة مشتركة لتكون أساسًا للبحوث المستقبلية في تصميم لغات البرمجة الوظيفية. [ ٣٤ ]

هاسكل من الإصدار 1.0 إلى الإصدار 1.4

تم تطوير لغة البرمجة Haskell بواسطة لجنة، في محاولة لجمع الحلول الجاهزة حيثما أمكن ذلك.

تم اقتراح فئات الأنواع لأول مرة من قبل فيليب وادلر وستيفن بلوت لمعالجة التعامل المخصص مع أنواع المساواة والتحميل الزائد الحسابي في اللغات في ذلك الوقت. [ 35 ]

في الإصدارات الأولى من لغة هاسكل، حتى الإصدار 1.2، كانت تفاعلات المستخدم وعمليات الإدخال/الإخراج تُدار بواسطة آليات تعتمد على التدفقات وأخرى تعتمد على الاستمرارية ، والتي اعتُبرت غير مُرضية على نطاق واسع. [ 36 ] في الإصدار 1.3، تم تقديم الإدخال/الإخراج الأحادي ، إلى جانب تعميم فئات الأنواع إلى أنواع أعلى ( منشئات الأنواع ). بالإضافة إلى "تدوين do"، الذي يُسهّل كتابة فئات Monadالأنواع، منح هذا هاسكل نظام تأثيرات يحافظ على الشفافية المرجعية ويتسم بالسهولة.

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

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

التسلسل الهرمي لفئات الأنواع في مقدمة هاسكل اعتبارًا من GHC 7.10. إن تضمين Foldableو Traversable(مع التغييرات المقابلة في توقيعات أنواع بعض الدوال)، و Applicativeكوسيطة بين Functorو Monad، هي انحرافات عن معيار هاسكل 2010.

هاسكل 98

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

في فبراير 1999، نُشر معيار لغة هاسكل 98 لأول مرة بعنوان "تقرير هاسكل 98" . [ 34 ] وفي يناير 2003، نُشرت نسخة منقحة بعنوان "لغة ومكتبات هاسكل 98: التقرير المنقح" . [ 27 ] ولا تزال اللغة تتطور بسرعة، حيث يُمثل تطبيق مُترجم غلاسكو هاسكل (GHC) المعيار الفعلي الحالي . [ 37 ]

هاسكل 2010

في أوائل عام 2006، بدأت عملية تحديد لغة برمجة بديلة لمعيار هاسكل 98، والتي أُطلق عليها اسم هاسكل برايم . [ 38 ] وكان الهدف من هذه العملية أن تكون عملية تدريجية مستمرة لمراجعة تعريف اللغة، بحيث تُصدر مراجعة جديدة مرة واحدة سنويًا كحد أقصى. أُعلن عن المراجعة الأولى، والتي سُميت هاسكل 2010 ، في نوفمبر 2009 [ 2 ] ونُشرت في يوليو 2010.

أضافت لغة Haskell 2010 العديد من الميزات الشائعة الاستخدام وغير المثيرة للجدل والتي تم تفعيلها سابقًا عبر علامات خاصة بالمترجم.

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

المعايير المستقبلية

كان من المقرر إصدار المواصفات الرسمية التالية في عام 2020. [ 3 ] في 29 أكتوبر 2021، مع إصدار GHC 9.2.1، تم إطلاق إضافة GHC2021. على الرغم من أنها ليست مواصفات لغة رسمية، إلا أنها تجمع بين العديد من إضافات GHC المستقرة والشائعة الاستخدام للغة Haskell 2010. [ 39 ] [ 40 ]

سمات

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

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

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

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

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

أمثلة على التعليمات البرمجية

برنامج "مرحباً بالعالم!" بلغة هاسكل (السطر الأخير فقط ضروري تماماً):

module Main ( main ) where -- غير مطلوب في المفسر، وهو الوضع الافتراضي في ملف الوحدة النمطيةmain :: IO () -- يمكن للمترجم استنتاج تعريف هذا النوع main = putStrLn "Hello, World!"

دالة المضروب في لغة هاسكل، مُعرّفة بعدة طرق مختلفة (السطر الأول هو شرح النوع ، وهو اختياري ويكون نفسه في كل تطبيق):

المضروب :: ( Integral a ) => a -> aباستخدام التكرار (مع تعبير "ifthenelse")، يكون مضروب n = إذا كان n < 2 فإن 1 وإلا فإن n * مضروب ( n - 1 )-- باستخدام الاستدعاء الذاتي (مع مطابقة الأنماط) مضروب 0 = 1 مضروب n = n * مضروب ( n - 1 )-- باستخدام الاستدعاء الذاتي (مع الشروط) مضروب n | n < 2 = 1 | خلاف ذلك = n * مضروب ( n - 1 )-- باستخدام قائمة ودالة "الضرب" مضروب n = product [ 1 .. n ]-- باستخدام دالة الطي (التي تُنفذ "الضرب")، مضروب n = foldl ( * ) 1 [ 1 .. n ]-- حساب المضروب بدون نقاط = foldr ( * ) 1 . enumFromTo 1

يسمح استخدام مُركِّب النقطة الثابتة في لغة هاسكل بكتابة هذه الدالة دون أي استدعاء ذاتي صريح.

استيراد دالة Data.Function ( fix )المضروب = ثابت fac حيث fac f x | x < 2 = 1 | خلاف ذلك = x * f ( x - 1 )

بما أن نوع Integer يتمتع بدقة عشوائية ، فإن هذا الكود سيحسب قيمًا مثل factorial 100000(رقم مكون من 456574 رقمًا)، دون فقدان الدقة.

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

-- تحديد النوع (اختياري، وهو نفسه لكل تطبيق) quickSort :: Ord a => [ a ] ​​-> [ a ]-- باستخدام تراكيب القوائم quickSort [] = [] -- القائمة الفارغة مرتبة بالفعل quickSort ( x : xs ) = quickSort [ a | a <- xs , a < x ] -- فرز الجزء الأيسر من القائمة ++ [ x ] ++ -- إدراج عنصر محوري بين جزأين مرتبين quickSort [ a | a <- xs , a >= x ] -- فرز الجزء الأيمن من القائمة-- باستخدام عامل التصفية quickSort [] = [] quickSort ( x : xs ) = quickSort ( filter ( < x ) xs ) ++ [ x ] ++ quickSort ( filter ( >= x ) xs )

التطبيقات

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

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

  • يُترجم مُصرّف غلاسكو هاسكل (GHC) إلى كود أصلي على العديد من بنى المعالجات المختلفة، وإلى لغة ANSI C ، عبر إحدى لغتين وسيطتين : C-- ، أو في الإصدارات الأحدث، كود LLVM (المعروف سابقًا باسم Low Level Virtual Machine). [ 46 ] [ 47 ] أصبح GHC المعيار الفعلي للغة هاسكل. [ 48 ] توجد مكتبات (مثل روابط OpenGL ) تعمل فقط مع GHC. كما تم توزيع GHC مع منصة هاسكل . يتميز GHC بوقت تشغيل غير متزامن يقوم أيضًا بجدولة الخيوط عبر أنوية وحدة المعالجة المركزية المتعددة، على غرار وقت تشغيل Go .
  • يركز Jhc، وهو مترجم لغة Haskell كتبه جون ميتشام، على سرعة وكفاءة البرامج المولدة واستكشاف تحويلات البرامج الجديدة.
    • Ajhc هي نسخة معدلة من Jhc.
  • مُصرّف أوتريخت هاسكل (UHC) هو تطبيق للغة هاسكل من جامعة أوتريخت . [ 49 ] وهو يدعم جميع ميزات هاسكل 98 تقريبًا بالإضافة إلى العديد من الإضافات التجريبية. تم تنفيذه باستخدام قواعد نحوية سماتية ، ويُستخدم بشكل أساسي في أبحاث أنظمة الأنواع المُولّدة وامتدادات اللغة.

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

  • نظام جوفر لمستخدمي هاسكل ( Hugs ) هو مترجم للغة البايت كود . كان في السابق أحد أكثر التطبيقات استخدامًا على نطاق واسع، إلى جانب مُصرّف GHC، [ 50 ] ولكنه استُبدل الآن إلى حد كبير بـ GHCi. كما أنه يأتي مزودًا بمكتبة رسومية.
  • HBC هو تطبيق مبكر يدعم لغة هاسكل 1.4. تم تطويره بواسطة لينارت أوغستسون في Lazy ML ، وهو مبني عليه . لم يتم تطويره بشكل فعال منذ فترة.
  • nhc98 هو مترجم بايت كود يركز على تقليل استخدام الذاكرة.
    • كان مُصرّف يورك هاسكل ( Yhc ) نسخةً مُعدّلة من nhc98، بهدف أن يكون أبسط وأكثر قابليةً للنقل وأكثر كفاءة، وأن يدمج دعم Hat، وهو مُتتبّع هاسكل. كما كان يحتوي على واجهة خلفية جافا سكريبت ، مما يسمح للمستخدمين بتشغيل برامج هاسكل في متصفحات الويب .

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

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

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

  • أغدا هو مساعد إثبات مكتوب بلغة هاسكل. [ 51 ]
  • كابال هي أداة لبناء وتغليف مكتبات وبرامج هاسكل. [ 52 ]
  • داركس هو نظام للتحكم في المراجعات مكتوب بلغة هاسكل، ويحتوي على العديد من الميزات المبتكرة، مثل التحكم الأكثر دقة في التصحيحات المراد تطبيقها.
  • غالبًا ما يكون مترجم Glasgow Haskell (GHC) بمثابة منصة اختبار لميزات البرمجة الوظيفية المتقدمة والتحسينات في لغات البرمجة الأخرى.
  • Git-annex هي أداة لإدارة ملفات البيانات (الكبيرة) تحت نظام التحكم في الإصدارات Git . كما أنها توفر نظامًا لمزامنة الملفات الموزعة (مساعد git-annex).
  • اختارت شركة لينسباير لينكس لغة هاسكل لتطوير أدوات النظام. [ 53 ]
  • Pandoc هي أداة لتحويل تنسيق ترميز واحد إلى تنسيق آخر.
  • Pugs هو مترجم ومفسر للغة البرمجة التي كانت تسمى آنذاك Perl 6، ولكن أعيد تسميتها منذ ذلك الحين إلى Raku .
  • TidalCycles هي لغة خاصة بالمجال لبرمجة الأنماط الموسيقية بشكل مباشر، وهي مضمنة في لغة Haskell. [ 54 ]
  • Xmonad هو مدير نوافذ لنظام X Window ، مكتوب بالكامل بلغة Haskell. [ 55 ]
  • GarganText [ 56 ] هي أداة تعاونية لرسم خرائط النصوص التحليلية الدلالية على أي متصفح ويب ، مكتوبة بالكامل بلغة Haskell و PureScript ، وتستخدم على سبيل المثال في مجتمع البحث لإعداد تقارير وخرائط طريق حديثة. [ 57 ]

صناعة

الويب

تتضمن أطر عمل الويب البارزة المكتوبة بلغة هاسكل ما يلي: [ 68 ]

استقبال

ناقش كلٌّ من يان ويليم مايسن، في عام 2002، وسيمون بيتون جونز ، في عام 2003، المشكلات المرتبطة بالتقييم الكسول، مع إقرارهما في الوقت نفسه بالدوافع النظرية وراءه. [ 69 ] [ 70 ] وبالإضافة إلى الاعتبارات العملية البحتة، مثل تحسين الأداء، [ 71 ] فقد أشارا إلى أن التقييم الكسول يجعل من الصعب على المبرمجين فهم أداء برامجهم (وخاصةً استخدامها للمساحة).

لاحظ باستيان هيرين، ودان ليجن، وأرجان فان إيزندورن في عام 2003 بعض الصعوبات التي تواجه متعلمي لغة هاسكل: "إنّ التركيب النحوي الدقيق ونظام الأنواع المتطور في هاسكل سلاح ذو حدين - فهو يحظى بتقدير كبير من المبرمجين ذوي الخبرة، ولكنه في الوقت نفسه مصدر إحباط للمبتدئين، نظرًا لأنّ عمومية هاسكل غالبًا ما تؤدي إلى رسائل خطأ مبهمة." [ 72 ] ولمعالجة رسائل الخطأ، طوّر باحثون من جامعة أوتريخت مترجمًا متقدمًا يُدعى هيليوم، والذي حسّن من سهولة استخدام رسائل الخطأ عن طريق الحدّ من عمومية بعض ميزات هاسكل. وعلى وجه الخصوص، يقوم بتعطيل فئات الأنواع افتراضيًا. [ 73 ]

صمّم بن ليبماير لغة Disciple [ 74 ] كلغة Haskell ذات نمط صارم افتراضيًا (وقابلة للتحديث الكسول عند تحديدها صراحةً)، مع نظام يعتمد على النوع والتأثير، وذلك لمعالجة صعوبات Haskell في التعامل مع التقييم الكسول واستخدام هياكل البيانات التقليدية مثل المصفوفات القابلة للتغيير. [ 75 ] ويجادل (ص  20) بأن "التحديث المُدمّر يزوّد المبرمج بأداتين مهمتين وقويتين... مجموعة من هياكل البيانات الفعّالة الشبيهة بالمصفوفات لإدارة مجموعات الكائنات، و... القدرة على بث قيمة جديدة إلى جميع أجزاء البرنامج بأقل جهد ممكن على المبرمج".

قدّم روبرت هاربر ، أحد مؤلفي Standard ML ، أسبابه لعدم استخدام لغة هاسكل في تدريس البرمجة التمهيدية. من بين هذه الأسباب صعوبة التفكير في استخدام الموارد مع التقييم غير الصارم، وأن التقييم الكسول يُعقّد تعريف أنواع البيانات والاستدلال الاستقرائي، [ 76 ] و"دونية" نظام الفئات (القديم) في هاسكل مقارنةً بنظام الوحدات في ML. [ 77 ]

لطالما وُجهت انتقادات لأداة بناء لغة البرمجة هاسكل، كابال ، بسبب ضعفها في التعامل مع الإصدارات المتعددة من المكتبة نفسها، وهي مشكلة تُعرف باسم "جحيم كابال". وقد تم تطوير خادم ستاكاج وأداة بناء ستاك استجابةً لهذه الانتقادات. [ 78 ] ومنذ ذلك الحين، عالجت كابال هذه المشكلة من خلال استلهام أفكار من مدير الحزم نيكس ، [ 79 ] وأصبح هذا النهج الجديد هو النهج الافتراضي في عام 2019.

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

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

تشمل اللغات الأخرى ذات الصلة ما يلي:

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

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

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

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

تُعقد فعاليات هاسكل بانتظام بالتزامن مع المؤتمر الدولي للبرمجة الوظيفية (ICFP)، بما في ذلك ورش عمل مثل ندوة هاسكل (ورشة عمل هاسكل سابقًا) وفعالية المستخدمين التجاريين للبرمجة الوظيفية. [ 80 ] وتشمل الفعاليات الأخرى ورشة عمل مطوري هاسكل، [ 81 ] وفعالية ZuriHac في زيورخ ، [ 82 ] وهاكاثون هاسكل. [ 83 ]

انظر أيضاً

مراجع

  1. 1 2 3 هوداك وآخرون 2007 .
  2. 1 2 مارلو، سيمون (24 نوفمبر 2009). "الإعلان عن هاسكل 2010" . هاسكل (قائمة بريدية) . تم الاسترجاع في 12 مارس 2011 .
  3. 1 2 ريدل، هربرت (28 أبريل 2016). "إعلان: تشكيل لجنة هاسكل برايم 2020" . هاسكل برايم (قائمة بريدية) . تم الاطلاع عليه في 6 مايو 2017 .
  4. 1 2 3 4 5 6 7 8 9 10 11 12 13 بيتون جونز 2003 ، ص. 11
  5. نوريل، أولف (2008). "البرمجة المعتمدة على النوع في أغدا" (ملف PDF) . غوتنبرغ: جامعة تشالمرز . تم الاطلاع عليه بتاريخ 9 فبراير 2012 .
  6. Hudak et al. 2007 ، ص 12-38، 43.
  7. ستروستروب، بيارن ؛ ساتون، أندرو (2011). "تصميم مكتبات المفاهيم للغة C++" (ملف PDF) . هندسة لغات البرمجيات . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 10 فبراير 2012.
  8. 1 2 3 4 5 6 7 8 9 10 Hudak et al. 2007 , pp. 12-45–46.
  9. 1 2 ماير، إريك (2006). "اعترافات بائع لغات برمجة مستعملة: جذب الجماهير إلى لغة هاسكل". Oopsla 2007. CiteSeerX 10.1.1.72.868 . 
  10. ماير، إريك (1 أكتوبر 2009). "محاضرات القناة التاسعة: د. إريك ماير - أساسيات البرمجة الوظيفية، الفصل 1 من 13" . القناة التاسعة . مايكروسوفت. مؤرشف من الأصل في 16 يونيو 2012. تم الاطلاع عليه في 9 فبراير 2012 . 
  11. دروبي، صادق (4 مارس 2009). "إريك ماير يتحدث عن LINQ" . InfoQ . مؤتمر QCon SF 2008: C4Media Inc. تم الاطلاع عليه في 9 فبراير 2012 .{{cite news}}: CS1 maint: location ( link )
  12. هيكي، ريتش. "رف كتب كلوجر" . ليستمانيا! . مؤرشف من الأصل في 3 أكتوبر 2017. تم الاسترجاع في 3 أكتوبر 2017 .
  13. هيلر، مارتن (18 أكتوبر 2011). "تجاهل لغة دارت واستمتع بلغة كوفي سكريبت" . إنفوورلد . تم الاطلاع عليه بتاريخ 15 يوليو 2020 .
  14. "البرمجة التصريحية في إيشر" (ملف PDF) . تم الاطلاع عليه بتاريخ 7 أكتوبر 2015 .
  15. سايم، دون ؛ غرانيكز، آدم؛ سيسترنينو، أنطونيو (2007). خبير F# . أبريس . ص 2. يستمد F# أيضًا من هاسكل، لا سيما فيما يتعلق بميزتين لغويتين متقدمتين تُسميان تعبيرات التسلسل وسير العمل . 
  16. "فيسبوك يُطلق 'هاك'، لغة البرمجة المستقبلية" . مجلة وايرد . 20 مارس 2014.
  17. "إدريس، لغة ذات كتابة معتمدة" . تم الاطلاع عليه بتاريخ 26 أكتوبر 2014 .
  18. "إلهام لايف سكريبت" . تم الاطلاع عليه بتاريخ 4 فبراير 2014 .
  19. فريمان، فيل (2016). "PureScript by Example" . Leanpub . تم الاطلاع عليه بتاريخ 23 أبريل 2017 .
  20. كوتشلينج، أ.م. "دليل البرمجة الوظيفية" . وثائق بايثون الإصدار 2.7.2 . مؤسسة برمجيات بايثون . تم الاطلاع عليه بتاريخ 9 فبراير 2012 .
  21. "مسرد المصطلحات والمفردات" . مؤسسة بيرل، ويكي بيرل 6. مؤسسة بيرل . مؤرشف من الأصل في 21 يناير 2012. تم الاطلاع عليه في 9 فبراير 2012 .
  22. "التأثيرات - مرجع الصدأ" . مرجع الصدأ . تم الاطلاع عليه بتاريخ 31 ديسمبر 2023 .
  23. فوجوس، مايكل (6 أغسطس 2010). "MartinOdersky take(5) toList" . أرسل المزيد من المسعفين . تم الاسترجاع في 9 فبراير 2012 .
  24. لاتنر، كريس (3 يونيو 2014). "الصفحة الرئيسية لكريس لاتنر" . كريس لاتنر . تم الاطلاع عليه في 3 يونيو 2014. لغة سويفت هي ثمرة جهد دؤوب من فريق من خبراء اللغة، ومختصي التوثيق، وخبراء تحسين أداء المترجمات، ومجموعة داخلية بالغة الأهمية قامت بتجربة اللغة داخليًا وقدمت ملاحظاتها للمساعدة في صقل الأفكار واختبارها عمليًا. وبالطبع، استفادت اللغة بشكل كبير من الخبرات المكتسبة بصعوبة من العديد من اللغات الأخرى في هذا المجال، مستمدةً أفكارها من لغات مثل أوبجكتيف-سي، وراست، وهاسكل، وروبي، وبايثون، وسي شارب، وسي إل يو، وغيرها الكثير.
  25. شيڤالييه، تيم (28 يناير 2008). "هل يمكن لأحد أن يخبرني بنطق كلمة "هاسكل"؟" . هاسكل كافيه (قائمة بريدية) . تم الاطلاع عليه بتاريخ 12 مارس 2011 .
  26. استدلال النوع باستخدام استدلال نوع هيندلي-ميلنر في الأصل
  27. 1 2 3 بيتون جونز 2003 .
  28. إدوارد كميت، إدوارد كميت – فئات الأنواع في مواجهة العالم
  29. موسبرغ، إريك (8 يونيو 2020)، erkmos/haskell-companies ، تم الاطلاع عليه في 22 يونيو 2020
  30. أوسوليفان، برايان؛ غورزن، جون؛ ستيوارت، دونالد بروس (15 نوفمبر 2008). هاسكل في العالم الحقيقي: كود يمكنك الوثوق به . دار نشر أورايلي ميديا. الصفحات من xxviii إلى xxxi. ISBN  978-0-596-55430-9.
  31. "هاسكل في بيئة الإنتاج: ريسك بوك" . شركة سيروكيل لتطوير البرمجيات . تم الاطلاع عليه بتاريخ 7 سبتمبر 2021 .
  32. "مؤشر شعبية لغة البرمجة PYPL" . pypl.github.io . مايو 2021. مؤرشف من الأصل في 7 مايو 2021. تم الاطلاع عليه في 16 مايو 2021 .
  33. فريدريكسون، بن. "تصنيف لغات البرمجة حسب مستخدمي GitHub" . www.benfrederickson.com . تاريخ الاطلاع: 6 سبتمبر 2019 .
  34. 1 2 3 بيتون جونز 2003 ، مقدمة.
  35. وادلر، فيليب (أكتوبر 1988). "كيفية جعل تعدد الأشكال المخصص أقل مخصصًا" .
  36. بيتون جونز، سيمون (2003). "ارتداء قميص الشعر: نظرة استعادية على لغة هاسكل" . مايكروسوفت .
  37. "هاسكل ويكي: التطبيقات" . تم الاطلاع عليه بتاريخ 18 ديسمبر 2012 .
  38. "مرحباً بكم في هاسكل"" ويكي هاسكل" . مؤرشف من الأصل في 20 فبراير 2016. تم الاطلاع عليه في 11 فبراير 2016 .
  39. فريق مؤتمر غريس هوبر 2020 (29 أكتوبر 2021)إصدار غريس هوبر 9.2.1
  40. التغييرات المقترحة على المُصرّف واللغة لـ GHC و GHC/Haskell
  41. وادلر، ب.؛ بلوت، س. (1989). "كيفية جعل تعدد الأشكال المخصص أقل تخصيصًا". وقائع الندوة السادسة عشرة لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة - POPL '89 . ACM . الصفحات 60-76 . doi : 10.1145/75277.75283 . ISBN  978-0-89791-294-5. S2CID 15327197 . 
  42. هالغرين، ت. (يناير 2001). "متعة مع التبعيات الوظيفية، أو الأنواع كقيم في الحسابات الثابتة في هاسكل" . وقائع الاجتماع الشتوي المشترك لعلوم الحاسوب/هندسة الحاسوب . فاربيرغ، السويد.
  43. "لعبة معايير لغات البرمجة" . مؤرشفة من الأصل بتاريخ 17 يناير 2021. تم الاطلاع عليها بتاريخ 12 فبراير 2021 .
  44. "إحصائيات HackageDB" . Hackage.haskell.org. مؤرشف من الأصل في 3 مايو 2013. تم الاطلاع عليه في 26 يونيو 2013 .
  45. "التطبيقات" في ويكي هاسكل
  46. "الواجهة الخلفية لـ LLVM" . GHC Trac . 29 مارس 2019. مؤرشف من الأصل في 7 أبريل 2017. تم الاطلاع عليه في 31 مارس 2016 .
  47. تيري، ديفيد أ.؛ تشاكرافارتي، مانويل إم تي (2010). "واجهة خلفية LLVM لـ GHC" . وقائع ندوة ACM SIGPLAN Haskell لعام 2010. مطبعة ACM.
  48. سي. رايدر وإس. طومسون (2005). "نقل HaRe إلى واجهة برمجة تطبيقات GHC"
  49. مُصرّف لغة هاسكل في أوتريخت
  50. Hudak et al. 2007 ، ص 12-22.
  51. ^ أجدا 2 ، مجتمع أجدا جيثب، 15 أكتوبر 2021 ، تم استرجاعه في 16 أكتوبر 2021
  52. "جماعة هاسكل السرية" . تم الاطلاع عليه بتاريخ 8 أبريل 2015 .
  53. "فريق نظام التشغيل الأساسي لينسباير/فريسباير ولغة هاسكل" . القائمة البريدية لديبيان هاسكل . مايو 2006. مؤرشف من الأصل في 27 ديسمبر 2017. تم الاطلاع عليه في 14 يونيو 2006 .
  54. "كود مباشر مع دورات المد والجزر" . دورات المد والجزر . مؤرشف من الأصل في 12 سبتمبر 2024. تم الاطلاع عليه في 19 يناير 2022 .
  55. xmonad.org
  56. "Gargantext – Main" . 13 يوليو 2023.
  57. ديفيد، تشافالارياس؛ وآخرون . (8 مايو 2023). نحو أجندة بحثية حول الإعلام الرقمي ورفاهية الإنسانية (تقرير). 
  58. "مكافحة البريد العشوائي باستخدام لغة هاسكل" . كود فيسبوك . 26 يونيو 2015. تم الاطلاع عليه بتاريخ 11 أغسطس 2019 .
  59. "إتاحة هاكسل كمصدر مفتوح، وهي مكتبة للغة هاسكل" . فيسبوك كود . 10 يونيو 2014. تم الاطلاع عليه بتاريخ 11 أغسطس 2019 .
  60. "input-output-hk/cardano-node: المكون الأساسي المستخدم للمشاركة في سلسلة كتل كاردانو اللامركزية" . GitHub . تم الاطلاع عليه بتاريخ 18 مارس 2022 .
  61. ستوكس، ناثان (كلين كت) (7 يونيو 2019). "تحليل ومقارنة شفرة المصدر عبر لغات متعددة" . GitHub/semantic . تم الاطلاع عليه في 19 يوليو 2025 .
  62. "تقرير ورشة عمل المستخدمين التجاريين للبرمجة الوظيفية" (ملف PDF) . تم الاطلاع عليه بتاريخ 10 يونيو 2022 .
  63. ١ ٢ ٣ تم إنجاز برهان رسمي على صحة الوظائف في عام ٢٠٠٩. كلاين، جيروين؛ إلفينستون، كيفن؛ هايزر، جيرنوت ؛ أندرونيك، جون؛ كوك، ديفيد؛ ديرين، فيليب؛ إلكادوي، داميكا؛ إنجلهارت، كاي؛ كولانسكي، رافال؛ نورش، مايكل؛ سيويل، توماس؛ توش، هارفي؛ وينوود، سيمون (أكتوبر ٢٠٠٩). "seL4: التحقق الرسمي من نواة نظام التشغيل" (ملف PDF) . المؤتمر الثاني والعشرون لجمعية ACM حول مبادئ أنظمة التشغيل . بيج سكاي، مونتانا، الولايات المتحدة الأمريكية.
  64. klein-sosp=09خطأ في الاستشهاد: تم استدعاء المرجع المسمى ولكن لم يتم تعريفه مطلقًا (انظر صفحة المساعدة ).
  65. "Tikhon Jelvis: Haskell at Target" . يوتيوب . 22 أبريل 2017.
  66. "لماذا تستخدم Co-Star لغة Haskell؟" . Co-Star . تم الاطلاع عليه بتاريخ 30 سبتمبر 2023 .
  67. "هاسكل قيد الإنتاج: ميركوري" . سيروكيل . تم الاطلاع عليه بتاريخ 11 أكتوبر 2024 .
  68. "Web/Frameworks – HaskellWiki" . wiki.haskell.org . تم الاطلاع عليه بتاريخ 17 سبتمبر 2022 .
  69. جان ويليم مايسن. هاسكل المتحمسة: التنفيذ المحدود بالموارد يؤدي إلى تكرار فعال . وقائع ورشة عمل SIGPLAN لعام 2002 التابعة لجمعية آلات الحوسبة (ACM) حول هاسكل.
  70. سيمون بيتون جونز. ارتداء قميص الشعر: نظرة استعادية على لغة هاسكل . محاضرة مدعوة في مؤتمر POPL 2003.
  71. "يمكن أن يؤدي التقييم الكسول إلى أداء ممتاز، كما هو الحال في لعبة معايير لغات البرمجة" . 27 يونيو 2006.
  72. ^ هيرين، باستيان. ليجين، دان؛ فان آيزندورن، أرجان (2003). "هيليوم لتعلم هاسكل" (PDF) . وقائع ورشة عمل ACM SIGPLAN لعام 2003 في هاسكل . ص 62 – 71. دوى : 10.1145 / 871895.871902 . رقم ISBN  1581137583. S2CID 11986908 . 
  73. "وثائق مُجمِّع هيليوم" . جيت هاب . تم الاطلاع عليه في 9 يونيو 2023 .
  74. "DDC – HaskellWiki" . Haskell.org. 3 ديسمبر 2010. تم الاطلاع عليه بتاريخ 26 يونيو 2013 .
  75. بن ليبماير، استنتاج الأنواع والتحسين لعالم غير نقي ، الجامعة الوطنية الأسترالية (2010)، أطروحة دكتوراه، الفصل 1
  76. روبرت هاربر (25 أبريل 2011). "نقطة الكسل" .Closed access icon
  77. روبرت هاربر (16 أبريل 2011). "الوحدات هي الأهم" .Closed access icon
  78. "حل معضلة الكابال" . www.yesodweb.com . تم الاطلاع عليه بتاريخ 11 أغسطس 2019 .
  79. "الإعلان عن إصدار جديد من كابال: عمليات بناء محلية على نمط نيكس" . تم الاطلاع عليه في 1 أكتوبر 2019 .
  80. "ندوة هاسكل" . www.haskell.org . تم الاطلاع عليه في 1 نوفمبر 2025 .
  81. "ورشة عمل مطوري لغة هاسكل لعام 2025" . haskell.foundation . تم الاطلاع عليه في 1 نوفمبر 2025 .
  82. "أصدقاء هاسكل في زيورخ" . zfoh.ch. تم الاطلاع عليه بتاريخ 13 مارس 2025 .
  83. "هاكاثون - هاسكل ويكي" .

فهرس

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