Прывітанне, Хабр! Уяўляю вашай увазе пераклад посту Стывена Вальфрама
Перадумовы заможнасці мовы Wolfram
Сёння мы стаім на парозе вялікіх здзяйсненняў разам з мовай праграмавання
Рэпазітар функцый (Function Repository) Wolfram – гэта тое, што стала магчымым дзякуючы ўнікальнай спецыфіцы Wolfram Language не толькі як мовы праграмавання, але і як
Напрыклад, ужо зараз у рэпазітары функцый Wolfram змяшчаецца
Аналагічна больш за
Для пераходу на старонку скапіюйце прыведзены вышэй аб'ект (функцыянальны BLOB), устаўце яго ў радок уводу і затым запусціце функцыю – яна ўжо ўбудавана ў мову Wolfram і падтрымліваецца па змаўчанні, пачынаючы з
Тут трэба адзначыць, што пры апрацоўцы
Спадзяюся, што пры падтрымцы
Унутры функцый з рэпазітара могуць быць невялікія ці дастаткова аб'ёмныя фрагменты кода, напісанага на мове Wolfram Language. Напрыклад, гэта могуць быць выклікі
Абалонка і праграмная структура рэпазітара функцый Wolfram настроены такім чынам, каб кожны мог унесці свой уклад у агульную справу максімальна простым і зручным для яго шляхам - па сутнасці, проста
У дадзеным падыходзе існуе мноства кампрамісаў і дэталяў, але наша мэта складаецца ў тым, каб аптымізаваць рэпазітар функцый Wolfram як для выгоды карыстачоў, так і для таго, каб новыя функцыі карыстачоў давалі адчувальны фундуш у развіццё мовы. Па меры росту, я не сумняваюся, што нам прыйдзецца вынаходзіць новыя метады апрацоўкі і праверкі ўбудавальных у рэпазітар функцый, і гэта не ў апошнюю чаргу для арганізацыі вялікай колькасці функцый і пошуку тых, якія патрэбныя карыстачам. Аднак, не можа не абнадзейваць тое, што выбраны намі шлях - гэта добры пачатак. Я ўласнаручна
Павышэнне эфектыўнасці пры зніжэнні затрат
Яшчэ да з'яўлення Інтэрнэту існавалі спосабы абменьвацца кодам Wolfram Language (нашым першым буйным цэнтралізаваным праектам быў
Больш за 30 гадоў наша кампанія старанна працавала над падтрыманнем цэласнасці структуры мовы Wolfram, і гэта вельмі важна для таго, каб мова Wolfram стала не проста мовай праграмавання, але і
У структуры рэалізацыі кожнай функцыі адбываюцца розныя вылічальныя працэсы. Тут варта адзначыць, што пры гэтым неабходна, каб для карыстача функцыя мела выразны і аднастайны выгляд і навочную чытальнасць. У дадзеным кантэксце убудаваныя функцыі мовы Wolfram Language прадстаўлены больш за 6000 паслядоўных прыкладаў таго, як належыць правільна праграмаваць функцыі (гэта нашы
Стварэнне рэпазітара, які б сапраўды добра працаваў, з'яўляецца цікавай задачай мета-праграмавання. Напрыклад, лішак абмежаванняў у праграме не зможа дазволіць атрымаць патрабаваную уніфікацыю і ўніверсальнасць працы алгарытму. Гэтак жа, як і пры недастатковай колькасці функцыянальных абмежаванняў Вы не зможаце рэалізаваць дастаткова правільную паслядоўнасць выканання алгарытму. Некалькі папярэдніх прыкладаў рэалізацыі кампрамісу дадзеных падыходаў, рэалізаваных нашай кампаніяй, спрацавалі дастаткова стабільна - гэта:
Усе вышэйпералічаныя прыклады маюць прынцыповую асаблівасць - збіраюцца ў праект аб'екты і функцыі маюць вельмі высокую ступень структуравання і размеркавання працэсаў. Безумоўна, дэталізацыя структуры таго, што з'яўляецца дэманстрацыяй ці нейронавай сеткай ці нечым іншым, могуць моцна адрознівацца, але фундаментальная структура для любога бягучага рэпазітара заўсёды застаецца нязменнай. Дык якое ж Ваша меркаванне, паважаны карыстач, з нагоды стварэнні такога рэпазітара, які дадае пашырэнні да мовы Wolfram? Мова Wolfram Language спраектаваны такім чынам, каб быць надзвычай гнуткім, таму яго можна пашыраць і відазмяняць любым спосабам. Дадзеная акалічнасць з'яўляецца надзвычай важным для магчымасці хутка ствараць розныя буйнамаштабныя праграмныя праекты на мове Wolfram Language. Тут трэба адзначыць, што з ростам гнуткасці мовы непазбежна ўзрасце і кошт праектаў, якія рэалізуюцца на такой мове. Гэта адбываецца па чынніку таго, што чым больш карыстач ужывае такую мову, тым больш ён атрымлівае вылучанай функцыянальнасці, але не варта забываць, што дадзены падыход можа мець і негатыўныя бакі ў частцы немагчымасці забеспячэння паслядоўнай узгодненасці праграмных модуляў.
У традыцыйных мовах праграмавання існуе распаўсюджаная праблема з бібліятэкамі - калі Вы, напрыклад, выкарыстоўваеце адну бібліятэку, то код працуе карэктна, але, калі Вы паспрабуеце выкарыстоўваць некалькі бібліятэк, няма гарантыі, што яны будуць карэктна ўзаемадзейнічаць адна з адной. Таксама ў традыцыйных мовах праграмавання - у адрозненне ад паўнавартаснай мовы вылічэнняў - адсутнічаюць магчымасці гарантавана кантраляваць наяўнасць узгодненых убудаваных уяўленняў, для якіх-небудзь функцый або тыпаў дадзеных, акрамя іх базавых структур. Але, па сутнасці, праблема яшчэ большая, чым уяўляецца на першы погляд: калі хтосьці будуе буйнамаштабную вертыкаль функцыянальнасці, то без вялікіх затрат па цэнтралізаваным праграмаванні праекта, якія мы ўклалі ў мову Wolfram, немагчыма дасягнуць узгодненасці. Таму важным з'яўляецца тое, каб усе праграмныя модулі заўсёды карэктна працавалі супольна.
Такім чынам, ідэя рэпазітара функцый Wolfram складаецца ў тым, каб пазбегнуць праблемы, агучанай вышэй - проста дадаючы пашырэнні да мовы ў выглядзе параўнальна невялікіх элементаў праграмнага кода пасродкам асобных функцый, распрацоўка якіх у выглядзе ўзгодненых модуляў з'яўляецца прасцейшай задачай. Пры гэтым існуюць асаблівасці праграмавання, якія немагчыма зрабіць зручнымі пры дапамозе асобных функцый (і наша кампанія ў найбліжэйшай будучыні збіраецца выпусціць аптымізаваны праграмны алгарытм для дапамогі ў рэалізацыі буйнамаштабных праграмных пакетаў). Аднак, на базе ўжо убудаваных у мову Wolfram Language функцый, існуе мноства магчымасцяў для праграмавання, якія рэалізаваны на базе асобных функцый. Тут думка складаецца ў тым, каб пры параўнальна невялікіх праграмных высілках можна было стварыць шэраг новых і вельмі карысных функцый, якія забяспечаць дастатковую ўзгодненасць праекту, пры гэтым яны будуць добра ўзгоднены сябар з сябрам, а таксама, акрамя гэтага, яны будуць мець магчымасць лёгка і шырока выкарыстоўвацца ў мове ў далейшым.
Гэты падыход, безумоўна, з'яўляецца кампрамісам. Пры ўмове рэалізацыі больш маштабнага пакета можна ўявіць сабе зусім новы свет функцыянальнасці, які стане надзвычай магутным і карысным. У выпадку, калі існуе неабходнасць атрымліваць новыя функцыянальныя магчымасці, якія будуць упісвацца ва ўсё астатняе, але пры гэтым Вы не гатовыя марнаваць вялікія намаганні на распрацоўку праекта, гэта, на жаль, можа прывесці да зніжэння маштабу Вашага праекта. Ідэя рэпазітара функцый Wolfram складаецца ў тым, каб забяспечыць функцыянальнасцю вызначальную частку праекту, дадзены падыход дазволіць дадаць магутны функцыянал, разам з тым, спрашчаючы падтрыманне добрай узгодненасці праекту праграмавання.
Дапамога пры даданні карыстацкіх функцый у рэпазітар функцый
Спецыялісты нашай кампаніі ўпарта працавалі над тым, каб зрабіць свой уклад у функцыі рэпазіторыя Wolfram дастаткова лёгкім для карыстальнікаў. На працоўным стале (ужо ў
Існуюць два асноўныя дзеянні, якія Вы павінны будзеце выканаць: па-першае, фактычна запісаць код Вашай функцыі і, па-другое, запісаць дакументацыю, якая ілюструе, як павінна працаваць Ваша функцыя.
Націсніце кнопку "Адкрыць узор" уверсе, каб убачыць прыклад таго, што Вам трэба зрабіць:
Фактычна, Вы спрабуеце стварыць нешта падобнае на убудаваную функцыю ў мове Wolfram Language. За выключэннем таго, што яна можа рабіць нешта значна больш канкрэтнае, чым убудаваная функцыя. Пры гэтым чаканні адносна яе паўнаты і надзейнасці будуць нашмат ніжэйшыя.
Вам неабходна задаць імя для Вашай функцыі, якое будзе адпавядаць прынцыпам наймення функцый Wolfram Language. Акрамя гэтага, Вам спатрэбіцца распрацаваць дакументацыю для Вашай функцыі, па аналогіі з убудаванымі функцыямі мовы. Больш падрабязна я раскажу пра гэта пазней. Цяпер проста звернеце ўвагу на тое, што ў шэрагу кнопак у верхняй частцы файла нататніка азначэнняў ёсць кнопка
Калі Вы пераканаецеся, што ўсё запоўнена належным чынам і Вы гатовыя, націсніце кнопку "Check" ("Праверыць"). Зусім нармальным з'яўляецца тое, што Вы яшчэ не разабраліся ва ўсіх дэталях. Таму функцыя "Check" будзе аўтаматычна выконвацца і рабіць шмат праверак стылю і ўзгодненасці. Часта яна адразу ж прапануе Вам пацвердзіць і прыняць выпраўленні (Напрыклад: «Гэты радок павінен сканчацца двукроп'ем», і яна прапануе ўвесці двукроп'е). Часам яна папросіць Вас дадаць ці змяніць нешта самастойна. Мы будзем увесь час дадаваць новыя магчымасці да аўтаматычнай функцыянальнасці кнопкі «Check», але ў асноўным яго мэта складаецца ў тым, каб гарантаваць — усё, што вы адпраўляеце ў рэпазітар функцый, ужо сапраўды адпавядае як мага большай колькасці рэкамендацый па стылі
Такім чынам, пасля запуску "Check" вы можаце выкарыстоўваць "Preview" ("Прадпрагляд"). "Preview" стварае папярэдні прагляд старонкі дакументацыі, якую Вы вызначылі для сваёй функцыі. Вы таксама можаце стварыць папярэдні прагляд для файла, створанага на Вашым кампутары або для файла, які знаходзіцца ў хмарным сховішчы. Калі Вас, па нейкіх прычынах, не задавальняе тое, што Вы ўбачыце ў папярэднім праглядзе, проста вярніцеся назад і выканайце неабходныя выпраўленні, а затым зноў націсніце кнопку Preview.
Цяпер Вы гатовыя размясціць сваю функцыю ў рэпазітары. Кнопка Deploy дае Вам чатыры варыянты дзеянняў:
На дадзеным кроку важным з'яўляецца тое, што Вы можаце адправіць сваю функцыю ў рэпазітар функцый Wolfram, для таго каб яна была даступная любому карыстачу. Пры гэтым Вы таксама можаце размясціць сваю функцыю для абмежаванай колькасці карыстальнікаў. Напрыклад, Вы можаце стварыць функцыю, размешчаную лакальна на Вашым кампутары, такім чынам, каб яна была даступная, калі Вы выкарыстоўваеце дадзены пэўны кампутар. Ці Вы можаце размясціць яе ў сваёй
Такім чынам, дапусцім, Вы жадаеце фактычна перадаць сваю функцыю ў базу ведаў функцый Wolfram. Для гэтага Вы націскаеце кнопку «Адправіць» у рэпазітар. Дык што ж тады адбываецца ў дадзены момант? Ваша заяўка адразу ж трапляе ў чаргу для разгляду і зацвярджэння нашай спецыяльнай камандай куратараў.
Па меры таго, як Ваша заяўка праходзіць праз працэс узгаднення (які звычайна займае некалькі дзён), Вы будзеце атрымліваць паведамленні аб стане яе разгляду, а таксама, магчыма, прапановы па яе далейшым выкарыстанні. Але як толькі ваша функцыя будзе ўхвалена, яна будзе неадкладна апублікавана ў рэпазітары функцый Wolfram і стане даступнай для любога выкарыстання. (І гэта будзе адлюстроўвацца ў
Што ж павінна быць у сховішчы?
Варта адзначыць, што ў нашай кампаніі вельмі высокія стандарты паўнаты, надзейнасці і агульнай якасці, з 6000 + функцый, якія мы ўжо ўбудавалі ў мову Wolfram за апошнія 30 з лішнім гадоў усё адпавядаюць вышэйпералічаным патрабаванням. Мэта рэпазітара функцый Wolfram складаецца ў тым, каб выкарыстаць усю структуру і функцыянальныя магчымасці, якія ўжо існуюць у мове Wolfram Language, для таго каб дадаць як мага больш значна лягчэйшых функцый (гэта значыць функцый з больш высокай прадукцыйнасцю).
Безумоўна, функцыі ў рэпазітары функцый Wolfram павінны адпавядаць прынцыпам распрацоўкі мовы Wolfram Language – каб яны маглі паўнавартасна ўзаемадзейнічаць з іншым функцый і чаканням карыстачоў адносна таго, як функцыі належыць правільна працаваць. Аднак пры гэтым функцыі не павінны мець аднолькавую паўнату ці надзейнасць.
Ва ўбудаваных функцыях мовы Wolfram, мы ўпарта працуем над тым, каб зрабіць праграмныя функцыі як мага больш агульнымі. Пры гэтым пры знаходжанні ў рэпазітары функцый Wolfram няма нічога дрэннага ў тым, каб у яго патрапіла функцыя, якая проста апрацоўвае нейкі вельмі пэўны, але карысны выпадак. Напрыклад, функцыя
Яшчэ адным момантам, звязаным з убудаванымі функцыямі, з'яўляецца тое, што наша кампанія прыкладае ўсе намаганні для апрацоўкі ўсіх нетыпавых выпадкаў, для правільнай апрацоўкі некарэктнага ўводу і гэтак далей. У рэпазітары функцый зусім нармальным з'яўляецца выпадак, калі ў ім існуе спецыяльная функцыя, якая апрацоўвае асноўныя выпадкі рашэння задачы і ігнаруе ўсе астатнія.
Відавочным з'яўляецца той факт, што лепш мець функцыі, якія робяць больш, і робяць гэта лепш, але аптымізацыя для рэпазітара функцый - у адрозненне ад убудаваных функцый мовы Wolfram - павінна мець больш функцый, перавязаных з вялікай колькасцю функцый, чым паглыбляцца ў працэсы рэалізацыі кожнай канкрэтнай функцыі.
Цяпер давайце разгледзім прыклад тэставання функцый у рэпазітары. Чаканні ўзгодненасці для такіх функцый натуральна значна ніжэйшыя, чым для ўбудаваных функцый мовы. Гэта тым больш актуальна ў выпадках, калі функцыі залежаць ад вонкавых рэсурсаў, такіх як API, важна стала праводзіць паслядоўныя тэсты, што аўтаматычна адбываецца ўсярэдзіне алгарытмаў праверкі. У файле nb вы можаце відавочна пазначыць азначэнні (у падзеле «Дадатковая інфармацыя») і задаць гэтулькі тэстаў, вызначаных альбо радкамі ўводу і высновы, альбо поўнымі знакавымі аб'ектамі тыпу
У выніку ў рэпазітары функцый будзе цэлы шэраг складанасцей рэалізацыі. Некаторыя будуць проста адным радком кода, іншыя могуць уключаць тысячы ці дзясяткі тысяч радкоў, верагодна з выкарыстаннем мноства дапаможных функцый. У якіх выпадках варта дадаць функцыю, для вызначэння якой патрабуецца вельмі мала кода? У прынцыпе, калі для функцыі ёсць
Асноўная мэта рэпазітара функцый (як вынікае з яго назвы) складаецца ў тым, каб уводзіць у функцыянал мовы новыя функцыі. Калі Вы хочаце дадаць новыя дадзеныя або
Насамрэч ёсць два шляхі. Магчыма, Вы захочаце ўвесці новы тып аб'екта, які будзе выкарыстоўвацца ў новых функцыях у рэпазітары функцый. І ў гэтым выпадку Вы заўсёды можаце проста запісаць яго сімвальнае ўяўленне і выкарыстоўваць яго пры ўводзе або выснове функцый у рэпазітары функцый.
Але што рабіць, калі Вы хочаце ўявіць аб'ект, а затым вызначыць, праз існуючыя функцыі ў мове Wolfram Language, якія павінны працаваць разам з ім? Для гэтага ў Wolfram Language заўсёды быў лёгкі механізм, які завецца
Такім чынам, што ж можа быць у кодзе функцый у рэпазітары функцый?
Ці павінен увесь код для рэпазітара функцый Wolfram быць напісаны на мове Wolfram? Вызначана, код усярэдзіне вонкавага API не павінен быць напісаны на мове Wolfram, што ўласна нават не робіць код мовы. Насамрэч, калі Вы знойдзеце функцыю практычна на любой вонкавай мове ці бібліятэцы, вы зможаце стварыць абалонку, якая дазволіць выкарыстаць яе ў рэпазітары функцый Wolfram. (Звычайна для гэтага варта выкарыстоўваць убудаваныя функцыі
Дык які ж сэнс рабіць гэта? У сутнасці, гэта дазваляе выкарыстоўваць усю інтэграваную сістэму Wolfram Language і ўвесь яе уніфікаваны набор праграмных магчымасцяў. У выпадку, калі Вы атрымліваеце базавую рэалізацыю з знешняй бібліятэкі або мовы, то затым Вы можаце выкарыстоўваць багатую сімвальную структуру мовы Wolfram Language для стварэння зручнай функцыі верхняга ўзроўню, якая дазваляе карыстальнікам дастаткова лёгка выкарыстоўваць любую ўжо рэалізаваную функцыянальнасць. Прынамсі, гэта павінна мець магчымасць рэалізацыі ў ідэальным міры, дзе існуюць усе складовыя элементы загрузкі бібліятэк і т. п., у дадзеным выпадку яны будуць аўтаматычна вырашацца з дапамогай Wolfram Language. (Варта адзначыць, што на практыцы могуць узнікнуць праблемы з
Дарэчы, калі вы першы раз аналізуеце тыпавыя знешнія бібліятэкі, яны часта здаюцца занадта складанымі, каб іх можна было ахапіць толькі некалькімі функцыямі, але ў многіх выпадках большасць складанасці ўзнікае з-за стварэння інфраструктуры, неабходнай для бібліятэкі, і ўсіх функцый для яе падтрымкі. . Аднак пры выкарыстанні мовы Wolfram Language, інфраструктура, як правіла, ужо ўбудавана ў пакеты, і таму не трэба падрабязна раскрываць усе гэтыя функцыі падтрымкі, а трэба толькі стварыць функцыі для некалькіх "самых верхніх" функцый, арыентаваных на дадатак у бібліятэцы.
"Экасістэма" базы ведаў
Калі Вы напісалі функцыі, якія выкарыстоўваеце ўвесь час, то адпраўце іх у рэпазітар функцый Wolfram! Калі з гэтага ў выніку не атрымаецца нешта большае (развіццё мовы), то і тады Вам будзе значна зручней выкарыстоўваць функцыі для асабістага карыстання. Аднак лагічна выказаць здагадку, што, калі Вы выкарыстоўваеце функцыі ўвесь час, магчыма і іншыя карыстачы таксама знойдуць іх карыснымі.
Натуральна, што Вы можаце апынуцца ў сітуацыі, калі вы не маеце магчымасці - ці не хочаце - дзяліцца сваімі функцыямі або ў выпадку атрымання доступу да прыватных інфармацыйных рэсурсаў. Нават у такіх выпадках Вы можаце проста разгарнуць функцыі ў сваім уласным уліковым запісе ў воблаку,
Функцыі, якія Вы адпраўляеце ў рэпазітар функцый Wolfram, не абавязкова павінны быць ідэальнымі; яны проста павінны быць карыснымі. Гэта крыху падобна на раздзел "Памылкі" ў класічнай дакументацыі Unix - у "Раздзеле азначэнняў" ёсць раздзел "Нататкі аўтара", у якім Вы можаце апісаць абмежаванні, праблемы і т. п., аб якіх Вы ўжо ведаеце аб сваёй функцыі. Акрамя таго, калі вы адпраўляеце сваю функцыю ў рэпазітар, Вы можаце дадаць нататкі да адпраўкі, якія будуць прачытаныя спецыяльнай камандай куратараў.
Пасля публікацыі функцыі яе старонка заўсёды мае дзве спасылкі ўнізе: «
Часам узнікае неабходнасць проста выкарыстоўваць функцыі з рэпазітара функцый Wolfram, напрыклад убудаваныя функцыі, не зазіраючы ў іх код. Аднак калі вы жадаеце "зазірнуць унутр", у верхняй частцы заўсёды ёсць кнопка "Нататнік". Націсніце на яе, і Вы атрымаеце ўласную копію арыгінальнага сшытка вызначэння, якая была адпраўлена ў рэпазітар функцый. Часам вы можаце проста выкарыстоўваць яе ў якасці прыкладу для сваіх патрэб. Пры гэтым Вы таксама можаце распрацаваць Вашу ўласную мадыфікацыю гэтай функцыі. Магчыма, Вы захочаце размясціць гэтыя знойдзеныя Вамі функцыі з рэпазітара на сваім кампутары або ў сваім уліковым запісе ў Вашым хмарным сховішчы тлі, можа быць, Вы захочаце адправіць іх у базу ведаў функцый, магчыма, у якасці палепшанай, дапоўненай версіі зыходнай функцыі.
У будучыні мы плануем падтрымліваць разгалінаванне ў стылі Git для рэпазітараў функцый, але зараз мы імкнемся зрабіць гэта прасцей, і ў нас заўсёды ёсць толькі адна агульнапрынятая версія кожнай функцыі, убудаванай у мову. Часцей за ўсё (калі распрацоўшчыкі не адмаўляюцца ад падтрымання распрацаваных імі функцый і адказваюць на паведамленні карыстальнікаў), першапачатковы аўтар функцыі атрымлівае кантроль над абнаўленнямі да яе і адпраўляе новыя версіі, якія затым правяраюцца і, калі праходзяць працэс праверкі, публікуюцца ў мове.
Разгледзім пытанне, як працуе "версійнасць" распрацаваных функцый. Прама цяпер, калі Вы выкарыстоўваеце функцыю з рэпазітара функцый, яе вызначэнне будзе ўвесь час захоўвацца на вашым кампутары (ці ў вашым хмарным уліковым запісе, калі вы выкарыстоўваеце воблака). Калі з'явілася новая версія функцыі, то пры наступным яе выкарыстанні вы атрымаеце паведамленне, якое паведамляе Вас пра гэта. І калі Вы жадаеце абнавіць функцыю да новай версіі, Вы можаце зрабіць гэта з дапамогай каманды
Адной з выдатных асаблівасцяў рэпазітара функцый Wolfram з'яўляецца тое, што любая праграма Wolfram Language у любым месцы можа выкарыстоўваць функцыі з яго. Калі праграма з'яўляецца ў блакноце, часта бывае зручна адфарматаваць функцыі рэпазітара ў выглядзе функцый лёгка чытэльных "функцыянальных двайковых аб'ектаў" (магчыма, з адпаведным наборам версій).
Вы заўсёды можаце звярнуцца да любой функцыі рэпазітара функцый, выкарыстоўваючы тэкставую
Як гэта працуе?
Усярэдзіне функцый у рэпазітары Wolfram гэта магчыма з выкарыстаннем сапраўды такі ж
Разгледзім
Унутры Вы можаце ўбачыць некаторую інфармацыю, выкарыстоўваючы функцыя
Як працуе настройка функцыі рэсурсу? Самы просты - гэта чыста лакальны выпадак. Вось прыклад, які бярэ функцыю (у дадзеным выпадку проста чыстую функцыю) і вызначае яе як функцыю рэсурсу для дадзенага сеансу працы ў праграме:
Пасля таго як Вы зрабілі азначэнне, вы можаце выкарыстоўваць функцыю рэсурсу:
Звярніце ўвагу, што ў гэтым BLOB-аб'екце функцыі ёсць чорны значок . Гэта азначае, што BLOB-функцыя адносіцца да функцыі рэсурсаў у памяці, вызначанай для бягучага сеансу. Для функцыі рэсурсу, якая ўвесь час захоўваецца на Вашым кампутары або ў хмарным уліковым запісе, ёсць шэры значок . А для афіцыйнай функцыі рэсурсу ў рэпазітары функцый Wolfram ёсць аранжавы значок. .
Такім чынам, што адбываецца, калі вы выкарыстоўваеце меню "Разгортванне" у нататніку азначэння? Па-першае, ён бярэ ўсе азначэнні ў блакноце і з іх стварае сімвалальны.
Лакальнае разгортванне функцыі з рэпазітара на Вашым кампутары выконваецца пры дапамозе каманды
Калі націснуць кнопку Submit для Function Repository, тое, што пад ім адбываецца
Па змаўчанні адпраўка выконваецца пад імем, злучаным з вашым ідэнтыфікатарам Wolfram ID. Але калі вы адпраўляеце заяўку ад імя групы распрацоўшчыкаў ці арганізацыі, Вы можаце
Пасля таго, як Вы адправілі любую Вашу функцый у базу ведаў функцый, яно патрапіць у чаргу на праверку. Калі Вы атрымаеце каментарыі ў адказ, яны звычайна будуць у форме тэкставага файла з дададзенымі дадатковымі «вочкамі каментароў». Вы заўсёды можаце праверыць статус сваёй заяўкі, зайшоўшы на
Некаторыя тонкасці ў працы
На першы погляд можа скласціся ўражанне, што можна проста ўзяць нататнік вызначэння і даслоўна змясціць яго ў рэпазітар функцый, аднак, на самай справе ёсць даволі шмат тонкасцяў - і для іх апрацоўкі патрабуецца выканаць даволі складанае мета-праграмаванне, сімвальнае апрацоўваючы як код, які вызначае функцыю , так і сам Нататнік вызначэння. Вялікая частка гэтага адбываецца ўсярэдзіне, гэта значыць "за кадрам", але гэта можа мець некаторыя наступствы, якія варта зразумець, калі Вы збіраецеся занесці свой фундуш у базу ведаў функцый.
Першая непасрэдная тонкасць: Калі Вы запаўняеце «Нататнік азначэнняў», Вы можаце проста спасылацца на сваю функцыю ўсюды, выкарыстоўваючы імя, падобнае MyFunction, якое выглядае як звычайнае імя для функцыі ў мове Wolfram Language, але для дакументацыі рэпазітара функцый гэта замяняецца
Другая тонкасць: калі вы ствараеце функцыю рэсурсу з Нататніка вызначэння, то ўсе залежнасці, уцягнутыя ў вызначэнне функцыі, павінны быць зафіксаваны і відавочна ўключаны. Аднак каб гарантаваць, што азначэнні застаюцца модульнымі, трэба змясціць усё ва ўнікальнае
Звычайна Вы ніколі не ўбачыце ніякіх слядоў працы кода, які выкарыстоўваецца для налады гэтай прасторы імёнаў. Але калі па нейкім чынніку Вы выклічце недавыкананы знак усярэдзіне вашай функцыі, тыя вы ўбачыце, што гэты знак знаходзіцца ва ўнутраным кантэксце функцыі. Аднак пры апрацоўцы нататніка вызначэння, па меншай меры, сімвал, які адпавядае самой функцыі,
Рэпазітар функцый прызначаны для вызначэння новых функцый. І гэтыя функцыі могуць мець опцыі. Часта гэтыя параметры (напрыклад,
Большасць функцый проста робяць тое, што яны павінны рабіць кожны раз, калі іх выклікаюць, але некаторыя функцыі маюць патрэбу ў ініцыялізацыі, перш чым яны змогуць працаваць у пэўным сеансе - і для вырашэння гэтай праблемы ў раздзеле "Вызначэнне" ёсць раздзел "Ініцыялізацыя".
Функцыі з рэпазітара могуць выкарыстоўваць іншыя функцыі, якія ўжо знаходзяцца ў рэпазітары, для таго каб наладзіць азначэнні для рэпазітара функцый, улучальныя дзве (ці больш) функцыі, якія спасылаюцца сябар на сябра неабходна разгарнуць іх у сваім сеансе працы з праграмай, каб Вы маглі спасылацца на іх як
Перспектывы развіцця. Што павінна адбыцца, калі рэпазітар стане па-сапраўднаму вялікім?
Сёння мы толькі запускаем рэпазітар функцый Wolfram, але з часам мы чакаем, што ён(выдаліць) яго аб'ём і функцыянальнасць можа рэзка ўзрасці, і па меры яго росту развіцця ўзнікнуць з'явяцца розныя праблемы, якія, як мы ўжо здагадваемся прадбачым, могуць узнікнуць.
Першая праблема датычыцца імёнаў функцый і іх унікальнасці. Рэпазітар функцый спраектаваны такім чынам, што ў ім, як і для ўбудаваных функцый у мове Wolfram Language, можна спасылацца на любую дадзеную функцыю, проста паказаўшы яе імя. Але гэта непазбежна азначае, што імёны функцый павінны быць глабальна ўнікальнымі па ўсім рэпазітары, так што, напрыклад, у рэпазітары можа быць толькі адна
На першы погляд гэта можа падацца вялікай праблемай, але варта разумець, што гэта ў асноўным тая ж праблема, што і для такіх рэчаў, як інтэрнэт-дамены ці маркеры сацыяльных сетак. І справа ў тым, што ў сістэме проста неабходна мець рэгістратара – і гэта адна з роляў, якую наша кампанія будзе выконваць для базы ведаў функцый Wolfram. (Для прыватных версій рэпазітара іх рэгістратарамі могуць быць адміністратары.) Вядома, інтэрнэт-дамен можа быць зарэгістраваны, не маючы нічога на ім, але ў рэпазітары функцый імя функцыі можа быць зарэгістравана толькі пры наяўнасці фактычнага вызначэння функцыі.
Часткай нашай ролі ў кіраванні базай ведаў функцый Wolfram з'яўляецца забеспячэнне таго, каб імя, абранае для функцыі, было лагічным з улікам вызначэння функцыі, а таксама, каб яно адпавядала дамовам аб імёнах Wolfram Language. У нас ужо больш за 30 гадоў вопыту па назве убудаваных функцый на мове Wolfram Language, і наша каманда курыравання (куратараў?) перанясе гэты вопыт таксама ў рэпазітар функцый. Безумоўна, заўсёды ёсць выключэнні. Напрыклад, можа здацца больш пераважным мець кароткае імя для некаторай функцыі, але лепш "абараняцца" з даўжэйшым, больш пэўным імем, таму што пры гэтым менш шанцаў сутыкнуцца з тым, што хтосьці жадае зрабіць падобнае імя функцыі ў будучыні.
(Тут варта адзначыць, што простае даданне якога-небудзь тэга ўдзельніка для ўхілення неадназначнасці функцый не прынясе чаканага эфекту. Таму што, калі не настойваць на тым, каб заўсёды прысвойваўся тэг, трэба будзе вызначаць тэг па змаўчанні для любой зададзенай функцыі, а таксама вылучаць тэгі аўтара, што зноў запатрабуе глабальнай каардынацыі.)
Па меры росту аб'ёму базы ведаў функцый Wolfram адна з праблем, якія напэўна ўзнікнуць – гэта выяўляльнасць функцый, для гэтага ў сістэме прадугледжана
Для ўбудаваных функцый у мове Wolfram Language існуе так званы ўзровень выяўлення, які забяспечваецца
Рэпазітар функцый Wolfram настроены як сталае сховішча функцый, дзе любая функцыя ў ім заўсёды будзе працаваць. Безумоўна, могуць з'явіцца і новыя версіі функцый, і мы чакаем, што некаторыя функцыі са часам вядома састарэюць. Функцыі будуць працаваць, калі яны выкарыстоўваюцца ў праграмах, але іх старонкі дакументацыі будуць спасылацца на новыя, больш прасунутыя функцыі.
Рэпазітар функцый Wolfram прызначаны для хуткага атрымання новых функцый і вывучэння новых магчымасцяў выкарыстання мовы Wolfram. З вялікай дзеллю аптымізму мы спадзяемся, што частка таго, што было даследавана ў рэпазітары функцый, у канчатковым выніку будзе мець сэнс стаць убудаванымі часткамі асноўнай мовы Wolfram Language. За апошняе дзесяцігоддзе ў нас быў падобны набор
Тут самае галоўнае тое, што функцыя ў рэпазітары функцый - гэта тое, што даступна кожнаму карыстачу для выкарыстання прама цяпер. Магчыма, убудаваная функцыя мовы можа быць нашмат лепш і прадукцыйней, але рэпазітар функцый дазволіць карыстачам адразу атрымаць доступ да ўсіх новых функцый. І, што асабліва важна, гэтая канцэпцыя дазваляе кожнаму дадаваць любыя свае новыя функцыі.
Раней у гісторыі мовы Wolfram гэта ідэя не зарабіла б так добра як цяпер, але на дадзеным этапе ў мову ўжо закладзена столькі намаганняў, а таксама настолькі глыбокае разуменне прынцыпаў праектавання мовы, што зараз бачыцца вельмі магчымым, каб вялікая супольнасць карыстальнікаў дадавала функцыі, якія будуць. падтрымліваць узгодненасць праекта, каб зрабіць іх карыснымі для шырокага кола карыстальнікаў.
У супольнасці карыстальнікаў Wolfram Language ёсць неверагодны дух таленту(?). (Зразумела, у гэтую супольнасць уваходзяць многія вядучыя спецыялісты ў галіне даследаванняў і распрацовак у самых розных галінах.) Спадзяюся, што рэпазітар функцый Wolfram прадаставіць эфектыўную платформу для раскрыцця і распаўсюджвання гэтага духу таленту. Толькі разам мы зможам стварыць нешта, што значна пашырыць вобласць, да якой можа быць прыменена вылічальная парадыгма мовы Wolfram.
За 30 з лішнім гадоў мы прайшлі доўгі шлях па мове Wolfram. Цяпер разам, давайце ж пойдзем яшчэ далей. Настойліва заклікаю ўсіх паважаных карыстальнікаў мовы Wolfram ва ўсім свеце, выкарыстоўваць у якасці платформы для гэтага функцыянальны рэпазітар, а таксама такі новы праграмны праект, як Free Wolfram Engine для распрацоўшчыкаў.
Крыніца: habr.com