القائمة الرئيسية

الصفحات

لغات البرمجة الوظيفية: الماضي والحاضر والمستقبل




لفهم هذه الفئة المميزة من لغات البرمجة بشكل أفضل ، سننظر في التعريف والخصائص والتاريخ المرتبط بها.
تعد Clojure و Elixir و Elm و F # و Haskell و Idris و Scala جميعًا من الأسماء التي من المحتمل أن تراها ضمن توصيات لغات البرمجة الوظيفية التي تستحق التعلم. هذه هي اللغات المستخدمة اليوم والتي قد تكون قيد الاستخدام في السنوات القادمة.

تتميز لغة مثل haskell بطول العمر ، لكن اللغات الأحدث مثل Clojure يتم تأصيلها بالفعل في اللغات السابقة التي تستمر في تشكيل تطور البرمجة الوظيفية (FP). (اقرأ مباشرة من خبراء البرمجة: ما هي لغة البرمجة الوظيفية الأفضل لتعلمها الآن؟ )
لفهم هذه الفئة المميزة من لغات البرمجة بشكل أفضل ، سننظر في التعريف والخصائص والمحفوظات المرتبطة بها.
لماذا يطلق عليها البرمجة الوظيفية؟

تحصل FP على اسمها من مقاربة بناء البرمجيات المبنية على إنشاء وظائف خالصة. أساس جميع لغات البرمجة الوظيفية هو Lambda Calculus (يُكتب أيضًا باسم calcul-calculus). يوصف بأنه " أصغر لغة برمجة عالمية في العالم."
وفقًا لذلك ، يعتمد FP على الدوال الرياضية التي تستخدم التعبيرات الشرطية والإعادة العودية لإجراء الحساب. ويشمل الخصائص التالية:

البيانات الواردة فيه غير قابلة للتغيير.

إنه يتجنب الآثار الجانبية ، والتي هي أي تغييرات في الحالة تحدث خارج وظيفة تسمى ، وحالات مشتركة.

من السهل الحفاظ على برمجة FP نظرًا لأنك لست بحاجة إلى القلق بشأن تغيير أي شيء خارج الوظيفة المحددة عن طريق الخطأ.

لديها شفافية مرجعية.

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

متجذرة في وظائف رياضية

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

حتى عام 1960 عندما قام كمبيوتر أمريكي وعالم إدراكي يدعى جون مكارثي بنشر " الوظائف العودية للتعبيرات الرمزية وحسابها بالآلة". نتيجة لبحثه في هذه الوظيفة ، ابتكر مكارثي ما يُعرف بأنه أول لغة برمجة وظيفية: LISP
.
إن القدرات المدمجة في LISP شكلت طريقة استخدام البرمجة الوظيفية حتى اليوم.
استخدم عمليات الإغلاق لتنفيذ تحديد النطاق الثابت. على سبيل المثال ، في "let x = 3 in f = λ y. x + y" ، الدالة f غير مغلقة لأنه يحتوي على متغير حر x. لاستخدام f ، يجب أن تكون مرتبطة ببيئة تخبر قيمة x. تسمى الدالة مع البيئة لمتغيراتها المجانية الإغلاق.

اختراع التعبير الشرطي واستخدامه لكتابة الوظائف العودية. هذا له علاقة بترتيب تقييم التعبيرات (انظر التقييم البطيء ).

استخدم عمليات ذات ترتيب أعلى في القائمة مثل وظيفة mapcar.

كما قدمت ما يسمى " جمع القمامة " . هذه ميزة مهمة للغات وظيفية لأنها " تميل إلى توليد كميات أكبر من القمامة قصيرة العمر أكثر من اللغات الحتمية ."
1978

بعد ما يقرب من عقدين من الزمان ، حدث التقدم الكبير التالي في جامعة أدنبرة حيث حدد الباحثون ML ( Metalanguage ). طلب الباحثون لغة من شأنها أن تعمل مع نظام إثبات النظرية التلقائي (LCF) .
اسم آخر يرتبط عام 1978 وإدنبره هو الأمل. مصدر الاسم هو ميدان هوب بارك ، حيث كان قسم علوم الحاسبات في إدنبره (ولكن أيضًا لمعلمات الرتب العليا و "الينابيع الأبدية" وما إلى ذلك). " يتم التمييز بين الأمل باعتبارها اللغة الأولى التي تستخدم أسلوب المكالمة.
1990 إلى الحاضر وما بعده: هاسكل

كان هاسكل ، الذي سمي على اسم المنطقي هاسكل ب. كاري ، نتاج لجنة انطلقت للعمل على صياغة اللغة في عام 1987 وأصدرت النسخة الأولى في عام 1990. أحدث المعايير هي هاسكل 2010 ، ومن المقرر إصدار آخر لعام 2020 .
أصبح هاسكل نموذجًا للغات الوظيفية الحديثة ، والتي تتميز بـ " ميزات مثل الدرجات العليا ، والاستدلال على الكتابة ، والتقييم الكسول ، وأنواع البيانات المعرفة من قبل المستخدم".
تأخذ الدرجات العليا وظائف أخرى كوسائط أو ترجعها كنتائج. أنها تسمح للتطبيقات التي يمكن أن تسمى أيضا الكاري. سيؤدي القيام بذلك إلى تطبيق دالة بشكل فردي على الوسائط الخاصة بها ، وبما أن كل تطبيق يعرض وظيفة جديدة ، فإنه يقبل الوسيطة التالية.
في حين أن الكسل يعتبر شيئًا سيئًا ، إلا أنه يخدم غرضًا في البرمجة. كما هو موضح في ما هو تقييم كسول؟ في تناقض مع "التقييم الصارم" ، فإن نهج التقييم البطيء هو تقييم ما هو مطلوب فقط.
لغات البرمجة الوظيفية الحالية

Haskell هو الاسم الأكثر شيوعًا لهذه الفئة ، ويرجع ذلك على الأرجح إلى تاريخه الطويل نسبة إلى FPs الأخرى. كما كان لها تأثير كبير على تنميتها. تحدث سايمون بيتون جونز ، الباحث الرئيسي في Microsoft والمساهم الرئيسي في هاسكل ، عن تأثير هاسكل الدائم في حد ذاته وبالطريقة التي شكل بها لغات أخرى.
"أشياء مثل Linq ، عناصر الاستعلام المدمجة باللغة في C # ، والتي هي مباشرة من Haskell في الواقع. يتم رسم سير العمل F # مباشرةً من قصة I / O الأحادية من Haskell ."
كلوجر

Clojure هي لهجة جديدة من Lisp التي أنشأتها ريتش هيكي. Ihat يميز Clojure عن لهجات LISP الأخرى هو أنه يعمل على منصة Java ويتم تجميعه إلى JVM bytecode . الميزة التي تقدمها هي تكاملها مع Java حتى تلك التي لم تتم كتابتها بلغة Clojure.
كما يوضح Hickey في Clojure.org ، "يوفر Clojure وصولاً سهلاً إلى أطر عمل Java ، مع تلميحات الكتابة الاختيارية والاستدلال على الكتابة ، لضمان أن المكالمات إلى Java يمكن أن تتجنب الانعكاس".
تقول أيضًا ، إن "نهج Lisp في الشفرة كبيانات ونظامها الكلي ما زال يميزها" عن لهجات Lisp الأخرى ، وتضيف أن "خرائطها ومجموعاتها وناقلاتها هي من الدرجة الأولى في Clojure مثل القوائم في Lisp ".
شارك Hickey أيضًا منطقه المنطقي أو خلق Clojure كجني كل فوائد Lisp دون بعض عيوبه. بعد تحديد نقاط نقطية متعددة تحت رؤوس مختلفة ، يلخص Hickey الأمر كما يلي: "باختصار ، أعتقد أن Clojure يحتل مكانة فريدة من نوعها باعتباره Lisp وظيفية لـ JVM مع دعم التزامن القوي. "
Evan Czaplicki
Elm هو اسم لغة وظيفية بحتة تم تصميمها أولاً بواسطة Evan Czaplicki في عام 2012. وهي مشهورة بين مطوري الويب الذين يحبونها لبناء واجهات المستخدم. يستهدف برنامج التحويل البرمجي Elm HTML و CSS و JavaScript . إنه يعمل مع مكتبات JavaScript بنفس الطريقة التي يعمل بها Clojure مع مكتبات Java.
ما هو مختلف عن Elm هو أنه يستخدم التحقق من النوع الثابت ، والذي يساعد في القضاء على استثناءات وقت التشغيل حيث سيتم اكتشاف الأخطاء في وقت الترجمة. نظرًا لتفاخر موقع Elm ، "لقد تحولت NoRedInk إلى Elm قبل حوالي عامين ، و 250k + خطوط في وقت لاحق ، فإنها ما زالت لم تضطر إلى التدافع لإصلاح استثناء وقت تشغيل مربك في الإنتاج."
عدم وجود أخطاء واضحة على المستخدم ، هو ميزة واضحة للغة. قد يكون هذا هو السبب وراء شعورها بالتبرير في تطبيق وصف "لغة مبهجة" على نفسها.
Elixir
كما يصف موقع Elixir نفسه: "Elixir هي لغة ديناميكية وظيفية مصممة لبناء تطبيقات قابلة للتطوير وقابلة للصيانة." يتم توجيه Elixir نحو إنشاء أنظمة توفر منخفضة زمن الوصول . إنه يعمل على Erlang VM ، وهو نظام بيئي يستخدمه Heroku و WhatsApp و Klarna وغيرها من أجل "التطبيقات الموزعة التي تتحمل الأخطاء".
تتمثل ميزة المبرمجين من Elixir في أنهم يستطيعون استدعاء دالة Erlang دون تكبد أي تكاليف وقت تشغيل.
F#

F # هي لغة برمجة مفتوحة المصدر تعمل عبر الأنظمة الأساسية. يمكن لأي شخص الانضمام إلى F # Software Foundation . يلخص موقع المؤسسة اللغة بهذه الطريقة:
يعمل F # على أنظمة Linux و Mac OS X و Android و iOS و Windows و GPUs والمتصفحات. إنه مجاني للاستخدام وهو مفتوح المصدر بموجب ترخيص معتمد من OSI.
يستخدم F # في مجموعة واسعة من مجالات التطبيق ويدعمه كل من المجتمع المفتوح النشط والشركات الرائدة في الصناعة التي توفر الأدوات المهنية.
إدريس

إدريس هي لغة برمجة وظيفية بحتة للأغراض العامة تتميز بخصائص هاسكل وميل.
، فهي تتميز بأنواع تابعة ، والتي تمكن "الأنواع من أن تستند إلى القيم ، مما يعني أنه يمكن تحديد بعض جوانب سلوك البرنامج بدقة في النوع." كما أنه يتميز بالتجميع ، مع تقييم حريص .
جافا سكريبت

على الرغم من أن جافا سكريبت ليست لغة برمجة وظيفية بشكل صارم ، فهي تسمح أيضًا بنهج وجوه المنحى ، إلا أنها تحتوي على مكون ينبع من البرمجة الوظيفية. يتضمن وظائف أعلى ترتيب. توفر أيضًا الإصدارات الأحدث من معيار ECMAScript إصلاحات لمشكلة قابلية التحويل.
Kotlin

من بين أحدث اللغات (تم إصدارها فقط في فبراير 2016) ، كانت Kotlin خمس سنوات في الاختبار. تستخدمها شركات مثل Amex و NBC Digital و Expedia و Gradle. انها ليست لغة وظيفية نقية.
مثل جافا سكريبت ، Kotlin قادرة على كل من وجوه المنحى والوظيفية. بالإضافة إلى ذلك ، يكون قابلاً للتشغيل البيني تمامًا مع لغات برمجة Java.
من بين الفوائد التي يقدمها هو أنه أكثر إيجازاً من برمجة Java. يعتقد البعض أنه من الممكن قطع أكثر من ثلث أسطر التعليمات البرمجية. كما أنه يوفر جميع المزايا المرتبطة بلغات البرمجة الوظيفية ، بما في ذلك وظائف الترتيب العالي ووظائف الامتداد و lambdas.
تعدد الاستخدامات يجعله مناسبًا "لأي نوع من التطوير ، سواء كان جانب الخادم أو ويب العميل أو Android" ، وهو يعمل على أن يصبح متوافقًا مع نظام التشغيل iOS من Apple.
سكالا

Scala هي مزيج آخر من حيث أنه يوفر كلاً من البرمجة الموجهة للكائنات والوظيفية.
"تساعد الأنواع الثابتة لـ Scala على تجنب الأخطاء في التطبيقات المعقدة ، وتتيح لك أنظمة تشغيل JVM و JavaScript تشغيل أنظمة عالية الأداء مع سهولة الوصول إلى النظم الإيكولوجية الضخمة للمكتبات ،" كما يوضح ذلك على موقعها .
ما تعلمناه

يلخص GM Mol Moloney من شركة Telstra's Analytics Analytics لماذا حان الوقت الآن لاحتضان اللغات الوظيفية ولماذا يجب على المبرمجين التفكير في تعلمها:

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

تعليقات

المحتويات