Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Прывітанне, Хабр! Уяўляю вашай увазе пераклад посту Стывена Вальфрама "Волтрам Function Repository: Launching Open Platform for Extending the Wolfram Language".

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Перадумовы заможнасці мовы Wolfram

Сёння мы стаім на парозе вялікіх здзяйсненняў разам з мовай праграмавання Wolfram Language. Усяго тры тыдні таму мы запусцілі бясплатны рухавічок Wolfram для распрацоўшчыкаў, каб дапамагчы нашым карыстальнікам інтэграваць мову Wolfram Language у іх маштабныя праграмныя праекты. Менавіта сёння мы запускаем рэпазітар функцый Wolfram, для таго каб даць скаардынаваную платформу для функцый, створаных для пашырэння мовы Wolfram, а таксама мы адкрываем рэпазітар функцый для кожнага, хто можа ўнесці свой уклад у развіццё нашага праграмнага прадукта.

Рэпазітар функцый (Function Repository) Wolfram – гэта тое, што стала магчымым дзякуючы ўнікальнай спецыфіцы Wolfram Language не толькі як мовы праграмавання, але і як поўнамаштабнай вылічальнай мовы. У традыцыйных мовах праграмавання даданне значных новых функцый звычайна складаецца з стварэнне цэлых дадатковых бібліятэк, якія могуць працаваць ці не працаваць пры сумесным выкарыстанні. Аднак у мове Wolfram Language так шмат ужо ўбудавана ў саму мову, што існуе магчымасць значна пашыраць яго функцыянальнасць, проста дадаючы новыя функцыі, неадкладна інтэгравальныя ў цэласную структуру ўсёй мовы.

Напрыклад, ужо зараз у рэпазітары функцый Wolfram змяшчаецца 532 новых функцыі структураваных па 26 тэматычных катэгорыях:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Аналагічна больш за 6000 стандартных функцый, убудаваным у мову Wolfram, кожная функцыя з рэпазітара мае старонку дакументацыі з падрабязным іх апісаннем і прыкладамі працы:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Для пераходу на старонку скапіюйце прыведзены вышэй аб'ект (функцыянальны BLOB), устаўце яго ў радок уводу і затым запусціце функцыю – яна ўжо ўбудавана ў мову Wolfram і падтрымліваецца па змаўчанні, пачынаючы з версіі 12.0:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Тут трэба адзначыць, што пры апрацоўцы LogoQRCode Вам не трэба, напрыклад, наладжваць "бібліятэку для апрацоўкі малюнкаў" - бо ў мове Wolfram Language намі ўжо рэалізаваны паслядоўны і старанна алгарытмізаваны спосаб. апрацоўкі малюнкаў, якія неадкладна могуць быць апрацаваны рознымі графічнымі функцыямі мовы:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Спадзяюся, што пры падтрымцы выдатнай і таленавітай супольнасці, Які расце і пашыраецца (на базе мовы Wolfram Language) на працягу апошніх некалькіх дзесяцігоддзяў. Рэпазітар функцый Wolfram дазволіць у агляднай будучыні значна пашырыць дыяпазон (магчыма патэнцыйна значных, спецыялізаваных у розных галінах ведаў навукі і тэхнікі) функцый, даступных у мове. Такім чынам, з'яўляецца магчымасць выкарыстоўваць як змест мовы (яго ўбудаваныя функцыі), так і прынцыпы развіцця, якія рэалізуюцца на базе мовы. (Тут варта адзначыць, што Wolfram Language мае ўжо больш за 30-гадовую гісторыю развіцця і стабільнага росту).
Унутры функцый з рэпазітара могуць быць невялікія ці дастаткова аб'ёмныя фрагменты кода, напісанага на мове Wolfram Language. Напрыклад, гэта могуць быць выклікі знешніх API і сэрвісаў ці знешніх бібліятэк на іншых мовах. Унікальнай асаблівасцю дадзенага падыходу з'яўляецца тое, што, калі Вы пераходзіце да функцыянальнасці на ўзроўні карыстальніка, будуць адсутнічаць магчымыя нестыкоўкі з прычыны таго, што дадзены падыход пабудаваны на базе ўзгодненай структуры мовы Wolfram Language – і кожная функцыя аўтаматычна будзе працаваць правільна – менавіта так, як ёй і належыць.
Абалонка і праграмная структура рэпазітара функцый Wolfram настроены такім чынам, каб кожны мог унесці свой уклад у агульную справу максімальна простым і зручным для яго шляхам - па сутнасці, проста запоўніўшы тэкставы файл блакнота (з пашырэннем nb) WL. Убудаваныя аўтаматычныя функцыі дазваляюць выконваць праверку новых функцый, якія дадаюцца ў рэпазітар, з мэтай іх гарантаванай інтэграцыі ў мову. Наша кампанія робіць стаўку на шырокае кола карыстальнікаў, якія могуць інтэграваць свае функцыі ў мову, а не на вялікія складанасці новых функцый - і хоць тут рэалізаваны працэс праверкі, мы не настойваем на чым-то накшталт карпатлівага аналізу канструкцыі або строгіх стандартаў паўнаты і надзейнасці новых функцый карыстальнікаў, у адрозненне ад больш дбайных праверак функцый, убудаваных у ядро ​​мовы, якія мы ўжываем.

У дадзеным падыходзе існуе мноства кампрамісаў і дэталяў, але наша мэта складаецца ў тым, каб аптымізаваць рэпазітар функцый Wolfram як для выгоды карыстачоў, так і для таго, каб новыя функцыі карыстачоў давалі адчувальны фундуш у развіццё мовы. Па меры росту, я не сумняваюся, што нам прыйдзецца вынаходзіць новыя метады апрацоўкі і праверкі ўбудавальных у рэпазітар функцый, і гэта не ў апошнюю чаргу для арганізацыі вялікай колькасці функцый і пошуку тых, якія патрэбныя карыстачам. Аднак, не можа не абнадзейваць тое, што выбраны намі шлях - гэта добры пачатак. Я ўласнаручна дадаў некалькі функцый у першапачатковую базу. Многія з іх заснаваныя на кодзе, які я асабіста распрацоўваў на працягу дастаткова доўгага часу. І я затраціў усяго некалькі хвілін, каб пераслаць іх у рэпазітар. Зараз, калі яны знаходзяцца ў рэпазітары, я магу нарэшце - неадкладна і ў любы час выкарыстоўваць дадзеныя функцыі па меры неабходнасці, не турбуючыся пры гэтым аб пошуку файлаў, загрузцы пакетаў і т. п.

Павышэнне эфектыўнасці пры зніжэнні затрат

Яшчэ да з'яўлення Інтэрнэту існавалі спосабы абменьвацца кодам Wolfram Language (нашым першым буйным цэнтралізаваным праектам быў MathSource, створаны для Mathematica ў 1991 годзе на базе CD-ROM і да т. п.). Безумоўна, прапанаваны да рэалізацыі падыход на базе рэпазітара функцый Wolfram з'яўляецца больш магутным і надзейным сродкам для рэалізацыі вышэйпералічаных задач.

Больш за 30 гадоў наша кампанія старанна працавала над падтрыманнем цэласнасці структуры мовы Wolfram, і гэта вельмі важна для таго, каб мова Wolfram стала не проста мовай праграмавання, але і паўнавартаснай вылічальнай мовай. І такім чынам, сутнасць падыходу да рэалізацыі рэпазітара функцый Wolfram – гэта выкарыстанне адзінага падыходу да праграмавання і распрацоўцы новых функцый, якія паслядоўна дадаюцца і ўпісваюцца ў рамкі мовы для магчымасці яе развіцця і сумеснай эвалюцыі.

У структуры рэалізацыі кожнай функцыі адбываюцца розныя вылічальныя працэсы. Тут варта адзначыць, што пры гэтым неабходна, каб для карыстача функцыя мела выразны і аднастайны выгляд і навочную чытальнасць. У дадзеным кантэксце убудаваныя функцыі мовы Wolfram Language прадстаўлены больш за 6000 паслядоўных прыкладаў таго, як належыць правільна праграмаваць функцыі (гэта нашы відэаагляды па праграмаванні ў прамым эфіры, якія ўключаюць сотні гадзін працэсу стварэння тыпавых праграм). Гэты падыход у канчатковым выніку дазваляе рабіць рэпазітар функцый Wolfram здольным да добрай працы, менавіта структурны характар ​​мовы Wolfram Language з яго вялікай колькасцю дадатковых і разнастайных бібліятэк, якія ўжо ўбудаваны ў мову. Напрыклад, калі ў Вас ёсць функцыя, якая апрацоўвае выявы, або разрэджаныя масівы, Або малекулярныя структуры, а таксама геаграфічныя дадзеныя ці нейкія іншыя - у мове ўжо існуе іх узгодненае сімвальнае ўяўленне, і дзякуючы гэтаму Ваша функцыя адразу ж становіцца сумяшчальнай з іншымі функцыямі ў мове.

Стварэнне рэпазітара, які б сапраўды добра працаваў, з'яўляецца цікавай задачай мета-праграмавання. Напрыклад, лішак абмежаванняў у праграме не зможа дазволіць атрымаць патрабаваную уніфікацыю і ўніверсальнасць працы алгарытму. Гэтак жа, як і пры недастатковай колькасці функцыянальных абмежаванняў Вы не зможаце рэалізаваць дастаткова правільную паслядоўнасць выканання алгарытму. Некалькі папярэдніх прыкладаў рэалізацыі кампрамісу дадзеных падыходаў, рэалізаваных нашай кампаніяй, спрацавалі дастаткова стабільна - гэта: Праект Вальфрам Дэманстрацыі, запушчаны ў 2007 годзе і цяпер які працуе ў інтэрактыўным рэжыме ў сетцы Інтэрнэт і ўтрымоўвалы больш 12000 карыстацкіх інтэрактыўных дэманстрацый. У базе дадзеных Wolfram маецца больш за 600 гатовых баз дадзеных, якія можна выкарыстоўваць у мове Wolfram Language, а сховішча нейронавых сетак Wolfram папаўняецца новымі нейронавымі сеткамі практычна кожны тыдзень (цяпер іх ужо 118) і яны адразу ж падключаюцца праз функцыю NetModel у мове Wolfram Language.

Усе вышэйпералічаныя прыклады маюць прынцыповую асаблівасць - збіраюцца ў праект аб'екты і функцыі маюць вельмі высокую ступень структуравання і размеркавання працэсаў. Безумоўна, дэталізацыя структуры таго, што з'яўляецца дэманстрацыяй ці нейронавай сеткай ці нечым іншым, могуць моцна адрознівацца, але фундаментальная структура для любога бягучага рэпазітара заўсёды застаецца нязменнай. Дык якое ж Ваша меркаванне, паважаны карыстач, з нагоды стварэнні такога рэпазітара, які дадае пашырэнні да мовы Wolfram? Мова Wolfram Language спраектаваны такім чынам, каб быць надзвычай гнуткім, таму яго можна пашыраць і відазмяняць любым спосабам. Дадзеная акалічнасць з'яўляецца надзвычай важным для магчымасці хутка ствараць розныя буйнамаштабныя праграмныя праекты на мове Wolfram Language. Тут трэба адзначыць, што з ростам гнуткасці мовы непазбежна ўзрасце і кошт праектаў, якія рэалізуюцца на такой мове. Гэта адбываецца па чынніку таго, што чым больш карыстач ужывае такую ​​мову, тым больш ён атрымлівае вылучанай функцыянальнасці, але не варта забываць, што дадзены падыход можа мець і негатыўныя бакі ў частцы немагчымасці забеспячэння паслядоўнай узгодненасці праграмных модуляў.

У традыцыйных мовах праграмавання існуе распаўсюджаная праблема з бібліятэкамі - калі Вы, напрыклад, выкарыстоўваеце адну бібліятэку, то код працуе карэктна, але, калі Вы паспрабуеце выкарыстоўваць некалькі бібліятэк, няма гарантыі, што яны будуць карэктна ўзаемадзейнічаць адна з адной. Таксама ў традыцыйных мовах праграмавання - у адрозненне ад паўнавартаснай мовы вылічэнняў - адсутнічаюць магчымасці гарантавана кантраляваць наяўнасць узгодненых убудаваных уяўленняў, для якіх-небудзь функцый або тыпаў дадзеных, акрамя іх базавых структур. Але, па сутнасці, праблема яшчэ большая, чым уяўляецца на першы погляд: калі хтосьці будуе буйнамаштабную вертыкаль функцыянальнасці, то без вялікіх затрат па цэнтралізаваным праграмаванні праекта, якія мы ўклалі ў мову Wolfram, немагчыма дасягнуць узгодненасці. Таму важным з'яўляецца тое, каб усе праграмныя модулі заўсёды карэктна працавалі супольна.

Такім чынам, ідэя рэпазітара функцый Wolfram складаецца ў тым, каб пазбегнуць праблемы, агучанай вышэй - проста дадаючы пашырэнні да мовы ў выглядзе параўнальна невялікіх элементаў праграмнага кода пасродкам асобных функцый, распрацоўка якіх у выглядзе ўзгодненых модуляў з'яўляецца прасцейшай задачай. Пры гэтым існуюць асаблівасці праграмавання, якія немагчыма зрабіць зручнымі пры дапамозе асобных функцый (і наша кампанія ў найбліжэйшай будучыні збіраецца выпусціць аптымізаваны праграмны алгарытм для дапамогі ў рэалізацыі буйнамаштабных праграмных пакетаў). Аднак, на базе ўжо убудаваных у мову Wolfram Language функцый, існуе мноства магчымасцяў для праграмавання, якія рэалізаваны на базе асобных функцый. Тут думка складаецца ў тым, каб пры параўнальна невялікіх праграмных высілках можна было стварыць шэраг новых і вельмі карысных функцый, якія забяспечаць дастатковую ўзгодненасць праекту, пры гэтым яны будуць добра ўзгоднены сябар з сябрам, а таксама, акрамя гэтага, яны будуць мець магчымасць лёгка і шырока выкарыстоўвацца ў мове ў далейшым.

Гэты падыход, безумоўна, з'яўляецца кампрамісам. Пры ўмове рэалізацыі больш маштабнага пакета можна ўявіць сабе зусім новы свет функцыянальнасці, які стане надзвычай магутным і карысным. У выпадку, калі існуе неабходнасць атрымліваць новыя функцыянальныя магчымасці, якія будуць упісвацца ва ўсё астатняе, але пры гэтым Вы не гатовыя марнаваць вялікія намаганні на распрацоўку праекта, гэта, на жаль, можа прывесці да зніжэння маштабу Вашага праекта. Ідэя рэпазітара функцый Wolfram складаецца ў тым, каб забяспечыць функцыянальнасцю вызначальную частку праекту, дадзены падыход дазволіць дадаць магутны функцыянал, разам з тым, спрашчаючы падтрыманне добрай узгодненасці праекту праграмавання.

Дапамога пры даданні карыстацкіх функцый у рэпазітар функцый

Спецыялісты нашай кампаніі ўпарта працавалі над тым, каб зрабіць свой уклад у функцыі рэпазіторыя Wolfram дастаткова лёгкім для карыстальнікаў. На працоўным стале (ужо ў версіі 12.0), Вы можаце проста паслядоўна перайсці па ўкладках асноўнага меню: File > New > RepositoryItem > Function Repository Item і Вы атрымаеце «Definition Notebook» (праграмна ўнутры працоўнага асяроддзя. Вы можаце таксама выкарыстоўваць функцыю аналаг — CreateNotebook["FunctionResource"]):

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Існуюць два асноўныя дзеянні, якія Вы павінны будзеце выканаць: па-першае, фактычна запісаць код Вашай функцыі і, па-другое, запісаць дакументацыю, якая ілюструе, як павінна працаваць Ваша функцыя.
Націсніце кнопку "Адкрыць узор" уверсе, каб убачыць прыклад таго, што Вам трэба зрабіць:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Фактычна, Вы спрабуеце стварыць нешта падобнае на убудаваную функцыю ў мове Wolfram Language. За выключэннем таго, што яна можа рабіць нешта значна больш канкрэтнае, чым убудаваная функцыя. Пры гэтым чаканні адносна яе паўнаты і надзейнасці будуць нашмат ніжэйшыя.
Вам неабходна задаць імя для Вашай функцыі, якое будзе адпавядаць прынцыпам наймення функцый Wolfram Language. Акрамя гэтага, Вам спатрэбіцца распрацаваць дакументацыю для Вашай функцыі, па аналогіі з убудаванымі функцыямі мовы. Больш падрабязна я раскажу пра гэта пазней. Цяпер проста звернеце ўвагу на тое, што ў шэрагу кнопак у верхняй частцы файла нататніка азначэнняў ёсць кнопка «Рэкамендацыі па стылі», у якой тлумачыцца, што рабіць, і кнопка "Інструменты", якая дае інструментар для фарматавання дакументацыі Вашай функцыі.
Калі Вы пераканаецеся, што ўсё запоўнена належным чынам і Вы гатовыя, націсніце кнопку "Check" ("Праверыць"). Зусім нармальным з'яўляецца тое, што Вы яшчэ не разабраліся ва ўсіх дэталях. Таму функцыя "Check" будзе аўтаматычна выконвацца і рабіць шмат праверак стылю і ўзгодненасці. Часта яна адразу ж прапануе Вам пацвердзіць і прыняць выпраўленні (Напрыклад: «Гэты радок павінен сканчацца двукроп'ем», і яна прапануе ўвесці двукроп'е). Часам яна папросіць Вас дадаць ці змяніць нешта самастойна. Мы будзем увесь час дадаваць новыя магчымасці да аўтаматычнай функцыянальнасці кнопкі «Check», але ў асноўным яго мэта складаецца ў тым, каб гарантаваць — усё, што вы адпраўляеце ў рэпазітар функцый, ужо сапраўды адпавядае як мага большай колькасці рэкамендацый па стылі

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Такім чынам, пасля запуску "Check" вы можаце выкарыстоўваць "Preview" ("Прадпрагляд"). "Preview" стварае папярэдні прагляд старонкі дакументацыі, якую Вы вызначылі для сваёй функцыі. Вы таксама можаце стварыць папярэдні прагляд для файла, створанага на Вашым кампутары або для файла, які знаходзіцца ў хмарным сховішчы. Калі Вас, па нейкіх прычынах, не задавальняе тое, што Вы ўбачыце ў папярэднім праглядзе, проста вярніцеся назад і выканайце неабходныя выпраўленні, а затым зноў націсніце кнопку Preview.
Цяпер Вы гатовыя размясціць сваю функцыю ў рэпазітары. Кнопка Deploy дае Вам чатыры варыянты дзеянняў:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

На дадзеным кроку важным з'яўляецца тое, што Вы можаце адправіць сваю функцыю ў рэпазітар функцый Wolfram, для таго каб яна была даступная любому карыстачу. Пры гэтым Вы таксама можаце размясціць сваю функцыю для абмежаванай колькасці карыстальнікаў. Напрыклад, Вы можаце стварыць функцыю, размешчаную лакальна на Вашым кампутары, такім чынам, каб яна была даступная, калі Вы выкарыстоўваеце дадзены пэўны кампутар. Ці Вы можаце размясціць яе ў сваёй хмарнага ўліковага запісу, Каб яна была даступная Вам, калі Вы падключаны да воблака. Вы таксама можаце публічна размясціць (разгарнуць) функцыю праз свой хмарны ўліковы запіс. Пры гэтым яе не будзе ў цэнтральным рэпазітары функцый Wolfram, але вы зможаце даць каму-небудзь URL-адрас, які дазволіць ім атрымаць Вашу функцыю з Вашага ўліковага запісу. (У будучыні мы таксама будзем падтрымліваць цэнтральныя рэпазітары ў маштабах усёй нашай кампаніі).

Такім чынам, дапусцім, Вы жадаеце фактычна перадаць сваю функцыю ў базу ведаў функцый Wolfram. Для гэтага Вы націскаеце кнопку «Адправіць» у рэпазітар. Дык што ж тады адбываецца ў дадзены момант? Ваша заяўка адразу ж трапляе ў чаргу для разгляду і зацвярджэння нашай спецыяльнай камандай куратараў.

Па меры таго, як Ваша заяўка праходзіць праз працэс узгаднення (які звычайна займае некалькі дзён), Вы будзеце атрымліваць паведамленні аб стане яе разгляду, а таксама, магчыма, прапановы па яе далейшым выкарыстанні. Але як толькі ваша функцыя будзе ўхвалена, яна будзе неадкладна апублікавана ў рэпазітары функцый Wolfram і стане даступнай для любога выкарыстання. (І гэта будзе адлюстроўвацца ў дайджэстах навін новых функцый і г.д.)

Што ж павінна быць у сховішчы?

Варта адзначыць, што ў нашай кампаніі вельмі высокія стандарты паўнаты, надзейнасці і агульнай якасці, з 6000 + функцый, якія мы ўжо ўбудавалі ў мову Wolfram за апошнія 30 з лішнім гадоў усё адпавядаюць вышэйпералічаным патрабаванням. Мэта рэпазітара функцый Wolfram складаецца ў тым, каб выкарыстаць усю структуру і функцыянальныя магчымасці, якія ўжо існуюць у мове Wolfram Language, для таго каб дадаць як мага больш значна лягчэйшых функцый (гэта значыць функцый з больш высокай прадукцыйнасцю).

Безумоўна, функцыі ў рэпазітары функцый Wolfram павінны адпавядаць прынцыпам распрацоўкі мовы Wolfram Language – каб яны маглі паўнавартасна ўзаемадзейнічаць з іншым функцый і чаканням карыстачоў адносна таго, як функцыі належыць правільна працаваць. Аднак пры гэтым функцыі не павінны мець аднолькавую паўнату ці надзейнасць.

Ва ўбудаваных функцыях мовы Wolfram, мы ўпарта працуем над тым, каб зрабіць праграмныя функцыі як мага больш агульнымі. Пры гэтым пры знаходжанні ў рэпазітары функцый Wolfram няма нічога дрэннага ў тым, каб у яго патрапіла функцыя, якая проста апрацоўвае нейкі вельмі пэўны, але карысны выпадак. Напрыклад, функцыя SendMailFromNotebook можа атрымліваць файлы ў адным вызначаным фармаце і ствараць пошту адным вызначаным спосабам. PolygonalDiagram стварае дыяграмы толькі з пэўнымі кветкамі і маркіроўкай і т. д.

Яшчэ адным момантам, звязаным з убудаванымі функцыямі, з'яўляецца тое, што наша кампанія прыкладае ўсе намаганні для апрацоўкі ўсіх нетыпавых выпадкаў, для правільнай апрацоўкі некарэктнага ўводу і гэтак далей. У рэпазітары функцый зусім нармальным з'яўляецца выпадак, калі ў ім існуе спецыяльная функцыя, якая апрацоўвае асноўныя выпадкі рашэння задачы і ігнаруе ўсе астатнія.

Відавочным з'яўляецца той факт, што лепш мець функцыі, якія робяць больш, і робяць гэта лепш, але аптымізацыя для рэпазітара функцый - у адрозненне ад убудаваных функцый мовы Wolfram - павінна мець больш функцый, перавязаных з вялікай колькасцю функцый, чым паглыбляцца ў працэсы рэалізацыі кожнай канкрэтнай функцыі.

Цяпер давайце разгледзім прыклад тэставання функцый у рэпазітары. Чаканні ўзгодненасці для такіх функцый натуральна значна ніжэйшыя, чым для ўбудаваных функцый мовы. Гэта тым больш актуальна ў выпадках, калі функцыі залежаць ад вонкавых рэсурсаў, такіх як API, важна стала праводзіць паслядоўныя тэсты, што аўтаматычна адбываецца ўсярэдзіне алгарытмаў праверкі. У файле nb вы можаце відавочна пазначыць азначэнні (у падзеле «Дадатковая інфармацыя») і задаць гэтулькі тэстаў, вызначаных альбо радкамі ўводу і высновы, альбо поўнымі знакавымі аб'ектамі тыпу VerificationTest, колькі палічыце патрэбным. Акрамя таго, сістэма ўвесь час спрабуе ператварыць прыведзеныя Вамі прыклады дакументацыі ў працэс праверкі (пры гэтым часам гэта можа быць даволі рэсурсаёміста, напрыклад, для функцыі, вынік якой залежыць ад выпадковых лікаў ці часу сутак).

У выніку ў рэпазітары функцый будзе цэлы шэраг складанасцей рэалізацыі. Некаторыя будуць проста адным радком кода, іншыя могуць уключаць тысячы ці дзясяткі тысяч радкоў, верагодна з выкарыстаннем мноства дапаможных функцый. У якіх выпадках варта дадаць функцыю, для вызначэння якой патрабуецца вельмі мала кода? У прынцыпе, калі для функцыі ёсць добрая мнеманічная назва, Якое карыстальнікі ахвотна зразумелі б, убачыўшы гэта ў частцы кода, то яе ўжо можна дадаць. У адваротным выпадку, верагодна, лепш проста зноў дапісаць да вашай праграмы код кожны раз, у тых выпадках, калі вам трэба яго выкарыстоўваць.

Асноўная мэта рэпазітара функцый (як вынікае з яго назвы) складаецца ў тым, каб уводзіць у функцыянал мовы новыя функцыі. Калі Вы хочаце дадаць новыя дадзеныя або новыя сутнасці, выкарыстоўвайце рэпазітар Wolfram Data. Але што рабіць, калі Вы хочаце ўвесці новыя віды аб'ектаў для Вашых вылічэнняў?

Насамрэч ёсць два шляхі. Магчыма, Вы захочаце ўвесці новы тып аб'екта, які будзе выкарыстоўвацца ў новых функцыях у рэпазітары функцый. І ў гэтым выпадку Вы заўсёды можаце проста запісаць яго сімвальнае ўяўленне і выкарыстоўваць яго пры ўводзе або выснове функцый у рэпазітары функцый.

Але што рабіць, калі Вы хочаце ўявіць аб'ект, а затым вызначыць, праз існуючыя функцыі ў мове Wolfram Language, якія павінны працаваць разам з ім? Для гэтага ў Wolfram Language заўсёды быў лёгкі механізм, які завецца UpValues. З некаторымі абмежаваннямі (асабліва для функцый, якія не могуць ацэньваць свае аргументы), рэпазітар функцый дазваляе Вам проста ўявіць функцыю і вызначыць значэння для яе. (Каб павысіць чаканне ўзгодненасці пры стварэнні новай важнай канструкцыі, цалкам інтэграванай усюды ў мове Wolfram Language, – гэта, як правіла, вельмі важная працэдура, якая не можа быць дасягнута толькі з дапамогай павышэння кошту праекта і гэта тое, што наша кампанія робіць у рамках праектаў доўгатэрміновага развіцця мовы, дадзеная задача не з'яўляецца мэтай, якая ставіцца ў рамках развіцця рэпазітара).

Такім чынам, што ж можа быць у кодзе функцый у рэпазітары функцый? Усё, што ўбудавана ў мову Wolfram Language, вядома (прынамсі, калі гэта не ўяўляе пагрозы для бяспекі і працаздольнасці самой праграмы, як вылічальнай асяроддзя) таксама як і любая функцыя з рэпазітара функцый. Пры гэтым існуюць і іншыя магчымасці функцыянавання: функцыя ў рэпазітары функцый можа выклікаць API, альбо ў Wolfram Cloud, Альбо з іншай крыніцы. Вядома, ёсць некаторыя рызыкі, звязаныя з гэтым. З прычыны таго, што адсутнічаюць гарантыі, што API не зменіцца, а функцыя ў сховішча функцый пры гэтым перастане працаваць. Для выяўлення падобных праблем існуе нататка на старонцы дакументацыі (у падзеле «Патрабаванні») для любой функцыі, якая абапіраецца не толькі на ўбудаваную функцыянальнасць Wolfram Language. (Вядома, калі гаворка ідзе аб рэальных дадзеных, могуць быць праблемы нават з такой функцыянальнасцю - таму што рэальныя дадзеныя аб свеце пастаянна мяняюцца, а часам нават мяняюць іх вызначэння і структура.)

Ці павінен увесь код для рэпазітара функцый Wolfram быць напісаны на мове Wolfram? Вызначана, код усярэдзіне вонкавага API не павінен быць напісаны на мове Wolfram, што ўласна нават не робіць код мовы. Насамрэч, калі Вы знойдзеце функцыю практычна на любой вонкавай мове ці бібліятэцы, вы зможаце стварыць абалонку, якая дазволіць выкарыстаць яе ў рэпазітары функцый Wolfram. (Звычайна для гэтага варта выкарыстоўваць убудаваныя функцыі ExternalEvaluate або ExternalFunction у кодзе мовы Wolfram.)

Дык які ж сэнс рабіць гэта? У сутнасці, гэта дазваляе выкарыстоўваць усю інтэграваную сістэму Wolfram Language і ўвесь яе уніфікаваны набор праграмных магчымасцяў. У выпадку, калі Вы атрымліваеце базавую рэалізацыю з знешняй бібліятэкі або мовы, то затым Вы можаце выкарыстоўваць багатую сімвальную структуру мовы Wolfram Language для стварэння зручнай функцыі верхняга ўзроўню, якая дазваляе карыстальнікам дастаткова лёгка выкарыстоўваць любую ўжо рэалізаваную функцыянальнасць. Прынамсі, гэта павінна мець магчымасць рэалізацыі ў ідэальным міры, дзе існуюць усе складовыя элементы загрузкі бібліятэк і т. п., у дадзеным выпадку яны будуць аўтаматычна вырашацца з дапамогай Wolfram Language. (Варта адзначыць, што на практыцы могуць узнікнуць праблемы з наладай знешніх моў у канкрэтнай кампутарнай сістэме, а ў хмарным сховішчы могуць узнікнуць дадатковыя праблемы з бяспекай).

Дарэчы, калі вы першы раз аналізуеце тыпавыя знешнія бібліятэкі, яны часта здаюцца занадта складанымі, каб іх можна было ахапіць толькі некалькімі функцыямі, але ў многіх выпадках большасць складанасці ўзнікае з-за стварэння інфраструктуры, неабходнай для бібліятэкі, і ўсіх функцый для яе падтрымкі. . Аднак пры выкарыстанні мовы Wolfram Language, інфраструктура, як правіла, ужо ўбудавана ў пакеты, і таму не трэба падрабязна раскрываць усе гэтыя функцыі падтрымкі, а трэба толькі стварыць функцыі для некалькіх "самых верхніх" функцый, арыентаваных на дадатак у бібліятэцы.

"Экасістэма" базы ведаў

Калі Вы напісалі функцыі, якія выкарыстоўваеце ўвесь час, то адпраўце іх у рэпазітар функцый Wolfram! Калі з гэтага ў выніку не атрымаецца нешта большае (развіццё мовы), то і тады Вам будзе значна зручней выкарыстоўваць функцыі для асабістага карыстання. Аднак лагічна выказаць здагадку, што, калі Вы выкарыстоўваеце функцыі ўвесь час, магчыма і іншыя карыстачы таксама знойдуць іх карыснымі.

Натуральна, што Вы можаце апынуцца ў сітуацыі, калі вы не маеце магчымасці - ці не хочаце - дзяліцца сваімі функцыямі або ў выпадку атрымання доступу да прыватных інфармацыйных рэсурсаў. Нават у такіх выпадках Вы можаце проста разгарнуць функцыі ў сваім уласным уліковым запісе ў воблаку, указаўшы правы доступу да іх. (Калі ў Вашай арганізацыі ёсць прыватнае воблака Wolfram Enterprise, то неўзабаве яно зможа размясціць уласны прыватны рэпазітар функцый, які можна адміністраваць з Вашай арганізацыі і ўсталёўваць прымусовы прагляд уяўленняў ці не для іншых карыстачоў.)

Функцыі, якія Вы адпраўляеце ў рэпазітар функцый Wolfram, не абавязкова павінны быць ідэальнымі; яны проста павінны быць карыснымі. Гэта крыху падобна на раздзел "Памылкі" ў класічнай дакументацыі Unix - у "Раздзеле азначэнняў" ёсць раздзел "Нататкі аўтара", у якім Вы можаце апісаць абмежаванні, праблемы і т. п., аб якіх Вы ўжо ведаеце аб сваёй функцыі. Акрамя таго, калі вы адпраўляеце сваю функцыю ў рэпазітар, Вы можаце дадаць нататкі да адпраўкі, якія будуць прачытаныя спецыяльнай камандай куратараў.

Пасля публікацыі функцыі яе старонка заўсёды мае дзве спасылкі ўнізе: «Адправіць паведамленне аб гэтай функцыі»І«Абмеркаваць у супольнасці Wolfram». Калі Вы прымацоўваеце пазнаку (напрыклад, паведамляць мне пра памылкі), Вы можаце ўсталяваць сцяжок, у якім гаворыцца, што вы жадаеце, каб Ваша паведамленне і кантактная інфармацыя былі перададзены аўтару функцыі.

Часам узнікае неабходнасць проста выкарыстоўваць функцыі з рэпазітара функцый Wolfram, напрыклад убудаваныя функцыі, не зазіраючы ў іх код. Аднак калі вы жадаеце "зазірнуць унутр", у верхняй частцы заўсёды ёсць кнопка "Нататнік". Націсніце на яе, і Вы атрымаеце ўласную копію арыгінальнага сшытка вызначэння, якая была адпраўлена ў рэпазітар функцый. Часам вы можаце проста выкарыстоўваць яе ў якасці прыкладу для сваіх патрэб. Пры гэтым Вы таксама можаце распрацаваць Вашу ўласную мадыфікацыю гэтай функцыі. Магчыма, Вы захочаце размясціць гэтыя знойдзеныя Вамі функцыі з рэпазітара на сваім кампутары або ў сваім уліковым запісе ў Вашым хмарным сховішчы тлі, можа быць, Вы захочаце адправіць іх у базу ведаў функцый, магчыма, у якасці палепшанай, дапоўненай версіі зыходнай функцыі.

У будучыні мы плануем падтрымліваць разгалінаванне ў стылі Git для рэпазітараў функцый, але зараз мы імкнемся зрабіць гэта прасцей, і ў нас заўсёды ёсць толькі адна агульнапрынятая версія кожнай функцыі, убудаванай у мову. Часцей за ўсё (калі распрацоўшчыкі не адмаўляюцца ад падтрымання распрацаваных імі функцый і адказваюць на паведамленні карыстальнікаў), першапачатковы аўтар функцыі атрымлівае кантроль над абнаўленнямі да яе і адпраўляе новыя версіі, якія затым правяраюцца і, калі праходзяць працэс праверкі, публікуюцца ў мове.

Разгледзім пытанне, як працуе "версійнасць" распрацаваных функцый. Прама цяпер, калі Вы выкарыстоўваеце функцыю з рэпазітара функцый, яе вызначэнне будзе ўвесь час захоўвацца на вашым кампутары (ці ў вашым хмарным уліковым запісе, калі вы выкарыстоўваеце воблака). Калі з'явілася новая версія функцыі, то пры наступным яе выкарыстанні вы атрымаеце паведамленне, якое паведамляе Вас пра гэта. І калі Вы жадаеце абнавіць функцыю да новай версіі, Вы можаце зрабіць гэта з дапамогай каманды ResourceUpdate. («Функцыянальны BLOB-аб'ект» насамрэч захоўвае больш інфармацыі пра версіі, і ў будучыні мы плануем зрабіць гэта больш даступным для нашых карыстальнікаў.)

Адной з выдатных асаблівасцяў рэпазітара функцый Wolfram з'яўляецца тое, што любая праграма Wolfram Language у любым месцы можа выкарыстоўваць функцыі з яго. Калі праграма з'яўляецца ў блакноце, часта бывае зручна адфарматаваць функцыі рэпазітара ў выглядзе функцый лёгка чытэльных "функцыянальных двайковых аб'ектаў" (магчыма, з адпаведным наборам версій).

Вы заўсёды можаце звярнуцца да любой функцыі рэпазітара функцый, выкарыстоўваючы тэкставую ResourceFunction [...]. І гэта вельмі зручна, калі Вы пішаце код ці сцэнары непасрэдна для Wolfram Engine, напрыклад, з дапамогай IDE або тэкставага рэдактара кода (варта асабліва адзначыць, што рэпазітар функцый цалкам сумяшчальны з Free Wolfram Engine для распрацоўшчыкаў).

Як гэта працуе?

Усярэдзіне функцый у рэпазітары Wolfram гэта магчыма з выкарыстаннем сапраўды такі ж сістэмы рэсурсаў базы, як і ва усіх іншых нашых існуючых рэпазітарах (сховішча дадзеных, Neural Net Repository, калекцыя дэманстрацыйных праектаў і г.д.), як і ўсе астатнія сістэмныя рэсурсы Wolfram, ResourceFunction у канчатковым рахунку заснаваны на функцыі ResourceObject.

Разгледзім ResourceFunction:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Унутры Вы можаце ўбачыць некаторую інфармацыю, выкарыстоўваючы функцыя інфармацыя:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Як працуе настройка функцыі рэсурсу? Самы просты - гэта чыста лакальны выпадак. Вось прыклад, які бярэ функцыю (у дадзеным выпадку проста чыстую функцыю) і вызначае яе як функцыю рэсурсу для дадзенага сеансу працы ў праграме:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Пасля таго як Вы зрабілі азначэнне, вы можаце выкарыстоўваць функцыю рэсурсу:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Звярніце ўвагу, што ў гэтым BLOB-аб'екце функцыі ёсць чорны значок Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram. Гэта азначае, што BLOB-функцыя адносіцца да функцыі рэсурсаў у памяці, вызначанай для бягучага сеансу. Для функцыі рэсурсу, якая ўвесь час захоўваецца на Вашым кампутары або ў хмарным уліковым запісе, ёсць шэры значок Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram. А для афіцыйнай функцыі рэсурсу ў рэпазітары функцый Wolfram ёсць аранжавы значок. Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram.

Такім чынам, што адбываецца, калі вы выкарыстоўваеце меню "Разгортванне" у нататніку азначэння? Па-першае, ён бярэ ўсе азначэнні ў блакноце і з іх стварае сімвалальны. ResourceObject). (А калі Вы выкарыстоўваеце тэкставую IDE або праграму, то тады Вы таксама можаце відавочна стварыць ResourceObject)

Лакальнае разгортванне функцыі з рэпазітара на Вашым кампутары выконваецца пры дапамозе каманды Лакальны кэш для аб'екта рэсурсу, каб захаваць яго як LocalObject у Вашай файлавай сістэме. Разгортванне ў хмарным уліковым запісе выконваецца пры дапамозе каманды CloudDeploy для аб'екта рэсурсу, а публічнае разгортванне ў воблаку - CloudPublish. Ва ўсіх выпадках ResourceRegister таксама выкарыстоўваецца для рэгістрацыі імя функцыі рэсурсу, так што ResourceFunction["name"] будзе працаваць.

Калі націснуць кнопку Submit для Function Repository, тое, што пад ім адбываецца ResourceSubmit выклікаецца на аб'ект рэсурса. (І калі Вы выкарыстоўваеце тэкставы інтэрфейс уводу, Вы таксама можаце выклікаць ResourceSubmit напрамую.)

Па змаўчанні адпраўка выконваецца пад імем, злучаным з вашым ідэнтыфікатарам Wolfram ID. Але калі вы адпраўляеце заяўку ад імя групы распрацоўшчыкаў ці арганізацыі, Вы можаце устанавіць асобны ідэнтыфікатар выдаўца і замест гэтага выкарыстоўваць яго ў якасці імя для ўзаемадзеяння з Вашымі ўяўленнямі.

Пасля таго, як Вы адправілі любую Вашу функцый у базу ведаў функцый, яно патрапіць у чаргу на праверку. Калі Вы атрымаеце каментарыі ў адказ, яны звычайна будуць у форме тэкставага файла з дададзенымі дадатковымі «вочкамі каментароў». Вы заўсёды можаце праверыць статус сваёй заяўкі, зайшоўшы на партал удзельніка сістэмы рэсурсаў. Але як толькі Ваша функцыя будзе адобрана, Вы будзеце апавешчаныя (па электроннай пошце), і Ваша функцыя будзе размешчана ў рэпазітары функцый Wolfram.

Некаторыя тонкасці ў працы

На першы погляд можа скласціся ўражанне, што можна проста ўзяць нататнік вызначэння і даслоўна змясціць яго ў рэпазітар функцый, аднак, на самай справе ёсць даволі шмат тонкасцяў - і для іх апрацоўкі патрабуецца выканаць даволі складанае мета-праграмаванне, сімвальнае апрацоўваючы як код, які вызначае функцыю , так і сам Нататнік вызначэння. Вялікая частка гэтага адбываецца ўсярэдзіне, гэта значыць "за кадрам", але гэта можа мець некаторыя наступствы, якія варта зразумець, калі Вы збіраецеся занесці свой фундуш у базу ведаў функцый.

Першая непасрэдная тонкасць: Калі Вы запаўняеце «Нататнік азначэнняў», Вы можаце проста спасылацца на сваю функцыю ўсюды, выкарыстоўваючы імя, падобнае MyFunction, якое выглядае як звычайнае імя для функцыі ў мове Wolfram Language, але для дакументацыі рэпазітара функцый гэта замяняецца ResourceFunction["MyFunction"] - гэта менавіта тое, што карыстачы фактычна будуць выкарыстоўваць пры працы з функцыяй.

Другая тонкасць: калі вы ствараеце функцыю рэсурсу з Нататніка вызначэння, то ўсе залежнасці, уцягнутыя ў вызначэнне функцыі, павінны быць зафіксаваны і відавочна ўключаны. Аднак каб гарантаваць, што азначэнні застаюцца модульнымі, трэба змясціць усё ва ўнікальнае прастора імёнаў. (Зразумела, што функцыі, якія робяць усё гэта, знаходзяцца ў рэпазітары функцый.)

Звычайна Вы ніколі не ўбачыце ніякіх слядоў працы кода, які выкарыстоўваецца для налады гэтай прасторы імёнаў. Але калі па нейкім чынніку Вы выклічце недавыкананы знак усярэдзіне вашай функцыі, тыя вы ўбачыце, што гэты знак знаходзіцца ва ўнутраным кантэксце функцыі. Аднак пры апрацоўцы нататніка вызначэння, па меншай меры, сімвал, які адпавядае самой функцыі, наладжваецца для найлепшага адлюстравання у выглядзе функцыянальнага BLOB, а не неапрацаванага сімвала ва ўнутраным кантэксце.

Рэпазітар функцый прызначаны для вызначэння новых функцый. І гэтыя функцыі могуць мець опцыі. Часта гэтыя параметры (напрыклад, Метад або Памер малюнка) будуць мець магчымасць выкарыстання для ўбудаваных функцый, а таксама для тых, для якіх ужо існуюць убудаваныя знакі. Але часам новай функцыі могуць запатрабавацца і новыя опцыі. Для таго каб захаваць модульнасць, неабходна, каб гэтыя параметры былі знакамі, вызначанымі ва ўнікальным унутраным кантэксце (ці нешта накшталт цэлых функцый рэсурсу, гэта значыць самі па сабе). Для прастаты рэпазітар функцый дазваляе задаваць новыя опцыі ў азначэннях у выглядзе радкоў. І для зручнасці карыстальніку, гэтыя вызначэння (пры ўмове, што яны выкарыстоўвалі OptionValue и OptionsPattern) таксама апрацоўваюцца так, што пры выкарыстанні функцый параметры могуць быць зададзены не толькі як радкі, але і як глабальныя знакі з тымі ж імёнамі.

Большасць функцый проста робяць тое, што яны павінны рабіць кожны раз, калі іх выклікаюць, але некаторыя функцыі маюць патрэбу ў ініцыялізацыі, перш чым яны змогуць працаваць у пэўным сеансе - і для вырашэння гэтай праблемы ў раздзеле "Вызначэнне" ёсць раздзел "Ініцыялізацыя".

Функцыі з рэпазітара могуць выкарыстоўваць іншыя функцыі, якія ўжо знаходзяцца ў рэпазітары, для таго каб наладзіць азначэнні для рэпазітара функцый, улучальныя дзве (ці больш) функцыі, якія спасылаюцца сябар на сябра неабходна разгарнуць іх у сваім сеансе працы з праграмай, каб Вы маглі спасылацца на іх як ResourceFunction["name"], Затым Вы можаце стварыць патрэбныя Вам камбінацыі гэтых функцый прыклады (не зразумела) і дадаць у рэпазітар новую функцыю на базе ўжо размешчаных раней. (або ўжо ці раней - абодва словы карава)

Перспектывы развіцця. Што павінна адбыцца, калі рэпазітар стане па-сапраўднаму вялікім?

Сёння мы толькі запускаем рэпазітар функцый Wolfram, але з часам мы чакаем, што ён(выдаліць) яго аб'ём і функцыянальнасць можа рэзка ўзрасці, і па меры яго росту развіцця ўзнікнуць з'явяцца розныя праблемы, якія, як мы ўжо здагадваемся прадбачым, могуць узнікнуць.

Першая праблема датычыцца імёнаў функцый і іх унікальнасці. Рэпазітар функцый спраектаваны такім чынам, што ў ім, як і для ўбудаваных функцый у мове Wolfram Language, можна спасылацца на любую дадзеную функцыю, проста паказаўшы яе імя. Але гэта непазбежна азначае, што імёны функцый павінны быць глабальна ўнікальнымі па ўсім рэпазітары, так што, напрыклад, у рэпазітары можа быць толькі адна ResourceFunction["MyFavoriteFunction"].

На першы погляд гэта можа падацца вялікай праблемай, але варта разумець, што гэта ў асноўным тая ж праблема, што і для такіх рэчаў, як інтэрнэт-дамены ці маркеры сацыяльных сетак. І справа ў тым, што ў сістэме проста неабходна мець рэгістратара – і гэта адна з роляў, якую наша кампанія будзе выконваць для базы ведаў функцый Wolfram. (Для прыватных версій рэпазітара іх рэгістратарамі могуць быць адміністратары.) Вядома, інтэрнэт-дамен можа быць зарэгістраваны, не маючы нічога на ім, але ў рэпазітары функцый імя функцыі можа быць зарэгістравана толькі пры наяўнасці фактычнага вызначэння функцыі.

Часткай нашай ролі ў кіраванні базай ведаў функцый Wolfram з'яўляецца забеспячэнне таго, каб імя, абранае для функцыі, было лагічным з улікам вызначэння функцыі, а таксама, каб яно адпавядала дамовам аб імёнах Wolfram Language. У нас ужо больш за 30 гадоў вопыту па назве убудаваных функцый на мове Wolfram Language, і наша каманда курыравання (куратараў?) перанясе гэты вопыт таксама ў рэпазітар функцый. Безумоўна, заўсёды ёсць выключэнні. Напрыклад, можа здацца больш пераважным мець кароткае імя для некаторай функцыі, але лепш "абараняцца" з даўжэйшым, больш пэўным імем, таму што пры гэтым менш шанцаў сутыкнуцца з тым, што хтосьці жадае зрабіць падобнае імя функцыі ў будучыні.

(Тут варта адзначыць, што простае даданне якога-небудзь тэга ўдзельніка для ўхілення неадназначнасці функцый не прынясе чаканага эфекту. Таму што, калі не настойваць на тым, каб заўсёды прысвойваўся тэг, трэба будзе вызначаць тэг па змаўчанні для любой зададзенай функцыі, а таксама вылучаць тэгі аўтара, што зноў запатрабуе глабальнай каардынацыі.)

Па меры росту аб'ёму базы ведаў функцый Wolfram адна з праблем, якія напэўна ўзнікнуць – гэта выяўляльнасць функцый, для гэтага ў сістэме прадугледжана функцыя пошуку (а файлы вызначэння могуць уключаць ключавыя словы і т. п.). Для ўбудаваных функцый у мове Wolfram Language у дакументацыі ёсць усе віды крыжаваных спасылак, якія дапамагаюць "рэкламаваць" функцыі. Функцыі ў рэпазітары функцый могуць спасылацца на ўбудаваныя функцыі. А як жа наадварот? Для гэтага мы збіраемся эксперыментаваць з рознымі схемамі, каб прадставіць функцыі рэпазітара на старонках дакументацыі для ўбудаваных функцый.

Для ўбудаваных функцый у мове Wolfram Language існуе так званы ўзровень выяўлення, які забяспечваецца сеткай «даведачных старонак», якія падаюць арганізаваныя спісы функцый, якія адносяцца да канкрэтных абласцей. Заўсёды складана належным чынам збалансаваць старонкі даведніка і па меры росту мовы Wolfram, старонкі даведніка часта павінны быць поўнасцю рэарганізаваны. Даволі проста змясціць функцыі з рэпазітара ў шырокія катэгорыі і нават паслядоўна разбіваць гэтыя катэгорыі, але значна больш каштоўна мець правільна арганізаваныя старонкі даведніка мовы. Пакуль не зразумела, як лепш за ўсё стварыць іх для ўсёй базы ведаў функцый. Напрыклад, CreateResourceObjectGallery у рэпазітары функцый кожны можа размясціць вэб-старонку, утрымоўвальную свае «выбары» з рэпазітара:

Wolfram Function Repository: адкрыты доступ да платформы для пашырэнняў мовы Wolfram

Рэпазітар функцый Wolfram настроены як сталае сховішча функцый, дзе любая функцыя ў ім заўсёды будзе працаваць. Безумоўна, могуць з'явіцца і новыя версіі функцый, і мы чакаем, што некаторыя функцыі са часам вядома састарэюць. Функцыі будуць працаваць, калі яны выкарыстоўваюцца ў праграмах, але іх старонкі дакументацыі будуць спасылацца на новыя, больш прасунутыя функцыі.

Рэпазітар функцый Wolfram прызначаны для хуткага атрымання новых функцый і вывучэння новых магчымасцяў выкарыстання мовы Wolfram. З вялікай дзеллю аптымізму мы спадзяемся, што частка таго, што было даследавана ў рэпазітары функцый, у канчатковым выніку будзе мець сэнс стаць убудаванымі часткамі асноўнай мовы Wolfram Language. За апошняе дзесяцігоддзе ў нас быў падобны набор функцый, якія былі першапачаткова прадстаўлены ў Wolfram | Alpha. І адзін з урокаў, атрыманых на падставе гэтага вопыту, заключаецца ў тым, што для дасягнення стандартаў якасці і ўзгодненасці, на якіх мы робім упор ва ўсім, што ўбудавана ў мову Wolfram, патрабуецца шмат працы, якая часцей за ўсё складаней, чым першапачатковыя намаганні па укараненню ідэі. Але нават у гэтым выпадку функцыя ў базе ведаў функцый можа служыць вельмі карысным доказам канцэпцыі будучай функцыі, якая ў выніку можа быць убудавана ў мову Wolfram.

Тут самае галоўнае тое, што функцыя ў рэпазітары функцый - гэта тое, што даступна кожнаму карыстачу для выкарыстання прама цяпер. Магчыма, убудаваная функцыя мовы можа быць нашмат лепш і прадукцыйней, але рэпазітар функцый дазволіць карыстачам адразу атрымаць доступ да ўсіх новых функцый. І, што асабліва важна, гэтая канцэпцыя дазваляе кожнаму дадаваць любыя свае новыя функцыі.

Раней у гісторыі мовы Wolfram гэта ідэя не зарабіла б так добра як цяпер, але на дадзеным этапе ў мову ўжо закладзена столькі намаганняў, а таксама настолькі глыбокае разуменне прынцыпаў праектавання мовы, што зараз бачыцца вельмі магчымым, каб вялікая супольнасць карыстальнікаў дадавала функцыі, якія будуць. падтрымліваць узгодненасць праекта, каб зрабіць іх карыснымі для шырокага кола карыстальнікаў.

У супольнасці карыстальнікаў Wolfram Language ёсць неверагодны дух таленту(?). (Зразумела, у гэтую супольнасць уваходзяць многія вядучыя спецыялісты ў галіне даследаванняў і распрацовак у самых розных галінах.) Спадзяюся, што рэпазітар функцый Wolfram прадаставіць эфектыўную платформу для раскрыцця і распаўсюджвання гэтага духу таленту. Толькі разам мы зможам стварыць нешта, што значна пашырыць вобласць, да якой можа быць прыменена вылічальная парадыгма мовы Wolfram.

За 30 з лішнім гадоў мы прайшлі доўгі шлях па мове Wolfram. Цяпер разам, давайце ж пойдзем яшчэ далей. Настойліва заклікаю ўсіх паважаных карыстальнікаў мовы Wolfram ва ўсім свеце, выкарыстоўваць у якасці платформы для гэтага функцыянальны рэпазітар, а таксама такі новы праграмны праект, як Free Wolfram Engine для распрацоўшчыкаў.

Крыніца: habr.com

Дадаць каментар