Ahoj, Habr! Představuji vám překlad příspěvku Stevena Wolframa .

Předpoklady pro úspěšnost jazyka Wolfram
Dnes jsme na prahu velkých úspěchů spolu s programovacím jazykem . Před pouhými třemi týdny jsme spustili , abychom pomohli našim uživatelům integrovat jazyk Wolfram Language do jejich rozsáhlých softwarových projektů. Dnes spouštíme , abychom poskytli koordinovanou platformu pro funkce vytvořené pro rozšiřování jazyka Wolfram, a také otvíráme repozitář funkcí pro každého, kdo může přispět k rozvoji našeho softwarového produktu.
Repozitář funkcí (Function Repository) Wolfram je možné díky jedinečné specifice jazyka Wolfram nejen jako programovacího jazyka, ale také jako . V tradičních programovacích jazycích zahrnuje přidání významných nových funkcí obvykle vytvoření celých dalších knihoven, které možná budou nebo nebudou fungovat při společném používání. Avšak v jazyce Wolfram Language , že existuje možnost významně rozšiřovat jeho funkčnost, prostým přidáváním nových funkcí, které se okamžitě integrují do celkové struktury celého jazyka.
Například již nyní obsahuje repozitář funkcí Wolfram členěných do 26 tematických kategorií:

Podobně jako více než , vestavěných do jazyka Wolfram, má každá funkce z repozitáře svou stránku dokumentace s podrobným popisem a příklady použití:

Pro přechod na stránku zkopírujte výše uvedený objekt (funkční BLOB), vložte ho do vstupního pole a pak spusťte funkci – ta je již vestavěna do jazyka Wolfram a je podporována ve výchozím nastavení, počínaje :

Je třeba poznamenat, že při zpracování Není třeba například nastavovat „knihovnu pro zpracování obrázků“ – neboť v jazyce Wolfram Language jsme již realizovali sekvenční a pečlivě algoritmizovaný způsob , které mohou být okamžitě zpracovány různými grafickými funkcemi jazyka:

Doufám, že s podporou , která se v průběhu posledních několika desetiletí růst a rozšiřuje (na základě jazyka Wolfram Language). Repozitář funkcí Wolfram umožní v dohledné době výrazně rozšířit spektrum (možná potenciálně významných, specializovaných v různých oblastech vědy a techniky) funkcí, které jsou dostupné v jazyce. Tím se vytváří možnost využívat jak obsah jazyka (jeho zabudované funkce), tak , které byly realizovány na základě jazyka. (Zde je třeba poznamenat, že Wolfram Language má již více než ).
Uvnitř funkcí z repozitáře mohou být malé nebo dostatečně rozsáhlé úryvky kódu napsaného v jazyce Wolfram Language. Například mohou zahrnovat volání Unikátní vlastností tohoto přístupu je, že když přecházíte k funkčnostem na uživatelské úrovni, nebudou existovat možné nesrovnalosti, protože tento přístup je postaven na základu konzistentní struktury jazyka Wolfram Language – a každá funkce automaticky bude fungovat správně – jak má.
Rozhraní a programová struktura repozitáře funkcí Wolfram je navržena tak, aby každý mohl přispět k obecnému úkolu maximálně jednoduše a pohodlně – v podstatě jednoduše Zabudované automatické funkce umožňují kontrolovat nové funkce přidávané do repozitáře s cílem jejich zaručené integrace do jazyka. Naše společnost staví na širokém okruhu uživatelů, kteří mohou integrovat své funkce do jazyka, a nikoli na velkých komplikacích nových funkcí – a ačkoliv zde byl implementován proces kontroly, netrváme na něčem jako nebo přísnými standardy úplnosti a spolehlivosti nových funkcí uživatelů, na rozdíl od podrobnějších kontrol funkcí zabudovaných v jádře jazyka, které aplikujeme.
Tento přístup obsahuje řadu kompromisů a detailů, ale naším cílem je optimalizovat repozitář funkcí Wolfram jak pro pohodlí uživatelů, tak i pro to, aby nové funkce od uživatelů měly hmatatelný přínos pro rozvoj jazyka. Jak poroste, nepochybuji, že budeme muset vymýšlet nové metody zpracování a ověřování funkcí integrovaných do repozitáře, a to zejména pro organizaci velkého množství funkcí a jejich vyhledávání, které uživatelé potřebují. Nicméně, nemůže než těšit, že zvolená cesta je dobrý začátek. Osobně jsem do původní databáze. Mnohé z nich jsou založeny na kódu, který jsem osobně vyvíjel po poměrně dlouhou dobu. A strávil jsem pouhé minuty jejich zasláním do repozitáře. Nyní, když jsou v repozitáři, mohu konečně – okamžitě a kdykoliv použít tyto funkce podle potřeby, aniž bych se musel obávat vyhledávání souborů, stahování balíčků atd.
Zvýšení efektivity při snižování nákladů
Ještě před vznikem internetu existovaly způsoby výměny kódu Wolfram Language (naším prvním velkým centralizovaným projektem byl , vytvořený pro Mathematica v roce 1991 na základě CD-ROM atd.). Určitě je navrhovaný přístup založený na repozitáři funkcí Wolfram mocnějším a spolehlivějším prostředkem k dosažení výše uvedených úkolů.
Více než 30 let naše společnost usilovně pracovala na udržení integrity struktury jazyka Wolfram, a to je velmi důležité pro to, aby se jazyk Wolfram stal nejen programovacím jazykem, ale i . A tak podstatou přístupu k realizaci repozitáře funkcí Wolfram je 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 pro možnost jeho rozvoje a společné evoluce.
V rámci implementace každé funkce probíhají různé výpočetní procesy. Je důležité, aby funkce měla pro uživatele jasnou a jednotnou podobu a zřetelnou čitelnost. V tomto kontextu jsou vestavěné funkce jazyka Wolfram Language představeny více než 6000 sekvenčními příklady toho, jak správně programovat funkce (to jsou naše , které zahrnují ). Tento přístup nakonec umožňuje, aby repozitář funkcí Wolfram dobře fungoval, a to díky strukturální povaze jazyka Wolfram Language s jeho mnoha dalšími a rozmanitými knihovnami, které jsou již vestavěné do jazyka. Například, pokud máte funkci zpracovávající obrazy, nebo , nebo , a také nebo něco jiného — v jazyce již existuje jejich koherentní symbolické vyjádření, a díky tomu se vaše funkce okamžitě stává kompatibilní s ostatními funkcemi v jazyce.
Vytvoření repozitáře, který by skutečně dobře fungoval, je zajímavým úkolem meta-programování. Například nadbytek omezení v programu nedovolí dosáhnout požadované unifikace a univerzálnosti práce algoritmu. Stejně tak s nedostatečným počtem funkčních omezení nebudete schopni realizovat dostatečně správnou posloupnost provádění algoritmu. Několik předchozích příkladů realizace kompromisu těchto přístupů, realizovaných naší společností, fungovalo dost stabilně — to jsou: , spuštěný v roce 2007 a nyní fungující v interaktivním režimu na internetu a obsahující více než 12 000 uživatelských interaktivních demonstrací. V je více než 600 hotových databází, které lze použít v jazyce Wolfram Language, a je pravidelně doplňováno o nové neuronové sítě téměř každý týden (nyní jich je již 118) a okamžitě se připojují prostřednictvím funkce v jazyce Wolfram Language.
Všechny výše uvedené příklady mají zásadní zvláštnost — objekty a funkce shromážděné v projektu mají velmi vysokou míru strukturování a rozdělení procesů. Bezpochyby se detailizace struktury toho, co je demonstrované nebo neuronová síť nebo něco jiného, může značně lišit, ale základní struktura pro jakékoli aktuální úložiště zůstává vždy nezměněna. Jaký je tedy váš názor, vážený uživateli, na vytvoření takového úložiště, které přidává rozšíření do jazyka Wolfram? Jazyk Wolfram Language je navržen tak, aby byl extrémně flexibilní, a proto jej lze rozšiřovat a modifikovat jakýmkoli způsobem. Tato okolnost je nesmírně důležitá pro možnost rychle vytvářet různé rozsáhlé softwarové projekty v jazyce Wolfram Language. Je třeba poznamenat, že s rostoucí flexibilitou jazyka nevyhnutelně vzroste i cena projektů realizovaných v tomto jazyce. To se děje proto, že čím více uživatel používá tento jazyk, tím více dostává specializované funkčnosti, ale není dobré zapomínat na to, že tento přístup může mít také negativní stránky z hlediska neschopnosti zajistit konzistentnost programových modulů.
V tradičních programovacích jazycích existuje rozšířený problém s knihovnami — pokud například používáte jednu knihovnu, kód funguje správně, ale pokud se pokusíte použít více knihoven, není zaručeno, že si budou správně rozumět. Také v tradičních programovacích jazycích — na rozdíl od plnohodnotného výpočetního jazyka — chybí možnosti zaručeně kontrolovat přítomnost konzistentních integrovaných reprezentací pro jakékoli funkce nebo datové typy, kromě jejich základních struktur. Ve skutečnosti je však problém ještě závažnější, než se na první pohled zdá: pokud někdo vytváří rozsáhlou vertikálu funkcionality, není možné dosáhnout konzistence bez obrovských nákladů na centralizované programování projektu, které jsme vložili do jazyka Wolfram. Je proto důležité, aby všechny programové moduly vždy správně pracovaly společně.
Myšlenka repozitáře funkcí Wolfram spočívá v tom, aby se vyhnula výše uvedenému problému — prostým přidáním rozšíření k jazyku ve formě relativně malých kusů kódu prostřednictvím jednotlivých funkcí, jejichž vývoj ve formě koherentních modulů je mnohem snazší úkol. Existují však aspekty programování, které nelze snadno realizovat pomocí jednotlivých funkcí (a naše firma plánuje v blízké budoucnosti uvést optimalizovaný programový algoritmus na pomoc při realizaci rozsáhlých softwarových balíků). Na základě již zabudovaných funkcí v jazyce Wolfram Language existuje mnoho možností programování, které se realizují na základě jednotlivých funkcí. Tady je myšlenka taková, že s relativně malým úsilím lze vytvořit řadu nových a velmi užitečných funkcí, které zajistí dostatečnou soudržnost projektu, které budou dobře sladěny navzájem a také budou mít možnost být snadno a široce používány v jazyce i nadále.
Tento přístup je samozřejmě kompromisem. S realizací rozsáhlejšího balíčku si lze představit zcela nový svět funkcionality, který se stane nesmírně silným a užitečným. Pokud existuje potřeba získat nové funkční možnosti, které se budou integrovat do všeho ostatního, ale zároveň nejste připraveni vynakládat obrovské úsilí na vývoj projektu, může to bohužel vést k oslabení vašeho projektu. Myšlenka repozitáře funkcí Wolfram spočívá v zajištění funkcionality určující části projektu, tento přístup umožní přidat silný funkční obsah, přičemž se zjednoduší udržování dobré soudržnosti programovacího projektu.
Pomoc při přidávání uživatelských funkcí do repozitáře funkcí
Odborníci naší firmy usilovně pracovali na tom, aby byl jejich příspěvek do funkcí repozitáře Wolfram dostatečně snadný pro uživatele. Na ploše (už ve ), Můžete jednoduše přejít na jednotlivé záložky hlavního menu: File > New > RepositoryItem > Function Repository Item a získáte „“ (programově uvnitř pracovního prostředí. Můžete také použít funkci analog — ):

Existují dvě hlavní činnosti, které musíte provést: za prvé skutečně napsat kód vaší funkce a za druhé sepsat dokumentaci, která ukazuje, jak by měla vaše funkce fungovat.
Stiskněte tlačítko „Otevřít vzor“ nahoře, abyste viděli příklad toho, co musíte udělat:

Ve skutečnosti se snažíte vytvořit něco podobného jako vestavěná funkce v jazyce Wolfram Language. S tím rozdílem, že by mohla dělat něco mnohem konkrétnějšího než vestavěná funkce. Očekávání ohledně její úplnosti a spolehlivosti budou přitom výrazně nižší.
Musíte pojmenovat svou funkci tak, aby odpovídala zásadám pojmenovávání funkcí v jazyce Wolfram Language. Kromě toho budete potřebovat vyvinout dokumentaci pro svou funkci, podobně jako to dělají vestavěné funkce jazyka. O tom se podrobněji zmíním později. Nyní si jen všimněte, že v řadě tlačítek v horní části souboru sešitu definic je tlačítko , které vysvětluje, co dělat, a tlačítko „Nástroje“, které poskytuje nástroje pro formátování dokumentace vaší funkce.
Až si budete jisti, že je vše správně vyplněné a jste připraveni, stiskněte tlačítko „Check“ („Zkontrolovat“). Je naprosto normální, že ještě nejste obeznámeni se všemi detaily. Funkce „Check“ bude automaticky provádět mnoho kontroly stylu a konzistence. Často vám okamžitě navrhne schválit a přijmout opravy (například: „Tento řádek by měl končit dvojtečkou“ a navrhne vložit dvojtečku). Někdy vás požádá, abyste něco přidali nebo změnili sami. Neustále přidáváme nové možnosti k automatické funkčnosti tlačítka „Check“, ale jeho hlavním cílem je zaručit, že všechno, co odesíláte do repozitáře funkcí, je již v co největší míře v souladu s doporučeními k stylu.

Takže po kliknutí na „Kontrola“ můžete použít „Náhled“. „Náhled“ vytváří předběžný pohled na stránku dokumentace, kterou jste definovali pro svou funkci. Můžete také vytvořit náhled pro soubor uložený na vašem počítači nebo pro soubor umístěný v cloudovém úložišti. Pokud vás z nějakého důvodu to, co uvidíte v náhledu, neuspokojí, stačí se vrátit zpět, provést potřebné úpravy a poté znovu kliknout na tlačítko Náhled.
Nyní jste připraveni umístit svou funkci do repozitáře. Tlačítko Nasadit vám nabízí čtyři možnosti akcí:

V této fázi je důležité, že můžete odeslat svou funkci do repozitáře funkcí Wolfram, aby byla dostupná jakémukoliv uživateli. Můžete také umístit svou funkci pro omezený počet uživatelů. Například můžete vytvořit funkci, která je umístěna lokálně na vašem počítači, a tím pádem bude dostupná, když tento konkrétní počítač používáte. Nebo ji můžete umístit do svého , aby byla dostupná, když jste připojeni k cloudu. Můžete také veřejně umístit (nasadit) funkci prostřednictvím svého cloudového účtu. Nebude však v centrálním repozitáři funkcí Wolfram, ale můžete někomu poskytnout URL, které mu umožní získat vaši funkci z vašeho účtu. (V budoucnu také podpoříme centrální repozitáře v měřítku celé naší společnosti).
Takže předpokládejme, že chcete skutečně předat svou funkci do znalostní báze funkcí Wolfram. K tomu kliknete na tlačítko „Odeslat“ do repozitáře. Co se tedy v tuto chvíli děje? Vaše žádost se okamžitě dostává do fronty k posouzení a schválení naším speciálním týmem kurátorů.
Jakmile vaše žádost projde schvalovacím procesem (který obvykle trvá několik dní), obdržíte zprávy o stavu jejího posouzení a také případně návrhy na její další využití. Jakmile však bude vaše funkce schválena, bude okamžitě zveřejněna v repozitáři funkcí Wolfram a bude dostupná pro jakékoli použití. (A to se zobrazí v atd.)
Co by mělo být v repozitáři?
Je třeba poznamenat, že naše společnost má velmi vysoké standardy úplnosti, spolehlivosti a celkové kvality, z více než 6000 funkcí, které jsme za více než 30 let již integrovali do jazyka Wolfram, všechny splňují výše uvedené požadavky. Cílem repozitáře funkcí Wolfram je využít veškerou strukturu a funkční možnosti, které již existují v jazyce Wolfram Language, aby bylo možné přidat co nejvíce mnohem jednodušších funkcí (tedy funkcí s vyšším výkonem).
Funkce v repozitáři funkcí Wolfram musí bezpodmínečně splňovat zásady vývoje jazyka Wolfram Language — aby mohly plně interagovat s jinými funkcemi a očekáváními uživatelů ohledně toho, jak by funkce měly správně fungovat. Avšak funkce nemusí mít stejnou úroveň úplnosti nebo spolehlivosti.
V integrovaných funkcích jazyka Wolfram usilovně pracujeme na tom, aby byly programové funkce co nejvíce obecné. Přitom není nic špatného na tom, když se do repozitáře funkcí Wolfram dostane funkce, která zpracovává nějaký velmi konkrétní, ale užitečný případ. Například funkce může přijímat soubory v jednom specifickém formátu a odesílat emaily jedním specifickým způsobem. vytváří diagramy pouze s určitými barvami a označením atd.
Dalším bodem týkajícím se vestavěných funkcí je to, že naše společnost se snaží vyvinout veškeré úsilí k zpracování všech atypických případů, aby správně zpracovala nesprávný vstup a podobně. V repozitáři funkcí je zcela normální, že existuje speciální funkce, která zpracovává základní případy řešení úkolu a ignoruje všechny ostatní.
Je zřejmé, že je lepší mít funkce, které dělají více a dělají to lépe, ale optimalizace pro repozitář funkcí — na rozdíl od vestavěných funkcí jazyka Wolfram — by měla mít více funkcí spojených s větším množstvím funkcí, než se zabývat implementací každé jednotlivé funkce.
Nyní se podívejme na příklad testování funkcí v repozitáři. Očekávání konzistence pro takové funkce je samozřejmě mnohem nižší než pro vestavěné funkce jazyka. To je tím spíše aktuální v případech, kdy funkce závisí na externích zdrojích, jako je API, je důležité neustále provádět konzistentní testy, které se automaticky provádějí uvnitř algoritmů kontroly. V souboru nb můžete jasně uvést definice (v sekci „Další informace“) a nastavit tolik testů, kolik považujete za nutné, definovaných buď vstupními a výstupními řetězci, nebo kompletními symbolickými objekty typu , kolik uznáte za vhodné. Kromě toho se systém neustále snaží převést vaše uvedené příklady dokumentace do procesu kontroly (přitom to může být občas docela náročné na zdroje, například pro funkci, jejíž výsledek závisí na náhodných číslech nebo denní době).
V důsledku toho bude v repozitáři funkcí celá řada obtíží implementace. Některé budou jednoduše jedním řádkem kódu, jiné mohou obsahovat tisíce nebo desítky tisíc řádků, pravděpodobně s využitím mnoha pomocných funkcí. V jakých případech by mělo být přidáno funkce, jejíž určení vyžaduje velmi málo kódu? V zásadě, pokud pro funkci existuje , které by uživatelé s ochotou pochopili, kdyby to viděli v části kódu, je možné ji přidat. Jinak je pravděpodobně lepší znovu napsat kód do vaší aplikace pokaždé, když jej potřebujete použít.
Hlavním cílem repozitáře funkcí (jak naznačuje jeho název) je přidávat nové funkce do jazyka. Pokud chcete přidat nová data nebo , použijte . Ale co dělat, když chcete zavést nové typy objektů pro vaše výpočty?
Ve skutečnosti existují dvě cesty. Možná byste chtěli zavést nový typ objektu, který bude použit ve nových funkcích v repozitáři funkcí. V takovém případě můžete jednoduše zapisovat jeho symbolickou reprezentaci a používat ji při zadávání nebo výstupu funkcí v repozitáři funkcí.
Ale co dělat, když chcete reprezentovat objekt a pak definovat, které existující funkce v jazyce Wolfram Language by měly s ním spolupracovat? K tomu má Wolfram Language vždy velmi jednoduchý mechanismus, který se nazývá . S určitými omezeními (zejména pro funkce, které ), repozitář funkcí vám umožňuje jednoduše reprezentovat funkci a definovat pro ni hodnoty. (Aby se zvýšila očekávaná konzistence při vytváření nové důležité konstrukce plně integrováné do jazyka Wolfram Language, jde obvykle o velmi důležitý postup, který nemůže být dosažen pouze zvýšením nákladů projektu, což je něco, co naše firma dělá v rámci dlouhodobých projektů vývoje jazyka, tento úkol není cílem, který je stanoven v rámci rozvoje repozitáře).
Co může být v kódu funkcí v repozitáři funkcí? , samozřejmě (pokud to alespoň nepředstavuje pro a funkčnosti samotného programu, jako výpočetního prostředí) stejně jako jakákoliv funkce z repozitáře funkcí. Kromě toho existují i další možnosti fungování: funkce v repozitáři funkcí může volat API buď v , nebo . Samozřejmě existují určitá rizika spojená s tímto. Z důvodu, že neexistují záruky, že API se nezmění, a funkce ve skladu funkcí přestane fungovat. Pro identifikaci těchto problémů existuje poznámka na stránce dokumentace (v sekci „Požadavky“) pro jakoukoli funkci, která se spoléhá nejen na vestavěnou funkcionalitu Wolfram Language. (Samozřejmě, pokud jde o skutečná data, mohou být s takovou funkcionalitou problémy — protože skutečná data o světě se neustále mění a někdy dokonce mění jejich definice a struktura.)
Musí být celý kód pro repozitář funkcí Wolfram napsán ve Wolfram jazyce? Určitě kód uvnitř externího API nemusí být napsán ve Wolfram jazyce, což ve skutečnosti z něj ani nedělá kód jazyka. Opravdu, pokud najdete funkci prakticky v jakémkoli externím jazyce nebo knihovně, budete schopni vytvořit obal, který umožní její použití v repozitáři funkcí Wolfram. (Obvykle by se k tomu měly používat vestavěné funkce nebo ve kódu Wolfram jazyka.)
Tak jaký má smysl to dělat? V zásadě to umožňuje využít celý integrovaný systém Wolfram Language a její jednotný soubor programových schopností. Pokud získáváte základní implementaci z externí knihovny nebo jazyka, můžete poté využít bohatou symbolickou strukturu Wolfram Language k vytvoření uživatelsky přívětivé funkcionality na vysoké úrovni, která umožňuje uživatelům dostatečně snadno používat jakoukoli již implementovanou funkcionalitu. Minimálně by to mělo mít možnost implementace v ideálním světě, kde existují všechny složky načítání knihoven atd., v tomto případě by byly automaticky řešeny pomocí Wolfram Language. (Je třeba poznamenat, že v praxi mohou nastat problémy s v konkrétním počítačovém systému, a v cloudovém úložišti se mohou vyskytnout další problémy se zabezpečením).
Když poprvé analyzujete standardní externí knihovny, často se zdají být příliš složité, aby je bylo možné pokrýt pouze několika funkcemi, ale ve mnoha případech vzniká většina složitosti kvůli vytváření infrastruktury potřebné pro knihovnu a všech podporujících funkcí. Avšak při používání jazyka Wolfram Language je infrastruktura obvykle již integrována do balíčků, a proto není třeba podrobně odhalovat všechny tyto podpůrné funkce, ale je potřeba jen vytvořit funkce pro několik „nejvyšších“ funkcí zaměřených na aplikaci v knihovně.
„Ekosystém“ znalostní báze
Pokud jste napsali funkce, které používáte pravidelně, dejte je do repozitáře funkcí Wolfram! I když z toho nakonec nevznikne nic většího (rozvoj jazyka), pro vás bude mnohem pohodlnější používat funkce pro osobní potřebu. Nicméně je logické předpokládat, že pokud funkce používáte pravidelně, možná je také ocení i ostatní uživatelé.
Samozřejmě se můžete ocitnout v situaci, kdy nemáte možnost — nebo nechcete — sdílet své funkce, nebo když potřebujete přístup k soukromým informačním prostředkům. I v takových případech můžete prostě nasadit funkce na svůj vlastní účet v cloudu, přístupu k nim. (Pokud má vaše organizace , brzy bude moci hostit vlastní soukromý repozitář funkcí, který lze spravovat z vaší organizace a nastavit, zda uživatelé třetích stran mohou vidět náhledy, nebo ne.)
Funkce, které posíláte do repozitáře funkcí Wolfram, nemusí být nutně dokonalé; měly by být prostě užitečné. Je to trochu jako sekce „Chyby“ v klasické dokumentaci Unix — v „Sekci definic“ je část „Poznámky autora“, kde můžete popsat omezení, problémy atd., o kterých již víte, že se týkají vaší funkce. Navíc, když posíláte svou funkci do repozitáře, můžete přidat poznámky k odeslání, které si přečte speciální tým kurátorů.
Po zveřejnění funkce má její stránka vždy dvě odkazy níže: „“ a „». Pokud připojujete poznámku (například informovat mě o chybách), můžete zaškrtnout políčko, které říká, že chcete, aby vaše zpráva a kontaktní informace byly předány autorovi funkce.
Někdy je potřeba jednoduše používat funkce z repozitáře funkcí Wolfram, například vestavěné funkce, aniž byste nahlédli do jejich kódu. Pokud však chcete "nahlédnout dovnitř", vždy je nahoře tlačítko „Sešit“. Klikněte na něj a získáte svou vlastní kopii původního sešitu definice, který byl odeslán do repozitáře funkcí. Někdy ji můžete jednoduše využít jako příklad pro své potřeby. Zároveň můžete vyvinout svou vlastní modifikaci této funkce. Možná se rozhodnete umístit tyto funkce, které jste našli v repozitáři, na svůj počítač nebo do svého účtu v cloudovém úložišti, nebo je možná chcete odeslat do znalostní báze funkcí, možná ve vylepšené, doplněné verzi původní funkce.
V budoucnu plánujeme podporovat větvení ve stylu Gitu pro repozitáře funkcí, ale nyní se snažíme to zjednodušit, a máme vždy jen jednu obecně uznávanou verzi každé funkce integrované do jazyka. Nejčastěji (pokud vývojáři neodmítnou udržovat funkce, které vyvinuli, a reagují na zprávy uživatelů) získává původní autor funkce kontrolu nad aktualizacemi a odesílá nové verze, které jsou poté zkontrolovány a pokud projdou kontrolním procesem, publikovány v jazyce.
Zvažme otázku, jak funguje „verzování“ vyvinutých funkcí. Právě teď, když používáte funkci z repozitáře funkcí, její definice bude neustále uložena na vašem počítači (nebo ve vašem cloudovém účtu, pokud používáte cloud). Pokud se objeví nová verze funkce, při jejím dalším použití obdržíte upozornění. A pokud chcete aktualizovat funkci na novou verzi, můžete to udělat pomocí příkazu („Funkční BLOB objekt“ ve skutečnosti uchovává více informací o verzích a v budoucnu plánujeme tuto funkci zpřístupnit našim uživatelům.)
Jednou z vynikajících funkcí repozitáře funkcí Wolfram je to, že jakýkoli program Wolfram Language může k němu použít funkce. Pokud se program objeví v notebooku, často je pohodlné formátovat funkce repozitáře jako snadno čitelné „funkční binární objekty“ (s příslušnou sadou verzí).
Můžete vždy přistupovat k jakékoli funkci repozitáře funkcí pomocí textového . A to je velmi pohodlné, pokud píšete kód nebo skript přímo pro Wolfram Engine, například pomocí (je třeba poznamenat, že repozitář funkcí je plně kompatibilní s ).
Jak to funguje?
Uvnitř funkcí v repozitáři Wolfram to je možné použít stejný databáze, jako ve (datové úložiště, , atd.), jako všechny ostatní systémové zdroje Wolfram, na konci vychází z funkce .
Zvažme :

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

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

Jakmile provedete definici, můžete používat funkci zdroje:

Všimněte si, že v tomto BLOB objektu funkce je černá ikona
. To znamená, že BLOB funkce se vztahuje na funkci zdroje v paměti určenou pro aktuální relaci. Pro funkci zdroje, která je trvale uložená na vašem počítači nebo v cloudovém účtu, je šedá ikona
. A pro oficiální funkci zdroje v repozitáři funkcí Wolfram je oranžová ikona
.
A co se stane, když použijete nabídku „Nasazení“ v notebooku definice? Nejprve vezme všechna definice v notebooku a vytvoří z nich symbolický ). (A pokud používáte textové IDE nebo aplikaci, můžete také explicitně vytvořit )
Lokální nasazení funkce z repozitáře na vašem počítači se provádí pomocí příkazu pro objekt prostředku, abyste ho uložili jako ve vašem souborovém systému. Nasazení v cloudovém účtu se provádí pomocí příkazu pro objekt prostředku, a veřejné nasazení v cloudu je . Ve všech případech se také používá k registraci názvu funkce prostředku, takže bude fungovat.
Pokud stisknete tlačítko Odeslat pro Repozitář funkcí, co se pod ním děje se volá na objekt prostředku. (A pokud používáte textové uživatelské rozhraní, můžete také vyvolat přímo.)
Ve výchozím nastavení se odeslání provádí pod názvem spojeným s vaším ID Wolfram. Ale pokud odesíláte žádost jménem skupiny vývojářů nebo organizace, můžete a místo toho ho použít jako název pro interakci s vašimi pohledy.
Jakmile odešlete kteroukoli vaši funkci do znalostní databáze funkcí, dostane se do fronty na kontrolu. Pokud obdržíte zpětnou vazbu, obvykle bude ve formě textového souboru s přidanými dalšími „komentářovými buňkami“. Vždy můžete zkontrolovat stav své žádosti přihlášením se na . Ale jakmile bude vaše funkce schválena, budete informováni (e-mailem) a vaše funkce bude umístěna v repozitáři funkcí Wolfram.
Některé nuance v práci
Na první pohled se může zdát, že stačí vzít blok poznámek definice a doslovně jej umístit do repozitáře funkcí, ale ve skutečnosti je zde spousta nuancí — a pro jejich zpracování je potřeba provést poměrně složité meta-programování, symbolicky zpracovávající jak kód definující funkci, tak samotný blok poznámek. Většina z toho probíhá uvnitř, tedy „v pozadí“, ale může to mít určité důsledky, které stojí za to pochopit, pokud se chystáte přispět do znalostní databáze funkcí.
První důležitý detail: Když vyplňujete „Poznámkový blok definic“, můžete jednoduše odkazovat na svou funkci kdekoliv pomocí jména, jako je MyFunction, které vypadá jako obvyklé jméno pro funkci v jazyce Wolfram Language, ale pro dokumentaci repozitáře funkcí je to nahrazeno – to je přesně to, co uživatelé ve skutečnosti budou používat při práci s touto funkcí.
Druhý detail: když vytváříte funkci zdroje z Poznámkového bloku definic, všechny závislosti zapojené do definice funkce musí být zafixovány a explicitně zahrnuty. Aby bylo zajištěno, že definice zůstávají modulární, je třeba vše umístit do unikátní . (Pochopitelně, že , se nacházejí v repozitáři funkcí.)
Obvykle nikdy neuvidíte žádné stopy kódu, který se používá pro nastavení tohoto jmenovacího prostoru. Ale pokud z nějakého důvodu vyvoláte nedokončený symbol uvnitř své funkce, uvidíte, že tento symbol se nachází ve vnitřním kontextu funkce. Při zpracování Poznámkového bloku definic by však alespoň symbol, odpovídající samotné funkci, ve formátu funkčního BLOBu, nikoli surového symbolu ve vnitřním kontextu.
Repozitář funkcí slouží k definování nových funkcí. A tyto funkce mohou mít volby. Často tyto parametry (například nebo ) budou moci být použity jak pro vestavěné funkce, tak pro ty, kde již existují vestavěné symboly. Ale někdy může nová funkce vyžadovat i nové volby. Aby se zachovala modulárnost, musí být tyto parametry symboly definovanými v unikátním vnitřním kontextu (nebo něco jako celé funkce zdroje, tedy samy o sobě). Pro zjednodušení repozitář funkcí umožňuje zadat nové volby v definicích ve formě řetězců. A pro pohodlí uživatele, tyto definice (pokud byly použity a ) jsou také zpracovány tak, že při používání funkcí mohou být parametry zadány nejen jako řetězce, ale i jako globální symboly se stejnými názvy.
Většina funkcí prostě dělá to, co má dělat, pokaždé, když jsou volány, ale některé funkce potřebují inicializaci, než budou moci fungovat v určitém běhu — a pro vyřešení tohoto problému je v sekci "Definice" část "Inicializace".
Funkce z repozitáře mohou používat další funkce, které již v repozitáři existují, aby nastavily definice pro repozitář funkcí, které zahrnují dvě (nebo více) funkcí, které se navzájem odkazují, je nutné je rozvinout během vašeho sezení s programem, abyste na ně mohli odkázat jako , pak můžete vytvořit potřebné kombinace těchto funkcí příklady a přidat do repozitáře novou funkci založenou na již dříve umístěných.
Možnosti rozvoje. Co se musí stát, když se repozitář skutečně zvětší?
Dnes teprve spouštíme repozitář funkcí Wolfram, ale časem očekáváme, že jeho objem a funkčnost mohou prudce vzrůst, a s jeho růstem se objeví různé problémy, které, jak už tušíme, mohou vzniknout.
První problém se týká názvů funkcí a jejich jedinečnosti. Repozitář funkcí je navržen takovým způsobem, že v něm, stejně jako pro vestavěné funkce v jazyce Wolfram Language, lze odkázat na jakoukoli danou funkci, prostě uvedením jejího názvu. To však nevyhnutelně znamená, že názvy funkcí musí být globálně jedinečné v celém repozitáři, takže v repozitáři může být například pouze jedna .
Na první pohled se to může zdát jako velký problém, ale je dobré chápat, že se jedná o v podstatě stejný problém jako u takových věcí, jako jsou internetové domény nebo značky sociálních sítí. A je třeba mít na paměti, že v systému musí být jednoduše registrátor — a to je jedna z rolí, kterou naše společnost bude mít pro znalostní bázi funkcí Wolfram. (Pro soukromé verze repozitáře mohou být jejich registrátory administrátoři.) Samozřejmě, internetová doména může být registrována, aniž by na ní bylo cokoliv, ale v repozitáři funkcí může být název funkce registrován pouze při skutečném určení funkce.
Součástí naší role při správě znalostní báze funkcí Wolfram je zajistit, aby název vybraný pro funkci byl logický vzhledem k definici funkce a aby také odpovídal pojmenovacím konvencím Wolfram Language. Máme již více než 30 let zkušeností s pojmenováním vestavěných funkcí v jazyce Wolfram Language a náš kurátorský tým přenese tyto zkušenosti také do repozitáře funkcí. Samozřejmě, že vždy existují výjimky. Například může být výhodnější mít krátký název pro nějakou funkci, ale je lepší se „chránit“ delším, konkrétnějším názvem, protože tím se snižuje pravděpodobnost, že někdo v budoucnu vytvoří podobný název funkce.
(Je třeba poznamenat, že jednoduché přidání jakéhokoli tagu účastníka pro odstranění nejednoznačnosti funkcí nenese očekávaný efekt. Protože pokud nebude trvat na tom, že tag bude vždy přiřazen, bude nutné definovat výchozí tag pro jakoukoli danou funkci a také vyčlenit tagy autorů, což opět vyžaduje globální koordinaci.)
Jak roste objem znalostní báze funkcí Wolfram, jedním z problémů, které určitě vzniknou, je zjistitelnost funkcí, pro kterou je v systému navržena (a soubory definic mohou obsahovat klíčová slova atd.). Pro vestavěné funkce v jazyce Wolfram Language existují v dokumentaci všechny druhy křížových odkazů, které pomáhají „reklamovat“ funkce. Funkce v repozitáři funkcí mohou odkazovat na vestavěné funkce. A co naopak? Pro to plánujeme experimentovat s různými schématy, abychom představili funkce repozitáře na stránkách dokumentace pro vestavěné funkce.
Pro vestavěné funkce v jazyce Wolfram Language existuje takzvaná úroveň zjistitelnosti zajišťovaná , které poskytují uspořádané seznamy funkcí vztahujících se ke konkrétním oblastem. Vždy je obtížné správně vyvážit stránky příručky a s růstem jazyka Wolfram je často nutné stránky příručky kompletně znovu uspořádat. Je docela snadné umístit funkce z úložiště do širokých kategorií a dokonce tyto kategorie postupně rozdělit, ale mnohem cennější je mít správně organizované stránky příručky jazyka. Zatím není jasné, jak je nejlepší vytvořit pro celou znalostní základnu funkcí. Například v úložišti funkcí může každý umístit webovou stránku obsahující své „výběry“ z úložiště:

Úložiště funkcí Wolfram je nastaveno jako trvalé úložiště funkcí, kde jakákoliv funkce v něm vždy bude fungovat. Určitě se mohou objevit nové verze funkcí a očekáváme, že některé funkce časem samozřejmě zastarají. Funkce budou fungovat, pokud budou použity v programech, ale jejich stránky dokumentace budou odkazovat na nové, pokročilejší funkce.
Úložiště funkcí Wolfram je určeno pro rychlé získávání nových funkcí a objevování nových možností použití jazyka Wolfram. S velkým optimismem doufáme, že část toho, co bylo prozkoumáno v úložišti funkcí, nakonec bude dávat smysl a stane se integrovanou součástí hlavního jazyka Wolfram Language. V posledním desetiletí jsme měli podobnou sadu . A jednou z lekcí, které jsme se na základě této zkušenosti naučili, je to, že pro dosažení standardů kvality a konzistence, na kterých nám záleží v celém, co je integrováno do jazyka Wolfram, je zapotřebí mnoho práce, která je často složitější než počáteční úsilí o zavedení myšlenky. Ale i v tomto případě může funkce v databázi funkcí sloužit jako velmi užitečný důkaz konceptu budoucí funkce, která nakonec může být integrována do jazyka Wolfram.
Hlavní věc je, že funkce v repozitáři funkcí jsou k dispozici každému uživateli k okamžitému použití. Možná, že zabudovaná funkce jazyka může být mnohem lepší a výkonnější, ale repozitář funkcí umožní uživatelům okamžitý přístup ke všem novým funkcím. A co je obzvlášť důležité, tento koncept umožňuje každému přidávat jakékoli své nové funkce.
Dříve v historii jazyka Wolfram by tato myšlenka nefungovala tak dobře jako nyní, ale v současné době je do jazyka vloženo tolik úsilí, a také tak hluboké porozumění principům návrhu jazyka, že se nyní jeví jako velmi možné, aby velké uživatelské společenství přidalo funkce, které budou podporovat konzistentnost projektu, aby byly užitečné pro široké spektrum uživatelů.
Ve společenství uživatelů Wolfram Language existuje neuvěřitelný duch talentu. (Samozřejmě, že do tohoto společenství patří mnoho předních odborníků v oblasti výzkumu a vývoje v nejrůznějších oborech.) Doufám, že repozitář funkcí Wolfram poskytne efektivní platformu pro uvolnění a šíření tohoto ducha talentu. Jen společně můžeme vytvořit něco, co významně rozšíří obor, do kterého může být aplikační paradigma jazyka Wolfram použito.
Za více než 30 let jsme ušli dlouhou cestu s jazykem Wolfram. Teď společně jděme ještě dál. Důrazně vyzývám všechny vážené uživatele jazyka Wolfram po celém světě, aby využili tuto platformu funkcí repozitáře a také nový software jako Free Wolfram Engine pro vývojáře.
Zdroj: habr.com
