سؤال

هل هناك أي وثائق قياسية (مثل UML لـ OO) للغات الوظيفية؟ بعد تنزيل Couch DB الذي يتم كتابته في إرلانج والنظر إلى الكود المصدري الذي صدمت ، لا يكاد يكون هناك خط الوثائق. ألا توجد حاجة لتوثيق كيف تعتمد كل هذه الوظائف على بعضها البعض؟ هل هناك مشاريع متوسطة الحجم موثقة بشكل أفضل تتوفر بحرية أيضًا ، كيف يتم القيام بالأشياء باستخدام هذا النموذج؟

هل كانت مفيدة؟

المحلول

يجب توثيق الكود ، بغض النظر عن اللغة.

يبدو أن هناك نمط الوثائق القياسي يسمى EDOC. EDOC قادر على إنتاج وثائق واجهة برمجة التطبيقات الخارجية ؛ نقلا من مصدر واحد:

EDOC هو تطبيق Erlang Standard لتوثيق API Erlang مباشرة داخل رمز Erlang.

هذا يشار إليه في قسم الوثائق في erlang.org:

يتيح لك EDOC كتابة وثائق برنامج Erlang كتعليقات في الكود المصدر نفسه ، باستخدام علامات في النموذج "Name ...". لا يتعين على ملف المصدر يحتوي على علامات لـ EDOC لإنشاء وثائقه ، ولكن بدون علامات ، لن تحتوي النتيجة على المعلومات الأساسية المتاحة فقط التي يمكن استخراجها من الوحدة النمطية.

أ بحث جوجل مركّز سوف يأخذك من هنا.

نصائح أخرى

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

تم تطوير Erlang في Ericsson ، وصناعة الاتصالات لديها ثقافة قوية للغاية وسجل للاختبار. لن يفاجئني ما إذا كانت وثائق كيفية عمل هذه الوظائف في مجموعة اختبار في مكان ما.

ملخص: إن أقرب شيئين إلى معيار هما الأنواع (لللغات الوظيفية ذات الأنظمة الثابتة) والعقود (لللغات الوظيفية التي لا تحتوي على أنظمة نوع ثابتة).

هذه مشكلة ممتعة للغاية!

هناك مشكلتان - أول واحد هو التعليق على الرمز وكتابة بعض الوثائق (في شكل نصي). يجب أن يتم ذلك بالطريقة المعتادة كما في لغات OO. كنت فقط تكتب نظرة عامة على جميع الوحدات والوظائف والأنواع التي تستخدمها في مشروعك. في F# (لغة وظيفية لـ .NET) ، يمكنك كتابة تعليقات XML بطريقة مشابهة جدًا كما هو الحال في F# وإنشاء وثائق من هذه التعليقات. أعتقد F# الوثائق يتم إنشاء MSDN تلقائيًا من هذه التعليقات. فيما يلي مثال من رمز المصدر F# (إذا قمت بتثبيت F# لـ VS 2008 ، فسيقوم أيضًا بتثبيت رمز المصدر للمكتبات الأساسية ، والتي قد تكون موردًا مثيرًا للاهتمام):

/// Return the first element of the list.
///
/// Raises <c>System.ArgumentException</c> if <c>list</c> is empty
val head: list:'T list -> 'T

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

let custNames = customers |> List.map (fun customer -> customer.Name) 
let empNames = employees |> List.map (fun employee -> employee.Name) 
let result = List.concat [custNames; empNames]

يمكن تمثيل هذا بشكل جيد بصريًا من خلال رسم تدفق البيانات:

+-----------+    +-----+
| customers |--->| map |\
+-----------+    +-----+ \ +--------+   +--------+
                          >| concat |-->| result |
+-----------+    +-----+ / +--------+   +--------+
| employees |--->| map |/
+-----------+    +-----+

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top