Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Bonjou, Habr! Mwen prezante bay atansyon w yon tradiksyon post Stephen Wolfram "Wolfram Fonksyon Repository: Lanse yon platfòm louvri pou pwolonje lang Wolfram la".

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Prekondisyon pou konsistans lang Wolfram la

Jodi a nou kanpe sou papòt gwo reyalizasyon ansanm ak langaj pwogramasyon an Wolfram Lang. Jis twa semèn de sa nou te lanse gratis Wolfram motè pou devlopèpou ede itilizatè nou yo entegre Wolfram Language nan pwojè lojisyèl gwo echèl yo. Jodia nap lanse Wolfram fonksyon depo, yo nan lòd yo bay yon platfòm kowòdone pou fonksyon kreye pou yon ekstansyon pou lang Wolfram, epi nou tou louvri yon depo fonksyon pou nenpòt moun ki ka kontribye nan devlopman nan pwodwi lojisyèl nou an.

Wolfram Fonksyon Repository la se yon bagay ki rann posib grasa nati inik Lang Wolfram lan non sèlman kòm yon langaj pwogramasyon, men tou kòm yon langaj. langaj enfòmatik plen echèl. Nan langaj pwogramasyon tradisyonèl yo, ajoute siyifikatif nouvo fonksyonalite anjeneral enplike nan kreye tout bibliyotèk adisyonèl ki ka oswa pa ka travay lè yo itilize ansanm. Sepandan, nan Wolfram Language se konsa anpil deja konstwi nan lang nan tèt li, ke li posib siyifikativman elaji fonksyonalite li yo pa senpleman ajoute nouvo fonksyon ki imedyatman entegre nan estrikti a holistic nan lang nan tout antye.

Pou egzanp, repozitwa fonksyon Wolfram deja genyen 532 nouvo karakteristik estriktire nan 26 kategori tematik:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Menm jan an tou plis pase 6000 fonksyon estanda, ki te konstwi nan lang Wolfram, chak fonksyon nan depo a gen yon paj dokimantasyon ak yon deskripsyon detaye sou yo ak egzanp travay:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Pou ale nan paj la, kopye objè ki anwo a (fonksyon BLOB), kole li nan liy opinyon an epi kouri fonksyon an - li deja bati nan lang Wolfram la ak sipòte pa default kòmanse ak vèsyon 12.0:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Li ta dwe remake isit la ke lè pwosesis LogoQRCode Ou pa bezwen, pou egzanp, mete kanpe yon "bibyotèk tretman imaj" - paske nou te deja aplike yon fason ki konsistan ak ak anpil atansyon algoritmik nan Wolfram Language. pwosesis imaj, ki ka imedyatman trete pa divès fonksyon lang grafik:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Mwen espere ke ak sipò a bèl kominote ak talan, ki te grandi ak elaji (ki baze sou Wolfram Language) pandan plizyè deseni ki sot pase yo. Repozitwa fonksyon Wolfram la pral pèmèt pou lavni prevwa a elaji siyifikativman seri fonksyon (petèt potansyèlman enpòtan, espesyalize nan divès domèn syans ak teknoloji) ki disponib nan lang lan. Kidonk, li vin posib pou itilize tou de kontni lang lan (fonksyon entegre li yo) ak prensip devlopman yo, ki aplike baze sou lang lan. (Li ta dwe remake isit la ke Lang Wolfram la deja gen plis pase 30 ane istwa devlopman ak kwasans ki estab).
Fonksyon ki soti nan depo a ka genyen ti moso kòd ki ekri nan lang Wolfram. Pou egzanp, sa yo ta ka apèl API ekstèn ak sèvis oswa bibliyotèk ekstèn nan lòt lang. Karakteristik inik nan apwòch sa a se ke lè ou fè egzèsis desann nan fonksyonalite nan nivo itilizatè, pa pral gen okenn enkonsistans potansyèl paske apwòch la bati sou tèt estrikti ki konsistan nan Lang Wolfram la - ak chak fonksyon pral otomatikman travay kòrèkteman - egzakteman jan. gen entansyon li ta dwe.
Koki ak estrikti pwogramasyon Wolfram Feature Repository la fèt pou tout moun ka kontribye nan kòz komen nan fason ki pi senp ak pratik pou yo - an reyalite, jis. pa ranpli dosye tèks notepad la (ak ekstansyon nb) WL. Fonksyon otomatik entegre pèmèt ou tcheke nouvo fonksyon ki ajoute nan depo a pou asire entegrasyon yo nan lang lan. Konpayi nou an ap parye sou pakèt itilizatè ki ka entegre fonksyon yo nan lang lan, olye ke sou gwo konpleksite nouvo fonksyon - e byenke gen yon pwosesis revizyon, nou pa ensiste sou anyen tankou rigoureux analiz konsepsyon oswa estanda strik pou konplè ak fyab nan nouvo karakteristik itilizatè yo, kontrèman ak tès yo pi sevè nan karakteristik ki te bati nan lang prensipal ke nou anplwaye a.

Gen anpil konpwomi ak detay nan apwòch sa a, men objektif nou se optimize repozitwa karakteristik Wolfram pou eksperyans itilizatè a ak asire ke nouvo karakteristik itilizatè yo kontribye nan devlopman langaj la. Pandan n ap grandi, mwen pa gen okenn dout ke nou pral gen envante nouvo metòd pou manyen ak validation fonksyon ki bati nan repozitwa a, pa pi piti pou òganize yon gwo kantite fonksyon ak jwenn sa ke itilizatè yo bezwen. Sepandan, li ankourajan ke chemen nou te chwazi a se yon bon kòmansman. Mwen pèsonèlman ajoute plizyè karakteristik nan baz done orijinal la. Anpil nan yo baze sou kòd ke mwen pèsonèlman devlope pou kèk tan. Epi li te sèlman pran m 'kèk minit pouse yo nan repozitwa a. Kounye a ke yo nan depo a, mwen ka finalman - imedyatman ak nenpòt ki lè - itilize fonksyon sa yo jan sa nesesè, san yo pa bezwen enkyete sou rechèch pou dosye, telechaje pakè, elatriye.

Ogmante efikasite pandan y ap diminye depans yo

Menm anvan entènèt la, te gen fason yo pataje kòd Wolfram Language (premye gwo pwojè santralize nou an te MathSource, ki te kreye pou Mathematica an 1991 ki baze sou CD-ROM, elatriye). Natirèlman, apwòch yo pwopoze pou aplikasyon ki baze sou repozitwa fonksyon Wolfram la se yon zouti ki pi pwisan ak serye pou aplike travay ki anwo yo.

Pou plis pase 30 ane, konpayi nou an te travay avèk dilijans pou kenbe entegrite estrikti lang Wolfram la, e sa enpòtan anpil pou asire lang Wolfram la vin pa sèlman yon lang pwogramasyon, men tou yon langaj pwogramasyon. langaj enfòmatik konplè. Se konsa, sans nan apwòch la nan aplikasyon depo fonksyon Wolfram la se sèvi ak yon apwòch inifye nan pwogramasyon ak devlope nouvo fonksyon ki se sekans ajoute ak anfòm nan kad lang lan pou li ka devlope ak ko-evolye.

Plizyè pwosesis enfòmatik rive nan estrikti aplikasyon chak fonksyon. Li ta dwe remake isit la ke li nesesè ke fonksyon an gen yon aparans klè ak inifòm ak lizibilite vizyèl pou itilizatè a. Nan kontèks sa a, fonksyon entegre Wolfram Language yo prezante ak plis pase 6000 egzanp sekans sou fason pou byen pwograme fonksyon (sa yo se videyo pwogramasyon an liveki genyen ladan yo dè santèn èdtan nan pwosesis pou kreye pwogram estanda). Ki sa ki apwòch sa a finalman fè repozitwa karakteristik Wolfram a kapab fè byen se nati estriktirèl Lang Wolfram la, ak gwo kantite bibliyotèk adisyonèl ak varye ki deja bati nan lang lan. Pou egzanp, si ou gen yon fonksyon ki trete imaj, oswa etalaj raOswa estrikti molekilèAk done jeyografik oswa kèk lòt - reprezantasyon senbolik konsistan yo deja egziste nan lang lan, ak gras a sa a, fonksyon ou imedyatman vin konpatib ak lòt fonksyon nan lang nan.

Kreye yon depo ki aktyèlman travay byen se yon travay enteresan meta-pwogram. Pou egzanp, yon eksè restriksyon nan pwogram nan pa pral pèmèt jwenn inifikasyon ki nesesè yo ak inivèsalite algorithm la. Menm jan ak yon nimewo ensifizan nan restriksyon fonksyonèl, ou pa yo pral kapab aplike yon sekans ase kòrèk nan ekzekisyon algorithm. Plizyè egzanp anvan enplemante yon konpwomi nan apwòch sa yo, aplike pa konpayi nou an, te travay byen estab - sa yo se: Pwojè tengstèn demonstrasyon, te lanse an 2007 e kounye a, li kouri sou entènèt ak plis pase 12000 demo itilizatè-interactive. NAN baz done Wolfram gen plis pase 600 baz done pare ki ka itilize nan Wolfram Language, ak Wolfram depo rezo neral se ranpli ak nouvo rezo neral prèske chak semèn (genyen deja 118 nan yo kounye a) epi yo imedyatman konekte nan fonksyon an. NetModel nan Lang Wolfram.

Tout egzanp ki anwo yo gen yon karakteristik fondamantal - objè yo ak fonksyon yo kolekte nan pwojè a gen yon degre trè wo nan estrikti ak distribisyon nan pwosesis. Natirèlman, detay nan estrikti a nan sa ki se yon Demo oswa yon rezo neral oswa yon lòt bagay ka varye anpil, men estrikti nan fondamantal pou nenpòt ki depo aktyèl toujou rete menm jan an. Se konsa, ki opinyon w, chè itilizatè, sou kreye tankou yon depo ki ajoute ekstansyon nan lang Wolfram la? Lang Wolfram la fèt pou li trè fleksib, kidonk li ka pwolonje ak modifye nan nenpòt fason. Sikonstans sa a trè enpòtan pou kapasite pou byen vit kreye plizyè pwojè lojisyèl gwo echèl nan Wolfram Language. Li ta dwe remake isit la ke kòm fleksibilite nan lang nan ogmante, pri a nan pwojè aplike nan yon lang konsa pral inevitableman ogmante. Sa a se akòz lefèt ke plis itilizatè a sèvi ak yon lang konsa, plis devwe fonctionnalités li resevwa, men nou pa ta dwe bliye ke apwòch sa a ka tou gen kote negatif an tèm de enkapasite a asire konsistans konsistan nan modil pwogram.

Gen yon pwoblèm komen ak bibliyotèk nan lang tradisyonèl pwogramasyon - si ou itilize yon bibliyotèk, pou egzanp, kòd la ap travay kòrèkteman, men si ou eseye sèvi ak bibliyotèk miltip, pa gen okenn garanti ke yo pral kominike kòrèkteman youn ak lòt. . Epitou, nan langaj pwogramasyon tradisyonèl yo - kontrèman ak yon langaj enfòmatik konplè - pa gen okenn fason pou garanti prezans nan reprezantasyon ki konsistan entegre pou nenpòt fonksyon oswa kalite done ki pa estrikti debaz yo. Men, an reyalite, pwoblèm nan se menm pi gwo pase sa li sanble nan premye gade: si yon moun ap bati yon gwo echèl vètikal nan fonksyonalite, Lè sa a, san yo pa gwo depans yo nan pwogram santralize pwojè ke nou mete nan lang Wolfram la, li enposib. reyalize konsistans. Se poutèt sa li enpòtan ke tout modil lojisyèl toujou travay ansanm kòrèkteman.

Se konsa, lide ki dèyè repozitwa karakteristik Wolfram la se pou evite pwoblèm ki endike anwo a pa senpleman ajoute ekstansyon nan lang nan relativman ti moso nan kòd atravè karakteristik endividyèl ki pi fasil yo devlope kòm modil aderan. Sa yo te di, gen karakteristik pwogramasyon ki pa ka fè pratik lè l sèvi avèk fonksyon endividyèl (ak konpayi nou an ap planifye lage yon algorithm pwogramasyon optimize nan fiti prè pou ede aplike pakè lojisyèl gwo echèl). Sepandan, baze sou fonksyon yo deja bati nan Wolfram Language, gen anpil posiblite pwogramasyon ki aplike ki baze sou fonksyon endividyèl. Lide a isit la se ke ak efò relativman ti kras pwogramasyon li posib yo kreye yon kantite nouvo fonksyon trè itil ki pral bay ase koerans nan konsepsyon an, yo pral byen kowòdone youn ak lòt, epi tou, anplis sa a, yo yo pral kapab fasil ak lajman itilize nan lang nan nan tan kap vini an.

Apwòch sa a se, nan kou, yon konpwomi. Si yo te aplike yon pi gwo pake, yo ta ka imajine yon nouvo mond nan fonksyonalite ki ta trè pwisan ak itil. Si gen yon bezwen jwenn nouvo fonctionnalités ki pral anfòm ak tout lòt bagay, men ou pa vle depanse anpil efò sou devlope pwojè a, sa a, malerezman, ka mennen nan yon rediksyon nan sijè ki abòde lan pwojè ou a. Lide ki dèyè repozitwa karakteristik Wolfram la se bay fonksyonalite nan yon pati defini nan yon pwojè; apwòch sa a pral ajoute fonksyonalite pwisan pandan y ap fè li pi fasil pou kenbe bon konsistans nan yon pwojè pwogramasyon.

Ede ajoute fonksyon koutim nan repozitwa fonksyon an

Ekip nou an te travay di pou rann li fasil pou itilizatè yo kontribye nan karakteristik depo Wolfram yo. Sou Desktop la (deja nan vèsyon 12.0), Ou ka tou senpleman ale nan onglet meni prensipal yo an sekans: File > New > RepositoryItem > Fonksyon Repository Item epi w ap jwenn "Kaye Definisyon" (Programmatik andedan workbench la. Ou ka itilize tou fonksyon analòg - Kreye Kaye["Fonksyon Resous"]):

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Gen de etap prensipal ou pral bezwen fè: premye, aktyèlman ekri kòd la pou fonksyon ou a epi, dezyèmman, ekri dokiman ki montre kouman fonksyon ou ta dwe travay.
Klike sou bouton "Open Sample" ki anlè a pou wè yon egzanp sou sa ou bezwen fè:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Esansyèlman, w ap eseye kreye yon bagay ki sanble ak yon fonksyon entegre nan Lang Wolfram la. Eksepte ke li ka fè yon bagay pi plis espesifik pase yon fonksyon bati-an. An menm tan an, atant konsènan konplè li yo ak fyab yo pral pi ba anpil.
Ou bezwen bay fonksyon ou yon non ki swiv direktiv non fonksyon Wolfram Language la. Anplis de sa, w ap bezwen devlope dokiman pou fonksyon ou, menm jan ak fonksyon yo entegre nan lang lan. Mwen pral pale sou sa a nan plis detay pita. Pou kounye a, jis remake ke nan ranje a nan bouton nan tèt la nan dosye a kaye definisyon gen yon bouton "Stil Gid", ki eksplike sa pou fè, ak yon bouton Zouti, ki bay zouti pou fòma dokiman fonksyon ou a.
Lè w sèten tout bagay ranpli byen epi w pare, klike sou bouton "Tcheke". Li konplètman nòmal ke ou poko kalkile tout detay yo. Se konsa, "Tcheke" fonksyon an pral otomatikman kouri epi fè yon anpil nan chèk style ak konsistans. Souvan, li pral imedyatman mande w konfime ak aksepte koreksyon yo (Pa egzanp: "Liy sa a dwe fini ak yon kolon," epi li pral mande w pou antre yon kolon). Pafwa li pral mande w ajoute oswa chanje yon bagay tèt ou. Nou pral toujou ap ajoute nouvo karakteristik nan fonksyonalite otomatik bouton Tcheke a, men fondamantalman objektif li se asire ke tout bagay ou soumèt nan repozitwa karakteristik yo deja suiv anpil gid stil posib.

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Se konsa, apre kouri "Tcheke", ou ka itilize "Aperçu". "Preview" kreye yon aperçu nan paj dokiman ou defini pou fonksyon ou a. Ou kapab tou kreye yon aperçu pou yon dosye ki te kreye sou òdinatè w lan oswa pou yon fichye ki sitiye nan depo nwaj. Si, pou kèk rezon, ou pa satisfè ak sa ou wè nan preview la, tou senpleman tounen epi fè koreksyon ki nesesè yo, epi klike sou bouton Preview la ankò.
Koulye a, ou pare pou pouse fonksyon ou nan repozitwa a. Bouton Deploye a ba ou kat opsyon:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Sa ki enpòtan nan etap sa a se ke ou ka soumèt fonksyon ou a nan repozitwa fonksyon Wolfram pou li disponib pou nenpòt moun. An menm tan an, ou kapab tou mete fonksyon ou pou yon kantite limite itilizatè yo. Pou egzanp, ou ka kreye yon fonksyon ki anime lokalman sou òdinatè w lan pou ke li disponib lè w itilize òdinatè sa a an patikilye. Oswa ou ka poste li nan ou kont nwaj, pou li disponib pou ou lè ou konekte ak nwaj la. Ou kapab tou òganize (deplwaye) fonksyon an piblikman atravè kont nwaj ou a. Li pa pral nan repozitwa santral Wolfram karakteristik, men ou pral kapab bay yon moun yon URL ki pral pèmèt yo jwenn karakteristik ou a nan kont ou. (Nan fiti, nou pral sipòte tou depo santral nan tout konpayi nou an.)

Se konsa, an n di ou vle aktyèlman soumèt fonksyon ou nan baz konesans fonksyon Wolfram. Pou fè sa, ou klike sou bouton "Soumèt" nan repozitwa a. Se konsa, sa k ap pase nan moman sa a? Aplikasyon w la imedyatman mete ann ann atandan pou revize ak apwobasyon pa ekip konsèvate nou an.

Pandan aplikasyon w lan ap pwogrese nan pwosesis apwobasyon an (ki anjeneral pran plizyè jou), w ap resevwa kominikasyon konsènan estati li a epi petèt sijesyon pou itilizasyon alavni. Men, yon fwa yo apwouve karakteristik ou a, li pral imedyatman pibliye nan Wolfram Feature Repository la epi yo pral disponib pou nenpòt moun ki itilize. (Epi sa a ap parèt nan dijere nouvèl nan nouvo karakteristik elatriye)

Ki sa ki ta dwe nan depo a?

Li ta dwe remake ke konpayi nou an gen estanda trè wo pou konplè, fyab ak bon jan kalite an jeneral, ak nan 6000 + fonksyon ke nou te deja bati nan lang nan Wolfram sou 30 + ane ki sot pase yo, tout satisfè kondisyon ki anwo yo. Objektif Wolfram Fonksyon Repository la se sèvi ak tout estrikti ak fonksyonalite ki deja egziste nan Wolfram Language pou ajoute fonksyon pi lejè (sa vle di, fonksyon pèfòmans ki pi wo) ke posib.

Natirèlman, fonksyon nan depo fonksyon Wolfram yo dwe konfòme yo ak prensip konsepsyon Wolfram Language - pou yo ka konplètman kominike avèk lòt fonksyon ak atant itilizatè yo sou fason fonksyon an ta dwe travay byen. Sepandan, fonksyon yo pa oblije egal-ego konplè oswa fyab.

Nan fonksyon yo entegre nan lang Wolfram, nou travay di pou fè fonksyon pwogramasyon yo jeneral ke posib. Sa yo te di, lè w ap nan depo fonksyon Wolfram la, pa gen anyen mal ak gen yon fonksyon nan li ki tou senpleman okipe kèk ka trè espesifik men itil. Pou egzanp, fonksyon an SendMailFromNotebook ka resevwa fichye nan yon fòma espesifik epi kreye lapòs nan yon fason espesifik. PolygonalDiagram kreye tablo ak sèlman sèten koulè ak etikèt, elatriye.

Yon lòt pwen ki gen rapò ak fonksyon yo entegre se ke konpayi nou an fè tout efò yo okipe tout ka atipik, kòrèkteman okipe opinyon ki pa kòrèk, ak sou sa. Nan yon depo fonksyon, li konplètman nòmal pou gen yon fonksyon espesyal ki okipe ka prensipal yo nan rezoud yon pwoblèm ak inyore tout lòt.

Pwen evidan an se ke li pi bon pou gen fonksyon ki fè plis ak fè li pi byen, men optimize pou yon depo fonksyon - kòm opoze a fonksyon yo entegre nan lang Wolfram - ta dwe gen plis fonksyon fourni ak plis fonksyon olye ke fouye nan. pwosesis aplikasyon chak fonksyon espesifik.

Koulye a, ann gade nan yon egzanp tès fonksyon nan yon depo. Atant konsistans pou fonksyon sa yo natirèlman pi ba pase pou fonksyon langaj entegre yo. Sa a se laverite espesyalman nan ka kote fonksyon depann sou resous ekstèn tankou APIs, li enpòtan toujou ap fè tès ki konsistan, ki otomatikman rive nan algoritm verifikasyon yo. Nan fichye nb la, ou ka presize definisyon klèman (nan seksyon Enfòmasyon adisyonèl) epi presize anpil tès jan sa defini nan swa antre ak pwodiksyon fisèl oswa objè karaktè konplè nan kalite. Tès Verifikasyon, otan ke ou wè anfòm. Anplis de sa, sistèm nan toujou ap eseye vire egzanp dokiman ou bay yo nan yon pwosesis verifikasyon (e pafwa sa a ka byen entansif resous, pou egzanp, pou yon fonksyon ki gen rezilta depann sou nimewo o aza oswa lè nan jounen an).

Kòm yon rezilta, repozitwa fonksyon an pral gen yon kantite konpleksite aplikasyon. Gen kèk ki pral jis yon liy sèl nan kòd, lòt moun ka enplike dè milye oswa dè dizèn de milye de liy, gen anpil chans lè l sèvi avèk anpil fonksyon èd. Ki lè li vo ajoute yon fonksyon ki mande anpil ti kòd pou defini? Fondamantalman, si pou yon fonksyon gen bon non mnemonik, ki itilizatè yo ta fasil konprann si yo te wè li nan yon moso nan kòd, Lè sa a, li ka deja ajoute. Sinon, li pi bon pou jis re-ajoute kòd la nan pwogram ou a chak fwa ou bezwen sèvi ak li.

Objektif prensipal yon depo fonksyon (jan non li sijere) se prezante nouvo karakteristik nan lang lan. Si ou vle ajoute nouvo done oswa nouvo antite, sèvi ak Wolfram Data repository. Men, e si ou vle prezante nouvo kalite objè pou kalkil ou a?

Gen aktyèlman de fason. Ou ka vle prezante yon nouvo kalite objè ki pral itilize nan nouvo fonksyon nan repozitwa fonksyon an. Ak nan ka sa a, ou ka toujou jis ekri reprezantasyon senbolik li yo epi sèvi ak li lè antre oswa pwodiksyon fonksyon nan yon depo fonksyon.

Men, e si ou vle reprezante yon objè epi Lè sa a, defini, atravè fonksyon ki deja egziste nan Lang Wolfram, ke ou vle travay avèk li? Lang nan Wolfram te toujou gen yon mekanis ki lejè pou sa a, ki rele UpValues. Avèk kèk restriksyon (espesyalman pou fonksyon ki pa ka evalye agiman yo), yon repozitwa fonksyon pèmèt ou tou senpleman reprezante yon fonksyon epi defini valè pou li. (Pou ogmante atant nan konsistans lè w ap kreye yon nouvo konsepsyon pi gwo ki konplètman entegre nan Wolfram Language se jeneralman yon pwosedi trè enpòtan ki pa ka reyalize lè w tou senpleman ogmante pri a nan pwojè a epi li se yon bagay ke konpayi nou an fè kòm yon pati nan pwojè yo. pou devlopman alontèm lang nan, travay sa a se pa yon objektif ki fikse nan kad devlopman depo a).

Se konsa, ki sa ki ta ka nan kòd la fonksyon nan yon depo fonksyon? Tout bagay bati nan Lang Wolfram la, nan kou (omwen si li pa reprezante menas pou sekirite ak pèfòmans nan pwogram nan tèt li, kòm yon anviwònman informatique) osi byen ke nenpòt fonksyon ki soti nan depo fonksyon an. Sepandan, gen lòt fonksyonalite: yon fonksyon nan yon depo fonksyon ka rele yon API, oswa nan Wolfram CloudOswa soti nan yon lòt sous. Natirèlman, gen kèk risk ki asosye ak sa a. Akòz lefèt ke pa gen okenn garanti ke API a pa pral chanje, ak fonksyon an nan magazen an fonksyon ap sispann travay. Pou ede idantifye pwoblèm tankou sa a, gen yon nòt sou paj dokimantasyon an (nan seksyon Kondisyon yo) pou nenpòt karakteristik ki depann sou plis pase fonksyonalite Wolfram Language ki entegre. (Natirèlman, lè li rive done reyèl, ka gen pwoblèm menm ak fonksyonalite sa a - paske done mond reyèl la toujou ap chanje, epi pafwa menm definisyon li yo ak estrikti chanje.)

Èske yo ta dwe ekri tout kòd pou repozitwa karakteristik Wolfram nan Wolfram? Sètènman, kòd ki andedan API ekstèn lan pa ta dwe ekri nan lang Wolfram, ki pa menm fè kòd lang lan. An reyalite, si ou jwenn yon fonksyon nan prèske nenpòt lang ekstèn oswa bibliyotèk, ou ka kreye yon wrapper ki pèmèt ou sèvi ak li nan repozitwa fonksyon Wolfram. (Anjeneral ou ta dwe itilize fonksyon entegre yo pou sa ExternalEvaluate oswa ExternalFunction nan kòd lang Wolfram.)

Se konsa, ki pwen nan fè sa a? Esansyèlman, sa pèmèt ou sèvi ak tout sistèm Wolfram Language entegre ak tout seri kapasite lojisyèl li yo. Si w jwenn aplikasyon baz la nan yon bibliyotèk ekstèn oswa yon lang, ou ka sèvi ak estrikti senbolik rich Wolfram Language pou kreye yon fonksyon siperyè ki pratik ki pèmèt itilizatè yo fasilman itilize nenpòt fonksyonalite ki deja aplike. Omwen a, sa ta dwe posib nan yon mond ideyal kote tout blòk bilding yo nan loading bibliyotèk elatriye egziste, nan ka sa a yo ta dwe okipe otomatikman pa Lang nan Wolfram. (Li ta dwe remake ke nan pratik ka gen pwoblèm ak etabli lang ekstèn sistèm òdinatè espesifik, ak depo nwaj ka poze pwoblèm sekirite adisyonèl).

By wout la, lè ou premye gade nan bibliyotèk ekstèn tipik, yo souvan sanble twò konplèks yo dwe kouvri nan jis kèk fonksyon, men nan anpil ka, anpil nan konpleksite a soti nan kreye enfrastrikti ki nesesè pou bibliyotèk la ak tout fonksyon yo. sipòte li. Sepandan, lè w ap itilize Wolfram Language, anjeneral enfrastrikti a deja bati nan pakè yo, kidonk pa gen okenn nesesite pou ekspoze tout fonksyon sipò sa yo an detay, men sèlman kreye fonksyon pou fonksyon espesifik aplikasyon "pi wo" nan bibliyotèk la. .

"Ekosistèm" nan baz la konesans

Si ou te ekri fonksyon ou itilize regilyèman, voye yo bay Wolfram Function Repository! Si yon bagay plis pa soti nan sa a (devlopman lang), Lè sa a, menm lè sa a li pral pi bon pou ou sèvi ak fonksyon yo pou itilizasyon pèsonèl. Sepandan, li lojik asime ke si ou itilize fonksyon yo regilyèman, petèt lòt itilizatè yo ap jwenn yo itil tou.

Natirèlman, ou ka jwenn tèt ou nan yon sitiyasyon kote ou pa kapab - oswa ou pa vle - pataje fonksyon ou oswa nan ka jwenn aksè nan resous enfòmasyon prive. Menm nan ka sa yo, ou ka tou senpleman deplwaye fonksyon yo nan pwòp kont nwaj ou a, espesifye dwa yo aksè a yo. (Si òganizasyon w genyen Wolfram Enterprise nwaj prive, Lè sa a, byento li pral kapab òganize pwòp repozitwa karakteristik prive li yo, ki ka administre nan òganizasyon w lan epi detèmine si wi ou non pou fòse opinyon yo pa itilizatè twazyèm pati yo wè.)

Fonksyon ou soumèt nan repozitwa fonksyon Wolfram la pa oblije pafè; yo jis dwe itil. Sa a se yon ti jan tankou seksyon "Erè" nan dokiman klasik Unix - nan "Definisyon Seksyon" gen yon seksyon "Nòt otè" kote ou ka dekri limit, pwoblèm, elatriye ke ou deja konnen sou fonksyon ou. Anplis de sa, lè ou soumèt karakteristik ou a nan repozitwa a, ou ka ajoute nòt soumèt ke yon ekip konsèvate pral li.

Yon fwa ke yon karakteristik pibliye, paj li a toujou gen de lyen nan pati anba a: "Voye yon mesaj sou karakteristik sa a"Ak"Diskite nan kominote Wolfram" Si w ap tache yon nòt (pa egzanp, di m sou ensèk), ou ka tcheke kaz ki di ou vle mesaj ou a ak enfòmasyon kontak yo pataje ak otè karakteristik la.

Pafwa ou jis vle sèvi ak fonksyon ki soti nan repozitwa fonksyon Wolfram, tankou fonksyon entegre, san gade kòd yo. Sepandan, si ou vle pran yon gade andedan, toujou gen yon bouton Notepad nan tèt la. Klike sou li epi w ap jwenn pwòp kopi kaye definisyon orijinal ou ki te soumèt nan depo karakteristik yo. Pafwa ou ka jis itilize li kòm yon egzanp pou bezwen ou yo. An menm tan an, ou kapab tou devlope pwòp modifikasyon ou nan fonksyon sa a. Ou ka vle afiche fonksyon sa yo ou te jwenn nan depo a sou òdinatè w lan oswa nan kont depo nwaj afid ou a, petèt ou vle soumèt yo nan baz konesans fonksyon an, petèt kòm yon vèsyon amelyore, elaji nan fonksyon orijinal la.

Nan lavni, nou planifye pou sipòte Git-style forking pou repozitwa karakteristik, men pou kounye a nou ap eseye kenbe li senp, epi nou toujou gen yon sèl vèsyon aksepte nan chak karakteristik bati nan lang lan. Pi souvan pase pa (sòf si devlopè yo abandone kenbe karakteristik yo te devlope epi reponn a soumèt itilizatè yo), otè orijinal la nan karakteristik nan pran kontwòl nan mizajou nan li epi li soumèt nouvo vèsyon, ki Lè sa a, revize epi, si yo pase pwosesis revizyon an. , pibliye nan lang lan.

Ann konsidere kesyon ki jan "vèsyon" fonksyon devlope yo ap travay. Kounye a, lè w sèvi ak yon fonksyon ki soti nan repozitwa fonksyon an, definisyon li yo pral estoke pou tout tan sou òdinatè w lan (oswa nan kont nwaj ou si w ap itilize nwaj la). Si gen yon nouvo vèsyon yon karakteristik ki disponib, pwochen fwa w ap itilize li w ap resevwa yon mesaj ki fè w konnen sa. Men, si ou vle mete ajou fonksyon an nan yon nouvo vèsyon, ou ka fè li lè l sèvi avèk lòd la Mizajou Resous. ("Fonksyon blob la" aktyèlman estoke plis enfòmasyon sou vèsyon, epi nou planifye pou rann sa a pi aksesib pou itilizatè nou yo alavni.)

Youn nan bèl bagay sou Wolfram Fonksyon Repository la se ke nenpòt pwogram Wolfram Language, nenpòt kote ka itilize fonksyon nan li. Si yon pwogram parèt nan yon notepad, li souvan pratik pou fòma fonksyon depo yo kòm fonksyon "objè binè fonksyon" ki fasil pou li (petèt ak yon seri vèsyon apwopriye).

Ou ka toujou jwenn aksè nan nenpòt fonksyon nan repozitwa fonksyon an lè l sèvi avèk tèks Fonksyon Resous[...]. Lè sa a se trè pratik si ou ekri kòd oswa Scripts dirèkteman pou Wolfram Engine a, pou egzanp, avèk lè l sèvi avèk yon IDE oswa editè kòd tèks (Li ta dwe espesyalman te note ke repozitwa fonksyon an konplètman konpatib ak Gratis Wolfram Engine pou devlopè).

Kouman li travay?

Anndan fonksyon yo nan repozitwa Wolfram sa a posib lè l sèvi avèk egzakteman menm bagay la sistèm resous yo baz, tankou nan tout lòt depo nou yo ki egziste deja (magazen done, Neural Net Repository, koleksyon pwojè Demo elatriye), tankou tout lòt resous sistèm Wolfram, Fonksyon Resous finalman baze sou fonksyon ResourceObject.

Konsidere Fonksyon Resous:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Anndan ou ka wè kèk enfòmasyon lè l sèvi avèk fonksyon an enfòmasyon:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Ki jan mete yon fonksyon resous travay? Youn ki pi senp la se yon ka piman lokal. Men yon egzanp ki pran yon fonksyon (nan ka sa a jis yon fonksyon pi) epi ki defini li kòm yon fonksyon resous pou yon sesyon pwogram yo bay:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Yon fwa ou fin fè definisyon an, ou ka itilize fonksyon resous la:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Remake byen ke gen yon icon nwa nan blob fonksyon sa a Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram. Sa vle di fonksyon BLOB la refere a fonksyon resous nan memwa ki defini pou sesyon aktyèl la. Yon karakteristik resous ki estoke pou tout tan sou òdinatè w lan oswa kont nwaj ou gen yon icon gri Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram. Epi gen yon icon zoranj pou yon karakteristik resous ofisyèl nan Wolfram Feature Repository Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram.

Se konsa, sa k ap pase lè ou itilize meni an Elaji nan Kaye Definisyon an? Premyèman, li pran tout definisyon yo nan notepad la ak nan yo kreye yon senbolik ResourceObject). (Men, si w ap itilize yon IDE ki baze sou tèks oswa pwogram, Lè sa a, ou ka tou klèman kreye ResourceObject)

Deplwaman lokal yon fonksyon ki soti nan yon depo sou òdinatè w lan fèt lè l sèvi avèk kòmandman an LocalCache pou yon objè resous pou konsève pou li kòm LocalObject sou sistèm dosye w la. Deplwaman nan yon kont nwaj fèt lè l sèvi avèk kòmandman an CloudDeploy pou yon objè resous, ak yon deplwaman nwaj piblik se CloudPublish. Nan tout ka ResourceRegister itilize tou pou anrejistre non fonksyon resous, se konsa Fonksyon Resous["non"] ap travay.

Si ou klike sou bouton Soumèt pou yon Repozitwa Fonksyon, sa k ap pase anba li Soumèt Resous rele sou yon objè resous. (Men, si w ap itilize yon koòdone antre tèks, ou ka rele tou Soumèt Resous dirèkteman.)

Pa default, soumèt yo fèt sou non ki asosye ak ID Wolfram ou a. Men, si w ap soumèt yon aplikasyon sou non yon ekip devlopman oswa òganizasyon, ou kapab mete idantite piblikatè separe epi olye itilize li kòm non pou kominike avèk opinyon ou.

Apre ou fin soumèt nenpòt nan fonksyon ou yo nan baz konesans fonksyon an, li pral nan keu pou revizyon. Si ou resevwa kòmantè kòm repons, yo pral anjeneral nan fòm lan nan yon dosye tèks ak "selil kòmantè" adisyonèl ajoute. Ou ka toujou tcheke estati aplikasyon w lan lè w vizite pòtal manm sistèm resous. Men, yon fwa yo apwouve karakteristik ou a, yo pral fè w konnen (pa imel) epi yo pral afiche karakteristik ou a nan repozitwa karakteristik Wolfram la.

Gen kèk sibtilite nan travay

Nan premye gade li ka sanble ke ou ka jis pran yon kaye definisyon epi mete li mo pou mo nan yon depo fonksyon, sepandan, gen aktyèlman yon anpil nan sibtilite ki enplike - ak manyen yo mande pou fè kèk trè konplèks meta-pwogramasyon, manyen pwosesis senbolik. kòm kòd la ki defini fonksyon an, ak Notepad la li menm se defini. Pifò nan sa rive anndan, dèyè sèn nan, men li ka gen kèk enplikasyon ki vo konpreyansyon si ou pral kontribye nan baz la konesans karakteristik.

Premye sibtilite imedya: Lè ou ranpli Kaye Definisyon an, ou ka tou senpleman refere a fonksyon ou toupatou lè l sèvi avèk yon non tankou MyFunction, ki sanble ak yon non regilye pou yon fonksyon nan Wolfram Language, men pou dokiman depo fonksyon sa a ranplase Fonksyon Resous["MyFunction"] se sa itilizatè yo pral aktyèlman itilize lè w ap travay ak fonksyon an.

Dezyèm sibtilite a: lè ou kreye yon fonksyon resous nan Kaye Definisyon an, tout depandans ki enplike nan definisyon fonksyon an dwe kaptire epi yo dwe enkli klèman. Sepandan, asire ke definisyon yo rete modilè, ou bezwen mete tout bagay nan yon inik espas non. (Natirèlman, fonksyon ki fè tout bagay, yo nan repozitwa fonksyon an.)

Tipikman ou p'ap janm wè okenn tras nan kòd ki itilize pou configure namespace sa a. Men, si pou kèk rezon ou rele yon senbòl ki pa egzekite andedan fonksyon ou, Lè sa a, ou pral wè ke senbòl sa a se nan yon kontèks entèn nan fonksyon an. Sepandan, lè w ap trete Notepad Definisyon an, omwen senbòl ki koresponn ak fonksyon an li menm se reglabl pou pi bon ekspozisyon kòm yon BLOB fonksyonèl olye ke yon karaktè anvan tout koreksyon nan kontèks entèn la.

Repozitwa fonksyon an se pou defini nouvo fonksyon. Ak fonksyon sa yo ka gen opsyon. Souvan paramèt sa yo (pa egzanp, Metòd oswa ImageSize) yo pral kapab itilize pou fonksyon entegre, osi byen ke pou moun ki gen senbòl entegre deja egziste. Men pafwa yon nouvo karakteristik ka mande nouvo opsyon. Yo nan lòd yo kenbe modilarite, paramèt sa yo bezwen yo dwe senbòl defini nan yon kontèks entèn inik (oswa yon bagay tankou fonksyon resous tout antye, se sa ki, tèt yo). Pou senplisite, repozitwa fonksyon an pèmèt ou defini nouvo opsyon nan definisyon fisèl. Ak pou konvenyans itilizatè a, definisyon sa yo (si yo sipoze yo itilize OptionValue и OptionsPattern) yo trete tou pou lè w ap itilize fonksyon, paramèt yo ka espesifye pa sèlman kòm fisèl, men tou kòm senbòl mondyal ak menm non yo.

Pifò fonksyon tou senpleman fè sa yo sipoze fè chak fwa yo rele yo, men kèk fonksyon bezwen inisyalize anvan yo ka kouri nan yon sesyon patikilye - ak rezoud pwoblèm sa a, gen yon seksyon "Inisyalizasyon" nan seksyon an Definisyon.

Fonksyon ki soti nan yon repozitwa ka itilize lòt fonksyon ki deja nan repozitwa a; yo nan lòd yo mete definisyon pou yon repozitwa fonksyon ki gen ladan de (oswa plis) fonksyon ki fè referans youn ak lòt, ou dwe deplwaye yo nan sesyon pwogram ou an pou ou kapab referans tankou sou yo Fonksyon Resous["non"], Lè sa a, ou ka kreye konbinezon yo nan fonksyon sa yo ou bezwen, egzanp (mwen pa t 'konprann) epi ajoute yon nouvo fonksyon nan depo a ki baze sou sa yo deja afiche pi bonè. (oswa deja oswa deja - tou de mo yo maladwa)

Kandida devlopman. Kisa ki ta dwe rive lè repozitwa a vin vrèman gwo?

Jodi a nou jis lanse Wolfram Feature Repository la, men avèk yon tan, nou espere ke gwosè li yo ak fonksyonalite yo ka ogmante dramatikman, epi kòm li ap grandi nan devlopman pral gen divès pwoblèm ke nou deja antisipe ka leve.

Premye pwoblèm nan konsène non fonksyon ak inik yo. Repozitwa fonksyon an fèt yon fason pou, tankou fonksyon entegre nan Lang Wolfram la, ou ka fè referans a nenpòt fonksyon tou senpleman lè w espesifye non li. Men, sa inevitableman vle di ke non fonksyon yo dwe globalman inik atravè repozitwa a, pou ke, pou egzanp, kapab genyen sèlman yon sèl. Fonksyon Resous["MyFavoriteFunction"].

Sa a ka sanble tankou yon gwo pwoblèm nan premye, men li la vo reyalize ke li nan fondamantalman pwoblèm nan menm jan ak bagay sa yo tankou domèn entènèt oswa manch medya sosyal. Ak reyalite a se ke sistèm nan tou senpleman bezwen gen yon anrejistre - e sa a se youn nan wòl yo ke konpayi nou an pral fè pou baz konesans fonksyon Wolfram. (Pou vèsyon prive nan yon depo, rjistrè yo ka administratè.) Natirèlman, yon domèn entènèt ka anrejistre san yo pa gen anyen sou li, men nan yon depo fonksyon, non yon fonksyon ka anrejistre sèlman si gen yon definisyon aktyèl la. fonksyon an.

Yon pati nan wòl nou nan jere baz konesans fonksyon Wolfram se asire ke non yo chwazi pou yon fonksyon se lojik dapre definisyon fonksyon an epi ke li swiv konvansyon nonmen Wolfram Language. Nou gen plis pase 30 ane eksperyans nan nonmen fonksyon entegre nan Wolfram Language, epi ekip konsèvatè nou an pral pote eksperyans sa a nan depo fonksyon an tou. Natirèlman, toujou gen eksepsyon. Pa egzanp, li ka sanble pi bon pou gen yon non kout pou kèk fonksyon, men li pi bon pou "defann" ak yon non ki pi long, ki pi espesifik paske ou gen mwens chans rankontre yon moun ki vle fè yon non fonksyon menm jan an nan lavni. .

(Li ta dwe remake isit la ke tou senpleman ajoute kèk tag manm nan dezabigwate fonksyon yo pa pral gen efè a gen entansyon. Paske sof si ou ensiste pou toujou bay yon tag, w ap bezwen defini yon tag default pou nenpòt fonksyon bay yo, epi tou asiyen tag otè. , ki ankò ta mande kowòdinasyon mondyal.)

Kòm baz konesans nan fonksyon Wolfram ap grandi, youn nan pwoblèm ki pral gen anpil chans rive se dekouvèt fonksyon, pou ki sistèm nan bay. fonksyon rechèch (ak fichye definisyon yo ka gen ladan mo kle, elatriye). Pou fonksyon entegre nan Wolfram Language, gen tout kalite kwa-referans nan dokiman an pou ede "fè piblisite" fonksyon yo. Fonksyon nan yon depo fonksyon ka fè referans a fonksyon entegre yo. Men, sa ki sou lòt fason alantou? Pou fè sa, nou pral fè eksperyans ak diferan desen pou ekspoze fonksyon depo nan paj dokimantasyon pou fonksyon entegre.

Pou fonksyon entegre nan Wolfram Language gen yon sa yo rele kouch deteksyon ki ofri pa rezo "paj èd", ki bay lis òganize karakteristik ki gen rapò ak zòn espesifik. Li toujou difisil pou byen balanse paj man, epi kòm lang Wolfram ap grandi, paj man souvan bezwen konplètman reòganize. Li byen fasil pou mete fonksyon ki soti nan yon depo nan kategori laj, e menm pou kraze kategori sa yo toujou, men li pi enpòtan pou gen paj referans lang byen òganize. Li poko klè ki jan pi bon yo kreye yo pou tout baz konesans fonksyon an. Pa egzanp, CreateResourceObjectGallery nan depo karakteristik yo, nenpòt moun ka poste yon paj entènèt ki gen "piks" yo nan depo a:

Wolfram Fonksyon Repository: platfòm aksè louvri pou ekstansyon lang Wolfram

Repozitwa fonksyon Wolfram configuré kòm yon depo fonksyon ki pèsistan, kote nenpòt fonksyon ladan l ap toujou travay. Natirèlman, nouvo vèsyon karakteristik yo ka vin disponib, epi nou espere ke kèk karakteristik pral nan kou vin demode sou tan. Fonksyon yo ap travay si yo itilize yo nan pwogram yo, men paj dokiman yo ap mennen nan nouvo fonksyon ki pi avanse.

Wolfram Feature Repository la fèt pou ede w dekouvri nouvo karakteristik byen vit epi aprann nouvo fason pou itilize lang Wolfram la. Nou trè optimis ke kèk nan sa ki te eksplore nan repozitwa karakteristik yo pral evantyèlman gen sans pou yo vin pati entegre nan nwayo Wolfram Language. Pandan dènye dekad la nou te gen yon seri menm jan an karakteristik ki te orijinèlman prezante nan Wolfram | Alpha. Ak youn nan leson yo aprann nan eksperyans sa a se ke reyalize estanda kalite ak konsistans ke nou konsantre sou nan tout bagay ki bati nan lang Wolfram mande anpil travay, ki se souvan pi difisil pase efò inisyal la nan aplikasyon lide a. Menm si sa, yon fonksyon nan baz konesans fonksyon an ka sèvi kòm yon prèv konsèp trè itil pou yon fonksyon nan lavni ki ka evantyèlman bati nan lang Wolfram la.

Bagay ki pi enpòtan isit la se ke yon fonksyon nan yon depo fonksyon se yon bagay ki disponib pou chak itilizatè yo itilize kounye a. Li posib ke yon karakteristik lang natif natal ta ka pi bon ak plis pèfòmans, men yon repozitwa karakteristik ta pèmèt itilizatè yo gen aksè a tout nouvo karakteristik yo touswit. Epi, sa ki pi enpòtan, konsèp sa a pèmèt tout moun ajoute nenpòt nouvo karakteristik yo vle.

Byen bonè nan istwa a nan lang Wolfram, lide sa a pa t 'te travay kòm byen ke li te genyen, men nan etap sa a gen anpil efò yo mete nan lang lan, ak yon konpreyansyon byen fon nan prensip konsepsyon lang, ke li kounye a sanble anpil. posib pou yon gwo kominote itilizatè yo ajoute karakteristik ki pral kenbe konsistans konsepsyon pou fè yo itil nan yon pakèt itilizatè.

Gen yon espri talan enkwayab (?) nan kominote itilizatè Wolfram Language. (Natirèlman, kominote sa a gen ladann anpil moun dirijan R&D nan yon varyete domèn.) Mwen espere ke Wolfram Feature Repository la pral bay yon platfòm efikas pou debloke ak difize lespri talan sa a. Se sèlman ansanm nou ka kreye yon bagay ki pral siyifikativman elaji zòn nan kote paradigm nan enfòmatik lang Wolfram ka aplike.

Nan plis pase 30 ane, nou te vini yon fason lontan ak lang nan Wolfram. Koulye a, ansanm, ann ale menm pi lwen. Mwen ankouraje tout itilizatè ki respekte lang Wolfram atravè mond lan pou yo sèvi ak depo karakteristik yo kòm yon platfòm pou sa, ansanm ak nouvo pwojè lojisyèl tankou Free Wolfram Engine for Developers.

Sous: www.habr.com

Add nouvo kòmantè