إن ديلان (play //) هي لغة برمجة متعددة الجوانب وتضم دعم البرمجة الوظيفية والموجهة لغرض محدد وهي لغة مرنة ومعبرة بينما يمكنها تقديم نموذج برمجي مصمم لدعم ألات التكويد ذات الكفاءة بما فيها التحكم في المحاصيل الدقيقة من خلال سلوكيات متحركة وثابتة. وقد ظهرت هذه اللغة في بداية تسعينيات القرن العشرين على يد مجموعة بقيادة كمبيوتر أبل.

وتشتق لغة ديلان من سكيم Scheme وليسب الشائعة Common Lisp وتضيف نظام غائي متكامل مشتق من النظام الغائي Common Lisp Object System (CLOS). وفي لغة ديلان فإن جميع القيم (بما فيها الأرقام والحروف والوظائف والأصناف classes) هي أهداف من الدرجة الأولى. وتدعم لغة ديلان الكثير من الموروثات، والأشكال المتعددة، والنقاط المتعددة، ومعطيات لوحة المفاتيح، واستبطان الشيء، ووحدات الماكرومتسعة البنية القائمة على النمط، والكثير من الخصائص الأخرى. ويمكن للبرامج حتى تعبر عن تحكمها في الحركية، والسماح للبرامج التي تشغل تواصلا بين البرمجة الحركية والثابتة ودعم التطور الثوري (من خلال السماح بأن يعقب النمذجة السريعة تزايدا في الدقة والتحسين).

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

وبالرغم من اشتقاق الكثير من تراكيبها من سكم ونظم ليسب الأخرى الأخرى- حيث حتى بعض التطبيقات كانت في الواقع مبنية مبدئيا داخل نظم ليسب القائمة بالعمل- فإن لغة ديلان كان لها ألجول ALGOL (وهي لغة يتم التعبير فيها عن المعلومات بتنويت جبري ووفقا لقواعد الجبر المنطقي Boolean algebra) خاص بها – مثل صياغة أكثر من كونها مشروعا- مثل الصياغة الموضوعة مسبقا.

التاريخ

نشأت لغة ديلان في تسعينيات القرن العشرين على يد مجموعة بقيادة كمبيوتر أبل. وفي إحدى مراحل تطورها كانت هذه اللغة تهدف إلى استخدام كمبيوتر نيوتن الذي صنعته أبل، لكن تطبيق ديلان لم يصل إلى النضج الكافي في ذلك الوقت، وبدلا من ذلك فقد استخدم كمبيوتر نيوتن تشكيلة من سي C ونيوتن سكريبت NewtonScript الذي طورها وولتر سميث. وقد أنهت أبل جهودها لتطوير لغة ديلان في عام 1995 بالرغم من أنها قد قامت بإتاحة نسخة "الإصدار التكنولوجي" (Apple Dylan TR1) والتي تضمنت محسن تصميم قابلات (interface design enhancement IDE) متقدمة.

وقد أسهمت مجموعتان أخرىتان في تصميم اللغة وقامتا بتطوير التطبيقات وهما: هارلجوين Harleguin التي أصدرت IDE تجارية لمايكروسوفت ويندوز وجامعة كارنيجي ميلون التي أصدرت مؤدي مصادر مفتوحة لنظم يونيكس Unix systems. وكل من هذين التطبيقين يعتبران الآن مصدرا مفتوحا وقائما على يد مجموعة من المتطوعين، وهم جديون مينتينرز Gwydion Maintainers.

وحملت لغة ديلان اسما كوديا هورالف Ralph. وقد اختار جيمس جوكين J. Joaquin اسم ديلان اختزالا لمصطلح “Dynamic LANguage.”

البنية

مبدئيا، استخدمت لغة ديلان بنية بادئة تشبه المشروع، وتقوم على تعبيرات بنيوية s-expressions

(bind ((radius 5)
   (circumference (* 2 $pi radius)))
 (if (> circumference 42)
   (format-out "Hello big circle! c is %=" circumference)
   (format-out "Hello circle! c is %=" circumference)))

وبمرور الوقت اكتمل تصميم هذه اللغة، وتغيرت إلى بنية تشبه بنية ألجول Algol-synatx، التي صممها مايكل كيل، متسقطا أنها ستكون أكثر قبولا لجمهور أوسع نطاقا من المبرمجين:

let radius = 5;
let circumference = 2 * $pi * radius;
if (circumference> 42)
  format-out("Hello, big circle! c is %=", circumference);
else
  format-out("Hello, circle! c is %=", circumference);
end if

وفيما يتشابه مع لغات البرمجة الأخرى، فإن نتيجة وظيفة ما هي قيمة آخر تعبير تم تقييمه- وليس هناك بيان "عائد" مميز. وتعيد الوظيفة التالية قيمة بيان "إذا" (إن البيانات تنتج أيضا نتائج)، والتي تقيم قيمة جميع من "1" أورقم مضاعف n*factorial (n-1):

define method factorial(n :: <integer>)
 if (n = 0)
  1
 else
  n * factorial(n - 1)
 end
end method;

الوحدات ضد مساحة الاسم

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

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

وعلى سبيل المثال طالع إضافة مخطية لدعم التعبير المنتظم regex (regular expression) حول المبتر. وفي بعض اللغات، ومن أجل تضمين الوظيفية في المقاطع، فإنه تتم إضافة الوظيفية لمسافة الاسم المبترية نفسها. وبمجرد قيامك بذلك، تصبح فئة المبتر أكبر، ويظل لزاما على الناس الذين لا يحتاجون إلى استخدام Regex حتى "يدفعوا" لقاء زيادة حجم المخطة. ولهذا السبب فإن هذه الأنواع من الاضافات توضع تلقائيا في مساحات الأسماء والخانات الخاصة بها. إذا نقطة قصور هذه المقاربة هي حتى الوظيفية الجديدة لم تعد جزءا من المبتر؛ وبدلا من ذلك فإنها تكون معزولة في نطاق مجموعة وظائفها الخاصة بها والتي تستدعى بشكل منفصل. وبدلا من (نمطي) مبتري.التحليل مع myString.parseWith(myPattern)، والذي يمكن حتىقد يكون تنظيما طبيعيا من وجهة نظر اللغة الشيئية object-oriented (OO)، فإنك تستخدم شيئا يشبه (مبتري) نمطي.تحليل المبتر myPattern.parseString(myString) والذي يعكس بفعالية عملية إصدار الأمر.

إضافة إلى ذلك، يمكن للعديد من قابلات لغة ديلان حتى تعهد لنفس الكود، على سبيل المثال يمكن لطريقة لم المبتر حتى توضع في جميع من قابلة المبتر، وقابلة "اللم" التي تجمع معا جميع وظائف اللم المتنوعة من فئات متنوعة. وهذا أكثر شيوعا في مخطات الرياضيات، حيث تكون الوظائف أكثر قابلية للتطبيق لأنواع خانات مختلفة على نطاق واسع. وهناك استخدام أكثر عملية لبنية القابلة وهوبناء إصدارات عامة وخاصة للوحدة، وشيء آخر تستخدمه اللغات الأخرى مثل خاصية “bolt on” الداعمة التي تسبب دائما مشكلات وتضيف بنية. ووفقا للغة ديلان يمكن للمبرمج حتى يضع ببساطة جميع استنادىء وظيفة في قابلة "خاص" أو"تطور"، وجمع الوظائف مفتوحة الاستخدام في قابلة "عام". ووفقا للغة جافا أوسي++ فإن رؤية الخانة تعهد في الكود نفسه، وتعني دعم تغيرا مشابها قد يجبر المبرمج على إعادة كتابة التعريفات كلية، ولا يمكن حتى يدون لديه نسختين في نفس الوقت.

الفئات

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

define class <window> (<view>)
 slot title :: <string> = "untitled", init-keyword: title:;
 slot position :: <point>, required-init-keyword: position:;
end class;

على سبيل المثال فإن الفئة "<window>" تكون فهم. ولا توجد بنية اسم الفئة <class name> إلا بالاتفاق فقط، من أجل جعل أسماء الفئات قائمة- ولا تكون أقواس الزاوية سوى جزء من اسم الفئة. ومقارنة بذلك، فإن بعض اللغاتقد يكون الاتفاق فيها بادئا بحرف كبير لاسم الفئة أوتكون بادئة الاسم ملحقة بـ "C" أو“T” (على سبيل المثال). <window> تأتي من فئة مفردة، وهي <view>، وتحتوي فتحتين، ويحمل العنوان مبترا لعنوان النافذة، ويحمل الوضع نقطة X-Y لزاوية النافذة. وفي هذا المثال المخصوص يمنح العنوان قيمة مبدئية، بينما لاقد يكون ذلك الحال بالنسبة للوضع. وتسمح بنية "لوحة المفاتيح- المبدئية" للمبرمج بتحديد القيمة المبدئية للفتحة عندما يقوم بوضع خانة للفئة.

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

وفي لغة ديلان فإن أنواع قواعد الرؤية هذه لا تعتبر جزءا من الكود نفسه، لكنها جزء من نظام الوحدة/ القابلة. ويضيف ذلك مرونة كبيرة. على سبيل المثال فإن أحد القابلات المستخدمة خلال التطور المبكر يمكن حتى تعلن حتى جميع شيء عام، حيث حتى أحدها المستخدم في الاختبار والانتشار يمكن حتى يقيد ذلك. وبوجود لغتي C++ وجافا فإن هذه التغيرات يفترض أن تتطلب تغيرات في الكود المصدري نفسه، لذلك فإن الناس لن يقوموا بذلك، حيث حتى هذا المفهوم في لغة ديلان مفهوم منفصل كلية.

وبالرغم من حتى هذا المثال لا يستخدم لغة ديلان فإنها تدعم أيضا القابلة المتعددة.

المناهج والوظائف العامة

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

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

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

define method turn-blue (w :: <window>)
 w.color := $blue;
end method;

وهذا التعريف مشابه لتلك التعريفات في اللغات الأخرى، ويمكن حتىقد يكونا مغلفا داخل فئة نافذة <window>. لاحظ واضع استنادىء الـ :=، والتي توصف بأنها سكر بنيوي syntactic sugar للواضع الملون ($ أزرق، w). إن أداء المناهج العامة يأتي وفقا لها عندما تأخذ في اعتبارك النماذج "العامة". على سبيل المثال فإن أحد الوظائف الشائعة في غالبية اللغات هي وظيفة التقطيع to-string، والتي تعيد بعض الشكل المقروء بشريا للخانة. على سبيل المثال فإن نافذة ما يمكن حتى تعيد عنوانها ووضعها في أقواس بينما سيعيد المبتر نفسه. وفي لغة ديلان فإن مثل هذه المناهج يمكن حتى تجمع جميعها في وحدة مفردة تسمى "التقطيع"، ثم تتم إزالة هذا الكود من تعريف الفئة نفسها. وإذا لم تدعم خانة بعينها هذا التقطيع، فإنه سيتم بسهولة إضافتها إلى وحدة التقطيع.

القابلية للتمديد

يمكن حتى يصيب هذا المفهوم الكلي بعض القراء باعتباره مفهوما محبطا للغاية. إذا كود معالجة التقطيع لنافذة ما ليس محددا في <window>،يا ترى؟ ولا يجدي ذلك بالنسبة لك أي معنى إلا عندما تنظرفي كيفية معالجة لغة ديلان لاستنادىء التقطيع. في غالبية اللغات عندما يقوم البرنامج بالتقطيع فإن التقطيع لـ <window> يتم البحث عنه ويحل محله مؤشر (أكثر أوأقل) للمنهج. ويحدث ذلك في لغة ديلان عندما يشغل البرنامج للمرة الأولى؛ فإن وقت التشغيل ينشيء جدولا لتفاصيل اسم المنهج/ المعاملات ويبحث في المناهج بحركية من خلال هذا الجدول. ويعني ذلك حتى وظيفة ما لمناهج معين يمكن حتى توجد في أي مكان، وليس فقط في وحدة وقت التصرف. وفي النهاية فإن المبرمج يمنح مرونة كبيرة فيما يخص مكان وضعه أكوادهم، وجمعها وفقا للفئات حيث لا تكون المبادئ الملائمة والوظيفية قائمة.

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

وربما لا يزال ذلك واضحا تمام الوضوح، ولكن في الواقع فتلك معضلة شائعة قابلت غالبية لغات اللغة الشيئية ؛ وهذه المشكلة هي أنه ليس جميع شيء يلائم بنية الفئة، وهناك الكثير من المشكلات المتعلقة بجميع الخانات في النظام وليست هناك طريقة طبيعية لمعالجة ذلك.

أبل ديلان

إن أبل ديلان هوتطبيق للغة ديلان أنتجته أبل كمبيوتر. وقد طور أصلا من أجل منتج أبل نيوتن.

مراجع

  1. ^ Andrew Shalit; David Moon; Orca Starbuck (11 September 1996). . Addison-Wesley. ISBN . مؤرشف من الأصل فيستة نوفمبر 2018.

وصلات خارجية

  • The Dylan Reference Manual - The core language and library definition
  • Getting Started with Dylan
  • Gwydion Dylan - Host of two open source, optimizing Dylan compilers targeting Unix/Linux, Mac OS X, and Microsoft Windows
  • The Marlais Dylan Interpreter - An implementation of a subset of Dylan, suitable for bootstrapping a compiler
  • Dylan Programming Language - A general information website
  • Dylan Language Wiki
  • Dylan على مشروع الدليل المفتوح
  • A Dylan Primer for Scheme Programmers
تاريخ النشر: 2020-06-02 02:02:17
التصنيفات: ديلان, برمجيات متعددة المنصات, لغات برمجة أنشئت في 1992, مقالات بحاجة لمصادر أكثر منذ ديسمبر 2017, جميع المقالات التي بحاجة لمصادر أكثر, جميع المقالات التي بحاجة لصيانة, صفحات تستخدم خاصية P577, صفحات بها بيانات ويكي بيانات, صفحات تستخدم خاصية P348, Articles with DMOZ links, صفحات تستخدم خاصية P244, بوابة برمجة الحاسوب/مقالات متعلقة, بوابة تقنية المعلومات/مقالات متعلقة, بوابة علم الحاسوب/مقالات متعلقة, جميع المقالات التي تستخدم شريط بوابات

مقالات أخرى من الموسوعة

سحابة الكلمات المفتاحية، مما يبحث عنه الزوار في كشاف:

آخر الأخبار حول العالم

ستيفن جيرارد يوافق على تدريب أستون فيلا

المصدر: البطولة - المغرب التصنيف: رياضة
تاريخ الخبر: 2021-11-10 17:13:02
مستوى الصحة: 45% الأهمية: 69%

أبل: بيع نسخة من أول جهاز كمبيوتر أنتجته شركة أبل مقابل 400 ألف دولار

المصدر: BBC News عربي - بريطانيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:13:54
مستوى الصحة: 84% الأهمية: 90%

المشري يبحث الوضع في ليبيا مع تشاووش أوغلو

المصدر: RT Arabic - روسيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:14:36
مستوى الصحة: 92% الأهمية: 98%

"طالبان": "داعش" صار تحت السيطرة

المصدر: RT Arabic - روسيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:14:32
مستوى الصحة: 92% الأهمية: 97%

بوريل يدعو إلى ضرورة تبنّي الاتحاد الأوروبي عقيدة عسكرية موحدة

المصدر: RT Arabic - روسيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:14:34
مستوى الصحة: 99% الأهمية: 99%

المغرب يرصد 151 إصابة جديدة بكورونا و 3 حالات وفاة

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:10:43
مستوى الصحة: 36% الأهمية: 43%

مصر.. ارتفاع أسعار الذهب بشكل غير مسبوق

المصدر: RT Arabic - روسيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:14:35
مستوى الصحة: 91% الأهمية: 89%

توقيع شراكة طويلة الأمد بين «الهيئة الملكية للعلا» و«اليونسكو»

المصدر: صحيفة اليوم - السعودية التصنيف: مجتمع
تاريخ الخبر: 2021-11-10 16:40:21
مستوى الصحة: 43% الأهمية: 37%

سفيران لبنانيان عائدان من الخليج قلقان من تأثير الأزمة

المصدر: RT Arabic - روسيا التصنيف: سياسة
تاريخ الخبر: 2021-11-10 17:14:38
مستوى الصحة: 95% الأهمية: 93%

منصة الكراس التعليمية