Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Pozdravljeni, Habr! Predstavljam vam prevod objave Stephena Wolframa "Repozitorij funkcij Wolfram: zagon odprte platforme za razširitev jezika Wolfram".

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Predpogoji za konsistentnost jezika Wolfram

Danes smo skupaj s programskim jezikom na pragu velikih dosežkov Wolfram jezik. Pred tremi tedni smo začeli brezplačen motor Wolfram za razvijalcepomagati našim uporabnikom pri integraciji jezika Wolfram v njihove obsežne programe programske opreme. Danes začenjamo Repozitorij funkcij Wolfram, da bi zagotovili usklajeno platformo za funkcije, ustvarjene za razširitev jezika Wolfram, odpremo pa tudi repozitorij funkcij za vse, ki lahko prispevajo k razvoju našega programskega izdelka.

Repozitorij funkcij Wolfram je nekaj, kar omogoča edinstvena narava jezika Wolfram, ne samo kot programskega jezika, ampak tudi kot jezik polnega računalništva. V tradicionalnih programskih jezikih dodajanje pomembnih novih funkcij običajno vključuje ustvarjanje celotnih dodatnih knjižnic, ki lahko delujejo ali pa ne delujejo, če se uporabljajo skupaj. Vendar v jeziku Wolfram toliko je že vgrajenega v sam jezik, da je mogoče njegovo funkcionalnost bistveno razširiti s preprostim dodajanjem novih funkcij, ki se takoj vključijo v celostno strukturo celotnega jezika.

Na primer, repozitorij funkcij Wolfram že vsebuje 532 novih funkcij razdeljen na 26 tematskih kategorij:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Prav tako več kot 6000 standardnih funkcij, vgrajen v jezik Wolfram, ima vsaka funkcija iz repozitorija dokumentacijsko stran s podrobnim opisom in primeri dela:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Če želite priti do strani, kopirajte zgornji predmet (funkcija BLOB), ga prilepite v vnosno vrstico in nato zaženite funkcijo - že je vgrajena v jezik Wolfram in je privzeto podprta, začenši z različica 12.0:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Tukaj je treba opozoriti, da pri obdelavi Logo QRCode Ni vam treba, na primer, nastaviti "knjižnice za obdelavo slik" - saj smo v jeziku Wolfram že implementirali dosleden in skrbno algoritemski način. obdelava slik, ki jih je mogoče takoj obdelati z različnimi grafičnimi jezikovnimi funkcijami:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Upam, da s podporo čudovita in nadarjena skupnost, ki raste in se širi (na podlagi jezika Wolfram) v zadnjih nekaj desetletjih. Repozitorij funkcij Wolfram bo v bližnji prihodnosti omogočil znatno razširitev nabora (morda potencialno pomembnih, specializiranih za različna področja znanosti in tehnologije) funkcij, ki so na voljo v jeziku. Tako postane mogoče uporabljati tako vsebino jezika (njegove vgrajene funkcije) kot razvojna načela, ki se izvajajo na podlagi jezika. (Tukaj je treba opozoriti, da ima jezik Wolfram že več kot 30-letna zgodovina razvoja in stabilne rasti).
Funkcije iz repozitorija lahko vsebujejo majhne ali velike dele kode, napisane v jeziku Wolfram. Na primer, to so lahko klici zunanje API-je in storitve ali zunanje knjižnice v drugih jezikih. Edinstvena značilnost tega pristopa je, da ko se poglobite do funkcionalnosti na ravni uporabnika, ne bo morebitnih nedoslednosti, ker je pristop zgrajen na vrhu dosledne strukture jezika Wolfram - in vsaka funkcija bo samodejno delovala pravilno - natanko tako, kot nameravala bi morala.
Lupina in programska struktura Wolframovega repozitorija funkcij je zasnovana tako, da lahko vsak prispeva k skupnemu cilju na najbolj preprost in priročen način zanj – pravzaprav samo tako, da izpolnite besedilno datoteko beležnice (s pripono nb) WL. Vgrajene samodejne funkcije vam omogočajo, da preverite nove funkcije, dodane v repozitorij, da zagotovite njihovo integracijo v jezik. Naše podjetje stavi na široko paleto uporabnikov, ki lahko svoje funkcije integrirajo v jezik, namesto na veliko kompleksnost novih funkcij – in čeprav obstaja postopek pregleda, ne vztrajamo pri ničemer podobnem skrbno analizo načrtovanja ali strogi standardi za popolnost in zanesljivost novih uporabniških funkcij, v nasprotju s strožjim testiranjem funkcij, ki so vgrajene v osnovni jezik, ki ga uporabljamo.

V tem pristopu je veliko kompromisov in podrobnosti, vendar je naš cilj optimizirati repozitorij funkcij Wolfram za uporabniško izkušnjo in zagotoviti, da nove uporabniške funkcije pomembno prispevajo k razvoju jezika. Ko rastemo, ne dvomim, da bomo morali izumiti nove metode za obdelavo in preverjanje funkcij, vgrajenih v skladišče, nenazadnje za organiziranje velikega števila funkcij in iskanje tistih, ki jih uporabniki potrebujejo. Je pa spodbudno, da je pot, ki smo jo izbrali, dober začetek. Jaz osebno dodal več funkcij v izvirno bazo podatkov. Mnogi od njih temeljijo na kodi, ki sem jo osebno razvijal kar nekaj časa. Potreboval sem le nekaj minut, da sem jih potisnil v skladišče. Zdaj, ko so v skladišču, lahko končno – takoj in kadarkoli – uporabljam te funkcije po potrebi, ne da bi mi bilo treba skrbeti za iskanje datotek, prenašanje paketov itd.

Povečana učinkovitost ob zmanjšanju stroškov

Še pred internetom so obstajali načini za skupno rabo kode jezika Wolfram (naš prvi večji centralizirani projekt je bil MathSource, ustvarjen za Mathematico leta 1991 na podlagi CD-ROM-a itd.). Seveda je pristop, predlagan za implementacijo, ki temelji na repozitoriju funkcij Wolfram, močnejše in zanesljivejše orodje za izvajanje zgornjih nalog.

Naše podjetje si že več kot 30 let marljivo prizadeva za ohranitev integritete jezikovne strukture Wolfram, kar je ključnega pomena za zagotovitev, da jezik Wolfram ne postane le programski jezik, ampak tudi polnopravni računalniški jezik. In tako je bistvo pristopa k implementaciji repozitorija funkcij Wolfram uporaba enotnega pristopa k programiranju in razvoju novih funkcij, ki se zaporedno dodajajo in prilegajo okvirju jezika, tako da se lahko razvija in sorazvija.

V implementacijski strukturi vsake funkcije se pojavljajo različni računski procesi. Pri tem je treba opozoriti, da je nujno, da ima funkcija jasen in enoten videz ter vizualno berljivost za uporabnika. V tem kontekstu so vgrajene funkcije jezika Wolfram predstavljene z več kot 6000 zaporednimi primeri pravilnega programiranja funkcij (to so naši video posnetki programiranja v živoki vključujejo na stotine ur procesa ustvarjanja standardnih programov). Zaradi tega pristopa lahko skladišče funkcij Wolfram dobro deluje zaradi strukturne narave jezika Wolfram z velikim številom dodatnih in raznolikih knjižnic, ki so že vgrajene v jezik. Na primer, če imate funkcijo, ki obdeluje slike, oz redki niziAli molekularne strukturein geografski podatki ali nekatere druge - njihova dosledna simbolna predstavitev že obstaja v jeziku in zahvaljujoč temu vaša funkcija takoj postane združljiva z drugimi funkcijami v jeziku.

Ustvarjanje repozitorija, ki dejansko dobro deluje, je zanimiva naloga metaprogramiranja. Na primer, presežek omejitev v programu ne bo omogočil pridobitve zahtevane poenotenosti in univerzalnosti algoritma. Tako kot pri premajhnem številu funkcionalnih omejitev ne boste mogli izvesti dovolj pravilnega zaporedja izvajanja algoritma. Več prejšnjih primerov implementacije kompromisa teh pristopov, ki jih izvaja naše podjetje, je delovalo precej stabilno - to so: Predstavitve projekta Tungsten, ki je bil predstavljen leta 2007 in zdaj deluje na spletu z več kot 12000 uporabniško interaktivnimi predstavitvami. IN Baza podatkov Wolfram obstaja več kot 600 že pripravljenih baz podatkov, ki jih je mogoče uporabiti v jeziku Wolfram, in Shramba nevronske mreže Wolfram se skoraj vsak teden napolni z novimi nevronskimi mrežami (zdaj jih je že 118) in se prek funkcije takoj povežejo NetModel v jeziku Wolfram.

Vsi zgoraj navedeni primeri imajo temeljno značilnost - objekti in funkcije, zbrani v projektu, imajo zelo visoko stopnjo strukturiranosti in porazdelitve procesov. Seveda se podrobnosti o strukturi tega, kaj je demo ali nevronska mreža ali kaj drugega, lahko zelo razlikujejo, vendar temeljna struktura katerega koli trenutnega repozitorija vedno ostaja enaka. Torej, kakšno je vaše mnenje, dragi uporabnik, o ustvarjanju takšnega repozitorija, ki dodaja razširitve jeziku Wolfram? Jezik Wolfram je zasnovan tako, da je izjemno prilagodljiv, zato ga je mogoče razširiti in spremeniti na kakršen koli način. Ta okoliščina je izjemno pomembna za zmožnost hitrega ustvarjanja različnih obsežnih programskih projektov v jeziku Wolfram. Tu je treba opozoriti, da se bodo s povečanjem prilagodljivosti jezika stroški projektov, izvedenih v takem jeziku, neizogibno povečali. To je posledica dejstva, da bolj ko uporabnik uporablja takšen jezik, več namenske funkcionalnosti je deležen, ne smemo pa pozabiti, da ima tak pristop lahko tudi negativne strani v smislu nezmožnosti zagotavljanja konsistentne konsistentnosti programskih modulov.

Obstaja pogosta težava s knjižnicami v tradicionalnih programskih jezikih - če na primer uporabljate eno knjižnico, bo koda delovala pravilno, če pa poskušate uporabiti več knjižnic, ni nobenega zagotovila, da bodo pravilno delovale med seboj . Poleg tega v tradicionalnih programskih jezikih - za razliko od polnopravnega računalniškega jezika - ni mogoče zagotoviti prisotnosti doslednih vgrajenih predstavitev za katere koli funkcije ali tipe podatkov, razen njihovih osnovnih struktur. Toda v resnici je težava še večja, kot se zdi na prvi pogled: če gradimo obsežno vertikalo funkcionalnosti, potem brez ogromnih stroškov centraliziranega projektnega programiranja, ki ga vložimo v jezik Wolfram, ni mogoče doseči doslednost. Zato je pomembno, da vsi programski moduli vedno pravilno delujejo skupaj.

Ideja za skladiščem funkcij Wolfram je torej izogniti se zgoraj opisani težavi s preprostim dodajanjem razširitev jeziku v relativno majhnih delih kode prek posameznih funkcij, ki jih je lažje razviti kot skladne module. Kot rečeno, obstajajo programske funkcije, ki jih ni mogoče narediti priročne z uporabo posameznih funkcij (in naše podjetje načrtuje, da bo v bližnji prihodnosti izdalo optimiziran programski algoritem za pomoč pri implementaciji obsežnih programskih paketov). Vendar pa na podlagi funkcij, ki so že vgrajene v jezik Wolfram, obstajajo številne možnosti programiranja, ki se izvajajo na podlagi posameznih funkcij. Ideja tukaj je, da je mogoče z relativno malo programskega truda ustvariti številne nove in zelo uporabne funkcije, ki bodo zagotavljale zadostno koherentnost zasnove, bodo med seboj dobro usklajene, poleg tega pa bodo bodo lahko v prihodnosti enostavno in široko uporabljali v jeziku.

Ta pristop je seveda kompromis. Če bi implementirali večji paket, bi si lahko predstavljali popolnoma nov svet funkcionalnosti, ki bi bil izjemno močan in uporaben. Če obstaja potreba po novi funkcionalnosti, ki se bo ujemala z vsem ostalim, vendar niste pripravljeni vložiti veliko truda v razvoj projekta, lahko to na žalost privede do zmanjšanja obsega vašega projekta. Zamisel za repozitorij funkcij Wolfram je zagotoviti funkcionalnost definirajočemu delu projekta; ta pristop bo dodal zmogljivo funkcionalnost, hkrati pa bo olajšal vzdrževanje dobre konsistentnosti v programskem projektu.

Pomagajte pri dodajanju funkcij po meri v repozitorij funkcij

Naša ekipa se je zelo trudila, da bi uporabnikom olajšala prispevanje k funkcijam repozitorija Wolfram. Na namizju (že v različica 12.0), lahko preprosto zaporedno greste skozi zavihke glavnega menija: Datoteka > Novo > Element skladišča > Element skladišča funkcij in dobili boste "Definicija Notebook" (programsko znotraj delovne mize. Uporabite lahko tudi analogno funkcijo - CreateNotebook["FunctionResource"]):

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Opraviti morate dva glavna koraka: prvič, dejansko zapišite kodo za svojo funkcijo in drugič, zapišite dokumentacijo, ki ponazarja, kako naj vaša funkcija deluje.
Kliknite gumb »Odpri vzorec« na vrhu, da vidite primer, kaj morate storiti:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

V bistvu poskušate ustvariti nekaj podobnega vgrajeni funkciji v jeziku Wolfram. Le da lahko naredi nekaj veliko bolj specifičnega kot vgrajena funkcija. Hkrati bodo pričakovanja glede njegove popolnosti in zanesljivosti precej manjša.
Svoji funkciji morate dati ime, ki sledi smernicam za poimenovanje funkcij jezika Wolfram. Poleg tega boste morali razviti dokumentacijo za svojo funkcijo, podobno kot vgrajene funkcije jezika. O tem bom podrobneje spregovoril kasneje. Za zdaj samo opazite, da je v vrsti gumbov na vrhu datoteke zvezka definicij gumb "Stilske smernice", ki pojasnjuje, kaj storiti, in gumb Orodja, ki ponuja orodja za oblikovanje dokumentacije vaše funkcije.
Ko ste prepričani, da je vse pravilno izpolnjeno in ste pripravljeni, kliknite gumb »Preveri«. Povsem normalno je, da še niste ugotovili vseh podrobnosti. Tako se bo funkcija »Preveri« samodejno zagnala in izvedla veliko preverjanj sloga in doslednosti. Pogosto vas bo takoj pozval, da potrdite in sprejmete popravke (na primer: »Ta vrstica se mora končati z dvopičjem« in vas bo pozvala, da vnesete dvopičje). Včasih vas bo prosila, da sami kaj dodate ali spremenite. Nenehno bomo dodajali nove funkcije samodejni funkciji gumba Preveri, vendar je v bistvu njegov namen zagotoviti, da vse, kar pošljete v repozitorij funkcij, že natančno sledi čim več slogovnim smernicam

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Torej, po zagonu »Preveri«, lahko uporabite »Predogled«. »Predogled« ustvari predogled strani z dokumentacijo, ki ste jo definirali za svojo funkcijo. Prav tako lahko ustvarite predogled za datoteko, ustvarjeno v vašem računalniku, ali za datoteko, ki se nahaja v shrambi v oblaku. Če iz nekega razloga niste zadovoljni s tem, kar vidite v predogledu, se preprosto vrnite nazaj in naredite potrebne popravke, nato pa znova kliknite gumb Predogled.
Zdaj ste pripravljeni potisniti svojo funkcijo v repozitorij. Gumb Razmesti vam ponuja štiri možnosti:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Pomembno pri tem koraku je, da lahko svojo funkcijo pošljete v repozitorij funkcij Wolfram, tako da je na voljo vsem. Hkrati lahko svojo funkcijo postavite tudi za omejeno število uporabnikov. Ustvarite lahko na primer funkcijo, ki gostuje lokalno v vašem računalniku, tako da je na voljo, ko uporabljate ta določen računalnik. Lahko pa ga objavite v svojem račun v oblaku, tako da vam je na voljo, ko ste povezani v oblak. Funkcijo lahko tudi javno gostite (razmestite) prek svojega računa v oblaku. Ne bo v osrednjem skladišču funkcij Wolfram, vendar boste lahko nekomu dali URL, ki mu bo omogočil, da pridobi vašo funkcijo iz vašega računa. (V prihodnosti bomo podpirali tudi centralne repozitorije v našem podjetju.)

Recimo, da želite dejansko predložiti svojo funkcijo v bazo znanja o funkcijah Wolfram. Če želite to narediti, kliknite gumb »Pošlji« v repozitorij. Torej, kaj se dogaja v tem trenutku? Vaša prijava je takoj v čakalni vrsti za pregled in odobritev s strani naše predane ekipe kuratorjev.

Ko bo vaša aplikacija napredovala skozi postopek odobritve (ki običajno traja več dni), boste prejeli sporočila o njenem statusu in morebitne predloge za prihodnjo uporabo. Ko pa bo vaša funkcija odobrena, bo takoj objavljena v repozitoriju funkcij Wolfram in bo na voljo vsem za uporabo. (In to se bo pojavilo v povzetki novic o novih funkcijah in tako naprej)

Kaj naj bo v skladišču?

Opozoriti je treba, da ima naše podjetje zelo visoke standarde za popolnost, zanesljivost in splošno kakovost ter od 6000+ funkcij, ki smo jih že vgradili v jezik Wolfram v zadnjih 30+ letih, vse izpolnjujejo zgornje zahteve. Cilj repozitorija funkcij Wolfram je uporabiti vso strukturo in funkcionalnost, ki že obstaja v jeziku Wolfram, da bi dodali čim več lažjih funkcij (to je funkcij z višjo zmogljivostjo).

Seveda morajo biti funkcije v repozitoriju funkcij Wolfram v skladu z načeli oblikovanja jezika Wolfram Language – tako da lahko v celoti sodelujejo z drugimi funkcijami in pričakovanji uporabnikov glede pravilnega delovanja funkcije. Ni pa nujno, da so funkcije enako popolne ali zanesljive.

Pri vgrajenih funkcijah jezika Wolfram se močno trudimo narediti programske funkcije čim bolj splošne. Kot rečeno, ko ste v repozitoriju funkcij Wolfram, ni nič narobe, če imate v njem funkcijo, ki preprosto obravnava nekaj zelo specifičnih, a uporabnih primerov. Na primer funkcija SendMailFromNotebook lahko prejema datoteke v eni določeni obliki in ustvarja pošto na en specifičen način. Poligonalni diagram ustvarja grafikone samo z določenimi barvami in oznakami itd.

Druga točka, povezana z vgrajenimi funkcijami, je, da se naše podjetje po svojih najboljših močeh trudi obravnavati vse netipične primere, pravilno obravnavati nepravilne vnose itd. V repozitoriju funkcij je povsem normalno, da obstaja posebna funkcija, ki obravnava glavne primere reševanja problema in ignorira vse druge.

Očitno je, da je bolje imeti funkcije, ki naredijo več in bolje, vendar mora optimizacija za repozitorij funkcij – v nasprotju z vgrajenimi funkcijami jezika Wolfram – imeti več funkcij v paketu z več funkcijami, namesto da bi se poglabljala v postopke izvajanja vsake specifične funkcije.

Zdaj pa si poglejmo primer testiranja funkcij v repozitoriju. Pričakovanja glede skladnosti za takšne funkcije so seveda veliko nižja kot za funkcije vgrajenega jezika. To še posebej velja v primerih, ko so funkcije odvisne od zunanjih virov, kot so API-ji, zato je pomembno nenehno izvajati dosledne teste, kar se samodejno zgodi v algoritmih preverjanja. V datote VerificationTest, kolikor se vam zdi primerno. Poleg tega sistem nenehno poskuša primere dokumentacije, ki jih posredujete, spremeniti v postopek preverjanja (in včasih je to lahko precej zahtevno, na primer za funkcijo, katere rezultat je odvisen od naključnih števil ali ure).

Posledično bo imel repozitorij funkcij številne zapletene izvedbe. Nekatere bodo samo ena vrstica kode, druge lahko vključujejo na tisoče ali desettisoče vrstic, verjetno z uporabo številnih pomožnih funkcij. Kdaj se splača dodati funkcijo, ki zahteva zelo malo kode za definiranje? V bistvu, če za funkcijo obstaja dobro mnemonično ime, ki bi ga uporabniki zlahka razumeli, če bi ga videli v delčku kode, potem ga je že mogoče dodati. V nasprotnem primeru je verjetno bolje, da kodo preprosto znova dodate svojemu programu vsakič, ko jo morate uporabiti.

Glavni namen repozitorija funkcij (kot pove že njegovo ime) je uvajanje novih funkcij v jezik. Če želite dodati nove podatke oz nove entitete, uporaba Repozitorij podatkov Wolfram. Kaj pa, če želite uvesti nove vrste predmetov za vaše izračune?

Dejansko obstajata dva načina. Morda boste želeli uvesti nov tip objekta, ki bo uporabljen v novih funkcijah v repozitoriju funkcij. In v tem primeru lahko vedno samo zapišete njegovo simbolno predstavitev in jo uporabite pri vnosu ali izpisu funkcij v repozitoriju funkcij.

Kaj pa, če želite predstaviti predmet in nato prek obstoječih funkcij v jeziku Wolfram definirati, da želite delati z njim? Jezik Wolfram je za to vedno imel lahek mehanizem, imenovan UpValues. Z nekaterimi omejitvami (zlasti za funkcije, ki ne more ovrednotiti njihovih argumentov), repozitorij funkcij vam omogoča, da preprosto predstavite funkcijo in definirate vrednosti zanjo. (Povečanje pričakovanja doslednosti pri ustvarjanju novega velikega dizajna, ki je popolnoma integriran v celotnem jeziku Wolfram, je na splošno zelo pomemben postopek, ki ga ni mogoče doseči s preprostim povečanjem stroškov projekta in je nekaj, kar naše podjetje počne kot del projektov za dolgoročni razvoj jezika ta naloga ni cilj, ki je zastavljen kot del razvoja repozitorija).

Torej, kaj je lahko v kodi funkcije v repozitoriju funkcij? Vse je vgrajeno v jezik Wolfram, seveda (vsaj če ne predstavlja grožnje za varnost in delovanje samega programa kot računalniškega okolja) kot tudi katere koli funkcije iz repozitorija funkcij. Vendar pa obstajajo tudi druge funkcije: funkcija v repozitoriju funkcij lahko pokliče API ali v Wolfram CloudAli iz drugega vira. Seveda so s tem povezana nekatera tveganja. Zaradi dejstva, da ni zagotovil, da se API ne bo spremenil, in funkcija v shrambi funkcij bo prenehala delovati. Za pomoč pri prepoznavanju takšnih težav je na strani z dokumentacijo (v razdelku Zahteve) opomba za vse funkcije, ki se zanašajo na več kot le na vgrajeno funkcionalnost jezika Wolfram. (Seveda, ko gre za resnične podatke, lahko pride do težav tudi s to funkcionalnostjo - ker se podatki iz resničnega sveta nenehno spreminjajo in včasih se spremenijo celo njihove definicije in struktura.)

Ali naj bo vsa koda za repozitorij funkcij Wolfram napisana v Wolframu? Vsekakor koda znotraj zunanjega API-ja ne bi smela biti napisana v jeziku Wolfram, ki sploh ne tvori jezikovne kode. Pravzaprav, če najdete funkcijo v skoraj katerem koli zunanjem jeziku ali knjižnici, lahko ustvarite ovoj, ki vam omogoča, da jo uporabite v repozitoriju funkcij Wolfram. (Običajno morate za to uporabiti vgrajene funkcije ExternalEvaluate ali Zunanja funkcija v jezikovni kodi Wolfram.)

Torej, kakšen smisel ima to početje? V bistvu vam to omogoča uporabo celotnega integriranega sistema Wolfram Language in njegovega celotnega poenotenega nabora zmogljivosti programske opreme. Če pridobite osnovno izvedbo iz zunanje knjižnice ali jezika, lahko nato uporabite bogato simbolno strukturo jezika Wolfram, da ustvarite priročno funkcijo na najvišji ravni, ki uporabnikom omogoča preprosto uporabo katere koli že implementirane funkcionalnosti. Vsaj to bi moralo biti izvedljivo v idealnem svetu, kjer obstajajo vsi gradniki za nalaganje knjižnic itd., v tem primeru pa bi jih samodejno obravnaval jezik Wolfram. (Upoštevati je treba, da lahko v praksi pride do težav z nastavitev zunanjih jezikov določen računalniški sistem in shranjevanje v oblaku lahko povzroči dodatne varnostne težave).

Mimogrede, ko prvič pogledate tipične zunanje knjižnice, se pogosto zdijo preveč zapletene, da bi jih pokrili le z nekaj funkcijami, vendar v mnogih primerih velik del kompleksnosti izvira iz ustvarjanja infrastrukture, potrebne za knjižnico, in vseh funkcij za podpiraj ga. Vendar pa je pri uporabi jezika Wolfram infrastruktura običajno že vgrajena v pakete, zato ni treba podrobno izpostaviti vseh teh podpornih funkcij, ampak samo ustvariti funkcije za "najvišje" funkcije, specifične za aplikacijo, v knjižnici. .

»Ekosistem« baze znanja

Če ste napisali funkcije, ki jih redno uporabljate, jih pošljite v repozitorij funkcij Wolfram! Če se iz tega ne izcimi nekaj več (jezikovni razvoj), bo tudi takrat veliko bolj priročno uporabljati funkcije za osebno uporabo. Vendar pa je logično domnevati, da če boste funkcije redno uporabljali, bodo morda koristne tudi drugim uporabnikom.

Seveda se lahko znajdete v situaciji, ko ne morete - ali ne želite - deliti svojih funkcij ali v primeru pridobitve dostopa do zasebnih virov informacij. Tudi v takšnih primerih lahko preprosto namestite funkcije v svojem računu v oblaku, določanje pravic dostop do njih. (Če ima vaša organizacija Zasebni oblak Wolfram Enterprise, potem bo kmalu lahko gostil lastno zasebno repozitorij funkcij, ki ga je mogoče upravljati znotraj vaše organizacije in nastaviti, ali naj vsili poglede uporabnikom tretjih oseb.)

Ni nujno, da so funkcije, ki jih pošljete v repozitorij funkcij Wolfram, popolne; samo koristni morajo biti. To je nekoliko podobno razdelku »Napake« v klasični dokumentaciji Unixa - v razdelku »Definicije« je razdelek »Avtorjeve opombe«, kjer lahko opišete omejitve, težave itd., ki jih že poznate o vaši funkciji. Poleg tega lahko, ko svojo funkcijo oddate v repozitorij, dodate opombe k oddaji, ki jih bo prebrala posebna skupina kustosov.

Ko je funkcija objavljena, ima njena stran na dnu vedno dve povezavi: "Pošljite sporočilo o tej funkciji"In"Razpravljajte v skupnosti Wolfram" Če prilagate opombo (npr. Povejte mi o hroščih), lahko označite polje, ki pravi, da želite, da se vaše sporočilo in kontaktni podatki delijo z avtorjem funkcije.

Včasih preprosto želite uporabiti funkcije iz repozitorija funkcij Wolfram, kot so vgrajene funkcije, ne da bi pogledali njihovo kodo. Če pa želite pogledati v notranjost, je na vrhu vedno gumb Beležnica. Kliknite nanj in dobili boste svojo kopijo izvirnega zvezka z definicijami, ki je bil poslan v repozitorij funkcij. Včasih ga lahko uporabite le kot primer za svoje potrebe. Hkrati lahko razvijete tudi lastno modifikacijo te funkcije. Morda boste želeli objaviti te funkcije, ki ste jih našli v repozitoriju v vašem računalniku ali v vašem računu za shranjevanje v oblaku listne uši, morda jih boste želeli predložiti v bazo znanja o funkcijah, morda kot izboljšano, razširjeno različico izvirne funkcije.

V prihodnosti nameravamo podpreti razcepitev v slogu Git za repozitorije funkcij, vendar za zdaj poskušamo ohraniti preprostost in vedno imamo samo eno sprejeto različico vsake funkcije, ki je vgrajena v jezik. Pogosteje (razen če razvijalci opustijo vzdrževanje funkcij, ki so jih razvili, in se odzovejo na prispevke uporabnikov) izvirni avtor funkcije prevzame nadzor nad posodobitvami in predloži nove različice, ki se nato pregledajo in, če prestanejo postopek pregleda, , objavljeno v jezik.

Razmislimo o tem, kako deluje »versioniranje« razvitih funkcij. Trenutno, ko uporabljate funkcijo iz repozitorija funkcij, bo njena definicija trajno shranjena v vašem računalniku (ali v vašem računu v oblaku, če uporabljate oblak). Če je na voljo nova različica funkcije, boste ob naslednji uporabi prejeli sporočilo, ki vas bo o tem obvestilo. In če želite posodobiti funkcijo na novo različico, lahko to storite z ukazom ResourceUpdate. ("Function blob" dejansko shrani več informacij o različicah in načrtujemo, da bodo v prihodnosti to bolj dostopno našim uporabnikom.)

Ena od čudovitih stvari o repozitoriju funkcij Wolfram je, da lahko kateri koli program v jeziku Wolfram kjer koli uporablja funkcije iz njega. Če se program pojavi v beležnici, je pogosto priročno formatirati funkcije repozitorija kot lahko berljive funkcije "binarni predmet funkcije" (morda z ustrezno nastavljeno različico).

Z besedilom lahko vedno dostopate do katere koli funkcije v repozitoriju funkcij ResourceFunction[...]. In to je zelo priročno, če pišete kodo ali skripte neposredno za Wolfram Engine, na primer z z uporabo IDE ali urejevalnika besedilne kode (posebej je treba opozoriti, da je repozitorij funkcij popolnoma združljiv z Brezplačni Wolfram Engine za razvijalce).

Kako deluje?

Znotraj funkcij v repozitoriju Wolfram je to mogoče z uporabo popolnoma enakih sistemi virov baze, kot v vsa druga naša obstoječa skladišča (shramba podatkov, Repozitorij nevronske mreže, zbirka demo projektov itd.), kot vsi drugi sistemski viri Wolfram, ResourceFunction na koncu temelji na funkciji ResourceObject.

Razmislite ResourceFunction:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

V notranjosti si lahko ogledate nekaj informacij s funkcijo Informacije:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Kako deluje nastavitev funkcije vira? Najenostavnejši je čisto lokalni primer. Tukaj je primer, ki vzame funkcijo (v tem primeru samo čisto funkcijo) in jo definira kot funkcijo vira za dano sejo programa:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Ko naredite definicijo, lahko uporabite funkcijo vira:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Upoštevajte, da je v tej funkcijski blobu črna ikona Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram. To pomeni, da se funkcija BLOB nanaša na funkcijo vira v pomnilniku, definirano za trenutno sejo. Funkcija vira, ki je trajno shranjena v vašem računalniku ali računu v oblaku, ima sivo ikono Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram. V skladišču funkcij Wolfram je oranžna ikona za uradno funkcijo vira Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram.

Kaj se torej zgodi, ko uporabite meni Razširi v zvezku definicij? Najprej vzame vse definicije v beležnici in iz njih ustvari simbol ResourceObject). (In če uporabljate besedilni IDE ali program, potem lahko tudi izrecno ustvarite ResourceObject)

Lokalna uvedba funkcije iz repozitorija v vašem računalniku se izvede z ukazom Lokalni predpomnilnik za objekt vira, da ga shranite kot LocalObject na vašem datotečnem sistemu. Namestitev v račun v oblaku se izvede z ukazom CloudDeploy za objekt vira, uvedba javnega oblaka pa je CloudPublish. V vseh primerih ResourceRegister uporablja se tudi za registracijo imena funkcije vira, torej ResourceFunction["ime"] bo delovalo.

Če kliknete gumb Pošlji za repozitorij funkcij, kaj se zgodi pod njim ResourceSubmit poklican na objekt vira. (Če uporabljate vmesnik za vnos besedila, lahko tudi pokličete ResourceSubmit neposredno.)

Privzeto se oddaje izvedejo pod imenom, povezanim z vašim Wolfram ID-jem. Če pa prijavo oddate v imenu razvojne ekipe ali organizacije, lahko nastavite ločen ID izdajatelja in ga namesto tega uporabite kot ime za interakcijo s svojimi pogledi.

Ko katero koli svojo funkcijo oddate v bazo znanja o funkcijah, bo postavljena v čakalno vrsto za pregled. Če v odgovor prejmete komentarje, bodo običajno v obliki besedilne datoteke z dodanimi dodatnimi »celicami za komentarje«. Status svoje prijave lahko vedno preverite na portal za člane sistema virov. Toda ko bo vaša funkcija odobrena, boste o tem obveščeni (po e-pošti) in vaša funkcija bo objavljena v repozitoriju funkcij Wolfram.

Nekaj ​​tankosti pri delu

Na prvi pogled se morda zdi, da lahko preprosto vzamete zvezek z definicijami in ga dobesedno postavite v repozitorij funkcij, vendar je v resnici vpletenih kar nekaj tankosti - in njihovo ravnanje zahteva precej zapleteno metaprogramiranje, ravnanje s simbolno obdelavo kot koda, ki definira funkcijo, in Beležnica sama je definirana. Večina tega se zgodi interno, v zakulisju, vendar ima lahko nekatere posledice, ki jih je vredno razumeti, če nameravate prispevati k bazi znanja o funkcijah.

Prva takojšnja subtilnost: Ko izpolnite zvezek definicij, se lahko preprosto sklicujete na svojo funkcijo povsod z imenom, kot je Moja funkcija, ki je videti kot običajno ime za funkcijo v jeziku Wolfram, vendar je za dokumentacijo repozitorija funkcij to zamenjano ResourceFunction["Moja funkcija"] je tisto, kar bodo uporabniki dejansko uporabljali pri delu s funkcijo.

Druga subtilnost: ko ustvarite funkcijo vira iz zvezka z definicijami, je treba vse odvisnosti, vključene v definicijo funkcije, zajeti in izrecno vključiti. Če želite zagotoviti, da definicije ostanejo modularne, morate vse postaviti v edinstveno imenski prostor. (Seveda, funkcije, ki naredijo vse, so v repozitoriju funkcij.)

Običajno ne boste nikoli videli nobene sledi kode, uporabljene za konfiguracijo tega imenskega prostora. Toda če iz nekega razloga pokličete premalo izveden simbol znotraj vaše funkcije, boste videli, da je ta simbol v notranjem kontekstu funkcije. Vendar pa je pri obdelavi Beležnice definicij vsaj simbol, ki ustreza sami funkciji nastavljiv za najboljši prikaz kot funkcionalni BLOB in ne neobdelani znak v notranjem kontekstu.

Repozitorij funkcij je namenjen definiranju novih funkcij. In te funkcije imajo lahko možnosti. Pogosto ti parametri (npr. Metoda ali Velikost slike) bo mogoče uporabljati za vgrajene funkcije, pa tudi za tiste, za katere že obstajajo vgrajeni simboli. Včasih pa lahko nova funkcija zahteva nove možnosti. Da bi ohranili modularnost, morajo biti ti parametri simboli, definirani v edinstvenem notranjem kontekstu (ali nekaj takega kot celotne funkcije vira, to je same). Za poenostavitev vam repozitorij funkcij omogoča definiranje novih možnosti v definicijah nizov. In za udobje uporabnika, te definicije (ob predpostavki, da so jih uporabili OptionValue и OptionsPattern) se obdelujejo tudi tako, da je pri uporabi funkcij mogoče parametre podati ne samo kot nize, ampak tudi kot globalne simbole z istimi imeni.

Večina funkcij preprosto naredi tisto, kar bi morale storiti vsakič, ko so priklicane, vendar je treba nekatere funkcije inicializirati, preden se lahko izvajajo v določeni seji - in za rešitev te težave obstaja razdelek »Inicializacija« v razdelku Definicija.

Funkcije iz repozitorija lahko uporabljajo druge funkcije, ki so že v repozitoriju; če želite nastaviti definicije za repozitorij funkcij, ki vključuje dve (ali več) funkcij, ki se sklicujeta druga na drugo, jih morate razmestiti v svoji programski seji, tako da lahko referenca kot na njih ResourceFunction["ime"], potem lahko ustvarite kombinacije teh funkcij, ki jih potrebujete, primere (nisem razumel) in dodate novo funkcijo v repozitorij na podlagi tistih, ki so bile že objavljene prej. (ali že ali prej – obe besedi sta okorni)

Možnosti razvoja. Kaj bi se moralo zgoditi, ko bo repozitorij res velik?

Danes ravno lansiramo Wolfram Feature Repository, vendar sčasoma pričakujemo, da se bosta njegova velikost in funkcionalnost dramatično povečala, in ko bo v razvoju rasel, se bodo lahko pojavile različne težave, za katere že predvidevamo.

Prva težava zadeva imena funkcij in njihovo edinstvenost. Repozitorij funkcij je zasnovan tako, da se lahko, tako kot pri vgrajenih funkcijah v jeziku Wolfram, sklicujete na katero koli funkcijo preprosto tako, da navedete njeno ime. Toda to neizogibno pomeni, da morajo biti imena funkcij globalno unikatna v celotnem skladišču, tako da lahko na primer obstaja le eno ResourceFunction["Moja najljubša funkcija"].

To se morda sprva zdi velika težava, vendar se je vredno zavedati, da je v bistvu enaka težava kot pri stvareh, kot so internetne domene ali ročaji družbenih medijev. Dejstvo je, da mora sistem preprosto imeti registrarja - in to je ena od vlog, ki jih bo naše podjetje opravljalo za bazo znanja o funkciji Wolfram. (Za zasebne različice repozitorija so lahko njihovi registratorji skrbniki.) Seveda je internetno domeno mogoče registrirati, ne da bi bilo na njej karkoli, toda v repozitoriju funkcij je ime funkcije mogoče registrirati le, če obstaja dejanska definicija funkcijo.

Del naše vloge pri upravljanju baze znanja o funkcijah Wolfram je zagotoviti, da je ime, izbrano za funkcijo, logično glede na definicijo funkcije in da sledi konvencijam o poimenovanju jezika Wolfram. Imamo več kot 30 let izkušenj s poimenovanjem vgrajenih funkcij v jeziku Wolfram in naša ekipa kustosov bo to izkušnjo prenesla tudi v repozitorij funkcij. Seveda so vedno izjeme. Na primer, morda se zdi bolje imeti kratko ime za neko funkcijo, vendar se je bolje "braniti" z daljšim, natančnejšim imenom, saj je manj verjetno, da boste v prihodnosti naleteli na nekoga, ki bi želel ustvariti podobno ime funkcije .

(Tukaj je treba opozoriti, da preprosto dodajanje oznake člana za razločevanje funkcij ne bo imelo predvidenega učinka. Ker razen če vztrajate pri vedno dodeljevanju oznake, boste morali definirati privzeto oznako za katero koli dano funkcijo in tudi dodeliti avtorske oznake , kar bi spet zahtevalo globalno usklajevanje.)

Ker se baza znanja o Wolframovih funkcijah povečuje, je ena od težav, ki se bo verjetno pojavila, odkrivanje funkcij, za katere sistem zagotavlja iskalna funkcija (in definicijske datoteke lahko vključujejo ključne besede itd.). Za vgrajene funkcije v jeziku Wolfram Language so v dokumentaciji vse vrste navzkrižnih sklicev, ki pomagajo pri "oglaševanju" funkcij. Funkcije v repozitoriju funkcij se lahko sklicujejo na vgrajene funkcije. Kaj pa obratno? Da bi to naredili, bomo eksperimentirali z različnimi zasnovami, da bi izpostavili funkcije repozitorija na dokumentacijskih straneh za vgrajene funkcije.

Za vgrajene funkcije v jeziku Wolfram je na voljo tako imenovana plast zaznavanja mreža "strani za pomoč", ki nudijo organizirane sezname funkcij, povezanih z določenimi področji. Vedno je težko pravilno uravnotežiti strani priročnikov in ko jezik Wolfram raste, je treba strani priročnikov pogosto popolnoma reorganizirati. Funkcije iz repozitorija je precej enostavno uvrstiti v široke kategorije in celo dosledno razčleniti te kategorije, vendar je veliko bolj dragoceno imeti pravilno organizirane jezikovne referenčne strani. Ni še jasno, kako jih najbolje ustvariti za celotno bazo znanja funkcij. na primer CreateResourceObjectGallery v repozitoriju funkcij lahko vsakdo objavi spletno stran, ki vsebuje njegove "izbirke" iz repozitorija:

Repozitorij funkcij Wolfram: platforma z odprtim dostopom za jezikovne razširitve Wolfram

Repozitorij funkcij Wolfram je konfiguriran kot trajni repozitorij funkcij, kjer bo katera koli funkcija v njem vedno delovala. Seveda bodo morda na voljo nove različice funkcij in pričakujemo, da bodo nekatere funkcije sčasoma seveda zastarele. Funkcije bodo delovale, če se uporabljajo v programih, vendar bodo njihove strani z dokumentacijo povezane z novimi, naprednejšimi funkcijami.

Repozitorij funkcij Wolfram je zasnovan tako, da vam pomaga hitro odkriti nove funkcije in se naučiti novih načinov uporabe jezika Wolfram. Zelo smo optimistični, da bo nekaj od tega, kar je bilo raziskano v repozitoriju funkcij, sčasoma smiselno postati vgrajeni deli jedra jezika Wolfram. V zadnjem desetletju smo imeli podoben niz funkcije, ki so bile prvotno predstavljene v Wolfram | Alfa. In ena od lekcij, pridobljenih iz te izkušnje, je, da doseganje standardov kakovosti in doslednosti, na katere se osredotočamo pri vsem, kar je vgrajeno v jezik Wolfram, zahteva veliko dela, ki je pogosto težje od začetnih prizadevanj za implementacijo ideje. Kljub temu lahko funkcija v bazi znanja o funkcijah služi kot zelo uporaben dokaz koncepta za prihodnjo funkcijo, ki bo morda sčasoma vgrajena v jezik Wolfram.

Najpomembnejša stvar pri tem je, da je funkcija v repozitoriju funkcij nekaj, kar je na voljo vsakemu uporabniku za uporabo prav zdaj. Možno je, da bi bila funkcija maternega jezika veliko boljša in zmogljivejša, vendar bi repozitorij funkcij uporabnikom omogočil takojšen dostop do vseh novih funkcij. In, kar je najpomembneje, ta koncept omogoča vsakomur, da doda nove funkcije, ki jih želi.

Prej v zgodovini jezika Wolfram ta zamisel ne bi delovala tako dobro, kot je, toda na tej stopnji je v jezik vloženega toliko truda in tako globoko razumevanje načel oblikovanja jezika, da se zdaj zdi zelo velika skupnost uporabnikov lahko doda funkcije, ki bodo ohranile konsistentnost zasnove, da bodo uporabne širokemu krogu uporabnikov.

V skupnosti uporabnikov jezika Wolfram Language vlada neverjeten duh talenta(?). (Seveda ta skupnost vključuje številne vodilne strokovnjake za raziskave in razvoj na različnih področjih.) Upam, da bo Wolfram Feature Repository zagotovil učinkovito platformo za odklepanje in širjenje tega duha talenta. Samo skupaj lahko ustvarimo nekaj, kar bo bistveno razširilo področje uporabe računalniške paradigme jezika Wolfram.

V več kot 30 letih smo z jezikom Wolfram prišli daleč. Zdaj pa gremo skupaj še dlje. Močno spodbujam vse spoštovane uporabnike jezika Wolfram po vsem svetu, da kot platformo za to uporabljajo funkcionalno skladišče, pa tudi nov projekt programske opreme, kot je Free Wolfram Engine for Developers.

Vir: www.habr.com

Dodaj komentar