Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Ahoj Habr! Predkladám vám preklad príspevku Stephena Wolframa „Úložisko funkcií Wolfram: Spustenie otvorenej platformy na rozšírenie jazyka Wolfram“.

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Predpoklady konzistentnosti jazyka Wolfram

Dnes stojíme na prahu veľkých úspechov spolu s programovacím jazykom Wolframský jazyk. Len pred tromi týždňami sme spustili bezplatný motor Wolfram pre vývojárovpomôcť našim používateľom integrovať jazyk Wolfram do ich rozsiahlych softvérových projektov. Dnes spúšťame Úložisko funkcií Wolfram, s cieľom poskytnúť koordinovanú platformu pre funkcie vytvorené na rozšírenie jazyka Wolfram a tiež otvárame úložisko funkcií pre každého, kto môže prispieť k vývoju nášho softvérového produktu.

Úložisko funkcií Wolfram je niečo, čo umožňuje jedinečná povaha jazyka Wolfram nielen ako programovacieho jazyka, ale aj ako plnohodnotný výpočtový jazyk. V tradičných programovacích jazykoch pridanie významnej novej funkcionality zvyčajne zahŕňa vytvorenie celých dodatočných knižníc, ktoré môžu alebo nemusia fungovať, keď sa používajú spolu. Avšak vo wolframskom jazyku toľko je už zabudované v samotnom jazyku, že je možné výrazne rozšíriť jeho funkcionalitu jednoduchým pridaním nových funkcií, ktoré sú okamžite integrované do holistickej štruktúry celého jazyka.

Napríklad úložisko funkcií Wolfram už obsahuje 532 nových funkcií rozdelené do 26 tematických kategórií:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Rovnako viac ako 6000 štandardných funkcií, zabudovaný do jazyka Wolfram, každá funkcia z úložiska má dokumentačnú stránku s ich podrobným popisom a príkladmi práce:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Ak chcete prejsť na stránku, skopírujte vyššie uvedený objekt (funkcia BLOB), vložte ho do vstupného riadku a potom spustite funkciu - je už zabudovaná do jazyka Wolfram a štandardne podporovaná počnúc od verzia 12.0:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Tu treba poznamenať, že pri spracovaní LogoQRCode Nemusíte napríklad nastavovať „knižnicu na spracovanie obrazu“ – pretože sme už implementovali konzistentný a starostlivo algoritmický spôsob v jazyku Wolfram spracovanie obrazu, ktoré môžu byť okamžite spracované rôznymi funkciami grafického jazyka:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Dúfam, že s podporou úžasná a talentovaná komunita, ktorá sa v posledných desaťročiach rozrastá a rozširuje (na základe wolframského jazyka). Repozitár funkcií Wolfram umožní v dohľadnej budúcnosti výrazne rozšíriť rozsah (možno potenciálne významných, špecializovaných na rôzne oblasti vedy a techniky) funkcií dostupných v jazyku. Takto je možné používať obsah jazyka (jeho vstavané funkcie) a zásady rozvoja, ktoré sú implementované na základe jazyka. (Tu je potrebné poznamenať, že jazyk Wolfram už má viac ako 30-ročná história vývoja a stabilný rast).
Funkcie z úložiska môžu obsahovať malé alebo veľké časti kódu napísané v jazyku Wolfram. Môžu to byť napríklad hovory externé API a služby alebo externé knižnice v iných jazykoch. Jedinečné na tomto prístupe je, že keď prejdete na funkčnosť na úrovni používateľa, nedôjde k žiadnym potenciálnym nezrovnalostiam, pretože prístup je postavený na konzistentnej štruktúre jazyka Wolfram – a každá funkcia bude automaticky fungovať správne – presne tak, ako zamýšľaná.by mala.
Štruktúra shellu a programovania úložiska funkcií Wolfram je navrhnutá tak, aby každý mohol prispieť k spoločnej veci tým najjednoduchším a najpohodlnejším spôsobom pre neho – v skutočnosti len vyplnením textového súboru poznámkového bloku (s príponou nb) WL. Vstavané automatické funkcie vám umožňujú kontrolovať nové funkcie pridané do úložiska, aby ste zabezpečili ich integráciu do jazyka. Naša spoločnosť vsádza skôr na široké spektrum používateľov, ktorí dokážu integrovať svoje funkcie do jazyka, než na veľkú komplexnosť nových funkcií – a hoci existuje recenzný proces, netrváme na ničom podobnom starostlivá analýza dizajnu alebo prísne normy pre úplnosť a spoľahlivosť nových používateľských funkcií, na rozdiel od dôslednejšieho testovania funkcií zabudovaných do základného jazyka, ktorý používame.

V tomto prístupe je veľa kompromisov a detailov, ale naším cieľom je optimalizovať úložisko funkcií Wolfram tak pre používateľskú skúsenosť, ako aj zabezpečiť, aby nové používateľské funkcie zmysluplne prispievali k vývoju jazyka. Ako rastieme, nepochybujem o tom, že budeme musieť vynájsť nové metódy na spracovanie a overenie funkcií zabudovaných do úložiska, v neposlednom rade na organizovanie veľkého množstva funkcií a vyhľadávanie tých, ktoré používatelia potrebujú. Je však povzbudzujúce, že cesta, ktorú sme si zvolili, je dobrým začiatkom. ja osobne pridal niekoľko funkcií do pôvodnej databázy. Mnohé z nich sú založené na kóde, ktorý som osobne vyvíjal pomerne dlho. A trvalo mi len pár minút, kým som ich poslal do úložiska. Teraz, keď sú v úložisku, môžem konečne - okamžite a kedykoľvek - tieto funkcie používať podľa potreby, bez toho, aby som sa musel starať o vyhľadávanie súborov, sťahovanie balíkov atď.

Zvýšená efektivita pri znížení nákladov

Ešte pred internetom existovali spôsoby zdieľania kódu Wolfram Language (náš prvý veľký centralizovaný projekt bol MathSourcevytvorený pre Mathematica v roku 1991 na základe CD-ROM atď.). Samozrejme, prístup navrhnutý na implementáciu založený na úložisku funkcií Wolfram je výkonnejším a spoľahlivejším nástrojom na implementáciu vyššie uvedených úloh.

Už viac ako 30 rokov naša spoločnosť usilovne pracuje na zachovaní integrity jazykovej štruktúry Wolfram, čo je rozhodujúce pre zabezpečenie toho, aby sa jazyk Wolfram stal nielen programovacím jazykom, ale aj plnohodnotný výpočtový jazyk. Podstatou prístupu k implementácii úložiska funkcií Wolfram je teda použitie jednotného prístupu k programovaniu a vývoju nových funkcií, ktoré sa postupne pridávajú a zapadajú do rámca jazyka, aby sa mohol vyvíjať a spoločne vyvíjať.

V implementačnej štruktúre každej funkcie sa vyskytujú rôzne výpočtové procesy. Tu je potrebné poznamenať, že je potrebné, aby funkcia mala pre používateľa jasný a jednotný vzhľad a vizuálnu čitateľnosť. V tejto súvislosti sú vstavané funkcie jazyka Wolfram prezentované s viac ako 6000 XNUMX postupnými príkladmi, ako správne programovať funkcie (toto sú naše živé programovacie videáktoré zahŕňajú stovky hodín procesu tvorby štandardných programov). Tento prístup v konečnom dôsledku robí úložisko funkcií Wolfram schopným dobre fungovať, je štrukturálna povaha jazyka Wolfram s veľkým počtom ďalších a rôznorodých knižníc, ktoré sú už zabudované do jazyka. Ak máte napríklad funkciu, ktorá spracováva obrázky, príp riedke poliaAlebo molekulárne štruktúrya geografické údaje alebo niektoré iné - ich konzistentné symbolické znázornenie už v jazyku existuje a vďaka tomu sa vaša funkcia okamžite stáva kompatibilnou s ostatnými funkciami v jazyku.

Vytvorenie úložiska, ktoré skutočne funguje dobre, je zaujímavá úloha metaprogramovania. Napríklad prebytok obmedzení v programe neumožní získať požadované zjednotenie a univerzálnosť algoritmu. Rovnako ako pri nedostatočnom počte funkčných obmedzení, nebudete môcť implementovať dostatočne správnu postupnosť vykonávania algoritmu. Niekoľko predchádzajúcich príkladov implementácie kompromisu týchto prístupov, implementovaných našou spoločnosťou, fungovalo pomerne stabilne - sú to: Ukážky projektu Tungsten, spustený v roku 2007 a teraz beží online s viac ako 12000 XNUMX používateľsky interaktívnymi ukážkami. IN databáza Wolfram existuje viac ako 600 hotových databáz, ktoré možno použiť v jazyku Wolfram, a Úložisko neurónovej siete Wolfram sa takmer každý týždeň dopĺňa o nové neurónové siete (teraz ich je už 118) a sú okamžite prepojené cez funkciu NetModel vo wolframskom jazyku.

Všetky vyššie uvedené príklady majú základnú vlastnosť – objekty a funkcie zhromaždené v projekte majú veľmi vysoký stupeň štruktúrovania a distribúcie procesov. Samozrejme, detaily štruktúry toho, čo je demo alebo neurónová sieť alebo niečo iné, sa môžu značne líšiť, ale základná štruktúra každého súčasného úložiska zostáva vždy rovnaká. Aký je teda váš názor, milý používateľ, na vytvorenie takéhoto úložiska, ktoré pridáva rozšírenia do jazyka Wolfram? Jazyk Wolfram je navrhnutý tak, aby bol mimoriadne flexibilný, takže ho možno ľubovoľným spôsobom rozširovať a upravovať. Táto okolnosť je mimoriadne dôležitá pre schopnosť rýchlo vytvárať rôzne rozsiahle softvérové ​​projekty v jazyku Wolfram. Tu je potrebné poznamenať, že so zvyšujúcou sa flexibilitou jazyka sa nevyhnutne zvýšia náklady na projekty realizované v takomto jazyku. Je to spôsobené tým, že čím viac používateľ používa takýto jazyk, tým viac dedikovanej funkcionality dostáva, no nemali by sme zabúdať, že tento prístup môže mať aj negatívne stránky v podobe neschopnosti zabezpečiť konzistentnú konzistenciu programových modulov.

Bežný problém s knižnicami v tradičných programovacích jazykoch - ak napríklad použijete jednu knižnicu, kód bude fungovať správne, ale ak sa pokúsite použiť viacero knižníc, nie je zaručené, že budú navzájom správne interagovať. . Taktiež v tradičných programovacích jazykoch – na rozdiel od plnohodnotného výpočtového jazyka – neexistuje žiadny spôsob, ako zaručiť prítomnosť konzistentných vstavaných reprezentácií pre akékoľvek funkcie alebo dátové typy iné ako ich základné štruktúry. Ale v skutočnosti je problém ešte väčší, ako sa na prvý pohľad zdá: ak sa buduje rozsiahla vertikála funkčnosti, potom bez obrovských nákladov na centralizované projektové programovanie, ktoré vložíme do jazyka Wolfram, nie je možné dosiahnuť konzistenciu. Preto je dôležité, aby všetky softvérové ​​moduly vždy správne spolupracovali.

Myšlienkou úložiska funkcií Wolfram je teda vyhnúť sa vyššie načrtnutému problému jednoduchým pridávaním rozšírení do jazyka v relatívne malých kúskoch kódu prostredníctvom jednotlivých funkcií, ktoré sa ľahšie vyvíjajú ako koherentné moduly. Ako už bolo povedané, existujú programovacie funkcie, ktoré nie je možné spríjemniť pomocou jednotlivých funkcií (a naša spoločnosť plánuje v blízkej budúcnosti vydať optimalizovaný programovací algoritmus, ktorý pomôže implementovať rozsiahle softvérové ​​balíky). Na základe funkcií už zabudovaných do jazyka Wolfram však existuje veľa možností programovania, ktoré sú implementované na základe jednotlivých funkcií. Ide o to, že s relatívne malým programátorským úsilím je možné vytvoriť množstvo nových a veľmi užitočných funkcií, ktoré poskytnú dostatočnú koherenciu dizajnu, budú navzájom dobre zladené a navyše budú môcť v budúcnosti ľahko a široko používať v jazyku.

Tento prístup je, samozrejme, kompromisom. Ak by sa implementoval väčší balík, dalo by sa predstaviť úplne nový svet funkčnosti, ktorý by bol mimoriadne výkonný a užitočný. Ak je potrebné získať novú funkcionalitu, ktorá bude ladiť so všetkým ostatným, ale nie ste ochotní vynaložiť veľa úsilia na vývoj projektu, môže to, žiaľ, viesť k zníženiu rozsahu vášho projektu. Myšlienkou úložiska funkcií Wolfram je poskytnúť funkčnosť definujúcej časti projektu; tento prístup pridá výkonnú funkčnosť a zároveň uľahčí udržanie dobrej konzistencie v programovacom projekte.

Pomoc pri pridávaní vlastných funkcií do úložiska funkcií

Náš tím tvrdo pracoval na tom, aby používateľom uľahčil prispievanie do funkcií úložiska Wolfram. Na pracovnej ploche (už v verzia 12.0), Môžete jednoducho prejsť postupne cez karty hlavnej ponuky: Súbor > Nový > Položka úložiska > Položka úložiska funkcií a dostanete „Zápisník s definíciou" (programovo vo vnútri pracovného stola. Môžete tiež použiť analógovú funkciu - Vytvoriť Zápisník["Zdroj funkcie"]):

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Existujú dva hlavné kroky, ktoré budete musieť vykonať: po prvé si skutočne zapíšte kód svojej funkcie a po druhé si zapíšte dokumentáciu znázorňujúcu, ako by mala vaša funkcia fungovať.
Kliknutím na tlačidlo „Otvoriť vzorku“ v hornej časti zobrazíte príklad toho, čo musíte urobiť:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

V podstate sa snažíte vytvoriť niečo podobné vstavanej funkcii v jazyku Wolfram. Až na to, že dokáže niečo oveľa špecifickejšie ako vstavaná funkcia. Očakávania týkajúce sa jeho úplnosti a spoľahlivosti budú zároveň oveľa nižšie.
Musíte dať svojej funkcii názov, ktorý sa riadi pokynmi pre pomenovanie funkcií v jazyku Wolfram. Okrem toho budete musieť vypracovať dokumentáciu pre vašu funkciu, podobnú vstavaným funkciám jazyka. Podrobnejšie o tom budem hovoriť neskôr. Zatiaľ si všimnite, že v rade tlačidiel v hornej časti súboru definície poznámkového bloku je tlačidlo "Pokyny pre štýl", ktorý vysvetľuje, čo robiť, a tlačidlo Nástroje, ktoré poskytuje nástroje na formátovanie dokumentácie vašej funkcie.
Keď ste si istí, že je všetko správne vyplnené a ste pripravení, kliknite na tlačidlo „Skontrolovať“. Je úplne normálne, že ste ešte neprišli na všetky detaily. Funkcia „Kontrola“ sa teda automaticky spustí a vykoná veľa kontroly štýlu a konzistencie. Často vás okamžite vyzve na potvrdenie a prijatie opráv (Napríklad: „Tento riadok musí končiť dvojbodkou“ a vyzve vás na zadanie dvojbodky). Niekedy vás požiada, aby ste sami niečo pridali alebo zmenili. Do automatickej funkčnosti tlačidla Skontrolovať budeme neustále pridávať nové funkcie, ale v podstate jeho účelom je zabezpečiť, aby všetko, čo odošlete do úložiska funkcií, už presne dodržiavalo čo najviac smerníc štýlu.

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Takže po spustení "Skontrolovať" môžete použiť "Ukážka". "Ukážka" vytvorí ukážku stránky dokumentácie, ktorú ste definovali pre svoju funkciu. Môžete tiež vytvoriť náhľad pre súbor vytvorený v počítači alebo pre súbor umiestnený v cloudovom úložisku. Ak z nejakého dôvodu nie ste spokojní s tým, čo vidíte v náhľade, jednoducho sa vráťte späť a vykonajte potrebné opravy a potom znova kliknite na tlačidlo Náhľad.
Teraz ste pripravení vložiť svoju funkciu do úložiska. Tlačidlo Nasadiť vám ponúka štyri možnosti:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Dôležité v tomto kroku je, že svoju funkciu môžete odoslať do úložiska funkcií Wolfram, aby bola dostupná komukoľvek. Zároveň môžete svoju funkciu umiestniť aj pre obmedzený počet používateľov. Môžete napríklad vytvoriť funkciu, ktorá je hosťovaná lokálne na vašom počítači, takže je dostupná, keď používate daný počítač. Alebo to môžete uverejniť vo svojom cloudový účet, aby ste ho mali k dispozícii, keď ste pripojení ku cloudu. Funkciu môžete tiež verejne hostiť (nasadiť) prostredníctvom svojho cloudového účtu. Nebude to v centrálnom úložisku funkcií Wolfram, ale budete môcť niekomu poskytnúť adresu URL, ktorá mu umožní získať vašu funkciu z vášho účtu. (V budúcnosti budeme podporovať aj centrálne úložiská v celej našej spoločnosti.)

Povedzme teda, že chcete svoju funkciu skutočne odoslať do znalostnej databázy funkcií Wolfram. Ak to chcete urobiť, kliknite na tlačidlo „Odoslať“ do úložiska. Čo sa teda momentálne deje? Vaša žiadosť je okamžite zaradená do poradia na posúdenie a schválenie našim špecializovaným tímom kurátorov.

Keď vaša žiadosť prejde schvaľovacím procesom (ktorý zvyčajne trvá niekoľko dní), budete dostávať správy týkajúce sa jej stavu a prípadne návrhy na budúce použitie. Ale akonáhle bude vaša funkcia schválená, bude okamžite zverejnená v úložisku funkcií Wolfram a bude k dispozícii pre každého. (A toto sa objaví v prehľady noviniek o nových funkciách a tak ďalej)

Čo by malo byť v sklade?

Je potrebné poznamenať, že naša spoločnosť má veľmi vysoké štandardy na úplnosť, spoľahlivosť a celkovú kvalitu a z viac ako 6000 funkcií, ktoré sme do jazyka Wolfram zabudovali za posledných viac ako 30 rokov, všetky spĺňajú vyššie uvedené požiadavky. Cieľom úložiska funkcií Wolfram je využiť všetku štruktúru a funkčnosť, ktorá už v jazyku Wolfram existuje, aby bolo možné pridať čo najviac ľahších funkcií (t. j. funkcií s vyšším výkonom).

Samozrejme, funkcie v úložisku funkcií Wolfram musia zodpovedať princípom návrhu jazyka Wolfram – aby mohli plne interagovať s ostatnými funkciami a očakávaniami používateľov, ako má funkcia správne fungovať. Funkcie však nemusia byť rovnako úplné alebo spoľahlivé.

Vo vstavaných funkciách jazyka Wolfram tvrdo pracujeme na tom, aby boli programovacie funkcie čo najvšeobecnejšie. Ako už bolo povedané, keď ste v úložisku funkcií Wolfram, nie je nič zlé na tom, že v ňom máte funkciu, ktorá jednoducho rieši nejaký veľmi špecifický, ale užitočný prípad. Napríklad funkcia SendMailFromNotebook môže prijímať súbory v jednom špecifickom formáte a vytvárať poštu jedným špecifickým spôsobom. Polygonálny diagram vytvára grafy len s určitými farbami a označením atď.

Ďalším bodom, ktorý súvisí so zabudovanými funkciami, je, že naša spoločnosť vynakladá maximálne úsilie na zvládnutie všetkých atypických prípadov, na správne spracovanie nesprávneho zadania a pod. V úložisku funkcií je úplne normálne, že existuje špeciálna funkcia, ktorá rieši hlavné prípady riešenia problému a ignoruje všetky ostatné.

Zjavným bodom je, že je lepšie mať funkcie, ktoré robia viac a robia to lepšie, ale optimalizácia pre úložisko funkcií – na rozdiel od vstavaných funkcií jazyka Wolfram – by mala mať viac funkcií spojených s viacerými funkciami, a nie ponárať sa do implementačné procesy každej konkrétnej funkcie.

Teraz sa pozrime na príklad testovania funkcií v úložisku. Očakávania konzistencie pre takéto funkcie sú prirodzene oveľa nižšie ako pre vstavané jazykové funkcie. To platí najmä v prípadoch, keď funkcie závisia od externých zdrojov, ako sú API, je dôležité neustále vykonávať konzistentné testy, ktoré sa automaticky dejú v rámci overovacích algoritmov. V súbore nb môžete explicitne špecifikovať definície (v sekcii Ďalšie informácie) a špecifikovať toľko testov, koľko je definovaných buď vstupnými a výstupnými reťazcami, alebo úplnými znakovými objektmi typu Overovací test, koľko uznáte za vhodné. Okrem toho sa systém neustále pokúša zmeniť príklady dokumentácie, ktoré poskytnete, na proces overovania (a niekedy to môže byť dosť náročné na zdroje, napríklad v prípade funkcie, ktorej výsledok závisí od náhodných čísel alebo času dňa).

V dôsledku toho bude mať úložisko funkcií množstvo zložitostí pri implementácii. Niektoré budú iba jedným riadkom kódu, iné môžu zahŕňať tisíce alebo desaťtisíce riadkov, pravdepodobne pomocou mnohých pomocných funkcií. Kedy sa oplatí pridať funkciu, ktorej definovanie vyžaduje veľmi málo kódu? V podstate, ak pre funkciu existuje dobrý mnemotechnický názov, ktorý by používatelia ľahko pochopili, keby ho videli v kúsku kódu, potom ho už možno pridať. V opačnom prípade je pravdepodobne lepšie jednoducho znova pridať kód do vášho programu vždy, keď ho potrebujete použiť.

Hlavným účelom úložiska funkcií (ako naznačuje jeho názov) je zavádzanie nových funkcií do jazyka. Ak chcete doplniť nové údaje resp nových subjektov, použiť Úložisko údajov Wolfram. Čo ak však chcete zaviesť nové typy objektov pre svoje výpočty?

Sú vlastne dva spôsoby. Možno budete chcieť zaviesť nový typ objektu, ktorý sa bude používať v nových funkciách v úložisku funkcií. A v tomto prípade si vždy môžete jednoducho zapísať jeho symbolickú reprezentáciu a použiť ju pri zadávaní alebo výstupe funkcií v úložisku funkcií.

Ale čo ak chcete reprezentovať objekt a potom definovať prostredníctvom existujúcich funkcií v jazyku Wolfram, že s ním chcete pracovať? Wolframský jazyk mal na to vždy ľahký mechanizmus, tzv UpValues. S určitými obmedzeniami (najmä pre funkcie, ktoré nedokážu posúdiť svoje argumenty), úložisko funkcií vám umožňuje jednoducho reprezentovať funkciu a definovať pre ňu hodnoty. (Zvýšenie očakávaní konzistentnosti pri vytváraní nového hlavného dizajnu, ktorý je plne integrovaný v celom jazyku Wolfram, je vo všeobecnosti veľmi dôležitým postupom, ktorý nemožno dosiahnuť jednoduchým zvýšením nákladov na projekt a je to niečo, čo naša spoločnosť robí v rámci projektov. pre dlhodobý rozvoj jazyka táto úloha nie je cieľom, ktorý je stanovený v rámci vývoja úložiska).

Takže, čo môže byť v kóde funkcie v úložisku funkcií? Všetko zabudované do wolframského jazyka, samozrejme (aspoň ak to nepredstavuje hrozby pre Zabezpečenie a výkon samotného programu ako výpočtového prostredia), ako aj akejkoľvek funkcie z úložiska funkcií. Existujú však aj iné funkcie: funkcia v úložisku funkcií môže volať API alebo in Wolfram CloudAlebo z iného zdroja. Samozrejme, sú s tým spojené isté riziká. Vzhľadom na to, že neexistujú žiadne záruky, že sa API nezmení a funkcia v obchode funkcií prestane fungovať. Na pomoc pri identifikácii problémov, ako je tento, je na stránke dokumentácie (v sekcii Požiadavky) poznámka pre každú funkciu, ktorá sa spolieha na viac než len vstavanú funkčnosť jazyka Wolfram. (Samozrejme, pokiaľ ide o reálne dáta, aj s touto funkcionalitou môžu nastať problémy – pretože dáta z reálneho sveta sa neustále menia a niekedy sa menia aj ich definície a štruktúra.)

Mal by byť celý kód pre úložisko funkcií Wolfram napísaný vo Wolfram? Samozrejme, kód vo vnútri externého API by nemal byť napísaný v jazyku Wolfram, ktorý ani nevytvára jazykový kód. V skutočnosti, ak nájdete funkciu v takmer akomkoľvek externom jazyku alebo knižnici, môžete vytvoriť obal, ktorý vám umožní použiť ju v úložisku funkcií Wolfram. (Na to by ste mali zvyčajne použiť vstavané funkcie ExternalEvaluate alebo ExternalFunction v kóde jazyka Wolfram.)

Tak aký má zmysel to robiť? V podstate vám to umožňuje používať celý integrovaný systém Wolfram Language a celý jeho jednotný súbor softvérových schopností. Ak získate základnú implementáciu z externej knižnice alebo jazyka, môžete potom použiť bohatú symbolickú štruktúru jazyka Wolfram na vytvorenie pohodlnej funkcie najvyššej úrovne, ktorá používateľom umožňuje jednoducho používať akúkoľvek už implementovanú funkčnosť. Prinajmenšom by to malo byť uskutočniteľné v ideálnom svete, kde existujú všetky stavebné bloky načítavacích knižníc atď., v takom prípade by ich automaticky spracoval jazyk Wolfram. (Treba poznamenať, že v praxi môžu nastať problémy s nastavenie externých jazykov špecifický počítačový systém a cloudové úložisko môžu predstavovať ďalšie bezpečnostné problémy).

Mimochodom, keď sa prvýkrát pozriete na typické externé knižnice, často sa zdajú byť príliš zložité na to, aby boli pokryté len niekoľkými funkciami, ale v mnohých prípadoch veľká časť zložitosti pochádza z vytvorenia infraštruktúry potrebnej pre knižnicu a všetkých funkcií podporte to. Pri používaní jazyka Wolfram je však infraštruktúra zvyčajne už zabudovaná do balíkov, a preto nie je potrebné podrobne vysvetľovať všetky tieto podporné funkcie, ale iba vytvárať funkcie pre „najvyššie“ funkcie špecifické pre aplikáciu v knižnici. .

„Ekosystém“ vedomostnej základne

Ak ste napísali funkcie, ktoré pravidelne používate, odošlite ich do úložiska funkcií Wolfram! Ak z toho nevyplýva niečo viac (vývoj jazyka), aj tak bude pre vás oveľa pohodlnejšie používať funkcie na osobné použitie. Je však logické predpokladať, že ak funkcie používate pravidelne, možno sa budú hodiť aj iným používateľom.

Prirodzene sa môžete ocitnúť v situácii, keď nemôžete – alebo nechcete – zdieľať svoje funkcie alebo v prípade získania prístupu k súkromným informačným zdrojom. Aj v takýchto prípadoch môžete funkcie jednoducho nasadiť vo svojom vlastnom cloudovom účte, špecifikujúce práva prístup k nim. (Ak má vaša organizácia Súkromný cloud Wolfram Enterprise, potom bude čoskoro môcť hostiť svoje vlastné úložisko súkromných funkcií, ktoré možno spravovať z vašej organizácie a nastaviť, či má alebo nemá vynútiť zobrazovanie zobrazení používateľom tretích strán.)

Funkcie, ktoré odošlete do úložiska funkcií Wolfram, nemusia byť dokonalé; len musia byť užitočné. Je to trochu ako sekcia „Chyby“ v klasickej unixovej dokumentácii – v sekcii „Definície“ je sekcia „Poznámky autora“, kde môžete popísať obmedzenia, problémy atď., ktoré už o svojej funkcii poznáte. Okrem toho, keď odošlete svoju funkciu do úložiska, môžete pridať poznámky k odoslaniu, ktoré si prečíta špecializovaný tím kurátorov.

Po zverejnení funkcie má jej stránka v spodnej časti vždy dva odkazy: "Pošlite správu o tejto funkcii"A"Diskutujte v komunite Wolfram" Ak pripájate poznámku (napr. povedzte mi o chybách), môžete začiarknuť políčko, ktoré hovorí, že chcete, aby bola vaša správa a kontaktné informácie zdieľané s autorom funkcie.

Niekedy len chcete použiť funkcie z úložiska funkcií Wolfram, ako sú vstavané funkcie, bez toho, aby ste sa pozerali na ich kód. Ak však chcete nahliadnuť dovnútra, v hornej časti je vždy tlačidlo Poznámkový blok. Kliknite naň a získate vlastnú kópiu pôvodného poznámkového bloku s definíciami, ktorý bol odoslaný do úložiska funkcií. Niekedy ho môžete použiť len ako príklad pre vaše potreby. Zároveň si môžete vyvinúť aj vlastnú modifikáciu tejto funkcie. Možno budete chcieť zverejniť tieto funkcie, ktoré ste našli z úložiska vo svojom počítači alebo vo svojom účte cloudového úložiska vošiek, možno ich budete chcieť odoslať do databázy znalostí funkcií, možno ako vylepšenú, rozšírenú verziu pôvodnej funkcie.

V budúcnosti plánujeme podporovať forkovanie v štýle Git pre repozitáre funkcií, ale zatiaľ sa snažíme, aby to bolo jednoduché a vždy máme v jazyku zabudovanú iba jednu akceptovanú verziu každej funkcie. Častejšie (pokiaľ sa vývojári nevzdajú údržby funkcií, ktoré vyvinuli a nereagujú na príspevky používateľov), pôvodný autor funkcie prevezme kontrolu nad jej aktualizáciami a odošle nové verzie, ktoré sa potom skontrolujú a ak prejdú procesom kontroly , uverejnené v jazyku.

Zamyslime sa nad otázkou, ako funguje „verzovanie“ vyvinutých funkcií. Práve teraz, keď použijete funkciu z úložiska funkcií, jej definícia bude natrvalo uložená vo vašom počítači (alebo vo vašom cloudovom účte, ak používate cloud). Ak je k dispozícii nová verzia funkcie, pri ďalšom použití dostanete správu s upozornením. A ak chcete aktualizovať funkciu na novú verziu, môžete to urobiť pomocou príkazu ResourceUpdate. („Funkčný blob“ v skutočnosti ukladá viac informácií o verziách a v budúcnosti ich plánujeme sprístupniť našim používateľom.)

Jednou z krásnych vecí na úložisku funkcií Wolfram je, že funkcie z neho môže používať akýkoľvek program Wolfram Language, kdekoľvek. Ak sa program objaví v poznámkovom bloku, je často vhodné naformátovať funkcie úložiska ako ľahko čitateľné funkcie „binárneho objektu funkcií“ (možno s príslušnou nastavenou verziou).

K akejkoľvek funkcii v úložisku funkcií môžete vždy pristupovať pomocou textu ResourceFunction[...]. A to je veľmi výhodné, ak napríklad píšete kód alebo skripty priamo pre Wolfram Engine pomocou IDE alebo textového editora kódu (Je potrebné poznamenať, že úložisko funkcií je plne kompatibilné s Bezplatný Wolfram Engine pre vývojárov).

Ako to funguje?

V rámci funkcií v úložisku Wolfram je to možné pomocou presne toho istého zdrojových systémov základne, ako v všetky naše ostatné existujúce úložiská (Uloženie údajov, Úložisko neurónových sietí, zbierka demo projektov atď.), ako všetky ostatné systémové prostriedky Wolfram, ResourceFunction v konečnom dôsledku na základe funkcie ResourceObject.

Zvážiť ResourceFunction:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Vo vnútri môžete vidieť niektoré informácie pomocou funkcie informácie:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Ako funguje nastavenie funkcie zdrojov? Najjednoduchší je čisto lokálny prípad. Tu je príklad, ktorý berie funkciu (v tomto prípade iba čistú funkciu) a definuje ju ako zdrojovú funkciu pre danú reláciu programu:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Po vytvorení definície môžete použiť funkciu zdroja:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Všimnite si, že v tomto blobe funkcie je čierna ikona Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram. To znamená, že funkcia BLOB odkazuje na funkciu zdroja v pamäti definovanú pre aktuálnu reláciu. Funkcia prostriedkov, ktorá je natrvalo uložená vo vašom počítači alebo cloudovom účte, má sivú ikonu Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram. A v úložisku funkcií Wolfram je oranžová ikona pre oficiálnu funkciu zdroja Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram.

Čo sa teda stane, keď použijete ponuku Rozbaliť v Zápisníku definícií? Najprv preberie všetky definície v poznámkovom bloku a z nich vytvorí symbol ResourceObject). (A ak používate textové IDE alebo program, môžete tiež explicitne vytvoriť ResourceObject)

Lokálne nasadenie funkcie z úložiska na vašom počítači sa vykonáva pomocou príkazu LocalCache aby sa zdrojový objekt uložil ako LocalObject na vašom súborovom systéme. Nasadenie do cloudového účtu sa vykonáva pomocou príkazu CloudDeploy pre objekt prostriedku a nasadenie verejného cloudu je CloudPublish. V každom prípade ResourceRegister používa sa aj na registráciu názvu funkcie zdroja, tzv ResourceFunction["názov"] bude pracovať.

Ak kliknete na tlačidlo Odoslať pre úložisko funkcií, čo sa stane pod ním ResourceSubmit volaný na objekt zdroja. (A ak používate rozhranie na zadávanie textu, môžete tiež zavolať ResourceSubmit priamo.)

V predvolenom nastavení sa príspevky odosielajú pod menom priradeným k vášmu Wolfram ID. Ak však podávate žiadosť v mene vývojového tímu alebo organizácie, môžete nastaviť samostatné ID vlastníka a namiesto toho ho použite ako názov na interakciu s vašimi názormi.

Po odoslaní ktorejkoľvek z vašich funkcií do databázy znalostí funkcií bude táto zaradená do frontu na kontrolu. Ak ako odpoveď dostanete komentáre, zvyčajne budú vo forme textového súboru s pridanými ďalšími „bunkami komentárov“. Stav svojej aplikácie môžete kedykoľvek skontrolovať na stránke členský portál systému zdrojov. Ale akonáhle bude vaša funkcia schválená, dostanete upozornenie (e-mailom) a vaša funkcia bude odoslaná do úložiska funkcií Wolfram.

Niektoré jemnosti v práci

Na prvý pohľad sa môže zdať, že stačí vziať definičný zápisník a vložiť ho doslovne do úložiska funkcií, no v skutočnosti je v tom zahrnutých pomerne veľa jemností – a ich manipulácia si vyžaduje pomerne zložité metaprogramovanie, manipuláciu so symbolickým spracovaním. ako kód, ktorý definuje funkciu a je definovaný samotný Poznámkový blok. Väčšina z toho sa deje interne, v zákulisí, ale môže to mať určité dôsledky, ktoré sa oplatí pochopiť, ak sa chystáte prispieť k znalostnej báze funkcií.

Prvá okamžitá jemnosť: Keď vyplníte Zápisník definícií, môžete jednoducho všade odkazovať na svoju funkciu pomocou názvu ako MyFunction, ktorý vyzerá ako bežný názov funkcie v jazyku Wolfram, ale v dokumentácii k úložisku funkcií je nahradený ResourceFunction["MyFunction"] je to, čo používatelia skutočne využijú pri práci s funkciou.

Druhá jemnosť: keď vytvoríte zdrojovú funkciu z Definition Notebooku, musia byť zachytené a explicitne zahrnuté všetky závislosti zahrnuté v definícii funkcie. Aby ste však zabezpečili, že definície zostanú modulárne, musíte dať všetko do jedinečného menný priestor. (Samozrejme, funkcie, ktoré to všetko spravia, sú v úložisku funkcií.)

Zvyčajne nikdy neuvidíte žiadnu stopu kódu použitého na konfiguráciu tohto priestoru názvov. Ak však z nejakého dôvodu vo svojej funkcii zavoláte nedostatočne vykonaný symbol, uvidíte, že tento symbol je vo vnútornom kontexte funkcie. Pri spracovaní Definition Notepad je však aspoň symbol zodpovedajúci samotnej funkcii nastaviteľné pre najlepšie zobrazenie ako funkčný BLOB skôr než surový charakter vo vnútornom kontexte.

Úložisko funkcií slúži na definovanie nových funkcií. A tieto funkcie môžu mať možnosti. Často tieto parametre (napr. Metóda alebo Veľkosť obrázku) bude možné použiť pre vstavané funkcie, ako aj pre tie, pre ktoré už existujú vstavané symboly. Niekedy si však nová funkcia môže vyžadovať nové možnosti. Aby sa zachovala modularita, tieto parametre musia byť symboly definované v jedinečnom vnútornom kontexte (alebo niečo ako celé funkcie zdrojov, teda samotné). Pre jednoduchosť vám úložisko funkcií umožňuje definovať nové možnosti v definíciách reťazcov. A pre pohodlie používateľa tieto definície (za predpokladu, že použili OptionValue и MožnostiVzor) sú spracované aj tak, že pri použití funkcií je možné parametre špecifikovať nielen ako reťazce, ale aj ako globálne symboly s rovnakými názvami.

Väčšina funkcií jednoducho robí to, čo majú robiť vždy, keď sú zavolané, ale niektoré funkcie je potrebné inicializovať predtým, ako sa spustia v konkrétnej relácii – a na vyriešenie tohto problému existuje časť „Inicializácia“ v časti Definícia.

Funkcie z úložiska môžu používať iné funkcie, ktoré sa už v úložisku nachádzajú; ak chcete nastaviť definície pre úložisko funkcií, ktoré obsahujú dve (alebo viac) funkcií, ktoré sa navzájom odkazujú, musíte ich nasadiť vo svojej relácii programu, aby ste mohli odkaz ako na nich ResourceFunction["názov"], potom môžete vytvoriť kombinácie týchto funkcií, ktoré potrebujete, príklady (nerozumel som) a pridať novú funkciu do úložiska na základe tých, ktoré už boli zverejnené skôr. (alebo už alebo predtým – obe slová sú nemotorné)

Perspektívy rozvoja. Čo by sa malo stať, keď bude úložisko naozaj veľké?

Dnes práve spúšťame úložisko funkcií Wolfram, no v priebehu času očakávame, že jeho veľkosť a funkčnosť sa môže dramaticky zväčšiť a ako bude rásť vo vývoji, vyskytnú sa rôzne problémy, o ktorých už predpokladáme, že môžu nastať.

Prvý problém sa týka názvov funkcií a ich jedinečnosti. Úložisko funkcií je navrhnuté tak, že podobne ako vstavané funkcie v jazyku Wolfram môžete odkazovať na akúkoľvek danú funkciu jednoducho zadaním jej názvu. To však nevyhnutne znamená, že názvy funkcií musia byť globálne jedinečné v rámci úložiska, takže napríklad môže existovať iba jeden ResourceFunction["MyFavoriteFunction"].

Na prvý pohľad sa to môže zdať ako veľký problém, no treba si uvedomiť, že ide v podstate o rovnaký problém ako pri veciach, ako sú internetové domény alebo kľučky sociálnych médií. A faktom je, že systém jednoducho potrebuje mať registrátora – a to je jedna z úloh, ktoré bude naša spoločnosť vykonávať pre znalostnú bázu funkcií Wolfram. (V prípade súkromných verzií úložiska môžu byť ich registrátormi správcovia.) Internetovú doménu je samozrejme možné zaregistrovať aj bez toho, aby na nej bolo čokoľvek, ale v úložisku funkcií možno názov funkcie zaregistrovať iba vtedy, ak existuje skutočná definícia funkcia.

Súčasťou našej úlohy pri správe znalostnej bázy funkcií Wolfram je zabezpečiť, aby názov zvolený pre funkciu bol logický vzhľadom na definíciu funkcie a aby sa riadil konvenciami pomenovania jazyka Wolfram. Máme viac ako 30 rokov skúseností s pomenovávaním vstavaných funkcií v jazyku Wolfram a náš tím kurátorov prinesie tieto skúsenosti aj do úložiska funkcií. Samozrejme, vždy sa nájdu výnimky. Napríklad sa môže zdať vhodnejšie mať pre nejakú funkciu krátky názov, ale je lepšie „brániť sa“ dlhším, konkrétnejším názvom, pretože je menej pravdepodobné, že narazíte na niekoho, kto bude chcieť v budúcnosti vytvoriť podobný názov funkcie. .

(Tu je potrebné poznamenať, že jednoduché pridanie nejakého členského tagu na zjednotenie funkcií nebude mať zamýšľaný efekt. Pretože pokiaľ netrváte na tom, že tag je vždy priradený, budete musieť definovať predvolený tag pre danú funkciu a tiež prideliť autora tagy, čo by si opäť vyžadovalo globálnu koordináciu.)

Ako sa znalostná báza funkcií Wolfram rozrastá, jedným z problémov, ktoré pravdepodobne nastanú, je objaviteľnosť funkcií, pre ktoré systém poskytuje funkcia vyhľadávania (a definičné súbory môžu obsahovať kľúčové slová atď.). Pre vstavané funkcie v jazyku Wolfram sú v dokumentácii všetky druhy krížových odkazov, ktoré pomáhajú „propagovať“ funkcie. Funkcie v archíve funkcií môžu odkazovať na vstavané funkcie. Ale čo naopak? Aby sme to dosiahli, budeme experimentovať s rôznymi návrhmi, aby sme odhalili funkcie úložiska na stránkach dokumentácie pre vstavané funkcie.

Pre vstavané funkcie v jazyku Wolfram je poskytovaná takzvaná detekčná vrstva sieť „stránok pomocníka“, ktoré poskytujú usporiadané zoznamy funkcií súvisiacich s konkrétnymi oblasťami. Vždy je ťažké správne vyvážiť manuálové stránky a ako jazyk Wolfram rastie, manuálové stránky je často potrebné úplne reorganizovať. Je celkom jednoduché zaradiť funkcie z úložiska do širokých kategórií a dokonca tieto kategórie dôsledne rozdeliť, ale oveľa cennejšie je mať správne usporiadané jazykové referenčné stránky. Zatiaľ nie je jasné, ako ich najlepšie vytvoriť pre celú bázu znalostí funkcií. Napríklad, CreateResourceObjectGallery v úložisku funkcií môže ktokoľvek uverejniť webovú stránku obsahujúcu jeho „výbery“ z úložiska:

Wolfram Function Repository: Platforma s otvoreným prístupom pre rozšírenia jazyka Wolfram

Úložisko funkcií Wolfram je nakonfigurované ako úložisko trvalých funkcií, kde akákoľvek funkcia v ňom bude vždy fungovať. Samozrejme, môžu byť dostupné nové verzie funkcií a očakávame, že niektoré funkcie budú časom samozrejme zastarané. Funkcie budú fungovať, ak sa používajú v programoch, ale ich dokumentačné stránky budú odkazovať na nové, pokročilejšie funkcie.

Úložisko funkcií Wolfram je navrhnuté tak, aby vám pomohlo rýchlo objaviť nové funkcie a naučiť sa nové spôsoby používania jazyka Wolfram. Sme veľmi optimistickí, že niektoré z toho, čo bolo preskúmané v úložisku funkcií, bude mať nakoniec zmysel stať sa vstavanými súčasťami základného jazyka Wolfram. Za posledné desaťročie sme mali podobný súbor funkcie, ktoré boli pôvodne predstavené vo Wolfram | Alfa. A jedným z ponaučení z tejto skúsenosti je, že dosiahnutie štandardov kvality a konzistentnosti, na ktoré sa zameriavame vo všetkom, čo je zabudované do jazyka Wolfram, si vyžaduje veľa práce, ktorá je často náročnejšia ako počiatočné úsilie o realizáciu myšlienky. Aj tak môže funkcia v znalostnej báze funkcií slúžiť ako veľmi užitočný dôkaz koncepcie budúcej funkcie, ktorá môže byť nakoniec zabudovaná do jazyka Wolfram.

Najdôležitejšia vec je, že funkcia v úložisku funkcií je niečo, čo môže práve teraz používať každý používateľ. Je možné, že funkcia v natívnom jazyku by mohla byť oveľa lepšia a výkonnejšia, ale úložisko funkcií by používateľom umožnilo okamžite prístup ku všetkým novým funkciám. A čo je najdôležitejšie, tento koncept umožňuje každému pridať nové funkcie, ktoré chce.

Predtým v histórii wolframského jazyka by táto myšlienka nefungovala tak dobre, ako fungovala, ale v tejto fáze je do jazyka vložené toľko úsilia a také hlboké pochopenie princípov jazykového dizajnu, že sa teraz zdá veľmi Pre veľkú komunitu používateľov je možné pridať funkcie, ktoré zachovajú konzistentnosť dizajnu, aby boli užitočné pre široký okruh používateľov.

V komunite používateľov Wolfram Language je neuveriteľný duch talentu(?). (Samozrejme, táto komunita zahŕňa mnoho popredných ľudí z oblasti výskumu a vývoja v rôznych oblastiach.) Dúfam, že úložisko funkcií Wolfram poskytne efektívnu platformu na odomknutie a šírenie tohto ducha talentu. Len spoločnými silami môžeme vytvoriť niečo, čo výrazne rozšíri oblasť, na ktorú sa dá aplikovať výpočtová paradigma jazyka Wolfram.

Za viac ako 30 rokov sme s jazykom Wolfram prešli dlhú cestu. Teraz spolu poďme ešte ďalej. Dôrazne vyzývam všetkých rešpektovaných používateľov jazyka Wolfram na celom svete, aby na to používali funkčný repozitár ako platformu, ako aj nový softvérový projekt, akým je Free Wolfram Engine for Developers.

Zdroj: hab.com

Pridať komentár