ويكي الدوال:عن
- الهدف الأول من ويكي الدوال هو دعم مشاريع ويكيميديا، لكنه سوف يدعم أهداف أخرى، مثل مع ويكي بيانات. هذا هو الوصف للويكي الدوال خارج ويكيبيديا.
- بيان المهمة
- مشروع ويكيميدي للعمل الجماعي التعاوني، يقوم على إنشاء وصيانة مكتبة من نصوص الدوال البرمجية التي تدعم مشاريع ويكيميديا وما يتعداها، بحيث يمكن للجميع استدعاء هذه الدوال وإعادة استخدامها بكلٍ من لغات العالم الطبيعية ولغات البرمجة
ويكي الدوال هي مستودع مفتوح للنصوص البرمجية الذي يمكن لأي شخص استخدامه والمساهمة فيه.
تشتمل ويكي الدوال على دوال. لكل دالة منها وصف، مجموعة من المعاملات المتغيرة «parameters»، حالات اختبار ومجموعة تنفيذات «implementations» ضمن لغات البرمجة المختلفة، وأخيرًا بيانات وصفية. هذه التنفيذات يمكن إعادة استخدامها في مشاريع برمجيات أخرى «تطبيقات خاصة أو نصوص برمجية»، ويمكن استدعائها وتنفيذها عبر الإنترنت «في المتصفح أو في بيئة سحابة أو كتيبات ملاحظة Jupyter[1] أو PAWS[2]»، كذلك يمكن عمل تركيبات منها لتحقيق وظائف أكثر تعقيداً، أيضًا يمكن توقيعها، تحليلها أو التأكد من صحتها، وغيرها الكثير.
ويكي الدوال مشروع شبيه بويكيبيديا وويكي بيانات وويكاموس وغيرها، يُتيح للمساهمين من جميع أنحاء العالم إنشاء وصيانة مكتبة من الدوال البرمجية بإمكان أي شخص استخدامها لأي غرض كان. يمكن تدعيم كل دالة بتنفيذات متعددة ضمن لغات برمجة مختلفة، كذلك بحالات اختبار، شروط مسبقة ولاحقة، توثيقات، وبيانات وصفية على شكل تقديرات لوقت التشغيل وضمانات التعامل مع التعقيد لمختلف عمليات التنفيذ، الخ. يمكن للمستخدمين استدعاء دالة ما مباشرةً على موقع الويب أو من خلال نصوصهم البرمجية أو التطبيقات الخاصة بهم، ممكن أيضَا من واجهة سطر الأوامر، أو من تطبيق محلي. بالإمكان تشغيل الدالة وتنفيذها محليًا في المتصفح، أو على السحابة، أو محليًا مدمجةً في تطبيق خاص بالمستخدم.
Wikifunctions is intended to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly. Wikifunctions aims to make life easier for developers, who can rely on this repository like on any external library, and for end-users, who can call functions as needed, in a way that is currently only available with a very uneven coverage through specific websites that are often written in the form of 1990s websites with Java applets.
All functions are pure, in order to enable a secure sandboxed execution. Also, every implementation can be annotated with metadata and cryptographically signed. End-users can select and audit which implementation of each function to use, depending on their available hardware resources and web of trust settings.
Wikifunctions will allow easy access to large knowledge bases such as Wikidata, but also to binary input and output files. It is entirely possible to upload an image as an input file and return analysis results such as what is depicted on the image, or how many different colors the image has – or a different binary, e.g. in a different format. This will be made available to workflows on Wikimedia Commons.
Wikifunctions continues the tradition of moving more computation, which has usually happened on the command line or with apps by more computer-savvy users, to the Web and democratizing access to functionality that was not available before. At the same time, it will increase the productivity of developers everywhere, as they can just use a large library of code instead of relying on copying and pasting answers from sites like StackOverflow.
Unlike in Wikipedia, contributors will mostly create new implementations for a function instead of updating existing functions. The implementations can be automatically tested against the given tests, against each other, and further analyzed.
Implementations can be written in a number of different programming languages, but they will be able to call functions implemented in other programming languages. The execution engine can smoothly (although not necessarily with the highest possible performance) operate in different languages. Although in most cases there is a large performance boost in composing functions within a single programming language, there is no requirement to do so. In many cases, the speed of development and the developer's time will be more valuable than the additional computer cycles spent in the execution engine.