Wikifunkcje:O projekcie
- Pierwszym celem Wikifunkcji jest współdziałanie z projektami Wikimedia, ale docelowo będą one wspierać szersze wykorzystanie, podobnie jak było to z Wikidanymi. Poniżej znajduje się wizja dla Wikifunkcji ponad wykorzystanie w ramach Wikipedii.
- Deklaracja misji
- Projekt Wikimedia dla wszystkich, którzy chcą wspólnie tworzyć i utrzymywać bibliotekę kodu, wspierającego projekty Wikimedia i nie tylko, który może być wywoływany i ponownie używany przez każdego, przy użyciu języków naturalnych i programowania.
Wikifunkcje to otwarte repozytorium kodu, którego każdy może używać i do którego każdy może wnosić swój wkład.
Wikifunkcje składają się z funkcji. Funkcja może posiadać opis w wielu językach, listę parametrów, przypadków testowych, listę implementacji w różnych językach programowania oraz dodatkowe metadane. Implementacje mogą być wykorzystywane w innych projektach programistycznych (w tym prywatne aplikacje i skrypty), mogą być wywoływane przez interfejs webowy (czy to po prostu w przeglądarce, czy też w środowiskach typu Jupyter[1] i PAWS[2]). Funkcje mogą być też składane, aby uzyskać bardziej złożoną funkcjonalność. Możliwe jest również ich podpisywanie, analizowanie, walidacja oraz więcej.
Wikifunkcje są projektem w duchu Wikipedii, Wikidanych, Wikisłownika i innych, podobnych projektów wolnej wiedzy. Pozwalają użytkownikom z całego świata tworzyć i utrzymywać wielojęzyczną bibliotekę funkcji, które będą mogły być potem wykorzystywane przez wszystkich i w każdym celu. Każda funkcja może być zaimplementowana w różnych językach programowania, mieć dołączone przypadki testowe, warunki a priori i a posteriori, dokumentację, metadane (w rodzaju oszacowań czasu działania i gwarancji złożoności dla implementacji itp.). Wywoływanie funkcji możliwe jest zarówno przez stronę internetową, jak i z poziomu swojego własnego kodu (np. aplikacji, interfejsu konsolowego itd.). Funkcje mogą działać zarówno w chmurze, w ramach przeglądarki, jak i wbudowane w aplikację.
Wikifunkcje z założenia mają stworzyć dobrze zdefiniowany katalog funkcji, które mogą być potem szeroko wykorzystywane, ale też środowisko do szybkiego łączenia i wykonywania funkcji w locie. Wikifunkcje mają na celu ułatwienie życia programistom, którzy mogą opierać się na niniejszym środowisku, jak na każdej innej bibliotece zewnętrznej, oraz użytkownikom końcowym, którzy mogą wywoływać funkcje na żądanie, w sposób, który jest obecnie (z różnym pokryciem) udostępniany przez strony internetowe mające nierzadko postać apletów Javy z lat 90. XX w.
Wszystkie funkcje są czystymi funkcjami, dzięki czemu mogą działać w bezpiecznym i odizolowanym środowisku. Ponadto, każda implementacja może mieć dołączone metadane i podpis kryptograficzny. Użytkownicy mogą wybrać i zbadać, które implementacje danej funkcji wykorzystać, w zależności od dostępnych zasobów obliczeniowych i ustawień sieci zaufania.
Wikifunkcje zapewnią łatwy dostęp do dużych baz wiedzy, takich jak Wikidane, ale również pozwolą na wykorzystanie plików w charakterze danych wejściowych i wyjściowych. Jest całkowicie możliwe przesłanie obrazka jako wejścia do funkcji, która przeprowadzi analizę, co jest przedstawione albo jakie kolory występują na grafice. Funkcja mogłaby też wytworzyć inne dane binarne, np. ten sam obrazek w innym formacie. Z tego typu przetwarzania będą mogły korzystać przepływy pracy na Wikimedia Commons.
Wikifunkcje kontynuują tradycję przenoszenia większej ilości obliczeń (które zwykle wymagały, by ktoś obyty z technologią skorzystał z wiersza polecenia albo pewnej aplikacji) do Internetu, co zdemokratyzuje dostęp do zasobów, niedostępnych wcześniej dla ogółu. Jednocześnie, zwiększy to produktywność programistów, którzy będą mogli skorzystać z dużej bazy kodu zamiast opierania się na kopiowaniu odpowiedzi ze StackOverflow.
W przeciwieństwie do Wikipedii, użytkownicy będą przede wszystkim tworzyć nowe implementacje funkcji, zamiast aktualizowania istniejących. Implementacje będą potem automatycznie testowane – zarówno według zdefiniowanych przypadków testowych, jak i w porównaniu z innymi implementacjami – oraz dalej analizowane.
Implementacje mogą być pisane w wielu różnych językach programowania i mimo to wykonywać funkcje zaimplementowane w innych językach. Silnik wykonawczy może płynnie (acz niekoniecznie z maksymalną możliwą wydajnością) operować na wielu językach. Mimo że zazwyczaj składanie funkcji zaimplementowanych w tym samym języku daje zysk wydajnościowy, nie stanowi to wymogu. Często czas pracy programisty będzie bardziej wartościowy niż dodatkowe cykle obliczeniowe silnika wykonawczego.