Helló, Habr! Örömmel mutatom be Steven Wolfram posztjának fordítását .

A Wolfram nyelv megalapozottságának előfeltételei
Ma a programozási nyelvvel együtt hatalmas áttörések küszöbén állunk . Mindössze három héttel ezelőtt indítottuk el , hogy segítsük felhasználóinkat a Wolfram nyelv integrálásában nagyméretű szoftverprojektekbe. Ma elindítjuk , hogy koordinált platformot nyújtsunk a Wolfram nyelv kiterjesztésére készült funkciók számára, és megnyitjuk a funkciók repositoryját mindenki előtt, aki hozzájárulhat termékünk fejlesztéséhez.
A Wolfram Funkciók Repository egy olyan lehetőség, amely a Wolfram nyelv egyedi sajátosságaiból fakad, nem csupán programozási nyelvként, hanem mint . Hagyományos programozási nyelvekben a jelentős új funkciók hozzáadása általában teljesen új könyvtárak létrehozását igényli, amelyek együttműködhetnek vagy nem működhetnek. Azonban a Wolfram nyelvben , hogy a funkcionalitás jelentős bővítése lehetséges új funkciók hozzáadásával, amelyek azonnal integrálódnak a nyelv egész struktúrájába.
Például a Wolfram funkciók repositoryjában már most 26 tematikus kategóriába strukturálva:

Hasonlóan több mint , amelyek beépítettek a Wolfram nyelvbe, minden funkciónak van egy dokumentációs oldala részletes leírással és példákkal:

A dokumentációs oldalra való átálláshoz másolja a fent említett objektumot (funkcionális BLOB), illessze be a bemeneti mezőbe, majd futtassa a funkciót – ez már be van építve a Wolfram nyelvbe és alapértelmezés szerint támogatott, kezdve :

Itt meg kell jegyezni, hogy a feldolgozás során Például nem kell beállítania a „képkezelő könyvtárat” – mivel a Wolfram nyelvben már implementáltunk egy következetes és gondosan algoritmizált megoldást , amelyeket azonnal különböző grafikai funkciókkal feldolgozhatunk a nyelvben:

Remélem, hogy a támogatásával , amely az utóbbi néhány évtizedben folyamatosan nő és bővül (a Wolfram Nyelv alapjain). A Wolfram funkciók gyűjteménye a közeljövőben jelentős mértékben kibővíti a nyelvben elérhető funkciókat, amelyek potenciálisan figyelemre méltóan specializáltak a tudomány és technika különböző területein. Így lehetőség nyílik a nyelv tartalmának (beépített funkciói) és , amelyek a nyelv alapjain valósulnak meg. (Itt meg kell jegyezni, hogy a Wolfram Nyelv már több mint ).
A gyűjtemény funkcióin belül lehetnek kisebb vagy akár elég nagy kódfragments részek, amelyeket Wolfram Nyelven írtak. Például ezek lehetnek hívások . Ennek a megközelítésnek az egyedülálló jellemzője, hogy amikor a felhasználói szintű funkciókra vált, nem fognak felmerülni a nem összhangok, mivel ez a megközelítés a Wolfram Nyelv koherens struktúrájára épül – és minden funkció automatikusan helyesen fog működni – éppen úgy, ahogy kell.
A Wolfram funkciók gyűjteményének felülete és programstruktúrája úgy van beállítva, hogy bárki hozzájárulhasson a közös munkához a lehető legegyszerűbb és kényelmesebb módon – lényegében csak . A beépített automatikus funkciók lehetővé teszik az újonnan hozzáadott funkciók ellenőrzését a gyűjteménybe való garantált integrálás céljából. Cégünk arra épít, hogy széles felhasználói kör tudja integrálni funkcióit a nyelvbe, nem pedig bonyolult új funkciókra – és bár itt van egy ellenőrzési folyamat, nem ragaszkodunk valami olyanhoz, mint a vagy szigorú követelmények az új felhasználói funkciók teljességére és megbízhatóságára, ellentétben a nyelv magjában beépített funkciók alaposabb ellenőrzésével, amelyeket alkalmazunk.
Ebben a megközelítésben számos kompromisszum és részlet található, de a célunk az, hogy optimalizáljuk a Wolfram funkciók tárházát a felhasználók kényelme érdekében, valamint hogy az új felhasználói funkciók kézzelfogható hozzájárulást nyújtsanak a nyelv fejlődéséhez. Ahogy növekszünk, nem kételkedem abban, hogy új módszereket kell majd kidolgoznunk a tárházba integrált funkciók kezelésére és ellenőrzésére, és ez nem utolsósorban a sok funkció rendezésének és a felhasználók által szükségesek keresésének érdekében történik. Azonban megnyugtató, hogy az általunk választott út jó kezdet. több funkciót adtam hozzá az eredeti adatbázishoz. Számos közülük azon a kódon alapul, amelyet személyesen hosszú ideig fejlesztettem. Csak néhány percet töltöttem el azzal, hogy átnevessem őket a tárháznak. Most, hogy a tárházban vannak, végre azonnal és bármikor felhasználhatom ezeket a funkciókat szükség szerint, anélkül, hogy fájlokat kellene keresnem, csomagokat kellene betöltenem stb.
A hatékonyság növelése a költségek csökkentésével
Már az internet megjelenése előtt is voltak módszerek a Wolfram Language kód megosztására (az első nagy központosított projektünk a , amelyet a Mathematica számára hoztak létre 1991-ben CD-ROM alapon stb.). Kétségtelen, hogy a Wolfram funkciók tárháza alapú megvalósításra javasolt megközelítés sokkal erősebb és megbízhatóbb eszköz a fent említett feladatok végrehajtására.
Több mint 30 éve cégünk fáradhatatlanul dolgozik a Wolfram nyelv struktúrájának integritásának fenntartásán, és ez nagyon fontos ahhoz, hogy a Wolfram nyelv ne csak programozási nyelv legyen, hanem . Így tehát a Wolfram funkciók tárházának megvalósítási megközelítése egy egységes megközelítés alkalmazása a programozás és az új funkciók fejlesztése terén, amelyek folyamatosan hozzáadódnak és beilleszkednek a nyelv kereteibe, lehetővé téve fejlődését és közös evolúcióját.
A funkciók megvalósításának struktúrájában különböző számítási folyamatok zajlanak. Fontos megjegyezni, hogy a felhasználó számára a funkciónak világos és egységes megjelenéssel, valamint jól olvashatósággal kell rendelkeznie. Ebben a kontextusban a Wolfram Language beépített funkciói több mint 6000 egymást követő példát kínálnak arra, hogy miként kell jól programozni a funkciókat (ez a mi , amelyek tartalmazzák ). Ez a megközelítés végül lehetővé teszi, hogy a Wolfram funkciók tárhelye jól működjön, hiszen a Wolfram Language szerkezeti jellege, a benne már beépített, számos kiegészítő és változatos könyvtárral. , vagy , valamint geográfiai adatokat
vagy másokat – a nyelv már rendelkezik a megfelelő szimbolikus reprezentációval, így a funkciója azonnal kompatibilissé válik a nyelv más funkcióival. A Wolfram Demonstrációk projekt Wolfram adatbázisban a Wolfram neurális hálózatainak tárolója NetModel funkción keresztül a Wolfram Language nyelvben.
Minden fent említett példa alapvető sajátossággal rendelkezik – a projektben gyűjtött objektumok és funkciók nagyon magas szintű struktúrázottsággal és folyamatok elosztásával bírnak. Természetesen a struktúra részletezése, ami bemutatót vagy neurális hálót, vagy valami mást jelent, jelentősen eltérhet, de a bármelyik aktuális adattár alapvető szerkezete mindig változatlan marad. Mi a véleménye, kedves felhasználó, egy olyan adattár létrehozásáról, amely kiterjesztéseket ad a Wolfram nyelvhez? A Wolfram nyelvet rendkívül rugalmasra tervezték, így bármilyen módon kiterjeszthető és átalakítható. Ez a tény rendkívül fontos a Wolfram nyelven való gyors és különféle nagyszabású programprojektek létrehozásához. Meg kell jegyezni, hogy a nyelv rugalmasságának növekedésével elkerülhetetlenül nő a nyelven valósított projektek költsége is. Ennek oka, hogy minél többet használ egy felhasználó egy ilyen nyelvet, annál több dedikált funkcionalitást kap, de nem szabad elfelejteni, hogy ez a megközelítés negatív oldalakat is hordozhat, tekintettel a programmodulok következetes koherenciájának biztosításának lehetetlenségére.
A hagyományos programozási nyelvekben elterjedt probléma a könyvtárakkal kapcsolatos – ha például egy könyvtárat használ, akkor a kód helyesen működik, de ha megpróbál több könyvtárat használni, nincs garancia arra, hogy szabályszerűen együttműködjenek. Továbbá a hagyományos programozási nyelvekben – a teljes értékű számítási nyelvvel ellentétben – hiányzik a lehetőség a beépített, koherens reprezentációk garantált ellenőrzésére, bármilyen funkció vagy adattípus esetében, kivéve az alapvető struktúráikat. De a probléma valójában még nagyobb, mint amilyennek látszik: ha valaki nagyszabású funkcionális vertikát épít, akkor a Wolfram nyelvbe fektetett központosított programozási projekt óriási költségei nélkül lehetetlen elérni a koherenciát. Ezért fontos, hogy minden programmodul mindig helyesen működjön együtt.
Tehát a Wolfram funkciótár ötlete az, hogy elkerüljük a fent említett problémát — egyszerűen kiterjesztve a nyelvet viszonylag kis méretű programkód-szeletek hozzáadásával különálló funkciók formájában, amelyek kifejlesztése összehangolt modulokként sokkal könnyebb feladat. Van azonban olyan programozási sajátosság, amelyet nem lehet könnyen kezelni külön funkciókkal (és cégünk a közeljövőben egy optimalizált szoftveralgoritmust kíván kiadni, hogy segítsen nagyméretű szoftvercsomagok megvalósításában). A Wolfram Language nyelvbe beépített funkciók alapján sok programozási lehetőség létezik, amelyeket külön funkciókon alapulóan valósítottak meg. Az ötlet itt az, hogy viszonylag kis programozási erőfeszítésekkel számos új és rendkívül hasznos funkciót lehessen létrehozni, amelyek biztosítják a projekt megfelelő konzisztenciáját, miközben azok jól harmonizálnak egymással, és ezen kívül könnyen és széles körben használhatók a nyelvben a jövőben.
Ez a megközelítés bizonyára egy kompromisszum. Amennyiben nagyobb méretű csomag megvalósítása történik, elképzelhető egy teljesen új funkcionális világ, amely rendkívül erős és hasznos lesz. Ha szükség van új funkcionális lehetőségekre, amelyek illeszkednek minden másba, de nem kívánja óriási erőfeszítéseket tenni a projekt fejlesztése érdekében, sajnos ez a projekt méretének csökkenéséhez vezethet. A Wolfram funkciótár ötlete az, hogy a projekt meghatározó részét funkcionálissá tegye; ez a megközelítés lehetővé teszi egy erőteljes funkció hozzáadását, miközben leegyszerűsíti a programozási projekt jó konzisztenciájának fenntartását.
Segítség a felhasználói funkciók hozzáadásához a funkciótárhoz
Cégünk szakemberei keményen dolgoztak azon, hogy a Wolfram funkciótárba való hozzájárulás a felhasználók számára elég egyszerű legyen. Az asztalon (már a ), akkor egyszerűen lépkedhet a főmenü fülein: Fájl > Új > RepositoryItem > Function Repository Item, és megkaphatja az „” (programozottan a munkakörnyezeten belül. Használhatja a hasonló funkciót is — ):

Két alapvető lépést kell végrehajtania: először is ténylegesen meg kell írnia a funkciója kódját, és másodszor, dokumentálni kell, hogyan kell működnie a funkciónak.
Kattintson a fenti „Minta megnyitása” gombra, hogy megnézze, mit kell tennie:

Valójában egy olyan beépített funkcióhoz hasonlót próbál létrehozni a Wolfram Language nyelvben. Kivéve, hogy ez valami sokkal konkrétabbat tehet, mint a beépített funkció. Ezzel együtt az elvárások a teljessége és megbízhatósága tekintetében sokkal alacsonyabbak lesznek.
Nevezzen el egy nevet a funkciójának, amely megfelel a Wolfram Language funkcióinak elnevezési elveinek. Ezen kívül dokumentációt kell kidolgoznia a funkciójához, hasonlóan a beépített funkciókhoz. Erről később részletesebben beszélek. Jelenleg csak figyeljen arra, hogy a definíciós jegyzetfájl tetején található gombsoron van egy , amely elmagyarázza, mit kell tenni, és a „Eszközök” gomb, amely biztosítja a dokumentációjának formázásához szükséges eszközkészletet.
Amikor megbizonyosodott arról, hogy minden megfelelően ki van töltve és készen áll, kattintson a „Check” („Ellenőriz”) gombra. Teljesen normális, hogy nem boldogult a részletekkel. Ezért a „Check” funkció automatikusan végrehajtódik, és sok stílus- és következetességi ellenőrzést végez. Gyakran azonnal javasolja, hogy erősítse meg és fogadja el a javításokat (például: „Ennek a sorozatnak kettősponttal kell végződnie”, és javasolja, hogy adjon meg kettőspontot). Néha kérni fogja, hogy adjon hozzá vagy módosítson valamit önállóan. Folyamatosan új lehetőségeket fogunk hozzáadni a „Check” gomb automatizált funkcionalitásához, de alapvetően az a célja, hogy garantálja: minden, amit a funkciók tárolójába küld, már a lehető legtöbb stílusjavaslatnak megfelelően van.

Tehát, miután elindította a „Check” gombot, használhatja a „Preview” (Előnézet) funkciót. A „Preview” létrehoz egy oldal előnézetet a dokumentációról, amelyet a funkciójához határozott meg. Előnézetet készíthet egy fájlhoz is, amelyet a számítógépén hozott létre, vagy egy fájlhoz, amely a felhő tárolójában található. Ha valamilyen okból nem tetszik, amit az előnézetben lát, egyszerűen térjen vissza, és végezze el a szükséges módosításokat, majd nyomja meg újra az Előnézet gombot.
Most kész van arra, hogy feltöltse a funkcióját a tárolóba. A Telepítés gomb négy lehetőséget kínál Önnek:

Ez a lépés fontos, mivel elküldheti a funkcióját a Wolfram funkciók tárolójába, hogy bárki számára elérhető legyen. Emellett funkcióját korlátozott felhasználók számára is elérhetővé teheti. Például létrehozhat egy helyben elérhető funkciót a számítógépén, amely csak akkor érhető el, amikor ezt a konkrét számítógépet használja. Vagy a , hogy elérhető legyen, amikor csatlakozik a felhőhöz. A funkcióját nyilvánosan is elérhetővé teheti a felhőfiókján keresztül. Ez esetben nem lesz elérhető a Wolfram funkciók központi tárolójában, de egy URL-t adhat valakinek, amely lehetővé teszi, hogy hozzáférjen a funkciójához a fiókjából. (A jövőben központi tárolókat is támogatunk a vállalatunk szintjén).
Tehát, tegyük fel, át szeretné adni a funkcióját a Wolfram funkciók tudásbázisába. Ehhez a tárolóba kell nyomnia az „Elküldés” gombot. Mi történik ilyenkor? Az Ön kérelme azonnal sorba kerül a különleges kurátor csapatunk átnézésére és jóváhagyására.
Ahogy a kérelme a jóváhagyási folyamaton keresztül halad (ami általában néhány napot vesz igénybe), információkat fog kapni a kérelem állapotáról, valamint esetleg javaslatokat a további hasznosítására. De amint a funkciót jóváhagyják, az azonnal megjelenik a Wolfram funkciók tárházában és elérhetővé válik bárki számára. (És ez meg fog jelenni a stb.)
Mi legyen a tárházban?
Érdemes megjegyezni, hogy cégünknél nagyon magas a teljeskörűségre, megbízhatóságra és általános minőségre vonatkozó szabvány. A Wolfram nyelvében az elmúlt 30 évben már 6000+ funkciót illesztettünk be, amelyek mind megfelelnek a fent említett követelményeknek. A Wolfram funkciók tárházának célja, hogy kihasználja azokat a struktúrákat és funkcionális lehetőségeket, amelyek már léteznek a Wolfram Language nyelvben, hogy lehetővé tegye sokkal könnyebb funkciók (vagyis nagyobb teljesítményű funkciók) hozzáadását.
Természetesen a Wolfram funkciók tárházában lévő funkcióknak meg kell felelniük a Wolfram Language fejlesztési elveinek — hogy megfelelően tudjanak interakcióba lépni más funkciókkal és a felhasználói elvárásokkal, hogy a funkciók megfelelően működjenek. Ugyanakkor a funkcióknak nem kell azonos szintű teljeskörűséggel vagy megbízhatósággal rendelkezniük.
A Wolfram nyelv beépített funkcióinál azon dolgozunk, hogy a programozási funkciók a lehető legáltalánosabbak legyenek. Ugyanakkor a Wolfram funkciók tárházában semmi rossz nincs abban, ha egy nagyon konkrét, de hasznos esetet kezelő funkció kerül be. Például a funkció egy adott formátumú fájlokat fogadhat, és e-mailt készíthet egy bizonyos módon. csak adott színekkel és címkézéssel készít diagramokat stb.
Egy másik szempont a beépített funkciókkal kapcsolatban, hogy cégünk mindent megtesz a szokatlan esetek kezelésére, a helytelen bemenetek megfelelő feldolgozására, és így tovább. A funkciók tárolójában teljesen normális, hogy létezik egy speciális funkció, amely a feladat megoldásának fő eseteit kezeli, miközben figyelmen kívül hagyja a többit.
Nyilvánvaló, hogy jobb, ha vannak olyan funkciók, amelyek többet tudnak és jobban teljesítenek, de a funkciók tárolójának optimalizálásának — a Wolfram nyelv beépített funkcióival ellentétben — több funkciót kell tartalmaznia, amelyek sok funkcióval kapcsolódnak, ahelyett, hogy minden egyes konkrét funkció megvalósításának folyamatába mélyednénk.
Most nézzük meg a funkciók tesztelésének példáját a tárolóban. Az ilyen funkciók következetességével kapcsolatos elvárások természetesen sokkal alacsonyabbak, mint a nyelv beépített funkciói esetében. Ez különösen érvényes, amikor a funkciók külső forrásoktól, például API-któl függenek; fontos, hogy folyamatosan végezzünk következetes teszteket, ami automatikusan megtörténik a tesztelési algoritmusokon belül. A nb fájlban kifejezetten megadhatja a definíciókat (a „További információ” szakaszban), és annyi tesztet határozhat meg, amennyit szükségesnek tart. , ahányat csak szükségesnek tart. Ezen kívül a rendszer folyamatosan megpróbálja a dokumentációban megadott példákat tesztelési folyamattá alakítani (néha ez meglehetősen erőforrás-igényes lehet, például egy olyan funkció esetében, amelynek eredménye véletlenszámoktól vagy napszaktól függ).
Ennek eredményeként a funkciók tárolójában számos megvalósítási nehézség merül fel. Egyesek egyszerűen egy sor kód, míg mások akár több ezer vagy tucat ezer sorból állnak, valószínűleg sok segédfunkció felhasználásával. Mikor érdemes egy funkciót hozzáadni, amelynek meghatározásához nagyon kevés kód szükséges? Elvileg, ha a funkcióhoz van , amelyet a felhasználók készséggel megértenének, ha ezt a kód részében látnák, akkor azt már hozzá lehet adni. Ellenkező esetben valószínűleg jobb, ha újra megírja a kódot a programjához minden alkalommal, amikor szüksége van rá.
A funkciók tárának alapvető célja (ahogy a neve is mutatja) új funkciók bevezetése a nyelvi funkcionalitásba. Ha új adatokat vagy , használja . De mi a teendő, ha új típusú objektumokat szeretne bevezetni a számításaihoz?
Valójában két út létezik. Lehet, hogy új típusú objektumot szeretne létrehozni, amit új funkciókkal használhat a funkciók tára keretében. Ekkor mindig egyszerűen megadhatja a szimbolikus reprezentációját és használhatja azt a funkciók beírásakor vagy kiírásakor a funkciók tárában.
De mi a teendő, ha szeretné bemutatni az objektumot, majd meghatározni azokat a meglévő funkciókat a Wolfram nyelvben, amelyek együtt kell működjenek vele? Erre a Wolfram nyelv mindig is biztosított egy egyszerű mechanizmust, amit . Néhány korlátozással (különösen azokra a funkciókra vonatkozóan, amelyek ), a funkciók tárának lehetőségei lehetővé teszik, hogy egyszerűen bemutassa a funkciót és meghatározza számára az értékeket. (A várható konzisztencia javítása érdekében egy új, mindenütt integrált fontos konstrukció létrehozásakor a Wolfram nyelvben – ez általában nagyon fontos eljárás, amelyet nem lehet csak a projekt költségeinek emelésével elérni, és ez az, amit a cégünk a nyelv hosszú távú fejlődésének keretében végez, ez a feladat nem célja a tár fejlesztésének.)
Tehát mi lehet a funkciók kódjában a funkciók tárában? , természetesen (legalábbis, ha nem jelent a és a program működőképessége szempontjából, mint számítási környezet) éppúgy, mint bármely funkció a funkciók tárából. Ezen kívül más működési lehetőségek is léteznek: a funkció a funkciók tárában hívhat API-t, akár a , vagy . Természetesen, vannak bizonyos kockázatok ezzel kapcsolatban. Mivel nincs garancia arra, hogy az API nem változik, és a funkció a funkciók tárolójában e közben leáll. Az ilyen problémák azonosítására megjegyzés található a dokumentáció oldalán (a „Követelmények” szakaszban) bármely funkcióra, amely nemcsak a Wolfram Language beépített funkcióira támaszkodik. (Természetesen, amikor valós adatokkal foglalkozunk, még ezekkel a funkciókkal is lehetnek problémák – mivel a valós adatok a világról folyamatosan változnak, és néha még a definícióik és struktúrájuk is megváltozik.)
A Wolfram funkciók tárolójához szükséges teljes kódot Wolfram nyelven kell írni? Egyértelműen, a külső API-n belüli kódnak nem kell Wolfram nyelven íródnia, ez valójában nem is Wolfram nyelvű kód. Ha egy külső nyelven vagy könyvtárban talál egy funkciót, létrehozhat egy burkot, amely lehetővé teszi annak használatát a Wolfram funkciók tárolójában. (Általában ehhez a beépített funkciókat kell használni vagy a Wolfram nyelv kódjában.)
Miért érdemes ezt megtenni? Lényegében lehetővé teszi a Wolfram Language integrált rendszerének és egyesített szoftverfunkcióinak teljes körű használatát. Ha alapvető megvalósítást kap egy külső könyvtárból vagy nyelvből, akkor a Wolfram Language gazdag szimbolikus struktúráját használhatja a felhasználók számára kedvező, magas szintű funkció létrehozásához, amely lehetővé teszi, hogy a már megvalósított funkciókat viszonylag könnyen használják. Legalábbis ezt kellene megvalósítani egy ideális világban, ahol minden szükséges összetevő létezik a könyvtárak betöltéséhez, és stb., ebben az esetben a Wolfram Language segítségével automatikusan megoldódnak. (Meg kell jegyezni, hogy a gyakorlatban problémák merülhetnek fel egy adott számítógépes rendszeren, és a felhőben további biztonsági problémák merülhetnek fel).
Egyébként, amikor először elemzed a szokásos külső könyvtárakat, gyakran túl bonyolultnak tűnnek ahhoz, hogy néhány funkcióval le lehessen fedni őket, de sok esetben a bonyolultság nagy része a könyvtárhoz szükséges infrastruktúra és az összes támogató funkció létrehozásából adódik. Azonban a Wolfram Language használatakor az infrastruktúra általában már be van építve a csomagokba, ezért nincs szükség a támogató funkciók részletes kifejtésére; csak néhány „legfelső” alkalmazásorientált funkciót kell létrehozni a könyvtárban.
A tudásbázis „ökológiája”
Ha írtál olyan funkciókat, amelyeket folyamatosan használsz, akkor küldd el őket a Wolfram funkciók tárába! Még ha ebből végül nem is lesz valami nagyobb (a nyelv fejlődése), akkor is sokkal kényelmesebb lesz, ha a funkciókat a személyes használatra fordítod. Logikus feltételezni, hogy ha a funkciókat folyamatosan használod, más felhasználók is hasznosnak találják őket.
Természetesen előfordulhat, hogy olyan helyzetbe kerülsz, amikor nem tudod — vagy nem akarod — megosztani a funkcióidat, vagy ha hozzáférésed van privát információs forrásokhoz. Még ilyen esetekben is egyszerűen megvalósíthatod a funkciókat a saját felhőfiókodban, hozzáférési jogokat. (Ha a szervezetednek van , hamarosan létrehozhat saját privát funkciótárát, amelyet a szervezetedből lehet adminisztrálni, és beállíthatod, hogy más felhasználók láthassák-e a nézeteket vagy sem.)
A Wolfram funkciótárba küldött funkcióknak nem feltétlenül kell tökéletesnek lenniük; csak hasznosnak kell lenniük. Ez egy kicsit hasonlít az Unix klasszikus dokumentációjának „Hiba” részlegéhez - az „Értelmezések” szakaszban van egy „Írói megjegyzések” rész, ahol leírhatod az általad már tudott funkciók korlátait, problémáit stb. Ezen kívül, amikor elküldöd a funkciódat a tárba, megjegyzéseket is hozzáadhatsz a beküldéshez, amelyeket egy dedikált kurátori csapat olvas el.
A funkció közzététele után az oldala mindig tartalmaz két linket az alján: „és a "Ha egy megjegyzést csatol (például hibajelentést), bejelölheti, hogy szeretné, ha az üzenete és a kapcsolattartási adatai átkerülnének a funkció szerzőjének.
Néha szükség van arra, hogy egyszerűen használjuk a Wolfram funkciók könyvtárából származó funkciókat, például a beépített funkciókat, anélkül, hogy betekintést nyernénk a kódjukba. Ha azonban szeretne 'belesni', mindig van egy 'Jegyzetfüzet' gomb a tetején. Kattintson rá, és megkapja az eredeti definíciós jegyzetfüzet saját másolatát, amelyet a funkciók könyvtárába küldtek. Néha csak példaként is használhatja a saját igényeihez. Ezen kívül kifejlesztheti a funkció saját módosítását is. Lehet, hogy szeretné, ha ezeket a felfedezett funkciókat a számítógépére, vagy a felhő tárhelyéből álló fiókjába helyezné, esetleg szeretné őket eljuttatni a funkciók tudásbázisába, lehetőleg a feljavított, bővített verzióként.
A jövőben Git-stílusú elágazásokat tervezünk a funkciók könyvtáraiban, de most arra törekszünk, hogy ezt egyszerűsítsük, így mindig csak egy közmegegyezésen alapuló verzió lesz a programnyelvbe beépítve. A legtöbbször (ha a fejlesztők nem mondanak le az általuk kifejlesztett funkciók támogatásáról és válaszolnak a felhasználói üzenetekre) a funkció eredeti szerzője kapja a frissítések ellenőrzését, és küldi el az új verziókat, amelyek aztán ellenőrzés alá kerülnek, és ha a vizsgálatot sikeresen teljesítik, megjelennek a nyelvben.
Vizsgáljuk meg, hogyan működik a kifejlesztett funkciók 'verziómódja'. Jelenleg, amikor egy funkciót használ a funkciók könyvtárából, annak definíciója folyamatosan tárolódik a számítógépén (vagy a felhő alapú fiókjában, ha a felhőt használja). Ha megjelenik egy új verzió, a következő használatkor értesítést kap erről. És ha szeretné frissíteni a funkciót az új verzióra, ezt a parancs segítségével megteheti. (A "Functional BLOB object" actually stores more information about versions, and we plan to make this more accessible to our users in the future.)
A wonderful feature of the Wolfram function repository is that any Wolfram Language program anywhere can use functions from it. When a program appears in a notebook, it is often convenient to format repository functions as easily readable "functional binary objects" (possibly with the corresponding set of versions).
You can always refer to any function in the function repository using the text . This is very convenient if you are writing code or scripts directly for the Wolfram Engine, for example, with (it should be particularly noted that the function repository is fully compatible with ).
Hogyan működik ez?
Within functions in the Wolfram repository, this is possible using exactly the same database as in (data storage, , etc.), just like all other Wolfram system resources, is ultimately based on the function .
Let's consider :

Inside you can see some information using the function :

How does resource function setup work? The simplest case is purely local. Here’s an example that takes a function (in this case just a clean function) and defines it as a resource function for the current session in the program:

Once you make the definition, you can use the resource function:

Note that in this BLOB object, the function has a black icon
. This means that the BLOB function refers to the resource function in memory defined for the current session. For a resource function that is permanently stored on your computer or in a cloud account, there is a gray icon
. And for the official resource function in the Wolfram function repository, there is an orange icon
.
So, what happens when you use the "Deployment" menu in the definition notebook? First, it takes all the definitions in the notebook and creates symbolic from them. ). (Ha text alapú IDE-t vagy programot használ, akkor kifejezetten létrehozhatja )
A funkció helyi telepítése a tárolóból a számítógépén a parancs segítségével történik az erőforrás objektum számára, hogy az mint a fájlrendszerében. A felhő alapú fiókba való telepítés a következő parancs segítségével történik az erőforrás objektum számára, míg a nyilvános felhőbe való telepítés — . Minden esetben szintén használatos a funkciós erőforrás nevének regisztrálására, így működni fog.
Ha megnyomja a Submit gombot a Function Repository számára, ami alatta történik meghívásra kerül az erőforrás objektumra. (Ha text alapú bevitel interfészt használ, közvetlenül is meghívhatja) .
Alapértelmezés szerint a beküldés a Wolfram ID-jához kapcsolódó név alatt történik. De ha csoport vagy szervezet nevében küld be kérelmet, akkor és ezt használhatja a névként az Ön nézeteivel való interakcióhoz.
Miután bármely funkcióját beküldte a funkció tudásbázisába, az ellenőrzésre váró sorba kerül. Ha visszajelzést kap, általában szöveges fájl formájában érkezik, amelyhez további "megjegyzéscellák" lettek hozzáadva. Mindig ellenőrizheti a kérelme állapotát a . De miután a funkciója jóváhagyásra került, értesítést kap (e-mailben), és a funkciója felkerül a Wolfram funkciók tárolójába.
Néhány finomság a működésben
Első pillantásra úgy tűnhet, hogy egyszerűen csak el lehet venni a definíciós jegyzetet, és szó szerint elhelyezni a funkciók tárolójában, azonban valójában rengeteg finomság van — és ezek kezelése meglehetősen bonyolult meta-programozást igényel, amely a funkció definiáló kódot és magát a definíciós jegyzetet is szimbolikusan feldolgozza. Ennek nagy része a háttérben történik, de ennek bizonyos következményei lehetnek, amelyeket érdemes megérteni, ha hozzájárulni kíván a funkciók tudásbázisához.
Az első közvetlen finomság: Amikor kitöltöd a „Definíciós Naplót”, egyszerűen hivatkozhatsz a funkciód nevére szerte, olyan névvel, mint MyFunction, ami egy szokványos névnek tűnik a Wolfram Language-ben, de a funkciók tároló dokumentációjához ez így módosul – ez az, amit a felhasználók ténylegesen használni fognak a funkcióval való munka során.
A második finomság: amikor erőforrás-funkciót hozol létre a Definíciós Naplóból, minden, a funkció meghatározásába bevont függőségnek rögzítve kell lennie és nyíltan bele kell tartoznia. Azonban annak érdekében, hogy a definíciók modulárisak maradjanak, mindent egy egyedi kell helyezni. (Nyilvánvaló, hogy , a funkciók tárolójában találhatók.)
Általában soha nem fogsz észlelni nyomokat a kód végrehajtásáról, amely ezt a névteret állítja be. De ha valami okból egy nem teljesített szimbólumot hívsz meg a funkciódban, akkor meg fogod látni, hogy ez a szimbólum a funkció belső kontextusában található. Azonban, amikor a Definíciós Napló feldolgozása történik, legalább a funkcióhoz tartozó szimbólum funkcionális BLOB-ként, nem a belső kontextusban található nyers szimbólumként.
A funkciók tárolója új funkciók definiálására szolgál. Ezeknek a funkcióknak lehetnek opcióik. Gyakran ezek az opciók (például vagy ) beépített funkciók számára is használhatók, és olyanok számára is, amelyekhez már léteznek beépített szimbólumok. De néha új funkcióknak új opciókra is szükségük lehet. A moduláris megőrzése érdekében ezeknek az opcióknak szimbólumként kell lenniük, amelyeket egy egyedi belső kontextusban határoztak meg (vagy valami hasonló az erőforrás-funkciók egészének, tehát magukért). Az egyszerűség kedvéért a funkciók tárolója lehetővé teszi, hogy új opciókat a definíciókban karakterláncok formájában állítsunk be. És a felhasználó kényelme érdekében ezek a definíciók (feltéve, hogy használták és ) szintén úgy vannak kezelve, hogy a funkciók használata során az opciók ne csak karakterláncként, hanem globális szimbólumokként is megadhatók azonos nevekkel.
A legtöbb funkció egyszerűen azt csinálja, amit mindig is tennie kellett, amikor hívják őket, de néhány funkciónak inicializálásra van szüksége, mielőtt egy adott munkamenetben működhet — és ezt a problémát a „Definíció” szakaszban található „Inicializálás” rész kezeli.
A tárolóból származó funkciók más, már a tárolóban lévő funkciókat is felhasználhatnak, hogy beállítsák a funkciók definiálását, amelyek két (vagy több) kölcsönösen hivatkozó funkciót tartalmaznak, ezeket a munkamenet során ki kell bővíteni ahhoz, hogy hivatkozni tudjon rájuk, mint , így hozhat létre azokból a funkciókból a szükséges kombinációkat (példák nem világos) és új funkciót adhat hozzá a tárolóhoz a már korábban elhelyezett alapjain.
Fejlődési kilátások. Mi fog történni, amikor a tároló valóban nagy lesz?
Ma csak a Wolfram funkciók tárolóját indítjuk el, de idővel azt várjuk, hogy a mértéke és funkcionalitása drasztikusan nőhet, és a növekedés során különböző problémák merülhetnek fel, amelyeket már előre látunk.
Az első probléma a funkciók neveivel és azok egyediségével kapcsolatos. A funkciók tárolója úgy van megtervezve, hogy akárcsak a Wolfram Language beépített funkcióinál, bármely adott funkcióra hivatkozni lehessen, egyszerűen a nevének megadásával. De ez elkerülhetetlenül azt jelenti, hogy a funkciók neveinek globálisan egyedinek kell lenniük a tárolóban, így például a tárolóban csak egy lehet .
Első pillantásra ez nagy problémának tűnhet, de fontos megérteni, hogy ez alapvetően ugyanaz a probléma, mint az internetes domainek vagy a közösségi média címkék esetében. Az a helyzet, hogy a rendszerben egyszerűen szükség van egy regisztrátorra – és ez az egyik szerep, amit vállalatunk ellát majd a Wolfram funkciók tudásbázisában. (A tároló privát verzióival a regisztrátorok lehetnek az adminisztrátorok.) Természetesen egy internetes domaint lehet regisztrálni anélkül, hogy bármi lenne rajta, de a funkciók tárolójában egy funkció neve csak akkor regisztrálható, ha valós definícióval rendelkezik.
A Wolfram funkciók tudásbázisának kezelésében betöltött szerepünk része, hogy biztosítsuk, hogy a kiválasztott funkciónév logikus legyen a funkció definíciója alapján, és hogy megfeleljen a Wolfram Language névadási konvencióinak. Több mint 30 éves tapasztalattal rendelkezünk a Wolfram Language beépített funkcióinak elnevezésében, és kurátori csapatunk ezt a tapasztalatot a funkciók tárába is átülteti. Természetesen mindig vannak kivételek. Például egy funkcióhoz rövid név megadása talán előnyösebbnek tűnhet, de jobb védekezni egy hosszabb, konkrétabb névvel, mert így kevesebb az esély arra, hogy valaki a jövőben hasonló funkciónévvel akarjon előállni.
(Itt érdemes megjegyezni, hogy bármilyen tag hozzáadása a funkciók egyértelműsítése érdekében nem fogja elérni a várt hatást. Mivel ha nem ragaszkodunk ahhoz, hogy mindig címke legyen megadva, szükség lesz egy alapértelmezett címke meghatározására bármely adott funkcióhoz, valamint a szerzői címkék kiemelésére, ami újból globális koordinációt igényel.)
Ahogy a Wolfram funkciók tudásbázisa nő, egy biztosan felmerülő probléma a funkciók felfedezhetősége, ehhez a rendszerben van (és a definíciós fájlok kulcsszavakat stb. tartalmazhatnak). A Wolfram Language beépített funkciói számára a dokumentációban mindenféle keresztlink található, amelyek segítenek a funkciók "reklámozásában". A funkciók gyűjteménye hivatkozhat a beépített funkciókra. De mi van fordítva? Ehhez különféle sémákkal fogunk kísérletezni, hogy a gyűjtemény funkcióit a beépített funkciók dokumentációs oldalain mutassuk be.
A Wolfram Language beépített funkciói számára létezik egy úgynevezett felfedezhetőségi szint, amelyet biztosít , amelyek rendezett funkciólistákat biztosítanak a konkrét területekhez. Mindig nehéz megfelelően egyensúlyozni a referenciaoldalakat, és ahogy a Wolfram nyelv növekszik, a referenciaoldalakat gyakran teljesen újra kell szervezni. Egyszerűen el lehet helyezni a funkciókat a repozitóriumban széles kategóriákba, és még ezeket a kategóriákat sorozatosan szét is lehet bontani, de sokkal értékesebb, ha a Wolfram nyelvének referenciaoldalai jól szervezettek. Jelenleg nem világos, hogyan lehetne a legjobban létrehozni őket az összes funkció tudásbázisához. Például a funkciók repozitóriumában bárki létrehozhat egy weboldalt, amely tartalmazza a repozitórium «választásait»:

A Wolfram funkciók repozitóriuma állandó tárolóként van beállítva, ahol bármely funkció mindig is működni fog. Természetesen új funkcióverziók is megjelenhetnek, és arra számítunk, hogy egyes funkciók idővel elavulttá válhatnak. A funkciók működni fognak, ha alkalmazásokban használják őket, de a dokumentációs oldalaik új, fejlettebb funkciókra fognak hivatkozni.
A Wolfram funkciók repozitóriuma az új funkciók gyors elérésére és a Wolfram nyelv új felhasználási lehetőségeinek felfedezésére szolgál. Nagy optimizmussal reméljük, hogy a funkciók repozitóriumában feltárt dolgok egy része végül értelmet nyer majd, hogy beépített része legyen a Wolfram Nyelv alapjának. Az elmúlt évtizedben hasonló készlet állt rendelkezésre, . És az egyik tanulság, amelyet ebből a tapasztalatból vontunk le, hogy a Wolfram nyelvbe beépített minden dologra vonatkozó minőségi és konzisztenciabeli standardok eléréséhez sok munka szükséges, ami gyakran nehezebb, mint az ötlet bevezetéséhez szükséges kezdeti erőfeszítések. De még ebben az esetben is a funkció a funkciók tudásbázisában nagyon hasznos koncepcióbizonyítékot nyújthat egy jövőbeli funkcióról, amely végül beépülhet a Wolfram nyelvbe.
A legfontosabb dolog itt az, hogy a funkciók tárházában található funkciók minden felhasználó számára elérhetők azonnal. Lehetséges, hogy a nyelv beépített funkciója sokkal jobb és hatékonyabb, de a funkciók tárháza lehetővé teszi a felhasználók számára, hogy azonnal hozzáférjenek a legújabb funkciókhoz. És ami különösen fontos, ez a koncepció lehetővé teszi mindenkinek, hogy bármilyen új funkciót hozzáadjon.
Korábban a Wolfram nyelv történetében ez az elképzelés nem működött volna olyan jól, mint most, de ezen a ponton már annyi erőfeszítést fektettek a nyelvbe, és annyira mély megértés alakult ki a nyelv tervezési elveiről, hogy most már nagyon valószínű, hogy egy nagy felhasználói közösség funkciókat adhat hozzá, amelyek fenntartják a projekt koherenciáját, és hasznossá teszik ezeket egy széles felhasználói kör számára.
A Wolfram Language felhasználói közösségében hihetetlen tehetség szelleme (!) van. (Természetesen ez a közösség sok vezető kutató és fejlesztő szakembert is magában foglal különböző területeken.) Remélem, hogy a Wolfram funkciók tárháza hatékony platformot fog biztosítani e tehetség szellemének feltárására és terjesztésére. Csak együtt tudunk létrehozni valami olyat, ami jelentősen kiterjeszti azt a területet, amelyre a Wolfram nyelv számítási paradigmája alkalmazható.
Több mint 30 év alatt hosszú utat tettünk meg a Wolfram nyelv terén. Most együtt lépjünk tovább. Különösen arra buzdítom a Wolfram nyelv tisztelt felhasználóit világszerte, hogy használják ezt a funkciókkal rendelkező tárházat, valamint egy új szoftverprojektet, mint a Free Wolfram Engine fejlesztők számára.
Forrás: habr.com
