Привет, Хабр! Представляю вашему вниманию перевод поста Стивена Вольфрама «Репозиторий функций Wolfram: запуск открытой платформы для расширения языка Wolfram» .
Предпосылки для согласованности языка Wolfram
Сегодня мы стоим на пороге великих достижений вместе с языком программирования.Всего три недели назад мы запустили бесплатный движок Wolfram для разработчиков чтобы помочь нашим пользователям интегрировать язык Wolfram Language в свои крупномасштабные программные проекты.
Сегодня мы запускаем Репозиторий функций Wolfram , чтобы предоставить скоординированную платформу для функций, созданных для расширения языка Wolfram, а также мы открываем репозиторий функций для всех, кто может внести свой вклад в разработку нашего программного продукта.
Репозиторий функций Wolfram стал возможным благодаря уникальной природе языка Wolfram Language не только как языка программирования, но и как полномасштабный компьютерный язык .
В традиционных языках программирования добавление существенной новой функциональности обычно включает создание целых дополнительных библиотек, которые могут работать, а могут и не работать при совместном использовании.
Однако в языке Wolfram Language так много уже встроено в сам язык , что можно существенно расширить его функционал, просто добавив новые функции, которые сразу интегрируются в целостную структуру всего языка.
Например, репозиторий функций Wolfram уже содержит 532 новые функции структурированы по 26 тематическим категориям:
Аналогично более чем 6000 стандартных функций , встроенный в язык Wolfram, каждая функция из репозитория имеет страницу документации с их подробным описанием и примерами работы:
Чтобы попасть на страницу, скопируйте вышеуказанный объект (функцию BLOB), вставьте его в строку ввода и затем запустите функцию — она уже встроена в язык Wolfram и поддерживается по умолчанию, начиная с версия 12.0 :
Здесь следует отметить, что при обработке ЛоготипQRCode Вам не нужно, например, настраивать «библиотеку обработки изображений» — поскольку мы уже реализовали последовательный и тщательно алгоритмический подход в языке Wolfram Language. Обработка изображения , которые могут быть немедленно обработаны различными функциями графического языка:
Я надеюсь, что при поддержке замечательное и талантливое сообщество , который рос и расширялся (на основе языка Wolfram Language) в течение последних нескольких десятилетий.
Репозиторий функций Wolfram позволит в обозримом будущем значительно расширить набор (возможно, потенциально значимых, специализированных в различных областях науки и техники) функций, доступных в языке.
Таким образом, становится возможным использовать как содержимое языка (его встроенные функции), так и принципы развития , которые реализованы на основе языка.
(Здесь следует отметить, что язык Wolfram Language уже имеет более 30-летняя история развития и стабильный рост ).
Функции из репозитория могут содержать небольшие или большие фрагменты кода, написанные на языке Wolfram Language. Например, это могут быть звонки внешние API и сервисы или внешние библиотеки на других языках .
Уникальная особенность этого подхода заключается в том, что при детализации до функциональности пользовательского уровня не будет потенциальных несоответствий, поскольку подход построен на основе согласованной структуры языка Wolfram Language – и каждая функция будет автоматически работать правильно – точно так же, как намеревался.
она должна.
Оболочка и структура программирования Wolfram Feature Repository спроектированы таким образом, чтобы каждый мог внести свой вклад в общее дело самым простым и удобным для него способом – по сути, всего лишь заполнив текстовый файл блокнота (с расширением nb) WL .
Встроенные автоматические функции позволяют проверять новые функции, добавляемые в репозиторий, на предмет их интеграции в язык.
Наша компания делает ставку на широкий круг пользователей, которые смогут интегрировать свои функции в язык, а не на большую сложность новых функций - и хотя процесс проверки существует, мы не настаиваем ни на чем вроде кропотливый анализ конструкции или строгие стандарты полноты и надежности новых пользовательских функций в отличие от более тщательного тестирования функций, встроенных в основной язык, который мы используем.
В этом подходе есть много компромиссов и деталей, но наша цель — оптимизировать репозиторий функций Wolfram как для удобства пользователей, так и для обеспечения того, чтобы новые пользовательские функции вносили значимый вклад в развитие языка.
По мере нашего роста я не сомневаюсь, что нам придется изобретать новые методы обработки и проверки функций, встроенных в репозиторий, не в последнюю очередь для организации большого количества функций и поиска тех, которые нужны пользователям.
Однако отрадно то, что выбранный нами путь является хорошим началом.
Я лично добавлено несколько функций в исходную базу данных.
Многие из них основаны на коде, который я лично разрабатывал в течение достаточно долгого времени.
И мне потребовалось всего несколько минут, чтобы отправить их в репозиторий.
Теперь, когда они есть в репозитории, я наконец-то могу — сразу и в любое время — использовать эти функции по мере необходимости, не беспокоясь о поиске файлов, загрузке пакетов и т. д.
Повышение эффективности при сокращении затрат
Еще до появления Интернета существовали способы поделиться кодом Wolfram Language (нашим первым крупным централизованным проектом был Математический источник , созданный для системы Mathematica в 1991 году на основе компакт-диска и т. д.).Разумеется, предлагаемый к реализации подход на базе репозитория функций Wolfram является более мощным и надежным инструментом реализации вышеперечисленных задач.
На протяжении более 30 лет наша компания усердно работала над сохранением целостности структуры языка Wolfram, и это имеет решающее значение для того, чтобы язык Wolfram стал не просто языком программирования, но и полноценный компьютерный язык .
И таким образом, суть подхода к реализации репозитория функций Wolfram заключается в использовании унифицированного подхода к программированию и разработке новых функций, которые последовательно добавляются и вписываются в рамки языка, чтобы он мог развиваться и со-развиваться.
В структуре реализации каждой функции происходят различные вычислительные процессы.
Здесь следует отметить, что необходимо, чтобы функция имела понятный и единообразный вид и была визуально читабельна для пользователя.
В этом контексте встроенные функции языка Wolfram Language представлены более чем 6000 последовательными примерами того, как правильно программировать функции (это наши живое программирование видео который включает в себя сотни часов процесса создания стандартных программ ).
Этот подход в конечном итоге делает репозиторий функций Wolfram способным работать хорошо, так это структурная природа языка Wolfram Language с его большим количеством дополнительных и разнообразных библиотек, которые уже встроены в язык.
Например, если у вас есть функция, обрабатывающая изображения или разреженные массивы , или молекулярные структуры , и географические данные или какие-то другие — их последовательное символическое представление уже существует в языке, и благодаря этому ваша функция сразу становится совместимой с другими функциями языка.
Создание репозитория, который действительно хорошо работает, — интересная задача метапрограммирования.
Например, избыток ограничений в программе не позволит получить требуемую унификацию и универсальность алгоритма.
Так же, как и при недостаточном количестве функциональных ограничений, вы не сможете реализовать достаточно правильную последовательность выполнения алгоритма.
Несколько предыдущих примеров реализации компромисса этих подходов, реализованных нашей компанией, работали достаточно стабильно — это: Демонстрации проекта «Вольфрам» , запущенный в 2007 году и сейчас работающий в режиме онлайн с более чем 12 000 интерактивными для пользователя демонстрациями.
В База данных Вольфрам существует более 600 готовых баз данных, которые можно использовать в языке Wolfram Language, и Нейросетевое хранилище Wolfram пополняется новыми нейронными сетями почти каждую неделю (их сейчас уже 118) и они сразу подключаются через функцию Сетевая Модель на языке Вольфрам.
Все приведенные примеры имеют принципиальную особенность — объекты и функции, собранные в проекте, имеют очень высокую степень структурированности и распределения процессов.
Конечно, детали структуры того, что является демо, нейронной сетью или чем-то еще, могут сильно различаться, но фундаментальная структура любого текущего репозитория всегда остается неизменной.
Итак, что вы думаете, уважаемый пользователь, о создании такого репозитория, добавляющего расширения к языку Wolfram? Язык Wolfram Language спроектирован чрезвычайно гибким, поэтому его можно расширять и модифицировать любым способом.
Это обстоятельство чрезвычайно важно для возможности быстрого создания различных масштабных программных проектов на языке Wolfram Language. Здесь следует отметить, что по мере увеличения гибкости языка неизбежно будет возрастать стоимость проектов, реализуемых на таком языке.
Это связано с тем, что чем больше пользователь использует такой язык, тем более специализированный функционал он получает, но не следует забывать, что у такого подхода могут быть и отрицательные стороны в плане невозможности обеспечить согласованность программных модулей.
Существует общая проблема с библиотеками в традиционных языках программирования — если вы используете, например, одну библиотеку, код будет работать корректно, но если вы попытаетесь использовать несколько библиотек, нет гарантии, что они будут правильно взаимодействовать друг с другом.
.
Кроме того, в традиционных языках программирования — в отличие от полноценного языка вычислений — нет возможности гарантировать наличие непротиворечивых встроенных представлений для любых функций или типов данных, отличных от их базовых структур.
Но на самом деле проблема даже больше, чем кажется на первый взгляд: если построить масштабную вертикаль функционала, то без огромных затрат на централизованное программирование проектов, которые мы закладываем в язык Wolfram, невозможно добиться последовательности.
Поэтому важно, чтобы все программные модули всегда корректно работали вместе.
Таким образом, идея репозитория функций Wolfram заключается в том, чтобы избежать описанной выше проблемы путем простого добавления расширений к языку в относительно небольших фрагментах кода с помощью отдельных функций, которые легче разрабатывать как связные модули.
При этом есть возможности программирования, которые невозможно сделать удобными с помощью отдельных функций (и наша компания планирует в ближайшем будущем выпустить оптимизированный алгоритм программирования, который поможет реализовать масштабные программные пакеты).
Однако на основе функций, уже встроенных в язык Wolfram Language, существует множество возможностей программирования, реализуемых на основе отдельных функций.
Идея здесь в том, что при относительно небольших усилиях по программированию можно создать ряд новых и очень полезных функций, которые обеспечат достаточную согласованность дизайна, будут хорошо сочетаться друг с другом, а также, в дополнение к этому, будут смогут легко и широко использоваться в языке в будущем.
Разумеется, такой подход является компромиссным.
Если бы был реализован более крупный пакет, можно было бы представить совершенно новый мир функциональности, который был бы чрезвычайно мощным и полезным.
Если есть необходимость получить новый функционал, который будет сочетаться со всем остальным, но вы не готовы тратить много усилий на развитие проекта, это, к сожалению, может привести к сокращению масштабов вашего проекта.
Идея репозитория функций Wolfram заключается в обеспечении функциональности определяющей части проекта; этот подход добавит мощные функциональные возможности и облегчит поддержание единообразия в проекте программирования.
Помогите добавить пользовательские функции в репозиторий функций.
Наша команда усердно работала над тем, чтобы пользователям было легко вносить свой вклад в функции репозитория Wolfram. На рабочем столе (уже в версия 12.0 ), вы можете просто последовательно пройтись по вкладкам главного меню: Файл > Создать > Элемент репозитория > Элемент репозитория функции, и вы получите " Блокнот определений » (программно внутри верстака.
Также можно использовать аналоговую функцию — Создать блокнот[ «Функциональный ресурс» ] ):
Вам нужно будет выполнить два основных шага: во-первых, написать код вашей функции и, во-вторых, написать документацию, иллюстрирующую, как ваша функция должна работать.
Нажмите кнопку «Открыть образец» вверху, чтобы увидеть пример того, что вам нужно сделать:
По сути, вы пытаетесь создать что-то похожее на встроенную функцию в языке Wolfram Language. За исключением того, что он может делать что-то гораздо более конкретное, чем встроенная функция.
При этом ожидания относительно его полноты и надежности будут значительно ниже.
Вам необходимо дать вашей функции имя, соответствующее рекомендациям по именованию функций языка Wolfram Language. Кроме того, вам потребуется разработать документацию для вашей функции, аналогичную встроенным функциям языка.
Я расскажу об этом более подробно позже.
А пока просто обратите внимание, что в ряду кнопок вверху файла блокнота определений есть кнопка «Руководство по стилю».
, объясняющая, что делать, и кнопку «Инструменты», предоставляющую инструменты для форматирования документации вашей функции.
Когда вы уверены, что все заполнено правильно и готовы, нажмите кнопку «Проверить».
Совершенно нормально, что вы еще не разобрались во всех деталях.
Таким образом, функция «Проверить» запустится автоматически и выполнит множество проверок стиля и согласованности.
Часто он сразу же предложит вам подтвердить и принять исправления (Например: «эта строка должна заканчиваться двоеточием» и предложит ввести двоеточие).
Иногда она попросит вас что-то добавить или изменить самостоятельно.
Мы будем постоянно добавлять новые функции к автоматическим функциям кнопки «Проверить», но в основном ее цель — гарантировать, что все, что вы отправляете в репозиторий функций, уже точно соответствует как можно большему количеству рекомендаций по стилю.
Итак, после запуска «Проверки» вы можете воспользоваться «Предварительным просмотром».
«Предварительный просмотр» создает предварительный просмотр страницы документации, которую вы определили для своей функции.
Вы также можете создать предварительный просмотр для файла, созданного на вашем компьютере, или для файла, расположенного в облачном хранилище.
Если по какой-то причине вас не устраивает то, что вы видите в предварительном просмотре, просто вернитесь назад и внесите необходимые исправления, а затем снова нажмите кнопку «Предварительный просмотр».
Теперь вы готовы отправить свою функцию в репозиторий.
Кнопка «Развернуть» дает вам четыре варианта:
На этом этапе важно то, что вы можете отправить свою функцию в репозиторий функций Wolfram, чтобы она была доступна каждому.
При этом вы также можете разместить свою функцию для ограниченного числа пользователей.
Например, вы можете создать функцию, которая будет размещаться локально на вашем компьютере, чтобы она была доступна при использовании этого конкретного компьютера.
Или вы можете опубликовать это у себя облачный аккаунт , чтобы он был доступен вам при подключении к облаку.
Вы также можете публично разместить (развернуть) эту функцию через свою облачную учетную запись.
Его не будет в центральном репозитории функций Wolfram, но вы сможете дать кому-нибудь URL-адрес, который позволит им получить вашу функцию из вашей учетной записи.
(В будущем мы также будем поддерживать центральные репозитории по всей нашей компании.
) Допустим, вы действительно хотите отправить свою функцию в базу знаний функций Wolfram. Для этого необходимо нажать кнопку «Отправить» в репозиторий.
Так что же тогда происходит в данный момент? Ваша заявка немедленно ставится в очередь на рассмотрение и одобрение нашей специальной командой кураторов.
По мере прохождения вашего заявления через процесс утверждения (который обычно занимает несколько дней) вы будете получать сообщения о его статусе и, возможно, предложения по будущему использованию.
Но как только ваша функция будет одобрена, она будет немедленно опубликована в репозитории функций Wolfram и станет доступна для использования всем желающим.
(И это появится в новостные дайджесты новых функций и т. д.)
Что должно быть в хранилище?
Следует отметить, что у нашей компании очень высокие стандарты полноты, надежности и общего качества, и из более чем 6000 функций, которые мы уже встроили в язык Wolfram за последние 30+ лет, все отвечают вышеуказанным требованиям.Цель репозитория функций Wolfram — использовать всю структуру и функциональность, которая уже существует в языке Wolfram Language, чтобы добавить как можно больше более легких функций (то есть функций с более высокой производительностью).
Конечно, функции в репозитории функций Wolfram должны соответствовать принципам проектирования языка Wolfram Language, чтобы они могли полностью взаимодействовать с другими функциями и ожиданиями пользователей относительно того, как функция должна работать правильно.
Однако функции не обязательно должны быть одинаковой полноты или надежности.
Во встроенных функциях языка Wolfram мы прилагаем все усилия, чтобы сделать функции программирования максимально общими.
При этом в репозитории функций Wolfram нет ничего плохого в том, чтобы иметь функцию, которая просто обрабатывает какой-то очень конкретный, но полезный случай.
Например, функция ОтправитьПочтуИзБлокнота может получать файлы в одном конкретном формате и создавать почту одним определенным способом.
ПолигональнаяДиаграмма создает диаграммы только с определенными цветами и надписями и т. д. Еще один момент, связанный со встроенными функциями, заключается в том, что наша компания прилагает все усилия, чтобы обрабатывать все нетипичные случаи, корректно обрабатывать неправильный ввод и так далее.
В репозитории функций совершенно нормально наличие специальной функции, обрабатывающей основные случаи решения проблемы и игнорирующей все остальные.
Очевидный момент заключается в том, что лучше иметь функции, которые делают больше и делают это лучше, но оптимизация репозитория функций - в отличие от встроенных функций языка Wolfram - должна включать больше функций, связанных с большим количеством функций, а не углубляться в процессы реализации каждой конкретной функции.
Теперь рассмотрим пример тестирования функций в репозитории.
Ожидания согласованности для таких функций, естественно, намного ниже, чем для встроенных функций языка.
Это особенно актуально в тех случаях, когда функции зависят от внешних ресурсов, таких как API, важно постоянно проводить последовательные тесты, что автоматически происходит в рамках алгоритмов проверки.
В файле nb вы можете явно указать определения (в разделе «Дополнительная информация») и указать столько тестов, сколько определено либо входными и выходными строками, либо полносимвольными объектами типа Верификационный тест , столько, сколько вы считаете нужным.
Кроме того, система постоянно пытается превратить предоставленные вами примеры документации в процесс проверки (а иногда это может быть достаточно ресурсоёмким, например, для функции, результат которой зависит от случайных чисел или времени суток).
В результате репозиторий функций будет иметь ряд сложностей реализации.
Некоторые из них будут представлять собой всего лишь одну строку кода, другие могут включать в себя тысячи или десятки тысяч строк, вероятно, с использованием множества вспомогательных функций.
Когда стоит добавить функцию, для определения которой требуется очень мало кода? В принципе, если для функции существует хорошее мнемоническое имя , который пользователи легко поняли бы, если бы увидели его в куске кода, то его уже можно добавлять.
В противном случае, вероятно, лучше просто повторно добавлять код в вашу программу каждый раз, когда вам нужно ее использовать.
Основная цель репозитория функций (как следует из названия) — добавить в язык новые возможности.
Если вы хотите добавить новые данные или новые сущности , использовать Репозиторий данных Wolfram .
Но что, если вы захотите ввести в свои расчеты новые типы объектов? На самом деле есть два пути.
Возможно, вы захотите ввести новый тип объекта, который будет использоваться в новых функциях в репозитории функций.
И в этом случае вы всегда можете просто записать его символическое представление и использовать его при вводе или выводе функций в хранилище функций.
Но что, если вы хотите представить объект, а затем определить с помощью существующих функций языка Wolfram Language, что вы хотите с ним работать? Язык Wolfram Language всегда имел для этого облегченный механизм, называемый UpValues .
С некоторыми ограничениями (особенно для функций, которые не могу оценить свои аргументы ), репозиторий функций позволяет просто представлять функцию и определять для нее значения.
(Повышение ожиданий последовательности при создании нового крупного проекта, полностью интегрированного в язык Wolfram Language, обычно является очень важной процедурой, которую невозможно достичь простым увеличением стоимости проекта, и это то, что наша компания делает в рамках проектов.
для долгосрочного развития языка эта задача не является целью, которая ставится в рамках разработки репозитория).
Итак, что может быть в коде функции в репозитории функций? Все встроено в язык Wolfram Language , конечно (по крайней мере, если это не представляет угрозы Для безопасность и производительность самой программы, как вычислительной среды), а также любой функции из репозитория функций.
Однако есть и другие функциональные возможности: функция в репозитории функций может вызывать API или в Вольфрам Клауд , или из другого источника .
Конечно, с этим связаны некоторые риски.
По причине того, что нет никаких гарантий, что API не изменится, и функция в хранилище функций перестанет работать.
Чтобы помочь выявить такие проблемы, на странице документации (в разделе «Требования») есть примечание для любой функции, которая опирается не только на встроенные функции Wolfram Language. (Конечно, когда дело касается реальных данных, даже с этой функциональностью могут возникнуть проблемы — ведь данные реального мира постоянно меняются, а иногда даже меняются их определения и структура.
) Должен ли весь код репозитория функций Wolfram быть написан в Wolfram? Разумеется, код внутри внешнего API не должен быть написан на языке Wolfram, который даже не составляет языкового кода.
Фактически, если вы найдете функцию практически в любом внешнем языке или библиотеке, вы можете создать оболочку, позволяющую использовать ее в репозитории функций Wolfram. (Обычно для этого следует использовать встроенные функции ВнешнийEvaluate или Внешняя функция в коде языка Wolfram.) Так какой смысл это делать? По сути, это позволяет использовать всю интегрированную систему Wolfram Language и весь ее унифицированный набор программных возможностей.
Если вы получаете базовую реализацию из внешней библиотеки или языка, вы можете затем использовать богатую символическую структуру языка Wolfram Language для создания удобной функции верхнего уровня, которая позволяет пользователям легко использовать любую уже реализованную функциональность.
По крайней мере, это должно быть осуществимо в идеальном мире, где существуют все строительные блоки загрузки библиотек и т. д., и в этом случае они будут автоматически обрабатываться языком Wolfram Language. (Следует отметить, что на практике могут возникнуть проблемы с настройка внешних языков конкретная компьютерная система и облачное хранилище могут создавать дополнительные проблемы безопасности).
Кстати, когда вы впервые смотрите на типичные внешние библиотеки, они часто кажутся слишком сложными, чтобы их можно было охватить всего несколькими функциями, но во многих случаях большая часть сложности возникает из-за создания инфраструктуры, необходимой для работы библиотеки и всех функций.
поддержите это.
Однако при использовании языка Wolfram Language инфраструктура обычно уже встроена в пакеты, поэтому нет необходимости подробно раскрывать все эти вспомогательные функции, а создавать только функции для «самых верхних» функций, специфичных для приложения, в библиотеке.
.
«косистема» базы знаний
Если вы написали функции, которые регулярно используете, отправьте их в репозиторий функций Wolfram! Если Теги: #Хранение данных #новости #облачные сервисы #разработка #Функциональное программирование #перевод #открытый код #Wolfram Mathematica #язык wolfram-
Ближайшее Будущее Аккумуляторов
19 Oct, 24 -
Бесплатный Антивирус Касперского
19 Oct, 24 -
Мой Побег(Html)
19 Oct, 24 -
Лучшие Вещи 2.0
19 Oct, 24