Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Tere, Habr! Esitan teie tähelepanu Stephen Wolframi postituse tõlkele "Wolframi funktsioonide hoidla: avatud platvormi käivitamine Wolframi keele laiendamiseks".

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Wolframi keele järjepidevuse eeldused

Täna seisame koos programmeerimiskeelega suurte saavutuste lävel Wolframi keel. Vaid kolm nädalat tagasi käivitasime tasuta Wolframi mootor arendajateleaidata meie kasutajatel integreerida Wolfram Language oma suuremahulistesse tarkvaraprojektidesse. Täna alustame Wolframi funktsioonide hoidla, et pakkuda Wolframi keele laiendamiseks loodud funktsioonide jaoks koordineeritud platvormi, samuti avame funktsioonide hoidla kõigile, kes saavad meie tarkvaratoote arendamisele kaasa aidata.

Wolframi funktsioonide hoidla on midagi võimalikuks tänu Wolframi keele ainulaadsele olemusele mitte ainult programmeerimiskeelena, vaid ka keelena. täismahus arvutikeel. Traditsioonilistes programmeerimiskeeltes hõlmab oluliste uute funktsioonide lisamine tavaliselt tervete täiendavate teekide loomist, mis võivad koos kasutamisel töötada või mitte. Küll aga Wolframi keeles nii palju on juba keelde endasse sisse ehitatud, et selle funktsionaalsust on võimalik oluliselt laiendada, lisades lihtsalt uusi funktsioone, mis integreeruvad koheselt kogu keele terviklikku struktuuri.

Näiteks Wolframi funktsioonide hoidla juba sisaldab 532 uut funktsiooni struktureeritud 26 temaatilise kategooriasse:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Samuti rohkem kui 6000 standardfunktsiooni, mis on sisse ehitatud Wolframi keelde, on igal hoidla funktsioonil dokumentatsioonileht nende üksikasjaliku kirjelduse ja töönäidetega:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Lehele jõudmiseks kopeerige ülaltoodud objekt (funktsioon BLOB), kleepige see sisestusreale ja seejärel käivitage funktsioon – see on juba Wolframi keelde sisse ehitatud ja vaikimisi toetatud, alustades versioon 12.0:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Siinkohal tuleb märkida, et töötlemisel Logo QRCode Teil ei ole vaja näiteks seadistada "pilditöötlusteeki" - kuna oleme Wolframi keeles juba juurutanud järjepideva ja hoolikalt algoritmilise viisi pildi töötlemine, mida saab kohe töödelda erinevate graafiliste keelefunktsioonidega:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Loodan, et koos toetusega suurepärane ja andekas kogukond, mis on viimaste aastakümnete jooksul kasvanud ja laienenud (Wolframi keele põhjal). Wolframi funktsioonide hoidla võimaldab lähitulevikus märkimisväärselt laiendada selles keeles saadaolevate (võimalik, et potentsiaalselt oluliste, erinevatele teaduse ja tehnoloogia valdkondadele spetsialiseerunud) funktsioonide valikut. Seega saab võimalikuks kasutada nii keele sisu (selle sisseehitatud funktsioone) kui ka arenduspõhimõtted, mida rakendatakse keele põhjal. (Siinkohal tuleb märkida, et Wolframi keeles on juba rohkem kui 30-aastane arengulugu ja stabiilne kasv).
Hoidlast pärinevad funktsioonid võivad sisaldada väikseid või suuri Wolframi keeles kirjutatud koodilõike. Näiteks võivad need olla kõned välised API-d ja teenused või välised teegid teistes keeltes. Selle lähenemisviisi ainulaadne omadus on see, et kui uurite kasutajataseme funktsioone, ei esine võimalikke vastuolusid, kuna lähenemine on üles ehitatud Wolframi keele ühtsele struktuurile – ja iga funktsioon töötab automaatselt õigesti – täpselt nii nagu mõeldud. ta peaks.
Wolfram Feature Repository kest ja programmeerimisstruktuur on loodud nii, et igaüks saaks oma ühise eesmärgi nimel panustada kõige lihtsamal ja mugavamal viisil – tegelikult lihtsalt täites märkmiku tekstifaili (laiendiga nb) WL. Sisseehitatud automaatsed funktsioonid võimaldavad kontrollida hoidlasse lisatud uusi funktsioone, et tagada nende integreerimine keelde. Meie ettevõte panustab laiale kasutajate ringile, kes saavad oma funktsioonid keelde integreerida, mitte uute funktsioonide suurele keerukusele – ja kuigi on olemas ülevaatusprotsess, ei nõua me midagi sellist. hoolikas disainianalüüs või ranged standardid uute kasutajafunktsioonide täielikkuse ja usaldusväärsuse osas, erinevalt meie kasutatavasse põhikeelde sisseehitatud funktsioonide rangemast testimisest.

Selles lähenemisviisis on palju kompromisse ja üksikasju, kuid meie eesmärk on optimeerida Wolframi funktsioonide hoidlat nii kasutajakogemuse huvides kui ka tagada, et uued kasutajafunktsioonid aitaksid keele arendamisse tähendusrikkalt kaasa. Kasvades ei kahtle ma, et peame leiutama uusi meetodeid hoidlasse sisseehitatud funktsioonide töötlemiseks ja valideerimiseks, eriti suure hulga funktsioonide korraldamiseks ja kasutajatele vajalike leidmiseks. Siiski on julgustav, et meie valitud tee on hea algus. Mina isiklikult lisas mitmeid funktsioone algsesse andmebaasi. Paljud neist põhinevad koodil, mida olen isiklikult juba mõnda aega arendanud. Ja mul kulus vaid paar minutit, et need hoidlasse lükata. Nüüd, kui need on hoidlas, saan lõpuks – kohe ja igal ajal – kasutada neid funktsioone vastavalt vajadusele, ilma et peaksin muretsema failide otsimise, pakettide allalaadimise jms pärast.

Tõhususe suurendamine kulude vähendamisel

Juba enne Internetti oli võimalusi Wolframi keele koodi jagamiseks (meie esimene suurem tsentraliseeritud projekt oli MathSource, mis loodi Mathematica jaoks 1991. aastal CD-ROMi jms põhjal). Loomulikult on Wolframi funktsioonihoidlal põhinev juurutamiseks pakutud lähenemisviis ülaltoodud ülesannete rakendamiseks võimsam ja usaldusväärsem tööriist.

Meie ettevõte on üle 30 aasta usinalt töötanud Wolframi keelestruktuuri terviklikkuse säilitamise nimel ning see on ülioluline tagamaks, et Wolframi keelest ei saaks mitte ainult programmeerimiskeel, vaid ka täisväärtuslik arvutikeel. Ja seega on Wolframi funktsioonihoidla juurutamise lähenemisviisi põhiolemus kasutada ühtset lähenemisviisi programmeerimisel ja uute funktsioonide väljatöötamisel, mis lisatakse järjestikku ja sobituvad keele raamistikku, et see saaks areneda ja koos areneda.

Iga funktsiooni rakendusstruktuuris toimuvad erinevad arvutusprotsessid. Siinkohal tuleb märkida, et on vajalik, et funktsioon oleks kasutaja jaoks selge ja ühtse välimusega ning visuaalselt loetav. Selles kontekstis on Wolframi keele sisseehitatud funktsioonid esitatud enam kui 6000 järjestikuse näitega funktsioonide korrektse programmeerimise kohta (need on meie reaalajas programmeerimisvideodmis sisaldavad sadu tunde standardprogrammide loomiseks). See lähenemisviis muudab Wolframi funktsioonide hoidla lõpuks hästi toimivaks, on Wolframi keele struktuurne olemus koos selle suure hulga täiendavate ja mitmekesiste teekidega, mis on juba keelde sisse ehitatud. Näiteks kui teil on funktsioon, mis töötleb pilte või hõredad massiividVõi molekulaarstruktuurid ning geograafilised andmed või mõned teised - nende järjekindel sümboolne esitus on keeles juba olemas ja tänu sellele muutub sinu funktsioon koheselt ühilduvaks ka teiste keele funktsioonidega.

Tegelikult hästi toimiva hoidla loomine on huvitav metaprogrammeerimise ülesanne. Näiteks ei võimalda programmis sisalduvate piirangute ülemäärane kasutamine saavutada algoritmi nõutavat ühtlust ja universaalsust. Nii nagu ebapiisava arvu funktsionaalsete piirangute korral, ei saa te rakendada piisavalt õiget algoritmi täitmise jada. Mitmed varasemad näited nende lähenemisviiside kompromissi rakendamisest, mida meie ettevõte on rakendanud, töötasid üsna stabiilselt - need on järgmised: Projekti volframi demonstratsioonid, mis käivitati 2007. aastal ja jookseb nüüd võrgus üle 12000 XNUMX kasutajale mõeldud interaktiivse demoga. IN Wolframi andmebaas seal on üle 600 valmis andmebaasi, mida saab kasutada Wolframi keeles ja Wolframi närvivõrgu salvestusruum täieneb pea iga nädal uute närvivõrkudega (praegu on neid juba 118) ja need ühendatakse kohe funktsiooni kaudu NetModel Wolframi keeles.

Kõigil ülaltoodud näidetel on üks fundamentaalne tunnusjoon – projektis kogutud objektid ja funktsioonid on väga kõrge protsesside struktureerimise ja jaotusega. Muidugi võib demo või närvivõrgu või millegi muu struktuuri üksikasjad vägagi varieeruda, kuid iga praeguse hoidla põhistruktuur jääb alati samaks. Mida arvate siis, kallis kasutaja, sellise hoidla loomisest, mis lisab Wolframi keelele laiendusi? Wolframi keel on loodud äärmiselt paindlikuks, nii et seda saab igal viisil laiendada ja muuta. See asjaolu on äärmiselt oluline selleks, et saaks kiiresti luua Wolframi keeles mitmesuguseid suuremahulisi tarkvaraprojekte. Siinkohal tuleb märkida, et keele paindlikkuse kasvades tõuseb paratamatult sellises keeles elluviidavate projektide maksumus. See on tingitud asjaolust, et mida rohkem kasutaja sellist keelt kasutab, seda rohkem saab ta spetsiaalseid funktsioone, kuid ei tasu unustada, et sellisel lähenemisel võib olla ka negatiivseid külgi, mis seisneb suutmatuses tagada programmimoodulite järjepidevust.

Traditsioonilistes programmeerimiskeeltes on raamatukogudega tavaline probleem - kui kasutate näiteks ühte teeki, töötab kood õigesti, kuid kui proovite kasutada mitut teeki, pole garantiid, et need omavahel õigesti suhtlevad. . Samuti ei saa traditsioonilistes programmeerimiskeeltes - erinevalt täisväärtuslikust andmetöötluskeelest - tagada järjekindlate sisseehitatud esituste olemasolu mis tahes funktsioonide või andmetüüpide jaoks, välja arvatud nende põhistruktuurid. Kuid tegelikult on probleem veelgi suurem, kui esmapilgul tundub: kui ehitame suuremahulist funktsionaalsuse vertikaali, siis ilma tsentraliseeritud projektide programmeerimise tohutute kuludeta, mille me Wolframi keelde paneme, on võimatu seda teha. saavutada järjepidevus. Seetõttu on oluline, et kõik tarkvaramoodulid töötaksid alati õigesti koos.

Seega on Wolframi funktsioonide hoidla idee vältida ülalkirjeldatud probleemi, lisades keelele laiendusi suhteliselt väikestes kooditükkides üksikute funktsioonide kaudu, mida on lihtsam sidusate moodulitena arendada. Nagu öeldud, on programmeerimisfunktsioone, mida ei saa üksikute funktsioonide abil mugavaks muuta (ja meie ettevõte plaanib lähiajal välja anda optimeeritud programmeerimisalgoritmi, mis aitab suuremahulisi tarkvarapakette juurutada). Kuid juba Wolfram Language'i sisseehitatud funktsioonide põhjal on palju programmeerimisvõimalusi, mida rakendatakse üksikute funktsioonide põhjal. Mõte seisneb siin selles, et suhteliselt vähese programmeerimispingutusega on võimalik luua mitmeid uusi ja väga kasulikke funktsioone, mis tagavad disainile piisava sidususe, on omavahel hästi kooskõlastatud ning lisaks sellele on need saab tulevikus hõlpsasti ja laialdaselt kasutada.

Selline lähenemine on loomulikult kompromiss. Suurema paketi rakendamisel võiks ette kujutada täiesti uut funktsionaalsusmaailma, mis oleks ülimalt võimas ja kasulik. Kui teil on vaja hankida uusi funktsioone, mis sobiksid kõige muuga, kuid te ei ole nõus projekti arendamiseks palju vaeva nägema, võib see kahjuks kaasa tuua teie projekti ulatuse vähenemise. Wolframi funktsioonide hoidla idee on pakkuda funktsionaalsust projekti määratlevale osale; see lähenemisviis lisab võimsa funktsionaalsuse, hõlbustades samal ajal programmeerimisprojekti hea järjepidevuse säilitamist.

Aidake funktsioonihoidlasse kohandatud funktsioone lisada

Meie meeskond on teinud kõvasti tööd, et kasutajatel oleks Wolframi hoidla funktsioonidesse panustamine lihtne. Töölaual (juba sees versioon 12.0), saate lihtsalt peamenüü vahekaardid järjestikku läbi käia: File > New > RepositoryItem > Function Repository Item ja saate "Määratlusmärkmik" (programmiliselt töölaua sees. Võite kasutada ka analoogfunktsiooni - Loo märkmik["Funktsiooniressurss"]):

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Peate tegema kaks peamist sammu: esiteks kirjutage üles oma funktsiooni kood ja teiseks kirjutage üles dokumentatsioon, mis illustreerib teie funktsiooni toimimist.
Klõpsake ülaosas nuppu "Ava näidis", et näha näidet selle kohta, mida peate tegema.

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Põhimõtteliselt proovite luua midagi sarnast Wolframi keele sisseehitatud funktsiooniga. Välja arvatud see, et see suudab teha midagi palju spetsiifilisemat kui sisseehitatud funktsioon. Samal ajal on ootused selle täielikkuse ja usaldusväärsuse suhtes palju madalamad.
Peate andma funktsioonile nime, mis järgib Wolfram Language'i funktsioonide nimetamise juhiseid. Lisaks peate oma funktsiooni jaoks välja töötama dokumendid, mis on sarnased keele sisseehitatud funktsioonidega. Sellest räägin hiljem lähemalt. Praegu pange tähele, et definitsioonimärkmiku faili ülaosas olevate nuppude real on nupp "Stiilijuhised", mis selgitab, mida teha, ja nuppu Tööriistad, mis pakub tööriistu funktsiooni dokumentatsiooni vormindamiseks.
Kui olete kindel, et kõik on õigesti täidetud ja olete valmis, klõpsake nuppu "Kontrolli". See on täiesti normaalne, et sa pole veel kõiki detaile selgeks saanud. Nii et funktsioon "Kontrolli" käivitub automaatselt ja teeb palju stiili ja järjepidevuse kontrolle. Sageli palub see teil kohe parandused kinnitada ja nõustuda (näiteks: "See rida peab lõppema kooloniga" ja see palub teil sisestada koolon). Mõnikord palub ta teil ise midagi lisada või muuta. Lisame nupu Kontrolli automaatsele funktsionaalsusele pidevalt uusi funktsioone, kuid põhimõtteliselt on selle eesmärk tagada, et kõik, mida te funktsioonide hoidlasse esitate, järgiks juba täpselt nii paljusid stiilijuhiseid kui võimalik.

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Niisiis, pärast "Check" käivitamist saate kasutada "Eelvaadet". "Eelvaade" loob teie funktsiooni jaoks määratletud dokumentatsioonilehe eelvaate. Samuti saate luua eelvaate arvutis loodud failile või pilvesalvestuses asuvale failile. Kui te ei ole mingil põhjusel eelvaates nähtuga rahul, minge lihtsalt tagasi ja tehke vajalikud parandused ning seejärel klõpsake uuesti nuppu Eelvaade.
Nüüd olete valmis oma funktsiooni hoidlasse lükkama. Nupp juurutamine annab teile neli võimalust.

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Selles etapis on oluline, et saate oma funktsiooni esitada Wolframi funktsioonihoidlasse, et see oleks kõigile kättesaadav. Samal ajal saate oma funktsiooni paigutada ka piiratud arvu kasutajate jaoks. Näiteks saate luua funktsiooni, mis on teie arvutis kohapeal hostitud, nii et see on saadaval, kui seda konkreetset arvutit kasutate. Või postitada selle oma pilvekonto, et see oleks teile saadaval, kui olete pilvega ühenduses. Funktsiooni saate oma pilvekonto kaudu ka avalikult hostida (juurutada). See ei asu keskses Wolframi funktsioonide hoidlas, kuid saate anda kellelegi URL-i, mis võimaldab tal teie funktsiooni teie kontolt hankida. (Tulevikus toetame ka kogu meie ettevõtte keskseid hoidlaid.)

Oletame, et soovite oma funktsiooni esitada Wolframi funktsioonide teadmistebaasi. Selleks klõpsake hoidlas nuppu "Esita". Mis siis hetkel toimub? Teie taotlus pannakse kohe järjekorda, et meie kuraatorite meeskond läbi vaadata ja kinnitada.

Kui teie taotlus kulgeb heakskiitmisprotsessi käigus (mis kestab tavaliselt mitu päeva), saate selle oleku kohta teateid ja võib-olla soovitusi edaspidiseks kasutamiseks. Kuid kui teie funktsioon on heaks kiidetud, avaldatakse see kohe Wolframi funktsioonide hoidlas ja see on kõigile kasutamiseks saadaval. (Ja see ilmub uudiste kokkuvõtted uutest funktsioonidest ja nii edasi)

Mis peaks laos olema?

Tuleb märkida, et meie ettevõttel on väga kõrged täielikkuse, töökindluse ja üldise kvaliteedi standardid ning 6000+ funktsioonist, mille oleme Wolframi keelde viimase 30+ aasta jooksul juba sisse ehitanud, vastavad kõik ülaltoodud nõuetele. Wolframi funktsioonide hoidla eesmärk on kasutada kogu Wolframi keeles juba olemasolevat struktuuri ja funktsionaalsust, et lisada võimalikult palju kergemaid funktsioone (st suurema jõudlusega funktsioone).

Muidugi peavad Wolframi funktsioonihoidlas olevad funktsioonid vastama Wolframi keele disainipõhimõtetele – et nad saaksid täielikult suhelda teiste funktsioonide ja kasutajate ootustega selle kohta, kuidas funktsioon peaks korralikult töötama. Funktsioonid ei pea aga olema võrdse terviklikkuse ega usaldusväärsusega.

Wolframi keele sisseehitatud funktsioonides töötame kõvasti selle nimel, et programmeerimisfunktsioonid oleksid võimalikult üldised. Sellegipoolest pole Wolframi funktsioonihoidlas midagi halba selles, et seal on funktsioon, mis lihtsalt käsitleb mõnda väga spetsiifilist, kuid kasulikku juhtumit. Näiteks funktsioon SendMailFromNotebook saab vastu võtta faile ühes kindlas vormingus ja luua kirju ühel kindlal viisil. Hulknurkne diagramm loob diagramme ainult teatud värvide ja märgistusega jne.

Veel üks sisseehitatud funktsioonidega seotud punkt on see, et meie ettevõte teeb kõik endast oleneva, et käsitleda kõiki ebatüüpilisi juhtumeid, käsitleda õigesti valesid sisestusi jne. Funktsioonide hoidlas on täiesti normaalne, et seal on spetsiaalne funktsioon, mis tegeleb probleemi lahendamise põhijuhtumitega ja ignoreerib kõiki teisi.

Ilmselge on see, et parem on omada funktsioone, mis teevad rohkem ja teevad seda paremini, kuid funktsioonihoidla optimeerimisel – erinevalt Wolframi keele sisseehitatud funktsioonidest – peaks olema rohkem funktsioone, mis on komplekteeritud rohkemate funktsioonidega, selle asemel, et süveneda. iga konkreetse funktsiooni rakendusprotsessid.

Vaatame nüüd näidet hoidlas funktsioonide testimise kohta. Selliste funktsioonide järjepidevuse ootused on loomulikult palju madalamad kui sisseehitatud keelefunktsioonide puhul. See kehtib eriti juhtudel, kui funktsioonid sõltuvad välistest ressurssidest, näiteks API-dest, on oluline pidevalt läbi viia järjepidevaid teste, mis toimub automaatselt kinnitusalgoritmide raames. nb-failis saate selgesõnaliselt määrata definitsioonid (jaotises Täiendav teave) ja määrata nii palju teste, mis on määratud kas sisend- ja väljundstringidega või täismärgiobjektidega. VerificationTest, nii palju kui õigeks pead. Lisaks üritab süsteem teie esitatud dokumentatsiooninäiteid pidevalt muuta kontrollimisprotsessiks (ja mõnikord võib see olla üsna ressursimahukas, näiteks funktsiooni puhul, mille tulemus sõltub juhuslikest numbritest või kellaajast).

Selle tulemusena on funktsioonihoidlal mitmeid rakendamise keerukusi. Mõned neist on vaid üks koodirida, teised võivad hõlmata tuhandeid või kümneid tuhandeid ridu, kasutades tõenäoliselt paljusid abifunktsioone. Millal tasub lisada funktsioon, mille defineerimiseks on vaja väga vähe koodi? Põhimõtteliselt, kui funktsioon on olemas hea mnemooniline nimi, millest kasutajad saaksid hõlpsasti aru, kui nad seda kooditükis näeksid, siis saab selle juba lisada. Vastasel juhul on ilmselt parem kood oma programmile iga kord uuesti lisada, kui seda kasutama vajate.

Funktsioonihoidla põhieesmärk (nagu nimigi ütleb) on tuua keelde uusi funktsioone. Kui soovid lisada uusi andmeid või uued üksused, kasutage Wolframi andmehoidla. Aga mis siis, kui soovite oma arvutuste jaoks kasutusele võtta uut tüüpi objekte?

Tegelikult on kaks võimalust. Võib-olla soovite kasutusele võtta uue objektitüübi, mida kasutatakse funktsioonihoidla uutes funktsioonides. Ja sel juhul võite alati lihtsalt üles kirjutada selle sümboolse esituse ja kasutada seda funktsioonide hoidlas funktsioonide sisestamisel või väljastamisel.

Aga mis siis, kui soovite esitada objekti ja seejärel määratleda Wolframi keele olemasolevate funktsioonide kaudu, et soovite sellega töötada? Wolframi keelel on selleks alati olnud kerge mehhanism, nn UpValues. Mõnede piirangutega (eriti funktsioonide puhul, mis ei oska nende argumente hinnata), funktsioonide hoidla võimaldab teil lihtsalt funktsiooni esitada ja selle jaoks väärtusi määrata. (Järjepidevuse ootuse tõstmine uue olulise kujunduse loomisel, mis on täielikult integreeritud kõikjale Wolfram Language'i, on üldiselt väga oluline protseduur, mida ei saa saavutada ainult projekti maksumuse suurendamisega ja seda meie ettevõte osana teebki. keele pikaajalise arendamise projektide puhul ei ole see ülesanne repositooriumi arendamise raames püstitatud eesmärk).

Niisiis, mis võib olla funktsioonide hoidlas olevas funktsioonikoodis? Kõik Wolframi keelde sisse ehitatudmuidugi (vähemalt kui see ei esinda ähvardused eest turvalisus ja programmi enda kui arvutuskeskkonna jõudlust) ning mis tahes funktsioonide hoidlast pärinevat funktsiooni. Siiski on ka teisi funktsioone: funktsioonihoidlas olev funktsioon võib kutsuda API või sisse Wolframi pilvVõi teisest allikast. Loomulikult on sellega seotud teatud riskid. Tulenevalt asjaolust, et pole garantiid, et API ei muutu ja funktsioonide poes olev funktsioon lakkab töötamast. Selliste probleemide tuvastamiseks on dokumentatsioonilehel (jaotises Nõuded) märge kõigi funktsioonide kohta, mis tuginevad enamale kui lihtsalt sisseehitatud Wolframi keele funktsioonidele. (Muidugi, kui tegemist on reaalsete andmetega, võib isegi selle funktsionaalsusega probleeme tekkida – sest reaalmaailma andmed muutuvad pidevalt ning mõnikord muutuvad isegi nende määratlused ja struktuur.)

Kas kogu Wolframi funktsioonihoidla kood tuleks kirjutada Wolframis? Kindlasti ei tohiks välise API sees olev kood olla kirjutatud Wolframi keeles, mis ei tee isegi keelekoodi. Tegelikult, kui leiate funktsiooni peaaegu igast väliskeelest või teegist, saate luua ümbrise, mis võimaldab teil seda kasutada Wolframi funktsioonihoidlas. (Tavaliselt peaksite selleks kasutama sisseehitatud funktsioone Väline hindamine või Väline funktsioon Wolframi keelekoodis.)

Mis mõte siis seda teha on? Põhimõtteliselt võimaldab see kasutada kogu integreeritud Wolfram Language süsteemi ja kogu selle ühtset tarkvaravõimaluste komplekti. Kui hankite baasrakenduse välisest teegist või keelest, saate seejärel kasutada Wolframi keele rikkalikku sümboolset struktuuri, et luua mugav tipptaseme funktsioon, mis võimaldab kasutajatel hõlpsalt kasutada kõiki juba rakendatud funktsioone. Vähemalt peaks see olema teostatav ideaalses maailmas, kus on olemas kõik teekide laadimise ehitusplokid jne. Sel juhul käsitleks neid automaatselt Wolframi keel. (Tuleb märkida, et praktikas võib esineda probleeme väliskeelte seadistamine spetsiifiline arvutisüsteem ja pilvesalvestus võib tekitada täiendavaid turvaprobleeme).

Muide, kui vaatate esmalt tüüpilisi väliseid teeke, tunduvad need sageli liiga keerulised, et neid vaid mõne funktsiooniga hõlmata, kuid paljudel juhtudel tuleneb suur osa keerukusest raamatukogu jaoks vajaliku infrastruktuuri ja kõigi funktsioonide loomisest. toeta seda. Kuid Wolframi keele kasutamisel on infrastruktuur tavaliselt juba pakettidesse sisse ehitatud ja seega pole vaja kõiki neid tugifunktsioone üksikasjalikult paljastada, vaid luuakse ainult funktsioonid teegi "ülemiste" rakendusespetsiifiliste funktsioonide jaoks. .

Teadmistebaasi "ökosüsteem".

Kui olete kirjutanud funktsioone, mida kasutate regulaarselt, esitage need Wolframi funktsioonide hoidlasse! Kui sellest (keelearendus) midagi enamat välja ei tule, siis on sul ka siis palju mugavam funktsioone isiklikuks tarbeks kasutada. Siiski on loogiline eeldada, et kui kasutate funktsioone regulaarselt, on ehk ka teistele kasutajatele need kasulikud.

Loomulikult võite leida end olukorrast, kus te ei saa või ei taha oma funktsioone jagada või pääsete ligi privaatsetele teabeallikatele. Isegi sellistel juhtudel saate funktsioonid lihtsalt juurutada oma pilvekontol, õiguste täpsustamine juurdepääs neile. (Kui teie organisatsioonil on Wolfram Enterprise'i privaatpilv, siis saab see peagi majutada oma privaatsete funktsioonide hoidlat, mida saab hallata teie organisatsiooni sees ja määrata, kas sundida vaateid vaatama kolmandate osapoolte kasutajatele või mitte.)

Wolframi funktsioonihoidlasse esitatavad funktsioonid ei pea olema täiuslikud; need peavad lihtsalt kasulikud olema. See sarnaneb pisut klassikalise Unixi dokumentatsiooni jaotisega "Errors" - jaotises "Definitsioonid" on jaotis "Autori märkused", kus saate kirjeldada piiranguid, probleeme jms, mida oma funktsiooni kohta juba teate. Lisaks saate oma funktsiooni hoidlasse saatmisel lisada esitamismärkmeid, mida loeb spetsiaalne kuraatorite meeskond.

Kui funktsioon on avaldatud, on selle lehe allosas alati kaks linki: "Saatke selle funktsiooni kohta sõnum"Ja"Arutage Wolframi kogukonnas" Kui lisate märkuse (nt rääkige mulle vigadest), saate märkida ruudu, mis ütleb, et soovite, et teie sõnumit ja kontaktteavet jagataks funktsiooni autoriga.

Mõnikord soovite lihtsalt kasutada Wolframi funktsioonihoidla funktsioone, näiteks sisseehitatud funktsioone, ilma nende koodi vaatamata. Kui aga tahad sissepoole pilku heita, siis üleval on alati Notepadi nupp. Klõpsake sellel ja saate oma koopia algse määratluse märkmikust, mis esitati funktsioonide hoidlasse. Mõnikord saate seda lihtsalt oma vajaduste näitena kasutada. Samal ajal saate selle funktsiooni jaoks ka oma modifikatsiooni välja töötada. Võib-olla soovite postitada need funktsioonid, mille leidsite oma arvutis või lehetäide pilvesalvestuskontol, postitada need funktsioonide teadmistebaasi, võib-olla algse funktsiooni täiustatud ja laiendatud versioonina.

Tulevikus kavatseme funktsioonihoidlate jaoks toetada Git-stiilis harutamist, kuid praegu püüame seda lihtsana hoida ja meil on alati ainult üks aktsepteeritud versioon igast funktsioonist keelde sisse ehitatud. Enamasti (välja arvatud juhul, kui arendajad loobuvad oma väljatöötatud funktsioonide hooldamisest ja reageerivad kasutajate esildistele) võtab funktsiooni algne autor kontrolli selle värskenduste üle ja esitab uued versioonid, mis seejärel üle vaadatakse ja kui need läbivad ülevaatusprotsessi. , avaldatud keeles.

Vaatleme küsimust, kuidas töötab väljatöötatud funktsioonide "versioon". Praegu, kui kasutate funktsiooni funktsioonihoidlast, salvestatakse selle definitsioon jäädavalt teie arvutisse (või pilve kasutamisel teie pilvekontole). Kui funktsiooni uus versioon on saadaval, saate selle järgmisel kasutamisel teate, mis teavitab teid sellest. Ja kui soovite funktsiooni uuele versioonile värskendada, saate seda teha käsuga ResourceUpdate. ("Funktsiooniplokk" salvestab tegelikult rohkem versiooniteavet ja kavatseme selle tulevikus oma kasutajatele paremini kättesaadavaks teha.)

Üks kauneid asju Wolframi funktsioonihoidla juures on see, et mis tahes Wolframi keele programm saab selle funktsioone kasutada kõikjal. Kui programm ilmub märkmikusse, on sageli mugav vormindada hoidla funktsioonid hõlpsasti loetavate funktsioonide binaarobjekti funktsioonidena (võib-olla sobiva versioonikomplektiga).

Saate alati teksti abil juurde pääseda mis tahes funktsioonihoidlas olevale funktsioonile ResourceFunction[...]. Ja see on väga mugav, kui kirjutate näiteks koodi või skripte otse Wolfram Engine'i jaoks IDE või tekstikoodiredaktoriga (eriti tuleb märkida, et funktsioonide hoidla ühildub täielikult Tasuta Wolframi mootor arendajatele).

Kuidas see toimib?

Wolframi hoidlas olevate funktsioonide sees on see võimalik täpselt sama kasutades ressursisüsteemid alused, nagu ka kõik teised meie olemasolevad hoidlad (andmesalv, Närvivõrgu hoidla, demoprojektide kogu jne), nagu kõik muud Wolframi süsteemiressursid, ResourceFunction lõpuks põhinevad funktsioonil ResourceObject.

Arvestama ResourceFunction:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Sees näete funktsiooni kasutades teavet INFO:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Kuidas ressursifunktsiooni seadistamine töötab? Lihtsaim on puhtalt kohalik juhtum. Siin on näide, mis võtab funktsiooni (antud juhul lihtsalt puhta funktsiooni) ja määratleb selle antud programmiseansi ressursifunktsioonina:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Kui olete määratluse teinud, saate kasutada ressursi funktsiooni:

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Pange tähele, et selles funktsiooniplokis on must ikoon Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele. See tähendab, et funktsioon BLOB viitab praeguse seansi jaoks määratletud mälus olevale ressursifunktsioonile. Teie arvutisse või pilvekontole püsivalt salvestatud ressursifunktsioonil on hall ikoon Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele. Ja Wolframi funktsioonide hoidlas on ametliku ressursifunktsiooni jaoks oranž ikoon Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele.

Mis siis juhtub, kui kasutate Definition Notebook menüüd Laienda? Esiteks võtab see kõik märkmikus olevad määratlused ja loob neist sümboolse ResourceObject). (Ja kui kasutate tekstipõhist IDE-d või programmi, saate ka selgesõnaliselt luua ResourceObject)

Funktsiooni kohalik juurutamine arvuti hoidlast toimub käsu abil Kohalik vahemälu et ressursiobjekt selle nimega salvestaks LocalObject teie failisüsteemis. Pilvekontole juurutamine toimub käsu abil CloudDeploy ressursiobjekti jaoks ja avalik pilvekasutus on CloudPublish. Kõikidel juhtudel Ressursiregister kasutatakse ka ressursi funktsiooni nime registreerimiseks, nii et Ressursifunktsioon["nimi"] töötab.

Kui klõpsate funktsioonihoidla nupul Esita, siis mis toimub selle all ResourceSubmit kutsus ressursiobjekti. (Ja kui kasutate tekstisisestusliidest, saate ka helistada ResourceSubmit otse.)

Vaikimisi esitatakse esildised teie Wolframi ID-ga seotud nime all. Kui aga esitate avalduse arendusmeeskonna või organisatsiooni nimel, saate seda teha määrake eraldi väljaandja ID ja selle asemel kasutage seda nimena oma vaadetega suhtlemiseks.

Kui olete mõne oma funktsiooni funktsioonide teadmistebaasi esitanud, pannakse see ülevaatuse järjekorda. Kui saate vastuseks kommentaare, on need tavaliselt tekstifailina, millele on lisatud täiendavaid "kommentaarilahtrid". Saate alati oma rakenduse olekut kontrollida, külastades veebilehte ressursisüsteemi liikmete portaal. Kuid kui teie funktsioon on heaks kiidetud, teavitatakse teid sellest (e-posti teel) ja teie funktsioon postitatakse Wolframi funktsioonide hoidlasse.

Mõned peensused tööl

Esmapilgul võib tunduda, et võite lihtsalt võtta definitsioonimärkmiku ja panna selle sõna-sõnalt funktsioonihoidlasse, kuid tegelikult on sellega seotud üsna palju nüansse – ja nende käsitlemine nõuab üsna keerukat metaprogrammeerimist ja sümboolse töötlemise käsitsemist. koodina, mis määrab funktsiooni , ja Notepad ise on määratletud. Enamik sellest toimub sisemiselt, kulisside taga, kuid sellel võib olla mõningaid tagajärgi, mida tasub mõista, kui kavatsete funktsioonide teadmistebaasi täiendada.

Esimene kohene peensus: kui täidate definitsioonimärkmiku, saate lihtsalt viidata oma funktsioonile kõikjal, kasutades sellist nime nagu Minu funktsioon, mis näeb välja nagu Wolframi keele funktsiooni tavaline nimi, kuid funktsioonihoidla dokumentatsiooni puhul on see asendatud Ressursifunktsioon["Minu funktsioon"] on see, mida kasutajad funktsiooniga töötamisel tegelikult kasutavad.

Teine nüanss: kui loote definitsioonimärkmikust ressursifunktsiooni, tuleb kõik funktsiooni definitsiooniga seotud sõltuvused jäädvustada ja selgesõnaliselt kaasata. Kuid selleks, et definitsioonid jääksid modulaarseks, peate kõik ainulaadseks muutma nimeruum. (Muidugi, funktsioonid, mis seda kõike teevad, on funktsioonihoidlas.)

Tavaliselt ei näe te kunagi selle nimeruumi seadistamiseks kasutatud koodi jälgi. Kui aga kutsute mingil põhjusel oma funktsiooni sees alatäidetud sümbolit, näete, et see sümbol on funktsiooni sisemises kontekstis. Definition Notepadi töötlemisel on aga vähemalt funktsioonile endale vastav sümbol reguleeritav parima kuva saamiseks pigem funktsionaalse BLOBina kui toore tegelasena sisemises kontekstis.

Funktsioonide hoidla on mõeldud uute funktsioonide määratlemiseks. Ja nendel funktsioonidel võib olla valikuid. Sageli need parameetrid (näiteks Meetod või Pildi suurus) saab kasutada nii sisseehitatud funktsioonide jaoks kui ka nende jaoks, mille jaoks on sisseehitatud sümbolid juba olemas. Kuid mõnikord võib uus funktsioon nõuda uusi valikuid. Modulaarsuse säilitamiseks peavad need parameetrid olema ainulaadses sisemises kontekstis määratletud sümbolid (või midagi sellist, nagu terved ressursifunktsioonid, st nad ise). Lihtsuse huvides võimaldab funktsioonihoidla stringimääratlustes defineerida uusi valikuid. Ja kasutaja mugavuse huvides on need määratlused (eeldusel, et nad kasutasid OptionValue и ValikudMuster) töödeldakse ka nii, et funktsioonide kasutamisel saab parameetreid määrata mitte ainult stringidena, vaid ka samade nimedega globaalsete sümbolitena.

Enamik funktsioone lihtsalt teeb seda, mida nad peaksid tegema iga kord, kui neid kutsutakse, kuid mõned funktsioonid tuleb enne konkreetse seansi jooksul käivitamist initsialiseerida – ja selle probleemi lahendamiseks on jaotises Määratlus jaotis "Initsialiseerimine".

Hoidlast pärinevad funktsioonid võivad kasutada muid funktsioone, mis on juba hoidlas; selleks, et seadistada funktsioonihoidla definitsioone, mis sisaldavad kahte (või enamat) üksteisele viitavat funktsiooni, peate need oma programmiseansil juurutama, et saaksite viide nagu neil Ressursifunktsioon["nimi"], siis saate luua nende funktsioonide kombinatsioonid, mida vajate, näiteid (ma ei saanud aru) ja lisada hoidlasse uue funktsiooni, mis põhineb juba varem postitatud funktsioonidel. (või juba või varem – mõlemad sõnad on kohmakad)

Arenguväljavaated. Mis peaks juhtuma, kui hoidla muutub tõeliselt suureks?

Täna käivitame just Wolframi funktsioonide hoidla, kuid aja jooksul eeldame, et selle suurus ja funktsionaalsus võivad järsult suureneda ning arenduse kasvades võivad tekkida mitmesugused probleemid, mida me juba eeldame.

Esimene probleem puudutab funktsioonide nimesid ja nende unikaalsust. Funktsioonide hoidla on loodud nii, et sarnaselt Wolframi keele sisseehitatud funktsioonidele saate viidata mis tahes funktsioonile lihtsalt selle nime määrates. Kuid see tähendab paratamatult, et funktsioonide nimed peavad olema kogu hoidlas globaalselt ainulaadsed, nii et neid saab olla näiteks ainult üks Ressursifunktsioon["Minu lemmikfunktsioon"].

See võib esmapilgul tunduda suure probleemina, kuid tasub mõista, et see on põhimõtteliselt sama probleem nagu Interneti-domeenid või sotsiaalmeedia käepidemed. Ja tõsiasi on see, et süsteemil peab lihtsalt olema registripidaja – ja see on üks rollidest, mida meie ettevõte Wolframi funktsioonide teadmistebaasi jaoks täidab. (Hoidla privaatversioonide puhul võivad nende registripidajad olla administraatorid.) Muidugi saab Interneti-domeeni registreerida ka ilma, et sellel midagi oleks, kuid funktsioonihoidlas saab funktsiooni nime registreerida ainult siis, kui sellel on tegelik definitsioon. funktsiooni.

Üks osa meie rollist Wolframi funktsiooni teadmistebaasi haldamisel on tagada, et funktsioonile valitud nimi oleks funktsiooni definitsiooni arvestades loogiline ja järgiks Wolframi keele nimetamise tavasid. Meil on üle 30-aastane kogemus sisseehitatud funktsioonide nimetamisel Wolframi keeles ja meie kuraatorite meeskond toob selle kogemuse ka funktsioonide hoidlasse. Muidugi on alati erandeid. Näiteks võib tunduda eelistatavam mõne funktsiooni jaoks lühike nimi, kuid parem on "kaitsta" pikema ja täpsema nimega, sest on vähem tõenäoline, et tulevikus satute kellegagi, kes soovib sarnast funktsiooni nime teha. .

(Siinkohal tuleb märkida, et lihtsalt mõne liikmesildi lisamine funktsioonide ühemõtteliseks muutmiseks ei anna soovitud tulemust. Kui te ei nõua alati märgendi määramist, peate määrama iga funktsiooni jaoks vaikemärgendi ja eraldama ka autorisildid , mis nõuaks taas ülemaailmset koordineerimist.)

Kui Wolframi funktsioonide teadmistebaas kasvab, on üheks tõenäoliselt esilekerkivaks probleemiks funktsioonide leitavus, mille jaoks süsteem pakub otsingufunktsioon (ja määratlusfailid võivad sisaldada märksõnu jne). Wolframi keele sisseehitatud funktsioonide jaoks on dokumentatsioonis kõikvõimalikud ristviited, mis aitavad funktsioone "reklaamida". Funktsioonide hoidlas olevad funktsioonid võivad viidata sisseehitatud funktsioonidele. Aga kuidas on vastupidi? Selleks katsetame erinevaid kujundusi, et paljastada hoidla funktsioonid sisseehitatud funktsioonide dokumentatsioonilehtedel.

Wolframi keele sisseehitatud funktsioonide jaoks on nn tuvastuskiht, mille pakub "abilehtede" võrgustik, mis pakuvad kindlate piirkondadega seotud funktsioonide organiseeritud loendeid. Man-lehekülgi on alati raske korralikult tasakaalustada ja Wolframi keele kasvades tuleb manlehti sageli täielikult ümber korraldada. Hoidla funktsioone on üsna lihtne paigutada laiadesse kategooriatesse ja isegi neid kategooriaid järjepidevalt jaotada, kuid palju väärtuslikum on õigesti korraldatud keeleviitelehed. Pole veel selge, kuidas neid kogu funktsioonide teadmistebaasi jaoks kõige paremini luua. Näiteks, Loo ResourceObjectGallery funktsioonide hoidlas saab igaüks postitada veebilehe, mis sisaldab nende hoidlast "valikuid":

Wolframi funktsioonide hoidla: avatud juurdepääsu platvorm Wolframi keelelaiendustele

Wolframi funktsioonihoidla on konfigureeritud püsiva funktsioonihoidlana, kus kõik selle funktsioonid töötavad alati. Muidugi võivad saada saadavale funktsioonide uued versioonid ja eeldame, et mõned funktsioonid aeguvad aja jooksul. Funktsioonid töötavad, kui neid kasutatakse programmides, kuid nende dokumentatsioonilehed lingivad uutele täiustatud funktsioonidele.

Wolframi funktsioonide hoidla on loodud selleks, et aidata teil kiiresti uusi funktsioone avastada ja õppida uusi viise Wolframi keele kasutamiseks. Oleme väga optimistlikud, et osa funktsioonide hoidlas uuritust on lõpuks mõttekas muutuma Wolframi põhikeele sisseehitatud osadeks. Viimase kümnendi jooksul on meil olnud sarnane komplekt funktsioone, mis võeti algselt kasutusele Wolframis | Alfa. Ja üks sellest kogemusest saadud õppetund on see, et kvaliteedi ja järjepidevuse standardite saavutamine, millele keskendume kõiges Wolframi keelde sisseehitatud osas, nõuab palju tööd, mis on sageli keerulisem kui esialgne pingutus idee elluviimiseks. Sellegipoolest võib funktsiooni teadmistebaasi funktsioon olla väga kasulik kontseptsiooni tõend tulevase funktsiooni jaoks, mis võidakse lõpuks Wolframi keelde sisse ehitada.

Siin on kõige olulisem see, et funktsioonihoidlas olev funktsioon on praegu iga kasutaja jaoks saadaval. Võimalik, et emakeele funktsioon võib olla palju parem ja toimivam, kuid funktsioonide hoidla võimaldaks kasutajatel kohe juurdepääsu kõigile uutele funktsioonidele. Ja mis kõige tähtsam, see kontseptsioon võimaldab igaühel lisada soovitud uusi funktsioone.

Varem ei oleks see idee Wolframi keele ajaloos nii hästi toiminud, kuid praegusel etapil on keele nimel nii palju vaeva nähtud ja keelekujunduse põhimõtete mõistmine on nii sügav, et praegu tundub see väga. suurel kasutajate kogukonnal on võimalik lisada funktsioone, mis säilitavad disaini järjepidevuse, et muuta need kasulikuks paljudele kasutajatele.

Wolfram Language'i kasutajate kogukonnas valitseb uskumatu talent(?). (Loomulikult hõlmab see kogukond palju juhtivaid teadus- ja arendustegevuse inimesi erinevates valdkondades.) Loodan, et Wolframi funktsioonide hoidla on tõhus platvorm selle talentide vaimu avamiseks ja levitamiseks. Ainult koos saame luua midagi, mis laiendab oluliselt valdkonda, millele saab rakendada Wolframi keele arvutiparadigmat.

Rohkem kui 30 aasta jooksul oleme Wolframi keelega kaugele jõudnud. Nüüd koos, lähme veelgi kaugemale. Julgustan tungivalt kõiki Wolframi keele lugupeetud kasutajaid üle maailma kasutama selle platvormina funktsionaalset hoidlat, aga ka uut tarkvaraprojekti, nagu näiteks Free Wolfram Engine for Developers.

Allikas: www.habr.com

Lisa kommentaar