Wikifunctions:Обзор
- Первоочерёдной целью Викифункций является поддержка проектов Викимедиа, но они обеспечат поддержку достижения и других задач, также как и в случае Викиданных. На данной странице описывается применение Викифункций вне Википедии.
- Формулировка миссии
- Проект Викимедиа, позволяющий всем коллаборативно создавать и поддерживать библиотеку функций кода для решения задач в проектах Викимедиа и шире, дающий любому возможность вызывать или иначе использовать их на естественных и программных языках мира
Викифункции – это открытый репозиторий кода для использования и обогащения каждым.
В Викифункциях каждая страница представляет собой функцию. У функции есть описание, список параметров, тестовые кейсы, список реализаций в разных языках программирования, и дальнейшие метаданные. Реализации могут использоваться повторно в других программных проектах (частные приложения или скрипты), вызываться или исполняться в онлайне (прямо в браузере, в облачной среде или на платформах Jupyter[1] или PAWS[2] блокнотов), объединяться для обеспечения более комплексного функционала, подписываться, анализироваться или подвергаться валидации, и т.д. и т.п.
Викифункции – проект в духе Википедии, Викиданных, Викисловаря, и прочих. Он позволяет участникам со всего мира создавать и поддерживать библиотеку функций, которые могут использоваться любым для любых целей. Каждая функция может поддерживаться множеством реализаций в разных языках программирования, тест-кейсами, всевозможными пре- и пост-условиями, документацией, метаданными в форме прогнозных значений периода прогона и гарантий сложности для различных реализаций, и т.д. Пользователь может вызывать функцию напрямую на веб-сайте, или из своих собственного кода или приложений, через интерфейс командной строки, или локальное приложение. Функция может исполняться локально в браузере, в облаке, или локально и быть встроенной в используемое приложение.
Викифункции должны создать, с одной стороны, хорошо описанный общий каталог функций для широкого повторного использования, а также среду, в которой возможно быстро объединять разные функции и исполнять "на лету". Целью Викифункций является облегчить жизнь как для разработчиков, которые смогут полагаться на данный репозиторий как на любую внешнюю библиотеку, так и для конечных пользователей, которые смогут вызывать функции по необходимости, что сейчас возможно только на некоторых редких веб-сайтах, чьи ресурсы очень неоднородны, а сами они часто написаны в форме веб-сайтов из 1990-ых, использующих встраиваемые Java-приложения.
Для возможности реализации в среде безопасной песочницы все функции специально создаются чистыми. Также каждая реализация может быть описана метаданными и подписана криптографически. Конечные пользователи могут выбрать и провести аудит того, какую реализацию каждой из функций хотят использовать, в зависимости от доступных им вычислительных ресурсов и используемых настроек безопасности "web of trust" (сеть доверия).
Викифункции будут допускать как лёгкий доступ к крупным базам знаний как Викиданные, так и двоичные файлы ввода-вывода. Будет вполне возможно загрузить изображение как файл на входе и на выходе получить результаты анализа того, что там отображено, или сколько разных цветов имеется на изображении – или какой-либо иной двоичный файл, например в другом формате. Это будет интегрировано в рабочие процессы Викисклада.
Вычисления обычно проводились на уровне командной строки или, в случае более опытных пользователей, на уровне специализированных приложений. Викифункции продолжают традицию возрастающего перевода таковых в Веб и демократизации доступа к различному функционалу, который ранее был недоступен. Одновременно они повысят производительность разработчиков повсюду, т.к. вместо копирования ответов из StackOverflow им теперь будет доступна большая библиотека кода.
В отличие от Википедии, участники будут в основном создавать новые реализации функции, нежели обновлять существующие функции. Реализации могут автоматически проверяться на готовых тестах, друг на друге, и далее анализироваться.
Реализации могут писаться на ряде различных языках программирования и тем не менее смогут вызывать функции, реализованные на других языках программирования. Движок реализации сможет легко (хотя и не обязательно с наивысшей производительностью) работать на разных языках. Написание функций на одном языке программирования даёт в большинстве случае выигрыш в вопросах производительности, обязательности в этом нет. Во многих случаях скорость разработки и время разработчика будет ценнее дополнительных циклов вычислений на движке реализации.
Примечания