مرحبا يا هبر! أقدم لكم ترجمة وظيفة ستيفن ولفرام "مستودع وظائف ولفرام: إطلاق منصة مفتوحة لتوسيع لغة ولفرام" .

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

على غرار أكثر من 6000 وظيفة قياسية مدمجة في لغة Wolfram ، فإن كل وظيفة من المستودع بها صفحة وثائق مع وصف تفصيلي وأمثلة للعمل:

للانتقال إلى الصفحة ، انسخ الكائن أعلاه (وظيفي BLOB) ، الصقه في سطر الإدخال ثم قم بتشغيل الوظيفة - إنها مضمنة بالفعل في لغة Wolfram ويتم دعمها افتراضيًا ، بدءًا من الإصدار 12.0 :

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

آمل أنه بدعم من مجتمع رائع وموهوب ينمو ويتوسع (على أساس لغة ولفرام) على مدى العقود القليلة الماضية. في المستقبل المنظور ، سيقوم مستودع وظيفة Wolfram بتوسيع نطاق وظائف (ربما يحتمل أن تكون مهمة ومتخصصة في مختلف مجالات العلوم والتكنولوجيا) المتاحة في اللغة. وبالتالي ، يصبح من الممكن استخدام كل من محتوى اللغة (وظائفها المدمجة) ومبادئ التطوير التي يتم تنفيذها على أساس اللغة. (تجدر الإشارة هنا إلى أن Wolfram Language لديها بالفعل أكثر من 30 عامًا من تاريخ التطوير والنمو المستقر ).
قد توجد وظائف داخلية من المستودع شظايا صغيرة أو كبيرة الحجم من التعليمات البرمجية المكتوبة بلغة Wolfram. على سبيل المثال ، يمكن أن يكون مكالمات إلى واجهات برمجة التطبيقات والخدمات الخارجية أو المكتبات الخارجية بلغات أخرى . تتمثل الميزة الفريدة لهذا النهج في أنه عند التبديل إلى الوظيفة على مستوى المستخدم ، لن يكون هناك أي تضارب محتمل نظرًا لأن هذا النهج يستند إلى بنية Wolfram Language المتفق عليها - وستعمل كل وظيفة بشكل صحيح تلقائيًا - تمامًا ويجب أن يكون.
يتم تكوين هيكل shell وبرنامج مستودع وظيفة Wolfram بحيث يمكن للجميع المساهمة في القضية المشتركة بأبسط الطرق وأكثرها ملاءمة له - في الواقع ، ببساطة ملء الملف النصي للمفكرة (مع ملحق nb) WL . تتيح لك الوظائف التلقائية المدمجة التحقق من الوظائف الجديدة المضافة إلى المستودع من أجل ضمان دمجها في اللغة. تعتمد شركتنا على مجموعة واسعة من المستخدمين الذين يمكنهم دمج وظائفهم في اللغة ، وليس على الصعوبات الكبيرة للوظائف الجديدة - وعلى الرغم من تنفيذ عملية التحقق هنا ، فإننا لا نصر على شيء مثل التحليل المضني للتصميم أو المعايير الصارمة لاكتمال وموثوقية الجديد وظائف المستخدم ، على عكس عمليات الفحص الأكثر شمولاً للوظائف المضمنة في لب اللغة التي نستخدمها.
هناك العديد من التنازلات والتفاصيل في هذا النهج ، ولكن هدفنا هو تحسين مستودع وظيفة Wolfram على حد سواء لراحة المستخدمين ولوظائف المستخدم الجديدة لتقديم مساهمة ملموسة في تطوير اللغة. مع تقدمي ، ليس لدي أدنى شك في أنه سيتعين علينا ابتكار طرق جديدة لمعالجة وفحص الوظائف المضمنة في المستودع ، وهذا ليس أقله تنظيم عدد كبير من الوظائف والبحث عن تلك التي يحتاجها المستخدمون. ومع ذلك ، لا يمكن إلا أن طمأنة أن الطريق الذي اخترناه هو بداية جيدة. قمت شخصيا بإضافة العديد من الميزات إلى القاعدة الأصلية. يعتمد الكثير منهم على الكود الذي قمت بتطويره شخصيًا لبعض الوقت. وقضيت بضع دقائق فقط لإحالتها إلى المستودع. الآن وقد أصبحوا في المستودع ، يمكنني أخيرًا - على الفور وفي أي وقت استخدام هذه الوظائف حسب الحاجة ، دون الحاجة إلى القلق بشأن البحث عن الملفات ، وتنزيل الحزم ، إلخ.
زيادة الكفاءة مع خفض التكاليف.
حتى قبل ظهور الإنترنت ، كانت هناك طرق لتبادل كود لغة Wolfram (كان أول مشروع مركزي رئيسي لنا هو MathSource ، الذي تم إنشاؤه لبرنامج Mathematica في عام 1991 على أساس القرص المضغوط ، وما إلى ذلك). بطبيعة الحال ، فإن النهج المقترح القائم على مستودع وظيفة Wolfram هو أداة أكثر قوة وموثوقية لتنفيذ المهام المذكورة أعلاه.
منذ أكثر من 30 عامًا ، تعمل شركتنا جاهدة للحفاظ على تكامل بنية لغة Wolfram ، وهذا أمر مهم للغاية لكي لا تصبح Wolfram لغة برمجة فحسب ، بل أيضًا لغة حسابية كاملة . وبالتالي ، فإن جوهر النهج المتبع في تنفيذ مستودع وظيفة Wolfram هو استخدام نهج واحد للبرمجة وتطوير وظائف جديدة تضاف بالتسلسل وتتناسب مع إطار اللغة لإمكانية تطورها وتطورها المشترك.
في هيكل تنفيذ كل وظيفة ، تحدث العمليات الحسابية المختلفة. تجدر الإشارة هنا إلى أنه من الضروري أن يكون للمستخدم نظرة واضحة وموحدة وقراءة واضحة. في هذا السياق ، توفر الوظائف المضمنة في Wolfram Language أكثر من 6000 مثال متتالي على كيفية برمجة وظائف بشكل صحيح (هذه هي مراجعاتنا الخاصة ببرمجة الفيديو المباشر والتي تشمل مئات الساعات من إنشاء عملية البرمجة النموذجية ). يتيح لك هذا النهج في نهاية المطاف جعل مستودع وظيفة Wolfram قادرًا على العمل الجيد ، أي الطبيعة الهيكلية للغة Wolfram Language مع العدد الكبير من المكتبات الإضافية والمتنوعة التي تم دمجها بالفعل في اللغة. على سبيل المثال ، إذا كان لديك وظيفة تقوم بمعالجة الصور ، أو الصفائف المتفرقة ، أو الهياكل الجزيئية ، وكذلك البيانات الجغرافية أو غيرها - فهذه اللغة لديها بالفعل تمثيل رمزي ثابت لها ، وبفضل هذا ، تصبح وظيفتك متوافقة فورًا مع وظائف أخرى في اللغة.
يُعد إنشاء مستودع يعمل بشكل جيد حقًا مهمة برمجة وصفية مهمة. على سبيل المثال ، لن تتمكن الزيادة المفرطة من القيود في البرنامج من الحصول على التوحيد المطلوب وعالمية الخوارزمية. كما هو الحال مع العدد غير الكافي من القيود الوظيفية ، لا يمكنك تنفيذ تسلسل صحيح بما فيه الكفاية لتنفيذ الخوارزمية. عملت العديد من الأمثلة السابقة للحل الوسط بين هذه الأساليب التي طبقتها شركتنا بثبات - هذه هي: مشروع مظاهرة Wolfram ، الذي تم إطلاقه في عام 2007 ويعمل الآن بشكل تفاعلي على الإنترنت ويحتوي على أكثر من 12000 عرض تفاعلي للمستخدم. تحتوي قاعدة بيانات Wolfram على أكثر من 600 قاعدة بيانات جاهزة يمكن استخدامها بلغة Wolfram Language ، ويتم تحديث تخزين الشبكة العصبية Wolfram بشبكات عصبية جديدة كل أسبوع تقريبًا (هناك 118 الآن) ويتم توصيلها على الفور عبر وظيفة NetModel في لغة Wolfram Language.
جميع الأمثلة المذكورة أعلاه لها ميزة أساسية - الكائنات والوظائف التي تم جمعها في المشروع لديها درجة عالية جدا من هيكلة وتوزيع العمليات. بطبيعة الحال ، يمكن أن تختلف التفاصيل الدقيقة لبنية ما هو عرض أو شبكة عصبية أو أي شيء آخر اختلافًا كبيرًا ، لكن البنية الأساسية لأي مستودع حالي تظل دائمًا دون تغيير. إذن ما رأيك ، أيها المستخدم الأعزاء ، حول إنشاء مثل هذا المستودع الذي يضيف امتدادات إلى لغة Wolfram؟ تم تصميم Wolfram Language لتكون مرنة للغاية ، بحيث يمكن توسيعها وتعديلها بأي شكل من الأشكال. هذا الظرف مهم للغاية بالنسبة للقدرة على إنشاء مشاريع برمجية كبيرة الحجم بسرعة في Wolfram Language. وتجدر الإشارة إلى أنه مع زيادة مرونة اللغة ، فإن تكلفة المشروعات المنفذة بهذه اللغة ستزداد حتما. ويرجع ذلك إلى حقيقة أنه كلما زاد استخدام المستخدم لهذه اللغة ، زاد حصوله على الوظيفة المخصصة ، لكن يجب ألا ننسى أن هذا النهج قد يكون له جوانب سلبية من حيث عدم القدرة على ضمان الاتساق المتسق لوحدات البرنامج.
في لغات البرمجة التقليدية ، توجد مشكلة شائعة في المكتبات - إذا كنت تستخدم مكتبة واحدة ، على سبيل المثال ، تعمل الشفرة بشكل صحيح ، ولكن إذا حاولت استخدام عدة مكتبات ، فلا يوجد ضمان بأن تتفاعل بشكل صحيح مع بعضها البعض. أيضًا ، في لغات البرمجة التقليدية - على عكس لغة الحوسبة الكاملة - لا توجد وسيلة لضمان وجود تمثيل مضمن متسق لأي وظائف أو أنواع بيانات أخرى غير بنياتها الأساسية. ولكن ، في الواقع ، المشكلة أكبر مما تبدو للوهلة الأولى: إذا كان شخص ما يبني رأسيًا واسعًا للوظائف ، ثم بدون التكاليف الباهظة للبرمجة المركزية للمشروع التي استثمرناها في لغة Wolfram ، فمن المستحيل تحقيق الاتساق. لذلك ، من المهم أن تعمل جميع وحدات البرنامج دائمًا بشكل صحيح معًا.
وبالتالي ، فإن فكرة مستودع وظيفة Wolfram هي تجنب المشكلة المذكورة أعلاه - ببساطة إضافة امتدادات إلى اللغة في شكل عناصر صغيرة نسبيا من رمز البرنامج من خلال وظائف منفصلة ، والتي يعد تطويرها في شكل وحدات منسقة مهمة أسهل. في الوقت نفسه ، هناك ميزات برمجية لا يمكن جعلها مريحة بمساعدة الوظائف الفردية (وستقوم شركتنا بإصدار خوارزمية برمجية محسّنة في المستقبل القريب للمساعدة في تنفيذ حزم البرامج واسعة النطاق). ومع ذلك ، بناءً على الوظائف المضمنة بالفعل في Wolfram Language ، هناك العديد من خيارات البرمجة التي يتم تنفيذها بناءً على الوظائف الفردية. تكمن الفكرة هنا في أنه من خلال الجهود البرمجية الصغيرة نسبياً ، من الممكن إنشاء عدد من الوظائف الجديدة والمفيدة للغاية التي ستضمن الاتساق الكافي للمشروع ، بينما سيتم تنسيقها جيدًا مع بعضها البعض ، وبالإضافة إلى ذلك ، سيكونون قادرين على تستخدم على نطاق واسع في اللغة في وقت لاحق.
هذا النهج ، بالطبع ، هو حل وسط. مع تطبيق حزمة أكبر ، يمكنك تخيل عالم جديد بالكامل من الوظائف التي ستصبح قوية ومفيدة للغاية. إذا كانت هناك حاجة للحصول على وظائف جديدة تناسب كل شيء آخر ، ولكن في نفس الوقت لست مستعدًا لبذل جهود كبيرة في تطوير المشروع ، فإن هذا ، للأسف ، قد يؤدي إلى انخفاض في حجم مشروعك. تتمثل فكرة مستودع وظيفة Wolfram في توفير وظائف للجزء المحدد من المشروع ، وسيضيف هذا النهج وظائف قوية ، مع تبسيط الحفاظ على الاتساق الجيد لمشروع البرمجة.
ساعد في إضافة وظائف مخصصة لمستودع الوظيفة
عمل اختصاصيو شركتنا بجد لجعل مساهمتهم في وظائف مستودع Wolfram سهلة بدرجة كافية للمستخدمين. على سطح المكتب (بالفعل في الإصدار 12.0 ) ، يمكنك ببساطة الانتقال بالتتابع من خلال علامات تبويب القائمة الرئيسية: ملف> جديد> مستودع> عنصر مستودعات الوظيفة وستحصل على " مفكرة تعريف " (برمجياً داخل بيئة العمل. يمكنك أيضًا استخدام الوظيفة التناظرية - CreateNotebook [ "FunctionResource" ] ):

هناك إجراءان رئيسيان عليك القيام بهما: أولاً ، كتابة رمز وظيفتك بالفعل ، وثانياً ، كتابة الوثائق التي توضح كيفية عمل وظيفتك.
انقر فوق الزر "فتح نموذج" في الجزء العلوي لرؤية مثال على ما عليك القيام به:

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

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

في هذه الخطوة ، من المهم أن تتمكن من إرسال وظيفتك إلى مستودع وظيفة Wolfram بحيث تكون متاحة لأي مستخدم. في الوقت نفسه ، يمكنك أيضًا وضع وظيفتك لعدد محدود من المستخدمين. على سبيل المثال ، يمكنك إنشاء وظيفة موجودة محليًا على جهاز الكمبيوتر الخاص بك بحيث تكون متاحة عند استخدام هذا الكمبيوتر المحدد. أو يمكنك وضعه في حسابك السحابي بحيث يكون متاحًا لك عندما تكون متصلاً بالسحابة. يمكنك أيضًا وضع (نشر) وظيفة بشكل عام من خلال حسابك السحابي. ومع ذلك ، لن يكون ذلك في مستودع وظائف Wolfram المركزي ، ولكن يمكنك إعطاء شخص ما عنوان URL يتيح له الحصول على وظيفتك من حسابك. (في المستقبل ، سندعم أيضًا المستودعات المركزية في جميع أنحاء شركتنا).
لذلك ، لنفترض أنك تريد بالفعل نقل وظيفتك إلى قاعدة المعرفة بوظيفة Wolfram. للقيام بذلك ، انقر فوق الزر "إرسال" إلى المستودع. إذن ما الذي يحدث في الوقت الحالي؟ يدخل طلبك على الفور قائمة الانتظار للنظر فيها والموافقة عليها من قبل فريق خاص لدينا من المنسقين.
عندما يمر طلبك بعملية الموافقة (التي تستغرق عادة عدة أيام) ، ستتلقى رسائل حول حالة النظر فيه ، وكذلك ، ربما ، اقتراحات لاستخدامه مرة أخرى. , Wolfram . ( . .)
?
, , , 6000+ , Wolfram 30 . Wolfram , , Wolfram Language, ( ).
, Wolfram Wolfram Language — , . .
Wolfram, , . Wolfram , , - , . , SendMailFromNotebook . PolygonalDiagram . .
, , , , . , , .
, , , , — Wolfram — , , .
. , . , , API, , . nb ( « ») , , VerificationTest , . , ( , , , ).
. , , . , ? , , , , . , , , , .
( ) , . , Wolfram Data . , ?
. , , . .
, , , Wolfram Language, ? Wolfram Language , UpValues . ( , ), . ( , Wolfram Language, — , , , , , , ).
, ? , Wolfram Language , ( , , ) . : API, Wolfram Cloud , . , , . , , API , . ( «») , Wolfram Language. (, , — , .)
Wolfram Wolfram? , API Wolfram, . , , , Wolfram. ( ExternalEvaluate ExternalFunction Wolfram.)
? , Wolfram Language . , Wolfram Language , . , , . ., Wolfram Language. ( , , ).
, , , , - , , . Wolfram Language, , , , , « » , .
«»
, , Wolfram! - ( ), . , , , .
, , — — . , . ( Wolfram Enterprise , , .)
, Wolfram, ; . «» Unix — « » « », , . ., . , , , .
: « » « Wolfram ». (, ), , , , .
Wolfram, , . « », «». , , . . . , , , , , , .
Git , , , . ( ), , , , .
, «» . , , ( , ). , , . , ResourceUpdate . (« BLOB-» , .)
Wolfram , Wolfram Language . , « » (, ).
, ResourceFunction [ ... ] . , Wolfram Engine, , IDE (c , Free Wolfram Engine ).
كيف يعمل؟
Wolfram , ( , Neural Net Repository , ..), Wolfram, ResourceFunction ResourceObject .
ResourceFunction :

, Information :

كيف يعمل إعداد وظيفة المورد؟ أبسط حالة محلية بحتة. فيما يلي مثال يأخذ دالة (في هذه الحالة ، مجرد دالة نقية) ويعرّفها على أنها دالة مورد لجلسة معيّنة في البرنامج:

بعد الانتهاء من التعريف ، يمكنك استخدام وظيفة المورد:

لاحظ أن هناك أيقونة سوداء في هذه النقطة الوظيفية.
. هذا يعني أن دالة BLOB تشير إلى وظيفة مورد في الذاكرة المعرفة للجلسة الحالية. بالنسبة لوظيفة المورد ، والتي يتم تخزينها باستمرار على جهاز الكمبيوتر الخاص بك أو في حساب سحابة ، هناك رمز رمادي
. وبالنسبة لوظيفة المورد الرسمية في مستودع وظيفة Wolfram ، يوجد رمز برتقالي
.
إذن ماذا يحدث عند استخدام قائمة النشر في دفتر التعريفات؟ أولاً ، يأخذ كل التعريفات في المفكرة ومنها ينشئ ResourceObject رمزي). (وإذا كنت تستخدم IDE أو برنامج نصي ، فيمكنك أيضًا إنشاء ResourceObject بشكل صريح)
يتم تنفيذ النشر المحلي للوظيفة من مستودع التخزين على جهاز الكمبيوتر الخاص بك باستخدام أمر LocalCache لكائن المورد من أجل حفظه كـ LocalObject في نظام الملفات الخاص بك. يتم تنفيذ النشر في الحساب السحابي باستخدام أمر CloudDeploy لكائن المورد ، ويتم إجراء النشر العام في السحابة باستخدام CloudPublish . في جميع الحالات ، يتم استخدام ResourceRegister أيضًا لتسجيل اسم وظيفة المورد ، بحيث تعمل ResourceFunction [ "name" ] .
إذا قمت بالنقر فوق الزر "إرسال" لـ "مستودع الوظائف" ، فسيتم استدعاء ما يحدث أسفل ResourceSubmit على كائن المورد. (وإذا كنت تستخدم واجهة إدخال النص ، فيمكنك أيضًا الاتصال بـ ResourceSubmit مباشرة.)
بشكل افتراضي ، يتم الإرسال تحت الاسم المرتبط بمعرف Wolfram الخاص بك. ولكن إذا قمت بتقديم طلب نيابة عن مجموعة أو مؤسسة تطوير ، فيمكنك تعيين معرف ناشر منفصل واستخدامه بدلاً من ذلك كاسم للتفاعل مع عمليات تقديمك.
بعد أن ترسل أيًا من وظائفك إلى قاعدة المعرفة الخاصة بالوظائف ، فسوف تقع في قائمة الانتظار للتحقق منها. إذا تلقيت تعليقات ردًا ، فستكون عادةً في شكل ملف نصي مع إضافة "خلايا تعليق" إضافية. يمكنك دائمًا التحقق من حالة التطبيق الخاص بك عن طريق الانتقال إلى مدخل مشارك نظام الموارد . ولكن بمجرد الموافقة على وظيفتك ، سيتم إعلامك (عن طريق البريد الإلكتروني) وسيتم وضع وظيفتك في مستودع وظيفة Wolfram.
بعض التفاصيل الدقيقة في العمل
للوهلة الأولى ، قد تترك انطباعًا أنه يمكنك ببساطة أخذ دفتر التعريفات ووضعه حرفيًا في مستودع الوظائف ، ولكن في الواقع ، هناك عدد قليل من التفاصيل الدقيقة - ومعالجتها ، تحتاج إلى القيام ببرمجة وصفية معقدة للغاية ، ومعالجة الأحرف ككود يحدد الوظيفة ، وتعريف المفكرة نفسها. يحدث معظم هذا داخليًا ، أي "وراء الكواليس" ، لكن هذا قد يكون له بعض العواقب التي تستحق الفهم إذا كنت ستساهم في قاعدة المعرفة للوظائف.
الدقة الأولى المباشرة: عندما تقوم بملء "تعريف المفكرة" ، يمكنك ببساطة الرجوع إلى وظيفتك في كل مكان ، باستخدام اسم مثل MyFunction ، والذي يبدو كاسم منتظم لوظيفة في Wolfram Language ، ولكن لتوثيق مستودع الوظيفة يتم استبداله بـ ResourceFunction [ "MyFunction " ] - هذا هو بالضبط ما سيستخدمه المستخدمون بالفعل عند العمل مع الوظيفة.
الدقة الثانية: عند إنشاء دالة مورد من "تعريف المفكرة" ، يجب أن تكون جميع التبعيات المتضمنة في تعريف الوظيفة ثابتة ويتم تضمينها بشكل صريح. ومع ذلك ، لضمان أن تظل التعريفات معيارية ، تحتاج إلى وضع كل شيء في مساحة اسم فريدة. (بالطبع ، الوظائف التي تفعل كل هذا موجودة في مستودع الوظيفة.)
عادةً لن ترى أي آثار للرمز المستخدم لتكوين مساحة الاسم هذه. ولكن إذا استدعت رمزًا غير مُنفذ داخل وظيفتك لسبب ما ، فسترى أن هذا الرمز في السياق الداخلي للوظيفة. ومع ذلك ، عند معالجة تعريفات المفكرة ، على الأقل يتم تكوين الحرف المطابق للوظيفة نفسها على نحو أفضل لعرض BLOB وظيفي بدلاً من حرف خام في السياق الداخلي.
مستودع الوظيفة مخصص لتحديد وظائف جديدة. وهذه الوظائف قد يكون لها خيارات. غالبًا ما تكون هذه المعلمات (على سبيل المثال ، الأسلوب أو ImageSize ) قادرة على استخدامها للوظائف المدمجة ، وكذلك لتلك التي توجد بها بالفعل أحرف مدمجة. لكن في بعض الأحيان قد تتطلب الميزات الجديدة خيارات جديدة. من أجل الحفاظ على النموذجية ، من الضروري أن تكون هذه المعلمات رموزًا محددة في سياق داخلي فريد (أو شيء يشبه وظائف المورد بأكملها ، أي بحد ذاتها). للبساطة ، يسمح لك مستودع الوظيفة بضبط خيارات جديدة في التعاريف كسلسلة. ولراحة المستخدم ، تتم معالجة هذه التعريفات (شريطة استخدام OptionValue و OptionsPattern ) أيضًا بحيث عند استخدام الدوال ، يمكن تعيين المعلمات ليس فقط كسلسلة ، ولكن أيضًا كأحرف عمومية لها نفس الأسماء.
معظم الوظائف تقوم ببساطة بكل ما تحتاج إلى القيام به في كل مرة يتم استدعاؤها ، لكن بعض الوظائف تحتاج إلى التهيئة قبل أن تتمكن من العمل في جلسة معينة - ولحل هذه المشكلة ، يوجد قسم يسمى التهيئة في قسم التعريف.
يمكن لوظائف المستودع استخدام وظائف أخرى موجودة بالفعل في المستودع ، من أجل تكوين تعريفات لمستودع الوظائف التي تشمل وظيفتين (أو أكثر) تشير إلى بعضهما البعض ، يجب توسيعهما في جلسة العمل الخاصة بك مع البرنامج حتى تتمكن من الرجوع عليها كـ ResourceFunction [ "name" ] ، يمكنك بعد ذلك إنشاء مجموعات من هذه الوظائف التي تحتاجها كأمثلة (لم أفهمها) وإضافة وظيفة جديدة إلى المستودع استنادًا إلى تلك الموجودة بالفعل. (أو بالفعل أو سابقًا - كلتا الكلمتين أخرقتان)
آفاق التنمية. ماذا يجب أن يحدث عندما يصبح المستودع كبيرًا جدًا؟
نطلق اليوم فقط مستودع وظائف Wolfram ، لكن مع مرور الوقت نتوقع أن (يحذف) حجمها ووظائفها يمكن أن يزيد بشكل كبير ، ومع نموها ، ستظهر مشاكل مختلفة ، كما نعتقد بالفعل ، يمكن أن تنشأ.
تتعلق المشكلة الأولى بأسماء الوظائف وتفردها. تم تصميم مستودع الوظائف بطريقة يمكنك من خلالها الرجوع إلى أي وظيفة معينة عن طريق تحديد وظائفها ، كما هو الحال بالنسبة للوظائف المدمجة في Wolfram Language. ولكن هذا يعني حتما أن أسماء الوظائف يجب أن تكون فريدة من نوعها على مستوى العالم من خلال مستودع التخزين ، بحيث ، على سبيل المثال ، يمكن أن يكون هناك ResourceFunction واحد فقط [ "MyFavoriteFunction" ] في المخزون.
للوهلة الأولى ، قد تبدو هذه مشكلة كبيرة ، لكن يجب أن تفهم أن هذه هي نفس المشكلة في جوهرها مثل أشياء مثل مجالات الإنترنت أو علامات الشبكة الاجتماعية. والحقيقة هي أنه في النظام ، من الضروري ببساطة وجود مسجل - وهذا هو أحد الأدوار التي ستقوم بها شركتنا لقاعدة المعرفة بوظائف Wolfram. (بالنسبة للإصدارات الخاصة من المستودع ، يمكن للمسؤولين أن يكونوا مسجّلين لهم.) بالطبع ، يمكن تسجيل مجال الإنترنت دون وجود أي شيء عليه ، ولكن في مستودع الوظيفة لا يمكن تسجيل اسم الوظيفة إلا إذا كان هناك تعريف فعلي للوظيفة.
يتمثل جزء من دورنا في إدارة قاعدة المعرفة بوظائف Wolfram في التأكد من أن الاسم الذي تختاره للوظيفة يتوافق مع تعريف الوظيفة وأنه يتوافق مع مصطلحات تسمية Wolfram Language. لدينا أكثر من 30 عامًا من الخبرة في تسمية الوظائف المدمجة في Wolfram Language ، وفريق الإشراف لدينا (المنسقون؟) سوف ينقل هذه التجربة أيضًا إلى مستودع الوظائف. بالطبع ، هناك دائما استثناءات. على سبيل المثال ، قد يبدو من الأفضل أن يكون هناك اسم قصير لبعض الوظائف ، ولكن من الأفضل "الدفاع" باسم أطول وأكثر تحديدًا ، لأنه من غير المرجح أن يرغب شخص ما في إنشاء اسم دالة مماثل في المستقبل.
(تجدر الإشارة هنا إلى أن إضافة علامة مشارك لإزالة الغموض في الوظائف لن يؤدي إلى التأثير المتوقع. لأنه إذا كنت لا تصر دائمًا على تعيين علامة ، فسوف تحتاج إلى تحديد علامة افتراضية لأي وظيفة معيّنة ، وكذلك تمييز علامات المؤلف ، والتي سوف تتطلب التنسيق العالمي مرة أخرى.)
مع نمو قاعدة معرفة وظائف Wolfram ، إحدى المشكلات التي من المحتمل أن تنشأ هي قابلية اكتشاف الوظائف ، لذلك يتم توفير وظيفة البحث في النظام (وقد تتضمن ملفات التعريف كلمات رئيسية ، إلخ). للوظائف المدمجة في Wolfram Language ، تحتوي الوثائق على كل أنواع المراجع التبادلية التي تساعد على "الإعلان" عن الوظائف. يمكن أن تشير الدالات في مستودع الدالات إلى الدوال المضمنة. ولكن ماذا عن العكس؟ للقيام بذلك ، سنقوم بتجربة العديد من المخططات لتقديم وظائف المستودع على صفحات الوثائق للوظائف المدمجة.
بالنسبة للوظائف المدمجة في Wolfram Language ، هناك ما يسمى بمستوى الكشف الذي توفره شبكة من "صفحات المساعدة" التي توفر قوائم منظمة للوظائف المتعلقة بمجالات محددة. من الصعب دائمًا تحقيق التوازن بين صفحات الرجل بشكل صحيح ، ومع نمو Wolfram ، غالبًا ما تحتاج صفحات الرجل إلى إعادة تنظيمها بالكامل. من السهل جدًا وضع الوظائف من المستودع في فئات عريضة وحتى تقسيم هذه الفئات بالتسلسل ، لكن من الأفضل بكثير تنظيم صفحات دليل لغوي منظمة بشكل صحيح. لم يتضح بعد أفضل السبل لإنشائها لقاعدة المعرفة الكاملة للوظائف. على سبيل المثال ، CreateResourceObjectGallery في مستودع الوظائف ، يمكن للجميع وضع صفحة ويب تحتوي على "اختياراتهم" من المخزون:

يتم تكوين مستودع وظيفة Wolfram كمستودع دائم للوظائف ، حيث ستعمل أي وظيفة فيه دائمًا. بالطبع ، قد تظهر إصدارات جديدة من الوظائف ، ونتوقع أن تصبح بعض الوظائف بلا شك متقادمة مع مرور الوقت. ستعمل الوظائف إذا كانت مستخدمة في البرامج ، لكن صفحات وثائقها سترتبط بوظائف جديدة وأكثر تقدماً.
تم تصميم مستودع Wolfram Feature Repository للحصول بسرعة على ميزات جديدة واستكشاف استخدامات جديدة للغة Wolfram. مع قدر كبير من التفاؤل ، نأمل أن يكون جزء مما تم التحقيق فيه في مستودع الوظائف من المنطقي في النهاية أن يصبح جزءًا لا يتجزأ من اللغة الرئيسية في Wolfram Language. خلال العقد الماضي ، كان لدينا مجموعة مماثلة من الميزات التي تم تقديمها في الأصل في Wolfram | على ألفا . وأحد الدروس المستفادة من هذه التجربة هو أن الأمر يتطلب الكثير من العمل ، والذي غالبًا ما يكون أكثر صعوبة من الجهد الأولي ، لتحقيق معايير الجودة والاتساق التي نركز عليها في أن كل شيء مدمج في لغة Wolfram. تقديم الأفكار. ولكن حتى في هذه الحالة ، يمكن أن تكون وظيفة في قاعدة المعرفة للوظائف بمثابة دليل مفيد للغاية لمفهوم وظيفة المستقبل ، والتي في النهاية يمكن دمجها في لغة Wolfram.
الشيء الأكثر أهمية هنا هو أن الوظيفة في مستودع الوظيفة هي ما هو متاح لكل مستخدم للاستخدام الآن. قد تكون ميزة اللغة المضمنة أفضل بكثير وأكثر إنتاجية ، لكن مستودع الوظائف سيتيح للمستخدمين الوصول على الفور إلى جميع الميزات الجديدة. والأهم من ذلك ، أن هذا المفهوم يسمح للجميع بإضافة أي من ميزاتهم الجديدة.
في السابق ، في تاريخ لغة Wolfram ، لم تكن هذه الفكرة ناجحة كما هي الآن ، ولكن في هذه المرحلة تم بالفعل بذل الكثير من الجهد في اللغة ، وكذلك الفهم العميق لمبادئ تصميم اللغة بحيث أصبح من الممكن الآن لمجتمع كبير من المستخدمين إضافة وظائف من شأنها الحفاظ على تماسك المشروع لجعلها مفيدة لمجموعة واسعة من المستخدمين.
يتمتع مجتمع مستخدمي Wolfram Language بروح لا تصدق من المواهب (؟). (بالطبع ، يضم هذا المجتمع العديد من خبراء البحث والتطوير الرائدين في مجموعة واسعة من المجالات.) آمل أن يوفر مستودع Wolfram Feature مستودعًا أساسيًا فعالًا لإطلاق روح المواهب هذه ونشرها. معا فقط يمكننا إنشاء شيء من شأنه أن يوسع بشكل كبير المنطقة التي يمكن تطبيق النموذج الحسابي Wolfram.
منذ أكثر من 30 عامًا ، قطعنا شوطًا طويلًا في لغة ولفرام. الآن معًا ، دعنا نذهب إلى أبعد من ذلك. إنني أحث جميع مستخدمي Wolfram المحترمين حول العالم على استخدام مستودع وظيفي وكذلك مشروع برمجي جديد مثل Free Wolfram Engine للمطورين كمنصة لذلك.