Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Szia Habr! Bemutatom a figyelmedbe Stephen Wolfram bejegyzésének fordítását "The Wolfram Function Repository: Nyílt platform indítása a Wolfram nyelv kiterjesztésére".

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

A Wolfram nyelv konzisztenciájának előfeltételei

Ma a programnyelvvel együtt a nagy eredmények küszöbén állunk Wolfram nyelv. Mindössze három hete indultunk ingyenes Wolfram motor a fejlesztők számárahogy segítsünk felhasználóinknak integrálni a Wolfram nyelvet nagyszabású szoftverprojektjeikbe. Ma indulunk Wolfram függvénytár, annak érdekében, hogy összehangolt platformot biztosítsunk a Wolfram nyelv kiterjesztésére létrehozott funkciókhoz, valamint megnyitjuk a funkciók tárházát mindenki számára, aki hozzá tud járulni szoftvertermékünk fejlesztéséhez.

A Wolfram függvénytárat a Wolfram nyelv egyedülálló természete tette lehetővé, nemcsak mint programozási nyelv, hanem mint programozási nyelv is. teljes körű számítástechnikai nyelv. A hagyományos programozási nyelvekben a jelentős új funkciók hozzáadása általában teljes további könyvtárak létrehozásával jár, amelyek együtt használva működnek vagy nem. A Wolfram nyelvben azonban annyi már bele van építve magába a nyelvbe, hogy funkcionalitása jelentősen bővíthető egyszerűen új funkciók hozzáadásával, amelyek azonnal beépülnek a teljes nyelv holisztikus struktúrájába.

Például a Wolfram függvénytár már tartalmazza 532 új funkció 26 tematikus kategóriába sorolva:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Ugyanígy több mint 6000 szabványos funkció, a Wolfram nyelvbe beépítve, a tárhely minden egyes funkciójához tartozik egy dokumentációs oldal, amely részletes leírást és példákat tartalmaz a munkákra:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Az oldal eléréséhez másolja ki a fenti objektumot (BLOB függvény), illessze be a beviteli sorba, majd futtassa a függvényt - ez már be van építve a Wolfram nyelvbe, és alapértelmezés szerint támogatja 12.0. verzió:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Itt kell megjegyezni, hogy a feldolgozás során LogoQRCode Nem kell például „képfeldolgozó könyvtárat” felállítania – mivel már megvalósítottunk egy következetes és gondosan algoritmikus módszert a Wolfram nyelvben. képfeldolgozás, amely azonnal feldolgozható különféle grafikus nyelvi funkciókkal:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Remélem a támogatással csodálatos és tehetséges közösség, amely az elmúlt évtizedek során növekszik és terjeszkedett (a Wolfram nyelv alapján). A Wolfram függvénytár belátható időn belül lehetővé teszi a nyelven elérhető (esetleg jelentős, a tudomány és technológia különböző területeire specializálódott) funkciók körének jelentős bővítését. Így lehetővé válik mind a nyelv tartalmának (beépített funkcióinak), mind pedig fejlesztési elvek, amelyek a nyelv alapján kerülnek megvalósításra. (Itt meg kell jegyezni, hogy a Wolfram nyelv már több mint 30 éves fejlődéstörténet és stabil növekedés).
A tárolóból származó függvények kisebb vagy nagyobb kódrészleteket tartalmazhatnak Wolfram nyelven. Például ezek lehetnek hívások külső API-k és szolgáltatások vagy külső könyvtárak más nyelveken. Ennek a megközelítésnek az az egyedülálló tulajdonsága, hogy ha a felhasználói szintű funkcionalitásig elmélyül, nem lesznek esetleges következetlenségek, mivel a megközelítés a Wolfram nyelv konzisztens struktúrájára épül – és minden funkció automatikusan megfelelően fog működni – pontosan úgy, ahogy szánta. kellene.
A Wolfram Feature Repository héja és programozási struktúrája úgy van kialakítva, hogy mindenki a számára legegyszerűbb és legkényelmesebb módon tudjon hozzájárulni a közös ügyhöz - valójában csak a jegyzettömb szövegfájljának kitöltésével (nb kiterjesztéssel) WL. A beépített automatikus funkciók lehetővé teszik a tárhoz hozzáadott új funkciók ellenőrzését, hogy biztosítsák azok integrációját a nyelvbe. Cégünk a funkciókat a nyelvbe integrálni képes felhasználók széles körére fogad, nem pedig az új funkciók nagy bonyolultságára – és bár van felülvizsgálati folyamat, nem ragaszkodunk semmihez, mint pl. gondos tervezési elemzés vagy szigorú szabványok az új felhasználói funkciók teljességére és megbízhatóságára vonatkozóan, szemben az általunk alkalmazott alapnyelvbe épített funkciók szigorúbb tesztelésével.

Ebben a megközelítésben sok kompromisszum és részlet van, de célunk a Wolfram szolgáltatástár optimalizálása mind a felhasználói élmény érdekében, mind annak biztosítása érdekében, hogy az új felhasználói funkciók érdemben járuljanak hozzá a nyelv fejlesztéséhez. Ahogy fejlődünk, nincs kétségem afelől, hogy új módszereket kell kitalálnunk a repository-ba épített függvények feldolgozására és érvényesítésére, nem utolsósorban a nagyszámú függvény rendszerezésére és a felhasználóknak szükségesek megtalálására. Azonban biztató, hogy az általunk választott út jó kezdet. én, személyesen több funkciót is hozzáadott az eredeti adatbázisba. Sok közülük olyan kódon alapul, amelyet személyesen fejlesztettem már jó ideje. És csak néhány percembe telt, mire betoltam őket a tárolóba. Most, hogy a tárolóban vannak, végre - azonnal és bármikor - szükség szerint használhatom ezeket a funkciókat, anélkül, hogy aggódnom kellene a fájlok keresése, a csomagok letöltése stb.

Növeli a hatékonyságot, miközben csökkenti a költségeket

Már az internet előtt is voltak módok a Wolfram nyelvi kód megosztására (az első nagyobb központosított projektünk az volt MathSource, 1991-ben a Mathematica számára készült CD-ROM stb. alapján). Természetesen a Wolfram függvénytáron alapuló megvalósításra javasolt megközelítés hatékonyabb és megbízhatóbb eszköz a fenti feladatok megvalósításához.

Cégünk több mint 30 éve szorgalmasan dolgozik a Wolfram nyelvi szerkezet integritásának megőrzésén, és ez kritikus fontosságú annak biztosításában, hogy a Wolfram nyelv ne csak programozási nyelv legyen, hanem teljes értékű számítástechnikai nyelv. Így a Wolfram függvénytár megvalósításának megközelítésének lényege az, hogy egységes megközelítést alkalmazzunk a programozáshoz és az új funkciók fejlesztéséhez, amelyek szekvenciálisan kerülnek hozzáadásra és illeszkednek a nyelv keretébe, hogy az fejlődhessen és együtt fejlődhessen.

Az egyes funkciók megvalósítási struktúrájában különféle számítási folyamatok fordulnak elő. Itt meg kell jegyezni, hogy szükséges, hogy a funkció világos és egységes megjelenésű és vizuálisan olvasható legyen a felhasználó számára. Ebben az összefüggésben a Wolfram nyelv beépített funkcióit több mint 6000 szekvenciális példával mutatjuk be a függvények megfelelő programozására (ezek a mi élő programozási videókamelyek magukban foglalják több száz órányi folyamat a szabványos programok létrehozásához). Ez a megközelítés végül is képessé teszi a Wolfram szolgáltatástárat arra, hogy jól teljesítsen, az a Wolfram nyelv strukturális természete, amely számos további és változatos könyvtárat tartalmaz, amelyek már be vannak építve a nyelvbe. Például, ha van olyan függvénye, amely képeket dolgoz fel, ill ritka tömbökVagy molekuláris szerkezetekÉs földrajzi adatok vagy néhány más - ezek következetes szimbolikus megjelenítése már létezik a nyelvben, és ennek köszönhetően az Ön funkciója azonnal kompatibilissé válik a nyelv más funkcióival.

Érdekes meta-programozási feladat egy valóban jól működő adattár létrehozása. Például a túl sok korlátozás a programban nem teszi lehetővé az algoritmus szükséges egységesítését és egyetemességét. Csakúgy, mint elégtelen számú funkcionális korlátozás esetén, az algoritmus végrehajtásának kellően helyes sorrendjét sem lehet megvalósítani. Számos korábbi példa e megközelítések kompromisszumos megvalósítására, amelyeket cégünk alkalmazott, meglehetősen stabilan működött – ezek a következők: Projekt Tungsten bemutatók, 2007-ben indult, és mára online fut, több mint 12000 XNUMX felhasználói interaktív demóval. BAN BEN Wolfram adatbázis több mint 600 kész adatbázis használható a Wolfram nyelvben, ill Wolfram neurális hálózati tároló szinte hetente feltöltődik új neurális hálózatokkal (már 118 van belőlük), és a funkción keresztül azonnal kapcsolódnak NetModel a Wolfram nyelvben.

A fenti példák mindegyikének van egy alapvető jellemzője - a projektben összegyűjtött objektumok és funkciók nagyon magas fokú strukturálással és folyamatelosztással rendelkeznek. Természetesen a demó, a neurális hálózat vagy valami más szerkezetének részletei nagyban változhatnak, de az alapvető struktúra minden aktuális adattár esetében mindig ugyanaz marad. Tehát mi a véleménye, kedves felhasználó, egy ilyen tár létrehozásáról, amely kiterjeszti a Wolfram nyelvet? A Wolfram nyelvet rendkívül rugalmasra tervezték, így bármilyen módon bővíthető és módosítható. Ez a körülmény rendkívül fontos ahhoz, hogy gyorsan lehessen létrehozni különféle nagyszabású szoftverprojekteket Wolfram nyelven. Itt meg kell jegyezni, hogy a nyelv rugalmasságának növekedésével az ilyen nyelven megvalósított projektek költségei elkerülhetetlenül növekedni fognak. Ez annak köszönhető, hogy minél többet használ a felhasználó egy ilyen nyelvet, annál több dedikált funkcionalitást kap, de nem szabad elfelejteni, hogy ennek a megközelítésnek lehetnek negatív oldalai is, mivel nem tudják biztosítani a programmodulok konzisztens konzisztenciáját.

Gyakori probléma van a hagyományos programozási nyelvek könyvtáraival - ha például egy könyvtárat használ, akkor a kód megfelelően fog működni, de ha több könyvtárat próbál meg használni, nincs garancia arra, hogy megfelelően fognak kölcsönhatásba lépni egymással. . Ezenkívül a hagyományos programozási nyelvekben - a teljes értékű számítástechnikai nyelvtől eltérően - nincs mód arra, hogy az alapvető struktúrákon kívül minden funkcióhoz vagy adattípushoz konzisztens beépített reprezentációk legyenek. Valójában azonban a probléma még nagyobb, mint amilyennek első pillantásra tűnik: ha valaki egy nagyszabású funkcionalitási vertikumot épít fel, akkor a centralizált projektprogramozás óriási költségei nélkül, amelyet a Wolfram nyelvbe helyezünk, lehetetlen. következetességet elérni. Ezért fontos, hogy minden szoftvermodul mindig megfelelően működjön együtt.

Tehát a Wolfram szolgáltatástár mögött az az ötlet, hogy elkerüljük a fent vázolt problémát azáltal, hogy viszonylag kis kódrészletekben egyszerűen bővítményeket adunk a nyelvhez, egyedi funkciókon keresztül, amelyeket könnyebb koherens modulokként fejleszteni. Ennek ellenére vannak olyan programozási funkciók, amelyeket nem lehet egyedi funkciókkal kényelmessé tenni (és cégünk a közeljövőben egy optimalizált programozási algoritmus kiadását tervezi nagyszabású szoftvercsomagok megvalósításához). A Wolfram nyelvbe már beépített funkciók alapján azonban számos programozási lehetőség kínálkozik, amelyek egyedi függvények alapján valósulnak meg. Itt az ötlet az, hogy viszonylag kis programozási ráfordítással számos új és nagyon hasznos funkciót lehet létrehozni, amelyek kellő koherenciát biztosítanak a tervezésben, jól összehangolhatók egymással, és ezen túlmenően a jövőben könnyen és széles körben használható lesz a nyelvben.

Ez a megközelítés természetesen kompromisszum. Ha egy nagyobb csomagot implementálnának, a funkcionalitás egy teljesen új világa képzelhető el, amely rendkívül hatékony és hasznos lenne. Ha olyan új funkcionalitásra van szükség, amely minden máshoz illeszkedik, de nem hajlandó sok erőfeszítést fordítani a projekt fejlesztésére, ez sajnos a projekt hatókörének csökkenéséhez vezethet. A Wolfram szolgáltatástár mögött meghúzódó ötlet az, hogy funkcionalitást biztosítson a projekt egy meghatározó részének; ez a megközelítés erőteljes funkcionalitást ad hozzá, miközben megkönnyíti a megfelelő konzisztencia fenntartását a programozási projektekben.

Segítség egyéni funkciók hozzáadásához a függvénytárhoz

Csapatunk keményen dolgozott azon, hogy megkönnyítse a felhasználók számára a Wolfram adattár funkcióihoz való hozzájárulást. Az asztalon (már be 12.0. verzió), Egyszerűen végignézheti a főmenü lapjait egymás után: Fájl > Új > RepositoryItem > Function Repository Item, és megkapja a "Definíciós jegyzetfüzet" (programozottan a munkapadon belül. Használhatja az analóg funkciót is - Jegyzetfüzet létrehozása["Funkcióforrás"]):

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Két fő lépést kell végrehajtania: először is írja le a funkció kódját, másodszor pedig írja le a dokumentációt, amely bemutatja, hogyan kell működnie a funkciónak.
Kattintson a felül található "Minta megnyitása" gombra, hogy példát lásson a teendőkre:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Lényegében valami hasonlót próbál létrehozni, mint egy beépített funkció a Wolfram nyelvben. Kivéve, hogy valami sokkal specifikusabbra képes, mint egy beépített funkció. Ugyanakkor a teljességével és megbízhatóságával kapcsolatos elvárások sokkal alacsonyabbak lesznek.
A függvénynek olyan nevet kell adnia, amely követi a Wolfram nyelv függvényelnevezési irányelveit. Ezenkívül a nyelv beépített funkcióihoz hasonló dokumentációt kell kidolgoznia a funkciójához. Erről később részletesebben szólok. Egyelőre csak vegye figyelembe, hogy a definíciós jegyzetfüzet fájl tetején lévő gombsorban van egy gomb "Stílus irányelvek", amely elmagyarázza a teendőket, és egy Eszközök gombot, amely eszközöket biztosít a függvény dokumentációjának formázásához.
Ha biztos benne, hogy minden megfelelően van kitöltve, és készen áll, kattintson az „Ellenőrzés” gombra. Teljesen normális, hogy még nem jöttél rá minden részletre. Így az "Ellenőrzés" funkció automatikusan lefut, és számos stílus- és konzisztenciaellenőrzést végez. Gyakran azonnal felszólítja Önt a javítások megerősítésére és elfogadására (például: „Ennek a sornak kettősponttal kell végződnie”, és kettőspont beírását kéri). Néha meg fogja kérni, hogy saját maga adjon hozzá vagy változtasson meg valamit. Folyamatosan új funkciókkal bővítjük az Ellenőrzés gomb automatikus funkcionalitását, de alapvetően az a célja, hogy minden, amit a funkciótárba beküld, a lehető legtöbb stílusirányelvet követje.

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Tehát a "Check" futtatása után használhatja az "Előnézet" funkciót. Az „Előnézet” a funkciójához meghatározott dokumentációs oldal előnézetét hozza létre. Létrehozhat előnézetet a számítógépén létrehozott fájlhoz vagy a felhőalapú tárolóban található fájlhoz is. Ha valamilyen oknál fogva nem elégedett azzal, amit az előnézetben lát, egyszerűen lépjen vissza, és végezze el a szükséges javításokat, majd kattintson ismét az Előnézet gombra.
Most készen áll arra, hogy a függvényt a tárolóba helyezze. A Telepítés gomb négy lehetőséget kínál:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Ennél a lépésnél az a fontos, hogy a függvényt elküldhesd a Wolfram függvénytárba, hogy az bárki számára elérhető legyen. Ugyanakkor korlátozott számú felhasználó számára is elhelyezheti funkcióját. Létrehozhat például egy olyan funkciót, amely helyileg a számítógépén található, így az adott számítógép használatakor elérhető. Vagy közzéteheti a sajátjában felhő fiók, így elérhetővé válik, amikor csatlakozik a felhőhöz. A szolgáltatást nyilvánosan is tárolhatja (telepítheti) felhőfiókján keresztül. Nem lesz a központi Wolfram szolgáltatástárban, de megadhat valakinek egy URL-t, amely lehetővé teszi, hogy lekérje a szolgáltatást a fiókjából. (A jövőben a központi adattárakat is támogatni fogjuk cégünk egészében.)

Tehát tegyük fel, hogy ténylegesen be szeretné küldeni a függvényt a Wolfram függvény tudásbázisba. Ehhez kattintson a „Küldés” gombra a tárolóba. Tehát mi történik jelenleg? Pályázatát azonnal sorba állítja a kurátorokból álló csapatunk általi felülvizsgálatra és jóváhagyásra.

Amint jelentkezése a jóváhagyási folyamaton keresztül halad (amely általában több napot vesz igénybe), értesítést kap az állapotáról, és esetleg javaslatokat tesz a jövőbeni felhasználásra. De amint a funkciót jóváhagyják, azonnal közzétesszük a Wolfram Feature Repository-ban, és bárki számára elérhető lesz. (És ez meg fog jelenni hírösszefoglalók az új funkciókról és így tovább)

Mi legyen a tárolóban?

Megjegyzendő, hogy cégünk a teljesség, a megbízhatóság és az általános minőség tekintetében nagyon magas követelményeket támaszt, és az elmúlt 6000+ év során a Wolfram nyelvbe már beépített 30+ funkció közül mindegyik megfelel a fenti követelményeknek. A Wolfram Function Repository célja, hogy a Wolfram nyelvben már meglévő összes struktúrát és funkcionalitást használja annak érdekében, hogy minél több könnyebb funkciót (azaz nagyobb teljesítményű funkciókat) adjon hozzá.

Természetesen a Wolfram függvénytárban lévő funkcióknak meg kell felelniük a Wolfram nyelv tervezési elveinek – hogy teljes mértékben kölcsönhatásba léphessenek más funkciókkal és a felhasználók elvárásaival a funkció megfelelő működésével kapcsolatban. A funkcióknak azonban nem kell egyforma teljességűnek vagy megbízhatónak lenniük.

A Wolfram nyelv beépített funkcióiban keményen dolgozunk azon, hogy a programozási funkciók minél általánosabbak legyenek. Ennek ellenére, amikor a Wolfram függvénytárban tartózkodik, nincs semmi baj, ha van benne olyan függvény, amely egyszerűen kezel egy nagyon speciális, de hasznos esetet. Például a függvény SendMailFromNotebook egy adott formátumban fogadhat fájlokat, és egy meghatározott módon hozhat létre leveleket. Sokszögdiagram diagramokat hoz létre csak bizonyos színekkel és címkékkel stb.

További szempont a beépített funkciókkal kapcsolatban, hogy cégünk mindent megtesz az atipikus esetek kezelésére, a hibás bevitelek helyes kezelésére stb. Egy függvénytárban teljesen normális, hogy van egy speciális függvény, amely a probléma megoldásának fő eseteit kezeli, és figyelmen kívül hagyja az összes többit.

A nyilvánvaló lényeg az, hogy jobb, ha vannak olyan függvények, amelyek többet és jobban csinálnak, de a függvénytár optimalizálásához - a Wolfram nyelv beépített funkcióival szemben - több funkciót kell több funkcióval kötegelni, ahelyett, hogy belemerülne. az egyes funkciók megvalósítási folyamatait.

Most nézzünk meg egy példát a funkciók tesztelésére egy adattárban. Az ilyen függvényekkel szembeni konzisztencia-elvárások természetesen sokkal alacsonyabbak, mint a beépített nyelvi függvényeknél. Ez különösen igaz azokra az esetekre, amikor a funkciók külső erőforrásoktól, például API-któl függenek, ezért fontos, hogy folyamatosan konzisztens teszteket végezzenek, ami automatikusan megtörténik az ellenőrző algoritmusokon belül. Az nb fájlban kifejezetten megadhat definíciókat (a További információk részben), és annyi tesztet adhat meg, amennyit bemeneti és kimeneti karakterláncok vagy teljes karakteres típusú objektumok határoznak meg. Ellenőrző teszt, amennyit jónak lát. Emellett a rendszer folyamatosan igyekszik ellenőrzési folyamattá alakítani az Ön által megadott dokumentációs példákat (és ez néha meglehetősen erőforrás-igényes lehet, például egy olyan függvénynél, amelynek eredménye véletlen számoktól vagy a napszaktól függ).

Ennek eredményeként a függvénytárnak számos megvalósítási bonyolultsága lesz. Egyesek csak egyetlen kódsorból állnak, mások több ezer vagy tízezer sort foglalhatnak magukban, valószínűleg sok segédfunkciót használnak. Mikor érdemes olyan függvényt hozzáadni, amelynek definiálása nagyon kevés kódot igényel? Alapvetően, ha egy funkcióhoz létezik jó mnemonikus név, amelyet a felhasználók könnyen megértenének, ha egy kódrészletben látnák, akkor már hozzáadható. Ellenkező esetben valószínűleg jobb, ha minden alkalommal újra hozzáfűzi a kódot a programhoz, amikor csak használnia kell.

A függvénytár fő célja (ahogy a neve is sugallja), hogy új funkciókat vigyen be a nyelvbe. Ha új adatokat szeretne hozzáadni, ill új entitások, használja Wolfram adattár. De mi van, ha új típusú objektumokat szeretne bevezetni a számításokhoz?

Valójában két út létezik. Érdemes lehet egy új objektumtípust bevezetni, amelyet a függvénytár új függvényeiben használunk. És ebben az esetben mindig felírhatja a szimbolikus ábrázolását, és használhatja függvények bevitelére vagy kimenetére egy függvénytárban.

De mi van akkor, ha egy objektumot szeretne ábrázolni, majd a Wolfram nyelv meglévő függvényei segítségével meghatározni, hogy szeretne dolgozni vele? A Wolfram nyelvnek mindig volt erre egy könnyű mechanizmusa, az ún UpValues. Bizonyos megszorításokkal (különösen azoknál a funkcióknál, amelyek nem tudja értékelni érveit), a függvénytár lehetővé teszi, hogy egyszerűen ábrázoljon egy függvényt, és meghatározzon hozzá értékeket. (A konzisztencia elvárásának növelése egy új, a Wolfram nyelvbe teljesen integrált nagy terv létrehozásakor általában nagyon fontos eljárás, amelyet nem lehet egyszerűen a projekt költségének növelésével elérni, és ezt cégünk a projektek részeként végzi. a nyelv hosszú távú fejlesztése érdekében ez a feladat nem az adattár fejlesztésének részeként kitűzött cél).

Tehát mi lehet a függvénykódban egy függvénytárban? Minden, ami a Wolfram nyelvbe beépült, persze (legalábbis ha nem képviseli fenyegetések a Biztonság és magának a programnak, mint számítási környezetnek a teljesítménye), valamint a függvénytárból származó bármely funkció. Vannak azonban más funkciók is: egy függvénytárban lévő függvény hívhat API-t, vagy be is hívhat Wolfram CloudVagy más forrásból. Természetesen ez bizonyos kockázatokkal jár. Mivel nincs garancia arra, hogy az API nem változik, és a függvénytárban lévő funkció leáll. Az ehhez hasonló problémák azonosítása érdekében a dokumentációs oldalon (a Követelmények szakaszban) található egy megjegyzés minden olyan szolgáltatáshoz, amely nem csupán a beépített Wolfram Language funkcióra támaszkodik. (Természetesen, ha valós adatokról van szó, még ezzel a funkcióval is adódhatnak problémák - mert a valós világ adatai folyamatosan változnak, sőt néha a definícióik és a szerkezetük is megváltozik.)

A Wolfram szolgáltatástárhoz tartozó összes kódot Wolframban kell írni? Természetesen a külső API-n belüli kódot nem szabad Wolfram nyelven írni, ami még a nyelvi kódot sem készíti el. Valójában, ha szinte bármilyen külső nyelvben vagy könyvtárban talál egy függvényt, létrehozhat egy burkolóanyagot, amely lehetővé teszi annak használatát a Wolfram függvénytárban. (Általában ehhez a beépített funkciókat kell használni ExternalEvaluate vagy Külső funkció Wolfram nyelvi kódban.)

Szóval mi értelme van ennek? Ez lényegében lehetővé teszi a teljes integrált Wolfram Language rendszer és annak teljes egységes szoftverképességeinek használatát. Ha az alapimplementációt egy külső könyvtárból vagy nyelvből szerzi be, akkor a Wolfram nyelv gazdag szimbolikus struktúrájával létrehozhat egy kényelmes legfelső szintű funkciót, amely lehetővé teszi a felhasználók számára a már megvalósított funkciók egyszerű használatát. Legalábbis ennek megvalósíthatónak kell lennie egy ideális világban, ahol a betöltési könyvtárak stb. összes építőköve létezik, amely esetben ezeket automatikusan a Wolfram nyelv kezelné. (Megjegyzendő, hogy a gyakorlatban problémák adódhatnak külső nyelvek beállítása adott számítógépes rendszer és a felhőalapú tárolás további biztonsági problémákat vethet fel).

Mellesleg, ha először megnézzük a tipikus külső könyvtárakat, gyakran túl bonyolultnak tűnnek ahhoz, hogy csak néhány funkciót lefedjenek, de sok esetben a bonyolultság nagy része a könyvtárhoz és az összes funkcióhoz szükséges infrastruktúra létrehozásából fakad. támogassa. A Wolfram nyelv használatakor azonban az infrastruktúra jellemzően már be van építve a csomagokba, így nem kell ezeket a támogatási funkciókat részletesen bemutatni, hanem csak a könyvtár "legfelső" alkalmazás-specifikus funkcióihoz kell függvényeket létrehozni. .

A tudásbázis "ökoszisztémája".

Ha olyan függvényeket írt, amelyeket rendszeresen használ, küldje el azokat a Wolfram Function Repository-ba! Ha ebből nem jön ki valami több (nyelvfejlesztés), akkor is sokkal kényelmesebb lesz a funkciókat személyes használatra használni. Logikus azonban feltételezni, hogy ha rendszeresen használja a funkciókat, talán más felhasználók is hasznosnak találják azokat.

Természetesen előfordulhat, hogy olyan helyzetbe kerül, amikor nem tudja – vagy nem akarja – megosztani a funkcióit, vagy ha hozzáfér személyes információforrásokhoz. Ilyen esetekben is egyszerűen telepítheti a funkciókat saját felhőfiókjában, jogok megadása hozzájuk való hozzáférést. (Ha a szervezete rendelkezik Wolfram Enterprise privát felhő, akkor hamarosan saját privát funkciótárat is üzemeltethet, amelyet a szervezeten belül is felügyelhet, és beállíthatja, hogy a nézeteket külső felhasználók kényszerítsék-e vagy sem.)

A Wolfram függvénytárba beküldött függvényeknek nem kell tökéletesnek lenniük; csak hasznosnak kell lenniük. Ez egy kicsit olyan, mint a "Hibák" szakasz a klasszikus Unix dokumentációban - a "Definíciók részben" van egy "Szerzői megjegyzések" rész, ahol leírhatja a funkciójával kapcsolatban már ismert korlátozásokat, problémákat stb. Ezen túlmenően, amikor elküldi a funkciót az adattárba, hozzáadhat beküldési megjegyzéseket, amelyeket a kurátorok elkötelezett csapata olvas majd el.

Egy funkció közzététele után az oldal alján mindig két link található: "Üzenet küldése erről a funkcióról"És"Beszélgetés a Wolfram közösségben" Ha megjegyzést csatol (pl. mondjon el nekem a hibákat), bejelölheti azt a jelölőnégyzetet, amely azt mondja, hogy szeretné megosztani üzenetét és kapcsolatfelvételi adatait a funkció szerzőjével.

Néha egyszerűen csak a Wolfram függvénytárból szeretne függvényeket használni, például beépített függvényeket anélkül, hogy megnézné a kódjukat. Ha viszont bele akarunk nézni, akkor a tetején mindig van egy Jegyzettömb gomb. Kattintson rá, és megkapja a saját másolatát az eredeti definíciós jegyzetfüzetről, amelyet elküldtek a szolgáltatástárba. Néha csak példaként használhatja az igényeinek kielégítésére. Ezzel egyidejűleg saját módosítást is kidolgozhat erre a funkcióra. Ezeket a lerakatból talált függvényeket érdemes közzétenni a számítógépén vagy a levéltetű felhőtároló fiókjában, esetleg el szeretné küldeni őket a függvény tudásbázisba, esetleg az eredeti funkció továbbfejlesztett, bővített változataként.

A jövőben azt tervezzük, hogy támogatni fogjuk a Git-stílusú forking funkciót a funkciótáraknál, de egyelőre igyekszünk az egyszerűségre törekedni, és minden funkcióból mindig csak egy elfogadott verzió van beépítve a nyelvbe. Leggyakrabban (kivéve, ha a fejlesztők lemondanak az általuk kifejlesztett szolgáltatások fenntartásáról, és nem reagálnak a felhasználók beadványaira), a funkció eredeti szerzője átveszi az irányítást a frissítések felett, és új verziókat küld be, amelyeket ezután felülvizsgálnak, és ha átmennek a felülvizsgálati folyamaton. nyelven megjelent.

Nézzük meg azt a kérdést, hogyan működik a kifejlesztett függvények „verziója”. Jelenleg, amikor egy függvényt használ a függvénytárból, a definíciója véglegesen tárolásra kerül a számítógépén (vagy a felhőfiókjában, ha a felhőt használja). Ha egy funkciónak új verziója érhető el, a következő használat alkalmával erről értesítő üzenetet fog kapni. Ha pedig új verzióra szeretné frissíteni a függvényt, ezt a paranccsal megteheti ResourceUpdate. (A "function blob" valójában több verziószámítási információt tárol, és azt tervezzük, hogy ezt a jövőben jobban elérhetővé tesszük a felhasználók számára.)

A Wolfram Function Repository egyik legszebb tulajdonsága, hogy bármely Wolfram nyelvi program bárhol használhat függvényeket. Ha egy program megjelenik egy jegyzettömbben, akkor gyakran célszerű a tárolófunkciókat könnyen olvasható "bináris függvény" függvényként formázni (talán megfelelő verziókészlettel).

Szöveg használatával bármikor elérheti a függvénytár bármely funkcióját ResourceFunction[...]. És ez nagyon kényelmes, ha például közvetlenül a Wolfram Engine-hez ír kódot vagy szkripteket IDE vagy szöveges kódszerkesztő segítségével (különösen meg kell jegyezni, hogy a függvénytár teljes mértékben kompatibilis a Ingyenes Wolfram motor fejlesztőknek).

Hogyan működik?

A Wolfram repository funkcióin belül ez pontosan ugyanazzal lehetséges erőforrás rendszerek alapok, mint pl az összes többi meglévő tárolónk (adattár, Neurális hálózati adattár, demo projektek gyűjteménye stb.), mint az összes többi Wolfram rendszererőforrás, ResourceFunction végső soron a funkció alapján ResourceObject.

Fontolja ResourceFunction:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Belül néhány információ látható a funkció használatával Információ:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Hogyan működik az erőforrás-függvény beállítása? A legegyszerűbb tisztán helyi eset. Íme egy példa, amely egy függvényt (ebben az esetben csak egy tiszta függvényt) vesz fel, és erőforrásfüggvényként határozza meg egy adott programmenethez:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Miután elkészítette a definíciót, használhatja az erőforrás függvényt:

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

Vegye figyelembe, hogy ebben a funkcióblobban egy fekete ikon található Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez. Ez azt jelenti, hogy a BLOB függvény az aktuális munkamenethez definiált memórián belüli erőforrás függvényre utal. A számítógépén vagy a felhőalapú fiókjában állandóan tárolt erőforrás-funkció szürke ikonnal rendelkezik Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez. És van egy narancssárga ikon egy hivatalos erőforrás-funkcióhoz a Wolfram Feature Repository-ban Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez.

Tehát mi történik, ha a Definíciós Jegyzetfüzet Kibontás menüjét használja? Először is átveszi a jegyzettömb összes definícióját, és létrehoz egy szimbolikus képet ResourceObject). (És ha szöveges IDE-t vagy programot használ, akkor kifejezetten létrehozhat ResourceObject)

Egy funkció helyi telepítése a számítógép lerakatából a parancs segítségével történik LocalCache hogy egy erőforrásobjektum másként mentse el LocalObject fájlrendszerén. A felhőalapú fiókba történő telepítés a paranccsal történik CloudDeploy egy erőforrás-objektumhoz, a nyilvános felhőtelepítés pedig az CloudPublish. Minden esetben ResourceRegister az erőforrás függvény nevének regisztrálására is használják, így ResourceFunction["név"] működni fog.

Ha rákattint a Beküldés gombra egy függvénytárnál, mi történik alatta ResourceSubmit erőforrás-objektumot hívott meg. (Ha pedig szövegbeviteli felületet használ, hívhat is ResourceSubmit közvetlenül.)

Alapértelmezés szerint a beküldések az Ön Wolfram azonosítójához társított név alatt készülnek. De ha egy fejlesztőcsapat vagy szervezet nevében nyújt be kérelmet, megteheti állítson be külön megjelenítői azonosítót és ehelyett használja névként a nézeteivel való interakcióhoz.

Miután elküldte bármelyik függvényét a függvény tudásbázisba, az ellenőrzési sorba kerül. Ha megjegyzéseket kap válaszként, azok általában szöveges fájl formájában lesznek, további „megjegyzéscellákkal”. Bármikor ellenőrizheti jelentkezése állapotát a weboldalon erőforrásrendszer-tag portál. De amint a funkciót jóváhagyják, értesítést kap (e-mailben), és a funkciót közzéteszi a Wolfram szolgáltatástárában.

Néhány finomság a munkában

Első pillantásra úgy tűnhet, hogy egyszerűen csak elővesz egy definíciós jegyzetfüzetet, és szó szerint elhelyezi egy függvénytárba, azonban valójában nagyon sok finomságról van szó – és ezek kezelése meglehetősen bonyolult metaprogramozást, szimbolikus feldolgozást igényel. függvényt meghatározó kódként, és maga a Jegyzettömb is definiálva van. Ennek nagy része belül, a színfalak mögött történik, de lehetnek olyan következményei, amelyeket érdemes megérteni, ha hozzá kívánunk járulni a funkciók tudásbázisához.

Az első azonnali finomság: Amikor kitölti a Definíciós Jegyzetfüzetet, egyszerűen hivatkozhat a funkciójára mindenhol egy olyan név használatával, mint MyFunction, amely úgy néz ki, mint egy függvény szokásos neve a Wolfram nyelvben, de a függvénytár dokumentációjában ez lecserélődik ResourceFunction["MyFunction"] Ez az, amit a felhasználók ténylegesen használni fognak, amikor a funkcióval dolgoznak.

A második finomság: amikor erőforrásfüggvényt hoz létre a Definíciós Jegyzetfüzetből, a függvénydefinícióban szereplő összes függőséget rögzíteni kell és kifejezetten bele kell foglalni. Ahhoz azonban, hogy a definíciók modulárisak maradjanak, mindent egyedivé kell tenni névtér. (Természetesen, funkciókat, amelyek mindezt elvégzik, a függvénytárban találhatók.)

Általában soha nem fogja látni a névtér konfigurálásához használt kód nyomát. De ha valamilyen oknál fogva alulvégrehajtott szimbólumot hív meg a függvényen belül, akkor látni fogja, hogy ez a szimbólum a függvény belső kontextusában van. A Definition Notepad feldolgozása során azonban legalább magának a függvénynek megfelelő szimbólum az állítható a legjobb megjelenítés érdekében mint funkcionális BLOB, nem pedig nyers karakter a belső kontextusban.

A függvénytár új függvények meghatározására szolgál. És ezeknek a funkcióknak lehetnek opciói. Gyakran ezek a paraméterek (pl. Módszer vagy Képméret) használható lesz a beépített funkciókhoz, valamint azokhoz, amelyekhez már léteznek beépített szimbólumok. Néha azonban egy új funkció új beállításokat igényelhet. A modularitás megőrzése érdekében ezeknek a paramétereknek egyedi belső kontextusban definiált szimbólumoknak kell lenniük (vagy valami olyannak, mint a teljes erőforrás-függvényeknek, azaz önmaguknak). Az egyszerűség kedvéért a függvénytár lehetővé teszi új beállítások megadását a karakterlánc-definíciókban. És a felhasználó kényelme érdekében ezek a definíciók (feltételezve, hogy használták OptionValue и Options Pattern) is feldolgozásra kerülnek, így függvények használatakor a paraméterek nem csak karakterláncként, hanem azonos nevű globális szimbólumként is megadhatók.

A legtöbb függvény egyszerűen azt csinálja, amit tennie kell, minden alkalommal, amikor meghívják őket, de néhány függvényt inicializálni kell, mielőtt egy adott munkamenetben futhatnának – és a probléma megoldására a Definíció részben található az „Inicializálás” szakasz.

A lerakatból származó függvények használhatnak más függvényeket is, amelyek már a lerakatban vannak; ha olyan függvénytárhoz szeretne definíciókat beállítani, amely két (vagy több) egymásra hivatkozó függvényt tartalmaz, telepítenie kell őket a programmunkamenetben, hogy hivatkozás, mint rajtuk ResourceFunction["név"], akkor létrehozhatja ezeknek a függvényeknek a szükséges kombinációit, példákat (nem értettem), és hozzáadhat egy új függvényt a tárhoz a korábban már közzétett függvények alapján. (vagy már vagy korábban – mindkét szó ügyetlen)

Fejlődési kilátások. Mi történjen, ha a tárhely nagyon nagy lesz?

Ma még csak elindítjuk a Wolfram Feature Repository-t, de idővel arra számítunk, hogy mérete és funkcionalitása drámaian növekedhet, és ahogy a fejlesztés során növekszik, különféle problémák merülhetnek fel, amelyekről már előre gondoltunk.

Az első probléma a függvénynevekkel és azok egyediségével kapcsolatos. A függvénytárat úgy alakították ki, hogy a Wolfram nyelv beépített függvényeihez hasonlóan bármely adott függvényre egyszerűen a nevének megadásával hivatkozhat. Ez azonban elkerülhetetlenül azt jelenti, hogy a függvényneveknek globálisan egyedinek kell lenniük a tárolóban, így például csak egy lehet. ResourceFunction["Kedvenc funkcióm"].

Ez elsőre nagy problémának tűnhet, de érdemes belátni, hogy alapvetően ugyanaz a probléma, mint például az internetes domainek vagy a közösségi média kezelői. A tény pedig az, hogy a rendszernek egyszerűen kell lennie egy regisztrátornak – és ez az egyik szerep, amelyet cégünk ellát a Wolfram funkció tudásbázisa számára. (A repozitórium privát verzióinál ezek regisztrátorai lehetnek adminisztrátorok.) Természetesen egy internetes tartomány regisztrálható anélkül, hogy bármi is lenne rajta, de a függvénytárban csak akkor lehet funkciónevet regisztrálni, ha van tényleges definíció a funkció.

A Wolfram-függvény tudásbázis kezelésében játszott szerepünk része annak biztosítása, hogy a függvényhez választott név logikus legyen a függvény definíciójában, és kövesse a Wolfram nyelv elnevezési konvencióit. Több mint 30 éves tapasztalattal rendelkezünk a beépített függvények elnevezésében a Wolfram nyelvben, és kurátoraink csapata ezt a tapasztalatot a függvénytárba is beviszi. Persze kivételek mindig vannak. Előnyösnek tűnhet például egy rövid név megadása bizonyos függvényeknek, de jobb, ha hosszabb, pontosabb névvel "védekezzünk", mert kevésbé valószínű, hogy a jövőben összefut valakivel, aki hasonló függvénynevet szeretne létrehozni. .

(Itt meg kell jegyezni, hogy a függvények egyértelművé tétele érdekében néhány tagcímke egyszerű hozzáadásával nem lesz a kívánt hatás. Mert hacsak nem ragaszkodsz a címke mindig hozzárendeléséhez, minden adott függvényhez meg kell határoznod az alapértelmezett címkét, és ki kell osztanod a szerzői címkéket is. , ami ismét globális koordinációt igényelne.)

Ahogy a Wolfram-függvények tudásbázisa növekszik, az egyik valószínűleg felmerülő probléma a függvények felfedezhetősége, amelyre a rendszer gondoskodik. kereső funkciót (és a definíciós fájlok tartalmazhatnak kulcsszavakat stb.). A Wolfram nyelv beépített függvényeihez a dokumentációban mindenféle kereszthivatkozás található, amelyek segítenek a funkciók „reklámozásában”. A függvénytárban lévő függvények hivatkozhatnak beépített függvényekre. De mi van fordítva? Ennek érdekében különböző kialakításokkal fogunk kísérletezni, hogy a beépített funkciók dokumentációs oldalain megjelenítsük a lerakatfunkciókat.

A Wolfram nyelv beépített funkcióihoz egy úgynevezett észlelési réteget biztosít "súgóoldalak" hálózata, amelyek szervezett listákat tartalmaznak az egyes területekhez kapcsolódó szolgáltatásokról. Mindig nehéz megfelelő egyensúlyt teremteni a kézikönyvoldalak között, és ahogy a Wolfram nyelv növekszik, a kézikönyvoldalakat gyakran teljesen át kell szervezni. Elég könnyű egy tárház függvényeit tágabb kategóriákba sorolni, sőt ezeket a kategóriákat következetesen le is bontani, de sokkal értékesebb a megfelelően szervezett nyelvi referenciaoldalak. Még nem világos, hogyan lehet a legjobban létrehozni őket a teljes funkció tudásbázishoz. Például, CreateResourceObjectGallery a szolgáltatástárban bárki közzétehet olyan weboldalt, amely tartalmazza a tárhelyből kiválasztott "válogatásait":

Wolfram Function Repository: Nyílt hozzáférésű platform a Wolfram nyelvi bővítményekhez

A Wolfram függvénytár perzisztens függvénytárként van konfigurálva, ahol a benne lévő bármely funkció mindig működik. Természetesen a funkciók új verziói is elérhetővé válhatnak, és arra számítunk, hogy bizonyos funkciók idővel természetesen elavulnak. A funkciók működni fognak, ha programokban használják őket, de a dokumentációs oldalaik új, fejlettebb funkciókra hivatkoznak.

A Wolfram Feature Repository célja, hogy segítsen gyorsan felfedezni az új funkciókat és megtanulni a Wolfram nyelv használatának új módjait. Nagyon bizakodóak vagyunk a tekintetben, hogy a szolgáltatástárban feltártak egy része végül értelmet nyer, hogy az alapvető Wolfram nyelv beépített részévé váljon. Az elmúlt évtizedben volt egy hasonló készletünk funkciók, amelyeket eredetileg a Wolfram | Alpha. Ebből a tapasztalatból levont tanulságok egyike az, hogy a Wolfram nyelvbe épített mindenben a minőségi és következetességi szabványok elérése sok munkát igényel, ami gyakran nehezebb, mint az ötlet megvalósításának kezdeti erőfeszítése. Ennek ellenére a függvény tudásbázisban lévő függvény nagyon hasznos bizonyítékként szolgálhat egy jövőbeli függvényhez, amely végül beépülhet a Wolfram nyelvbe.

A legfontosabb dolog itt az, hogy egy függvénytárban lévő függvény minden felhasználó számára elérhető. Lehetséges, hogy egy anyanyelvi szolgáltatás sokkal jobb és teljesítményesebb lehet, de egy szolgáltatástár lehetővé tenné, hogy a felhasználók azonnal hozzáférjenek az összes új funkcióhoz. És ami a legfontosabb, ez a koncepció lehetővé teszi, hogy mindenki bármilyen új funkciót adjon hozzá.

Korábban a Wolfram nyelv történetében ez az ötlet nem működött volna olyan jól, mint most, de ebben a szakaszban annyi erőfeszítést tesznek a nyelvbe, és olyan mélyen megértik a nyelvtervezési elveket, hogy most nagyon úgy tűnik. a felhasználók nagy közössége számára lehetőség nyílik olyan funkciók hozzáadására, amelyek megőrzik a tervezés konzisztenciáját, hogy hasznosak legyenek a felhasználók széles köre számára.

A Wolfram nyelv felhasználói közösségében hihetetlen tehetség(?) van. (Természetesen ebbe a közösségbe számos vezető K+F szakértő tartozik a legkülönbözőbb területeken.) Remélem, hogy a Wolfram Feature Repository hatékony platformot biztosít a tehetség szellemének felszabadításához és terjesztéséhez. Csak együtt tudunk létrehozni valamit, ami jelentősen kibővíti azt a területet, amelyre a Wolfram nyelv számítási paradigmája alkalmazható.

Több mint 30 év alatt nagy utat tettünk meg a Wolfram nyelvvel. Most együtt menjünk még tovább. Határozottan bátorítom a Wolfram nyelv minden elismert felhasználóját szerte a világon, hogy a funkcionális adattárat használják platformként ehhez, valamint az új szoftverprojekthez, például a Free Wolfram Engine for Developershez.

Forrás: will.com

Hozzászólás