Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Dobrý den, Habr! Předkládám vaší pozornosti překlad příspěvku Stephena Wolframa „Úložiště funkcí Wolfram: Spuštění otevřené platformy pro rozšíření jazyka Wolfram“.

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Předpoklady pro konzistenci jazyka Wolfram

Dnes stojíme na prahu velkých úspěchů společně s programovacím jazykem Wolframský jazyk. Právě před třemi týdny jsme spustili bezplatný engine Wolfram pro vývojářepomoci našim uživatelům integrovat jazyk Wolfram do jejich rozsáhlých softwarových projektů. Dnes spouštíme Úložiště funkcí Wolfram, abychom poskytli koordinovanou platformu pro funkce vytvořené pro rozšíření jazyka Wolfram, a také otevíráme úložiště funkcí pro každého, kdo může přispět k vývoji našeho softwarového produktu.

Wolfram Function Repository je něco, co umožňuje jedinečná povaha jazyka Wolfram nejen jako programovacího jazyka, ale také jako plnohodnotný výpočetní jazyk. V tradičních programovacích jazycích přidání nových významných funkcí obvykle zahrnuje vytvoření celých dalších knihoven, které mohou, ale nemusí fungovat, když se používají společně. Nicméně ve wolframském jazyce tolik je již zabudováno do jazyka samotného, že je možné výrazně rozšířit jeho funkčnost pouhým přidáním nových funkcí, které jsou okamžitě integrovány do holistické struktury celého jazyka.

Například úložiště funkcí Wolfram již obsahuje 532 nových funkcí rozděleno do 26 tematických kategorií:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Stejně tak více než 6000 standardních funkcí, zabudovaný do jazyka Wolfram, každá funkce z úložiště má dokumentační stránku s jejich podrobným popisem a příklady práce:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Chcete-li se dostat na stránku, zkopírujte výše uvedený objekt (funkce BLOB), vložte jej do vstupního řádku a poté funkci spusťte - je již zabudována do jazyka Wolfram a standardně podporována počínaje verze 12.0:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Zde je třeba poznamenat, že při zpracování LogoQRCode Nemusíte například nastavovat „knihovnu zpracování obrazu“ – protože jsme již implementovali konzistentní a pečlivě algoritmický způsob v jazyce Wolfram zpracování obrazu, které lze okamžitě zpracovat různými funkcemi grafického jazyka:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Doufám, že s podporou úžasná a talentovaná komunita, která v posledních několika desetiletích roste a rozšiřuje se (na základě wolframského jazyka). Repozitář funkcí Wolfram umožní v dohledné době výrazně rozšířit škálu (možná potenciálně významných, specializovaných na různé oblasti vědy a techniky) funkcí dostupných v jazyce. Je tak možné využívat jak obsah jazyka (jeho vestavěné funkce), tak zásady rozvoje, které jsou implementovány na základě jazyka. (Zde je třeba poznamenat, že jazyk Wolfram již má více než 30letá historie vývoje a stabilní růst).
Funkce z úložiště mohou obsahovat malé nebo velké části kódu napsané v jazyce Wolfram. Mohou to být například hovory externí API a služby nebo externí knihovny v jiných jazycích. Jedinečným rysem tohoto přístupu je to, že když projdete až k funkčnosti na uživatelské úrovni, nenastanou žádné potenciální nesrovnalosti, protože přístup je postaven na konzistentní struktuře jazyka Wolfram – a každá funkce bude automaticky fungovat správně – přesně tak, jak měla by.
Struktura shellu a programování úložiště funkcí Wolfram je navržena tak, aby každý mohl přispět ke společné věci tím nejjednodušším a nejpohodlnějším způsobem pro něj – ve skutečnosti jen vyplněním textového souboru poznámkového bloku (s příponou nb) WL. Vestavěné automatické funkce umožňují kontrolovat nové funkce přidané do úložiště, aby byla zajištěna jejich integrace do jazyka. Naše společnost spíše než na velkou komplexnost nových funkcí sází na široké spektrum uživatelů, kteří dokážou své funkce integrovat do jazyka – a přestože existuje recenzní řízení, na ničem podobném netrváme pečlivá analýza designu nebo přísné standardy pro úplnost a spolehlivost nových uživatelských funkcí, na rozdíl od důslednějšího testování funkcí zabudovaných do základního jazyka, který používáme.

V tomto přístupu je mnoho kompromisů a detailů, ale naším cílem je optimalizovat úložiště funkcí Wolfram jak pro uživatelskou zkušenost, tak zajistit, aby nové uživatelské funkce smysluplně přispívaly k vývoji jazyka. Jak rosteme, nepochybuji o tom, že budeme muset vymýšlet nové metody pro manipulaci a ověřování funkcí zabudovaných do úložiště, v neposlední řadě pro organizaci velkého množství funkcí a hledání těch, které uživatelé potřebují. Je však povzbudivé, že cesta, kterou jsme zvolili, je dobrý začátek. já osobně přidal několik funkcí do původní databáze. Mnoho z nich je založeno na kódu, který jsem osobně vyvíjel poměrně dlouho. A trvalo mi jen pár minut, než jsem je přenesl do úložiště. Nyní, když jsou v úložišti, mohu konečně - okamžitě a kdykoli - tyto funkce používat podle potřeby, aniž bych se musel starat o vyhledávání souborů, stahování balíčků atd.

Zvýšení efektivity při současném snížení nákladů

Ještě před Internetem existovaly způsoby, jak sdílet kód Wolfram Language (náš první velký centralizovaný projekt byl MathSource, vytvořený pro Mathematica v roce 1991 na základě CD-ROM atd.). Samozřejmě, že přístup navržený pro implementaci založený na úložišti funkcí Wolfram je výkonnějším a spolehlivějším nástrojem pro implementaci výše uvedených úkolů.

Naše společnost již více než 30 let pilně pracuje na zachování integrity struktury jazyka Wolfram, což je zásadní pro zajištění toho, aby se jazyk Wolfram stal nejen programovacím jazykem, ale také plnohodnotný počítačový jazyk. Podstatou přístupu k implementaci úložiště funkcí Wolfram je tedy použití jednotného přístupu k programování a vývoji nových funkcí, které jsou postupně přidávány a zapadají do rámce jazyka, aby se mohl vyvíjet a společně vyvíjet.

V implementační struktuře každé funkce se vyskytují různé výpočetní procesy. Zde je třeba poznamenat, že je nutné, aby funkce měla pro uživatele jasný a jednotný vzhled a vizuální čitelnost. V této souvislosti jsou vestavěné funkce jazyka Wolfram prezentovány s více než 6000 XNUMX po sobě jdoucími příklady, jak správně programovat funkce (toto jsou naše živá programovací videakterý zahrnuje stovky hodin procesu tvorby standardních programů). Tento přístup nakonec umožňuje, aby úložiště funkcí Wolfram fungovalo dobře, je strukturální povaha jazyka Wolfram s velkým množstvím dalších a rozmanitých knihoven, které jsou již zabudovány do jazyka. Pokud máte například funkci, která zpracovává obrázky, popř řídká poleNebo molekulární strukturya geografické údaje nebo některé další - jejich konzistentní symbolická reprezentace již v jazyce existuje a díky tomu se vaše funkce okamžitě stane kompatibilní s ostatními funkcemi v jazyce.

Vytvoření úložiště, které skutečně funguje dobře, je zajímavý úkol metaprogramování. Například přemíra omezení v programu neumožní získat požadovanou unifikaci a univerzálnost algoritmu. Stejně jako při nedostatečném počtu funkčních omezení nebudete schopni implementovat dostatečně správnou sekvenci provádění algoritmu. Několik předchozích příkladů implementace kompromisu těchto přístupů, implementovaných naší společností, fungovalo poměrně stabilně - jsou to: Ukázky projektu Tungsten, spuštěný v roce 2007 a nyní běží online online s více než 12000 XNUMX uživatelsky interaktivními ukázkami. V databáze Wolfram existuje více než 600 hotových databází, které lze použít v jazyce Wolfram, a Úložiště neuronové sítě Wolfram se téměř každý týden doplňuje o nové neuronové sítě (teď jich je již 118) a jsou okamžitě připojeny přes funkci NetModel ve wolframském jazyce.

Všechny výše uvedené příklady mají zásadní rys – objekty a funkce shromážděné v projektu mají velmi vysoký stupeň strukturování a distribuce procesů. Samozřejmě, že detaily struktury toho, co je demo nebo neuronová síť nebo něco jiného, ​​se mohou značně lišit, ale základní struktura jakéhokoli současného úložiště zůstává vždy stejná. Jaký je tedy váš názor, milý uživateli, na vytvoření takového úložiště, které přidává rozšíření do jazyka Wolfram? Jazyk Wolfram je navržen tak, aby byl extrémně flexibilní, takže jej lze jakkoli rozšiřovat a upravovat. Tato okolnost je nesmírně důležitá pro schopnost rychle vytvářet různé rozsáhlé softwarové projekty v jazyce Wolfram. Zde je třeba poznamenat, že s rostoucí flexibilitou jazyka se nevyhnutelně zvýší náklady na projekty realizované v takovém jazyce. To je způsobeno skutečností, že čím více uživatel takový jazyk používá, tím více vyhrazených funkcí obdrží, ale neměli bychom zapomínat, že tento přístup může mít také negativní stránky, pokud jde o neschopnost zajistit konzistentní konzistenci programových modulů.

U knihoven v tradičních programovacích jazycích je běžný problém - pokud například používáte jednu knihovnu, kód bude fungovat správně, ale pokud se pokusíte použít více knihoven, není zaručeno, že budou vzájemně správně interagovat . Také v tradičních programovacích jazycích - na rozdíl od plnohodnotného výpočetního jazyka - neexistuje žádný způsob, jak zaručit přítomnost konzistentních vestavěných reprezentací pro jakékoli funkce nebo datové typy jiné než jejich základní struktury. Ale ve skutečnosti je problém ještě větší, než se na první pohled zdá: pokud člověk buduje rozsáhlou vertikálu funkčnosti, pak bez obrovských nákladů na centralizované projektové programování, které vkládáme do jazyka Wolfram, není možné dosáhnout konzistence. Je proto důležité, aby všechny softwarové moduly vždy správně spolupracovaly.

Myšlenkou repozitáře funkcí Wolfram je tedy vyhnout se výše popsanému problému jednoduchým přidáním rozšíření do jazyka v relativně malých kouscích kódu prostřednictvím jednotlivých funkcí, které se snadněji vyvíjejí jako koherentní moduly. Jak již bylo řečeno, existují programovací funkce, které nelze usnadnit pomocí jednotlivých funkcí (a naše společnost plánuje v blízké budoucnosti vydat optimalizovaný programovací algoritmus, který pomůže implementovat rozsáhlé softwarové balíčky). Na základě funkcí již zabudovaných do jazyka Wolfram však existuje mnoho možností programování, které jsou implementovány na základě jednotlivých funkcí. Myšlenka je taková, že s relativně malým programátorským úsilím je možné vytvořit řadu nových a velmi užitečných funkcí, které poskytnou dostatečnou koherenci návrhu, budou vzájemně dobře sladěny a navíc budou moci v budoucnu snadno a široce používat v jazyce.

Tento přístup je samozřejmě kompromisem. Pokud by byl implementován větší balík, bylo by možné si představit zcela nový svět funkcí, který by byl extrémně výkonný a užitečný. Pokud je potřeba získat novou funkcionalitu, která se bude hodit ke všemu ostatnímu, ale nejste ochotni vynaložit velké úsilí na vývoj projektu, může to bohužel vést ke snížení rozsahu vašeho projektu. Myšlenkou úložiště funkcí Wolfram je poskytnout funkčnost definující části projektu; tento přístup přidá výkonnou funkcionalitu a zároveň usnadní udržení dobré konzistence v programovacím projektu.

Pomoc při přidávání vlastních funkcí do úložiště funkcí

Náš tým tvrdě pracoval na tom, aby uživatelům usnadnil přispívat do funkcí úložiště Wolfram. Na ploše (již v verze 12.0), Můžete jednoduše postupně procházet kartami hlavní nabídky: Soubor > Nový > Položka úložiště > Položka úložiště funkcí a dostanete "Definice notebooku" (programově uvnitř pracovního stolu. Můžete také použít analogovou funkci - Vytvořit Notebook["FunctionResource"]):

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Jsou dva hlavní kroky, které budete muset provést: zaprvé si skutečně zapište kód pro svou funkci a zadruhé sepište dokumentaci znázorňující, jak by funkce měla fungovat.
Kliknutím na tlačítko "Otevřít ukázku" nahoře zobrazíte příklad toho, co musíte udělat:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

V podstatě se snažíte vytvořit něco podobného jako vestavěná funkce v jazyce Wolfram. Až na to, že umí něco mnohem konkrétnějšího než vestavěnou funkci. Očekávání ohledně jeho úplnosti a spolehlivosti přitom budou mnohem nižší.
Své funkci musíte dát název, který se řídí pokyny pro pojmenování funkcí v jazyce Wolfram. Kromě toho budete muset vyvinout dokumentaci pro vaši funkci, podobnou vestavěným funkcím jazyka. O tom budu mluvit podrobněji později. Prozatím si všimněte, že v řadě tlačítek v horní části souboru definičního poznámkového bloku je tlačítko "Pokyny ke stylu", který vysvětluje, co dělat, a tlačítko Nástroje, které poskytuje nástroje pro formátování dokumentace vaší funkce.
Když jste si jisti, že je vše správně vyplněno a jste připraveni, klikněte na tlačítko „Zkontrolovat“. Je úplně normální, že jste ještě nepřišli na všechny detaily. Funkce „Kontrola“ se tedy automaticky spustí a provede mnoho kontrol stylu a konzistence. Často vás okamžitě vyzve k potvrzení a přijetí oprav (například: „Tento řádek musí končit dvojtečkou“ a vyzve vás k zadání dvojtečky). Někdy vás požádá, abyste sami něco přidali nebo změnili. Do automatické funkčnosti tlačítka Check budeme neustále přidávat nové funkce, ale v podstatě jeho účelem je zajistit, aby vše, co odešlete do úložiště funkcí, již přesně odpovídalo co největšímu počtu pokynů pro styl

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Takže po spuštění "Kontrola" můžete použít "Náhled". "Náhled" vytvoří náhled stránky dokumentace, kterou jste definovali pro svou funkci. Můžete také vytvořit náhled pro soubor vytvořený v počítači nebo pro soubor umístěný v cloudovém úložišti. Pokud z nějakého důvodu nejste spokojeni s tím, co vidíte v náhledu, jednoduše se vraťte a proveďte potřebné opravy a poté znovu klikněte na tlačítko Náhled.
Nyní jste připraveni vložit svou funkci do úložiště. Tlačítko Nasadit vám nabízí čtyři možnosti:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Důležité v tomto kroku je, že svou funkci můžete odeslat do úložiště funkcí Wolfram, aby byla dostupná komukoli. Zároveň můžete svou funkci umístit i pro omezený počet uživatelů. Můžete například vytvořit funkci, která je umístěna lokálně na vašem počítači, takže je dostupná, když používáte daný počítač. Nebo to můžete zveřejnit ve svém cloudový účet, abyste jej měli k dispozici, když jste připojeni ke cloudu. Funkci můžete také veřejně hostovat (nasadit) prostřednictvím svého cloudového účtu. Nebude to v centrálním úložišti funkcí Wolfram, ale budete moci někomu dát adresu URL, která mu umožní získat vaši funkci z vašeho účtu. (V budoucnu budeme také podporovat centrální úložiště v celé naší společnosti.)

Řekněme tedy, že chcete svou funkci skutečně odeslat do znalostní báze funkcí Wolfram. Chcete-li to provést, klikněte na tlačítko „Odeslat“ do úložiště. Co se tedy v tuto chvíli děje? Vaše žádost je okamžitě zařazena do fronty ke kontrole a schválení naším specializovaným týmem kurátorů.

Jak bude vaše aplikace procházet schvalovacím procesem (který obvykle trvá několik dní), budete dostávat sdělení týkající se jejího stavu a případně návrhy pro budoucí použití. Jakmile je však vaše funkce schválena, bude okamžitě publikována do úložiště funkcí Wolfram a bude k dispozici pro každého. (A toto se objeví v přehledy zpráv o nových funkcích a tak dále)

Co by mělo být v úložišti?

Je třeba poznamenat, že naše společnost má velmi vysoké standardy úplnosti, spolehlivosti a celkové kvality a z více než 6000 funkcí, které jsme již do jazyka Wolfram zabudovali za posledních 30+ let, všechny splňují výše uvedené požadavky. Cílem úložiště funkcí Wolfram je využít veškerou strukturu a funkcionalitu, která již v jazyce Wolfram existuje, aby bylo možné přidat co nejvíce lehčích funkcí (tj. funkcí s vyšším výkonem).

Funkce v úložišti funkcí Wolfram musí samozřejmě odpovídat principům návrhu jazyka Wolfram – aby mohly plně interagovat s ostatními funkcemi a očekáváními uživatelů, jak má funkce správně fungovat. Funkce však nemusí mít stejnou úplnost nebo spolehlivost.

Ve vestavěných funkcích jazyka Wolfram tvrdě pracujeme na tom, aby programovací funkce byly co nejobecnější. Jak bylo řečeno, když v úložišti funkcí Wolfram není nic špatného na tom, mít v něm funkci, která jednoduše zpracovává nějaký velmi specifický, ale užitečný případ. Například funkce SendMailFromNotebook může přijímat soubory v jednom konkrétním formátu a vytvářet poštu jedním konkrétním způsobem. Polygonální diagram vytváří grafy pouze s určitými barvami a štítky atd.

Dalším bodem souvisejícím s vestavěnými funkcemi je, že naše společnost vynakládá maximální úsilí na zvládnutí všech atypických případů, na správné zpracování nesprávného zadání a podobně. V úložišti funkcí je zcela normální, že existuje speciální funkce, která řeší hlavní případy řešení problému a ignoruje všechny ostatní.

Zřejmým bodem je, že je lepší mít funkce, které toho dělají více a dělají to lépe, ale optimalizace pro úložiště funkcí – na rozdíl od vestavěných funkcí jazyka Wolfram – by měla mít více funkcí sdružených s více funkcemi, spíše než se ponořit do implementační procesy každé konkrétní funkce.

Nyní se podívejme na příklad testování funkcí v úložišti. Očekávání konzistence u takových funkcí jsou přirozeně mnohem nižší než u vestavěných jazykových funkcí. To platí zejména v případech, kdy funkce závisí na externích zdrojích, jako jsou API, je důležité neustále provádět konzistentní testy, což se automaticky děje v rámci ověřovacích algoritmů. V souboru nb můžete explicitně specifikovat definice (v sekci Další informace) a specifikovat tolik testů, jak je definováno buď vstupními a výstupními řetězci nebo úplnými znakovými objekty typu Ověřovací test, jak uznáte za vhodné. Kromě toho se systém neustále snaží proměnit vámi poskytnuté příklady dokumentace v ověřovací proces (a někdy to může být poměrně náročné na zdroje, například u funkce, jejíž výsledek závisí na náhodných číslech nebo denní době).

V důsledku toho bude mít úložiště funkcí řadu složitých implementací. Některé budou pouze jedním řádkem kódu, jiné mohou zahrnovat tisíce nebo desítky tisíc řádků, pravděpodobně využívajících mnoho pomocných funkcí. Kdy se vyplatí přidat funkci, jejíž definování vyžaduje velmi málo kódu? V podstatě, pokud pro funkci existuje dobré mnemotechnické jméno, kterému by uživatelé snadno porozuměli, kdyby jej viděli v kusu kódu, lze jej již přidat. V opačném případě je pravděpodobně lepší jednoduše znovu připojit kód k vašemu programu pokaždé, když jej potřebujete použít.

Hlavním účelem úložiště funkcí (jak jeho název napovídá) je zavádět do jazyka nové funkce. Pokud chcete přidat nové údaje popř nové entity, použití Úložiště dat Wolfram. Ale co když chcete pro své výpočty zavést nové typy objektů?

Jsou vlastně dva způsoby. Možná budete chtít zavést nový typ objektu, který bude použit v nových funkcích v úložišti funkcí. A v tomto případě si vždy můžete pouze zapsat jeho symbolickou reprezentaci a použít ji při zadávání nebo výstupu funkcí v úložišti funkcí.

Ale co když chcete reprezentovat objekt a poté definovat prostřednictvím existujících funkcí v jazyce Wolfram, že s ním chcete pracovat? Wolframský jazyk pro to vždy měl lehký mechanismus, tzv UpValues. S určitými omezeními (zejména pro funkce, které nemohou hodnotit jejich argumenty), úložiště funkcí vám umožňuje jednoduše reprezentovat funkci a definovat pro ni hodnoty. (Zvýšení očekávání konzistence při vytváření nového hlavního návrhu, který je plně integrován do celého jazyka Wolfram, je obecně velmi důležitým postupem, kterého nelze dosáhnout pouhým zvýšením nákladů na projekt a je to něco, co naše společnost dělá jako součást projektů. pro dlouhodobý vývoj jazyka není tento úkol cílem, který je stanoven v rámci vývoje úložiště).

Co by tedy mohlo být v kódu funkce v úložišti funkcí? Vše zabudované do wolframského jazyka, samozřejmě (alespoň pokud to nepředstavuje hrozby pro zabezpečení a výkon samotného programu jako výpočetního prostředí) a také jakékoli funkce z úložiště funkcí. Existují však další funkce: funkce v úložišti funkcí může volat API nebo in Wolframův oblakNebo z jiného zdroje. S tím jsou samozřejmě spojena určitá rizika. Vzhledem k tomu, že neexistují žádné záruky, že se API nezmění a funkce v obchodě funkcí přestane fungovat. Abychom pomohli identifikovat podobné problémy, je na stránce dokumentace (v části Požadavky) poznámka pro jakoukoli funkci, která závisí na více než jen vestavěné funkcionalitě Wolfram Language. (Samozřejmě, pokud jde o skutečná data, mohou být problémy i s touto funkcionalitou - protože data z reálného světa se neustále mění a někdy se mění i jejich definice a struktura.)

Měl by být veškerý kód pro úložiště funkcí Wolfram napsán ve Wolframu? Kód uvnitř externího API by samozřejmě neměl být napsán v jazyce Wolfram, který ani nevytváří kód jazyka. Ve skutečnosti, pokud najdete funkci v téměř jakémkoli externím jazyce nebo knihovně, můžete vytvořit obal, který vám umožní použít ji v úložišti funkcí Wolfram. (Obvykle byste k tomu měli používat vestavěné funkce ExternalEvaluate nebo ExterníFunkce v kódu jazyka Wolfram.)

Jaký to má smysl dělat? V podstatě vám to umožňuje používat celý integrovaný systém Wolfram Language a celou jeho jednotnou sadu softwarových schopností. Pokud získáte základní implementaci z externí knihovny nebo jazyka, můžete pak použít bohatou symbolickou strukturu jazyka Wolfram k vytvoření pohodlné funkce nejvyšší úrovně, která uživatelům umožňuje snadno používat jakoukoli již implementovanou funkci. Přinejmenším by to mělo být proveditelné v ideálním světě, kde existují všechny stavební bloky načítacích knihoven atd., v takovém případě by je automaticky zpracovával jazyk Wolfram. (Je třeba poznamenat, že v praxi mohou nastat problémy s nastavení externích jazyků konkrétní počítačový systém a cloudové úložiště mohou představovat další bezpečnostní problémy).

Mimochodem, když se poprvé podíváte na typické externí knihovny, často se zdají příliš složité na to, aby je pokrylo jen několik funkcí, ale v mnoha případech velká část složitosti pochází z vytvoření infrastruktury potřebné pro knihovnu a všech funkcí podpořit to. Při použití jazyka Wolfram je však infrastruktura obvykle již zabudována do balíčků, a proto není třeba podrobně vystavovat všechny tyto podpůrné funkce, ale pouze vytvářet funkce pro „nejvyšší“ funkce specifické pro aplikaci v knihovně. .

„Ekosystém“ znalostní báze

Pokud jste napsali funkce, které pravidelně používáte, odešlete je do úložiště funkcí Wolfram! Pokud z toho nevyplývá něco víc (vývoj jazyka), pak i tak pro vás bude mnohem pohodlnější používat funkce pro osobní potřebu. Je však logické předpokládat, že pokud funkce používáte pravidelně, možná se budou hodit i ostatním uživatelům.

Přirozeně se můžete dostat do situace, kdy nemůžete – nebo nechcete – sdílet své funkce nebo v případě získání přístupu k soukromým informačním zdrojům. I v takových případech můžete funkce jednoduše nasadit na svůj vlastní cloudový účet, upřesnění práv přístup k nim. (Pokud má vaše organizace Soukromý cloud Wolfram Enterprise, pak bude brzy moci hostovat své vlastní úložiště soukromých funkcí, které lze spravovat z vaší organizace a nastavit, zda má či nemá vynutit zobrazení zobrazení uživatelům třetích stran.)

Funkce, které odešlete do úložiště funkcí Wolfram, nemusí být dokonalé; prostě musí být užitečné. Trochu to připomíná sekci „Chyby“ v klasické unixové dokumentaci – v sekci „Definice“ je sekce „Poznámky autora“, kde můžete popsat omezení, problémy atd., které již o své funkci znáte. Když navíc odešlete svou funkci do úložiště, můžete přidat poznámky k odeslání, které si přečte specializovaný tým kurátorů.

Jakmile je funkce publikována, její stránka má vždy dva odkazy ve spodní části: "Pošlete zprávu o této funkci"A"Diskutujte v komunitě Wolfram" Pokud připojujete poznámku (např. řekněte mi o chybách), můžete zaškrtnout políčko, které říká, že chcete, aby vaše zpráva a kontaktní informace byly sdíleny s autorem funkce.

Někdy prostě chcete používat funkce z úložiště funkcí Wolfram, jako jsou vestavěné funkce, aniž byste se dívali na jejich kód. Pokud se však chcete podívat dovnitř, nahoře je vždy tlačítko Poznámkový blok. Klikněte na něj a získáte vlastní kopii původního poznámkového bloku s definicemi, který byl odeslán do úložiště funkcí. Někdy to můžete použít jen jako příklad pro vaše potřeby. Zároveň si můžete vyvinout i vlastní modifikaci této funkce. Tyto funkce, které jste našli z úložiště, možná budete chtít zveřejnit ve svém počítači nebo ve svém účtu cloudového úložiště aphid, možná je budete chtít odeslat do znalostní báze funkcí, možná jako vylepšenou, rozšířenou verzi původní funkce.

V budoucnu plánujeme podporovat forkování ve stylu Git pro repozitáře funkcí, ale prozatím se snažíme, aby to bylo jednoduché a vždy máme pouze jednu přijatou verzi každé funkce zabudovanou do jazyka. Častěji než ne (pokud se vývojáři nevzdají udržování funkcí, které vyvinuli a nereagují na příspěvky uživatelů), původní autor funkce převezme kontrolu nad aktualizacemi a předloží nové verze, které jsou poté zkontrolovány, a pokud projdou procesem kontroly , zveřejněné v jazyce.

Zamysleme se nad otázkou, jak funguje „verzování“ vyvinutých funkcí. Právě teď, když používáte funkci z úložiště funkcí, bude její definice trvale uložena ve vašem počítači (nebo ve vašem cloudovém účtu, pokud cloud používáte). Pokud je k dispozici nová verze funkce, při jejím příštím použití obdržíte zprávu s upozorněním. A pokud chcete funkci aktualizovat na novou verzi, můžete to udělat pomocí příkazu Aktualizace zdrojů. („Funkční blob“ ve skutečnosti ukládá více informací o verzích a plánujeme je v budoucnu zpřístupnit našim uživatelům.)

Jednou z krásných věcí na úložišti funkcí Wolfram je to, že funkce z něj může používat jakýkoli program Wolfram Language, kdekoli. Pokud se program objeví v poznámkovém bloku, je často vhodné naformátovat funkce úložiště jako snadno čitelné funkce „binárního objektu funkcí“ (možná s příslušnou sadou verzí).

K jakékoli funkci v úložišti funkcí můžete vždy přistupovat pomocí textu ResourceFunction[...]. A to je velmi výhodné, pokud například píšete kód nebo skripty přímo pro Wolfram Engine pomocí IDE nebo textového editoru kódu (Zvláště je třeba poznamenat, že úložiště funkcí je plně kompatibilní s Zdarma Wolfram Engine pro vývojáře).

Jak to funguje?

Uvnitř funkcí v úložišti Wolfram je to možné pomocí úplně stejného zdrojové systémy základny, jako v všechna naše další existující úložiště (úložiště dat, Úložiště neuronových sítí, sbírka demo projektů atd.), stejně jako všechny ostatní systémové prostředky Wolfram, ResourceFunction nakonec na základě funkce ResourceObject.

Zvážit ResourceFunction:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Uvnitř můžete vidět některé informace pomocí funkce Informace:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Jak funguje nastavení funkce zdrojů? Nejjednodušší je čistě lokální případ. Zde je příklad, který vezme funkci (v tomto případě pouze čistou funkci) a definuje ji jako zdrojovou funkci pro danou relaci programu:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Jakmile vytvoříte definici, můžete použít funkci zdroje:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Všimněte si, že v tomto funkčním blobu je černá ikona Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram. To znamená, že funkce BLOB odkazuje na funkci prostředků v paměti definovanou pro aktuální relaci. Funkce prostředků, která je trvale uložena ve vašem počítači nebo cloudovém účtu, má šedou ikonu Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram. A ve Wolfram Feature Repository je oranžová ikona pro funkci oficiálního zdroje Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram.

Co se tedy stane, když v Zápisníku definic použijete nabídku Rozbalit? Nejprve vezme všechny definice v poznámkovém bloku a z nich vytvoří symbol ResourceObject). (A pokud používáte textové IDE nebo program, můžete také explicitně vytvořit ResourceObject)

Místní nasazení funkce z úložiště na vašem počítači se provádí pomocí příkazu LocalCache pro zdrojový objekt jej uložit jako LocalObject na vašem systému souborů. Nasazení do cloudového účtu se provádí pomocí příkazu CloudDeploy pro objekt prostředku a nasazení veřejného cloudu je CloudPublish. Ve všech případech ResourceRegister používá se také k registraci názvu funkce zdroje, takže ResourceFunction["název"] bude fungovat.

Pokud kliknete na tlačítko Odeslat pro úložiště funkcí, co se pod ním stane ResourceSubmit voláno na objekt prostředku. (A pokud používáte rozhraní pro zadávání textu, můžete také volat ResourceSubmit přímo.)

Ve výchozím nastavení jsou příspěvky odesílány pod jménem spojeným s vaším Wolfram ID. Pokud ale podáváte žádost jménem vývojového týmu nebo organizace, můžete nastavit samostatné ID majitele stránek a místo toho jej použijte jako název pro interakci s vašimi názory.

Poté, co odešlete kteroukoli z vašich funkcí do znalostní báze funkcí, bude zařazena do fronty ke kontrole. Pokud jako odpověď obdržíte komentáře, budou obvykle ve formě textového souboru s přidanými dalšími „buňkami komentářů“. Stav své žádosti můžete kdykoli zkontrolovat na stránce členský portál systému zdrojů. Ale jakmile bude vaše funkce schválena, budete informováni (e-mailem) a vaše funkce bude odeslána do úložiště funkcí Wolfram.

Některé jemnosti v práci

Na první pohled se může zdát, že stačí vzít definiční zápisník a vložit jej doslovně do úložiště funkcí, ale ve skutečnosti je s tím spojeno poměrně hodně jemností – a jejich zpracování vyžaduje poměrně složité metaprogramování, zpracování symbolického zpracování. jako kód, který definuje funkci a je definován samotný Poznámkový blok. Většina z toho se děje interně, v zákulisí, ale může to mít určité důsledky, které stojí za to pochopit, pokud se chystáte přispět do znalostní báze funkcí.

První okamžitá jemnost: Když vyplníte Zápisník definic, můžete jednoduše odkazovat na svou funkci všude pomocí názvu jako MyFunction, který vypadá jako běžný název funkce v jazyce Wolfram, ale pro dokumentaci úložiště funkcí je nahrazen ResourceFunction["MyFunction"] je to, co uživatelé při práci s funkcí skutečně využijí.

Druhá jemnost: když vytváříte zdrojovou funkci z Definition Notebooku, musí být zachyceny a explicitně zahrnuty všechny závislosti zahrnuté v definici funkce. Chcete-li však zajistit, aby definice zůstaly modulární, musíte vše umístit do jedinečné podoby jmenný prostor. (Samozřejmě, funkce, které to všechno dělají, jsou v úložišti funkcí.)

Obvykle nikdy neuvidíte žádnou stopu kódu použitého ke konfiguraci tohoto jmenného prostoru. Ale pokud z nějakého důvodu zavoláte symbol nedostatečně provedený uvnitř vaší funkce, uvidíte, že tento symbol je v interním kontextu funkce. Při zpracování Definition Notepadu je však alespoň symbol odpovídající samotné funkci nastavitelné pro nejlepší zobrazení jako funkční BLOB spíše než surová postava ve vnitřním kontextu.

Úložiště funkcí slouží k definování nových funkcí. A tyto funkce mohou mít možnosti. Často tyto parametry (např. Metoda nebo Velikost obrázku) bude možné použít pro vestavěné funkce i pro ty, pro které již vestavěné symboly existují. Někdy však nová funkce může vyžadovat nové možnosti. Aby byla zachována modularita, tyto parametry musí být symboly definované v jedinečném vnitřním kontextu (nebo něco jako celé funkce zdrojů, tedy samy o sobě). Pro jednoduchost vám úložiště funkcí umožňuje definovat nové možnosti v definicích řetězců. A pro pohodlí uživatele jsou tyto definice (za předpokladu, že byly použity OptionValue и MožnostiVzor) jsou také zpracovány tak, že při použití funkcí lze parametry zadávat nejen jako řetězce, ale také jako globální symboly se stejnými názvy.

Většina funkcí jednoduše dělá to, co mají dělat pokaždé, když jsou volány, ale některé funkce je třeba inicializovat, než se mohou spustit v konkrétní relaci – a k vyřešení tohoto problému je v sekci Definice sekce „Inicializace“.

Funkce z úložiště mohou používat další funkce, které jsou již v úložišti; chcete-li nastavit definice pro úložiště funkcí, které obsahují dvě (nebo více) funkcí, které se navzájem odkazují, musíte je nasadit ve své relaci programu, abyste mohli odkaz jako na nich ResourceFunction["název"], pak můžete vytvořit kombinace těchto funkcí, které potřebujete, příklady (nerozuměl jsem) a přidat novou funkci do úložiště na základě těch, které již byly zveřejněny dříve. (nebo již nebo dříve – obě slova jsou neohrabaná)

Perspektivy rozvoje. Co by se mělo stát, až bude úložiště opravdu velké?

Dnes právě spouštíme Wolfram Feature Repository, ale v průběhu času očekáváme, že jeho velikost a funkčnost se může dramaticky zvětšit, a jak bude růst ve vývoji, budou se vyskytovat různé problémy, které již očekáváme, že mohou nastat.

První problém se týká názvů funkcí a jejich jedinečnosti. Úložiště funkcí je navrženo tak, že stejně jako vestavěné funkce v jazyce Wolfram můžete odkazovat na jakoukoli danou funkci jednoduše zadáním jejího názvu. To však nevyhnutelně znamená, že názvy funkcí musí být globálně jedinečné v celém úložišti, takže například může existovat pouze jeden ResourceFunction["MyFavoriteFunction"].

Zpočátku se to může zdát jako velký problém, ale je dobré si uvědomit, že jde v podstatě o stejný problém jako u věcí, jako jsou internetové domény nebo úchyty sociálních sítí. A faktem je, že systém prostě potřebuje mít registrátora – a to je jedna z rolí, kterou bude naše společnost pro znalostní bázi funkcí Wolfram plnit. (U soukromých verzí úložiště mohou být jejich registrátoři správci.) Internetovou doménu lze samozřejmě zaregistrovat, aniž by na ní bylo cokoli, ale v úložišti funkcí lze název funkce zaregistrovat pouze v případě, že existuje skutečná definice funkce.

Součástí naší role při správě znalostní báze funkcí Wolfram je zajistit, aby název zvolený pro funkci byl logický vzhledem k definici funkce a aby se řídil konvencemi pojmenovávání v jazyce Wolfram. Máme více než 30 let zkušeností s pojmenováním vestavěných funkcí v jazyce Wolfram a náš tým kurátorů tyto zkušenosti přenese také do úložiště funkcí. Samozřejmě se vždy najdou výjimky. Například se může zdát vhodnější mít pro nějakou funkci krátký název, ale je lepší se „bránit“ delším, konkrétnějším názvem, protože je méně pravděpodobné, že narazíte na někoho, kdo bude chtít v budoucnu vytvořit podobný název funkce. .

(Zde je třeba poznamenat, že pouhé přidání nějaké členské značky k jednoznačným funkcím nebude mít zamýšlený efekt. Protože pokud nebudete trvat na tom, že značku vždy přiřadíte, budete muset definovat výchozí značku pro danou funkci a také přidělit značky autora , což by opět vyžadovalo globální koordinaci.)

Jak roste znalostní báze funkcí Wolfram, jeden z problémů, který pravděpodobně nastane, je zjistitelnost funkcí, pro které systém poskytuje funkce vyhledávání (a definiční soubory mohou obsahovat klíčová slova atd.). Pro vestavěné funkce v jazyce Wolfram jsou v dokumentaci všechny druhy křížových odkazů, které pomáhají „propagovat“ funkce. Funkce v úložišti funkcí mohou odkazovat na vestavěné funkce. Ale co naopak? Abychom toho dosáhli, budeme experimentovat s různými návrhy, abychom odhalili funkce úložiště na stránkách dokumentace pro vestavěné funkce.

Pro vestavěné funkce v jazyce Wolfram je k dispozici tzv. detekční vrstva síť "stránek nápovědy", které poskytují uspořádané seznamy funkcí souvisejících s konkrétními oblastmi. Vždy je obtížné správně vybalancovat manuálové stránky a jak jazyk Wolfram roste, manuálové stránky je často nutné kompletně přeorganizovat. Je docela snadné zařadit funkce z úložiště do širokých kategorií a dokonce tyto kategorie důsledně rozdělit, ale mnohem cennější je mít správně uspořádané jazykové referenční stránky. Zatím není jasné, jak je nejlépe vytvořit pro celou znalostní bázi funkcí. Například, CreateResourceObjectGallery v úložišti funkcí může kdokoli zveřejnit webovou stránku obsahující jeho „výběry“ z úložiště:

Wolfram Function Repository: Platforma s otevřeným přístupem pro rozšíření jazyka Wolfram

Úložiště funkcí Wolfram je nakonfigurováno jako trvalé úložiště funkcí, kde bude jakákoli funkce v něm vždy fungovat. Samozřejmě mohou být dostupné nové verze funkcí a očekáváme, že některé funkce budou časem samozřejmě zastaralé. Funkce budou fungovat, pokud jsou použity v programech, ale jejich stránky dokumentace budou odkazovat na nové, pokročilejší funkce.

Úložiště funkcí Wolfram je navrženo tak, aby vám pomohlo rychle objevit nové funkce a naučit se nové způsoby používání jazyka Wolfram. Jsme velmi optimističtí, že některé z toho, co bylo prozkoumáno v úložišti funkcí, bude mít nakonec smysl stát se zabudovanými součástmi základního jazyka Wolfram. V posledním desetiletí jsme měli podobnou sestavu funkce, které byly původně představeny ve Wolfram | Alfa. A jedním z ponaučení z této zkušenosti je, že dosažení standardů kvality a konzistence, na které se zaměřujeme ve všem zabudovaném do jazyka Wolfram, vyžaduje spoustu práce, která je často obtížnější než počáteční úsilí o realizaci myšlenky. I tak může funkce ve znalostní bázi funkcí sloužit jako velmi užitečný důkaz konceptu budoucí funkce, která může být nakonec zabudována do jazyka Wolfram.

Nejdůležitější zde je, že funkce v úložišti funkcí je něco, co je nyní dostupné pro každého uživatele. Je možné, že funkce v rodném jazyce by mohla být mnohem lepší a výkonnější, ale úložiště funkcí by uživatelům umožnilo přístup ke všem novým funkcím okamžitě. A co je nejdůležitější, tento koncept umožňuje každému přidat jakékoli nové funkce, které chce.

Dříve v historii wolframského jazyka by tato myšlenka nefungovala tak dobře, jak fungovala, ale v této fázi je do jazyka vloženo tolik úsilí a tak hluboké porozumění principům jazykového designu, že se nyní zdá velmi pro velkou komunitu uživatelů je možné přidávat funkce, které udrží konzistenci návrhu, aby byly užitečné pro širokou škálu uživatelů.

V komunitě uživatelů Wolfram Language je neuvěřitelný duch talentu(?). (Tato komunita samozřejmě zahrnuje mnoho předních odborníků na výzkum a vývoj v různých oblastech.) Doufám, že úložiště funkcí Wolfram poskytne účinnou platformu pro odemykání a šíření tohoto ducha talentu. Jedině společně můžeme vytvořit něco, co výrazně rozšíří oblast, na kterou lze aplikovat paradigma jazykového počítání Wolfram.

Za více než 30 let jsme s jazykem Wolfram ušli dlouhou cestu. Nyní pojďme společně ještě dále. Důrazně doporučuji všem respektovaným uživatelům jazyka Wolfram po celém světě, aby k tomu používali funkční úložiště jako platformu, stejně jako nový softwarový projekt, jako je Free Wolfram Engine for Developers.

Zdroj: www.habr.com

Přidat komentář