Wikifunctions:Přehled
- Prvním cílem Wikifunctions je podpora projektů Wikimedia, ale stejně jako Wikidata bude podporovat i další cíle. Toto je popis Wikifunctions nad rámec Wikipedie.
- Programové prohlášení
- Projekt Wikimedia pro všechny, kteří společně vytvářejí a udržují knihovnu kódových funkcí na podporu projektů Wikimedia i mimo ně, kterou může každý volat a znovu používat ve světových přirozených a programovacích jazycích.
Wikifunctions je otevřený repozitář kódu, který může kdokoli používat a přispívat do něj.
Každá stránka ve Wikifunctions představuje funkci. Funkce má popis, seznam parametrů, testovací případy, seznam implementací v různých programovacích jazycích a další metadata. Implementace lze opakovaně používat v jiných softwarových projektech (soukromých aplikacích nebo skriptech), volat a spouštět je online (buď jen v prohlížeči, nebo v prostředí cloudu či notebooků Jupyter[1] nebo PAWS[2]), skládat je tak, aby bylo dosaženo složitější funkčnosti, podepisovat je, analyzovat nebo ověřovat a mnoho dalšího.
Wikifunctions jsou projekt v duchu Wikipedie, Wikidat, Wikislovníku a dalších, který umožňují přispěvatelům z celého světa vytvářet a udržovat knihovnu funkcí, kterou může kdokoli použít k jakémukoli účelu. Každá funkce může být podpořena několika implementacemi v různých programovacích jazycích, testovacími případy, předběžnými a následnými podmínkami, dokumentací, metadaty v podobě odhadů doby běhu a záruk složitosti pro různé implementace atd. Uživatelé mohou funkci volat přímo na webových stránkách nebo z vlastního kódu či aplikací, z rozhraní příkazového řádku nebo z místní aplikace. Funkce může být spuštěna lokálně v prohlížeči, v cloudu nebo lokálně a vložena do aplikace uživatele.
Wikifunctions jsou určeny k vytvoření dobře definovaného společného katalogu funkcí, které lze široce opakovaně používat, a také prostředí, kde lze funkce rychle kombinovat a spouštět za běhu. Cílem Wikifunctions je usnadnit život vývojářům, kteří se na tento repozitář mohou spolehnout jako na jakoukoli externí knihovnu, a koncovým uživatelům, kteří mohou funkce volat podle potřeby způsobem, který je v současné době dostupný pouze s velmi nerovnoměrným pokrytím prostřednictvím specifických webových stránek, které jsou často psány formou webových stránek z 90. let s aplety v jazyce Java.
Všechny funkce jsou čisté, aby bylo umožněno bezpečné provádění v sandboxu. Každou implementaci lze také opatřit metadaty a kryptograficky podepsat. Koncoví uživatelé si mohou vybrat a kontrolovat, kterou implementaci každé funkce použijí, v závislosti na svých dostupných hardwarových prostředcích a nastavení sítě důvěryhodnosti.
Wikifunctions umožní snadný přístup k rozsáhlým znalostním databázím, jako jsou Wikidata, ale také k binárním vstupním a výstupním souborům. Je zcela možné nahrát obrázek jako vstupní soubor a vrátit výsledky analýzy, například co je na obrázku vyobrazeno nebo kolik má obrázek různých barev - nebo jinou binárku, například v jiném formátu. To bude zpřístupněno pracovním postupům na Wikimedia Commons.
Wikifunctions pokračuje v tradici přesunu většího množství výpočtů, které se obvykle prováděly na příkazovém řádku nebo pomocí aplikací zdatnějších uživatelů počítačů, na web a demokratizuje přístup k funkcím, které dříve nebyly k dispozici. Zároveň se tím zvýší produktivita vývojářů všude na světě, protože mohou jednoduše používat rozsáhlou knihovnu kódu, místo aby se spoléhali na správné kopírování a vkládání odpovědí ze StackOverflow.
Na rozdíl od Wikipedie přispěvatelé většinou vytvářejí nové implementace funkcí namísto aktualizace stávajících funkcí. Tyto implementace mohou být automaticky testovány na základě zadaných testů, mezi sebou navzájem a dále analyzovány.
Implementace mohou být napsány v řadě různých programovacích jazyků, a přesto mohou volat funkce implementované v jiných programovacích jazycích. Prováděcí engine může plynule (i když ne nutně s nejvyšším možným výkonem) pracovat v různých jazycích. Ačkoli ve většině případů dochází k velkému zvýšení výkonu skládáním funkcí v rámci jednoho programovacího jazyka, není to podmínkou. V mnoha případech bude rychlost vývoje a čas vývojáře cennější než dodatečné cykly počítače strávené v exekučním enginu.