Tere, Habr! Esitan teile Stephen Wolframi postituse tÔlke .

Wolframi keele tÔhususe eeltingimused
TĂ€na seisame suuri saavutusi saavutades programmeerimiskeelega . Ainult kolm nĂ€dalat tagasi kĂ€ivitasime , et aidata meie kasutajatel integreerida Wolframi keelt oma suurtel tarkvaraprojektidel. Just tĂ€na kĂ€ivitame , et pakkuda koordineeritud platvormi Wolframi keele laiendamiseks loodud funktsioonide jaoks, samuti avame funktsioonide repository igaĂŒhele, kes soovib meie tarkvaratootesse panustada.
Wolframi funktsioonide repository (Function Repository) on see, mis sai vÔimalikuks Wolframi keele ainulaadse iseloomu tÔttu mitte ainult programmeerimiskeelena, vaid ka . Traditsioonilistes programmeerimiskeeltes hÔlmab uute oluliste funktsioonide lisamine tavaliselt uute teeke loomist, mis vÔivad omavahel töötada vÔi mitte. Wolfram Language'is on aga , et on vÔimalik selle funktsionaalsust oluliselt laiendada, lisades lihtsalt uusi funktsioone, mis integreeruvad koheselt kogu keele struktuuri.
NĂ€iteks sisaldab Wolframi funktsioonide repois juba praegu 26 teemakategooriasse struktureeritud:

Samuti on rohkem kui , mis on sisseehitatud Wolfram keelde, iga funktsiooni kohta repois on dokumentatsioon leht, kus on ĂŒksikasjalikud selgitused ja nĂ€ited tööks:

Dokumendilehel liikumiseks kopeerige ĂŒlaltoodud objekt (funktsionaalne BLOB), peaksite selle sisestama sisestusreal ja seejĂ€rel kĂ€ivitage funktsioon - see on juba Wolfram'i keelde sisseehitatud ja toetatakse vaikimisi alates :

Siin tuleb mĂ€rkida, et töötlemise kĂ€igus Te ei pea nĂ€iteks seadistama "pilditöötluse raamatukogu" â kuna Wolfram Language'i keeles on juba rakendatud jĂ€rjestikune ja hoolikalt struktureeritud meetod , mida saavad kohe töödelda erinevad keele graafilised funktsioonid:

Loodan, et toetava , mis on viimase paarikĂŒmne aasta jooksul kasvanud ja laienenud (Wolfram Language'i pĂ”hjal). Wolfram'i funktsioonide hoidla vĂ”imaldab tulevikus oluliselt laiendada valikut (potentsiaalselt olulisi, erinevates teaduse ja tehnika valdkondades spetsialiseeritud) funktsioone, mis on keeles saadaval. Nii on vĂ”imalik kasutada nii keele sisu (selle sisseehitatud funktsioonid) kui ka , mis rakendatakse keele pĂ”hjal. (Siin tasub mĂ€rkida, et Wolfram Language'il on juba ĂŒle ).
Repo kasutusfunktsioonides vĂ”ivad olla vĂ€iksed vĂ”i ulatuslikud koodifragmendid, mis on kirjutatud Wolfram Language'is. NĂ€iteks vĂ”ivad need olla vĂ€liste API-de ja teenuste vĂ”i muude keelte vĂ€liste raamatukogude kutseid. . Selle lĂ€henemise ainulaadne omadus on see, et kasutajatasandi funktsionaalsusele ĂŒleminekul ei teki vĂ”imalikke vastuolusid, kuna see lĂ€henemine pĂ”hineb Wolfram Language'i ĂŒhtsel struktuuril â ja iga funktsioon töötab automaatselt Ă”igesti, just nagu see peabki.
Wolfram'i funktsioonide repos olev korpus ja tarkvarastruktuur on seadistatud nii, et igaĂŒks saaks vĂ”imalikult lihtsalt ja mugavalt anda oma panuse â pĂ”hijoontes lihtsalt . Integreeritud automaatsed funktsioonid vĂ”imaldavad uute repositooriumisse lisatud funktsioonide kontrollimist, tagades nende sujuva integreerimise keelde. Meie ettevĂ”te keskendub laiale kasutajaskonnale, kes saavad funktsioone keelde integreerida, mitte suurtele uute funktsioonide keerukustele â kuigi siin on rakendatud kontrolliprotsess, ei nĂ”uame me mingit sellist asja. ega ranget uute kasutajate funktsioonide tĂ€ielikkuse ja usaldusvÀÀrsuse standardit, erinevalt pĂ”hikeele sisseehitatud funktsioonidest, mille osas me rakendame pĂ”hjalikumaid kontrolle.
Selles lĂ€henemisviisis on palju kompromisse ja detaile, kuid meie eesmĂ€rk on optimeerida Wolframi funktsioonide repositooriumi nii kasutajate mugavuse kui ka selleks, et uued kasutajate funktsioonid mĂ€rkamatult aitaksid keelt arendada. Kasvades ei kahtle ma, et peame leiutama uusi meetodeid repositooriumisse integreeritud funktsioonide töötlemiseks ja kontrollimiseks, et korraldada suurt hulka funktsioone ja leida neid, mida kasutajad vajavad. Siiski on lohutav, et meie valitud rada on hea algus. Ma isiklikult algsetesse andmetesse. Paljud neist pĂ”hinevad koodil, mida olen isiklikult piisavalt kaua arendanud. Ja mul kulus vaid paar minutit, et need repositooriumisse edastada. NĂŒĂŒd, kui need on repositooriumis, saan lĂ”puks â koheselt ja igal ajal kasutada neid funktsioone vastavalt vajadusele, ilma et peaksin muretsema failide otsimise, paketihalduse jne pĂ€rast.
TÔhususe tÔstmine kulude kÀrpimisega
Juba enne Interneti tekkimist olid olemas viisid Wolfram Language'i koodi vahetamiseks (meie esimene suursugune tsentraliseeritud projekt oli , mis loodi Mathematica jaoks 1991. aastal CD-ROMi ja muu baasil). Kindlasti on Wolframi funktsioonide hoidla baasil rakendatav lĂ€henemine tugevam ja usaldusvÀÀrsem vahend ĂŒlaltoodud ĂŒlesannete tĂ€itmiseks.
Ăle 30 aasta on meie ettevĂ”te usinalt töötanud Wolfram'i keele struktuuri terviklikkuse sĂ€ilitamise nimel, mis on ÀÀrmiselt oluline, et Wolfram'i keel ei oleks lihtsalt programmeerimiskeel, vaid ka . Sellest tulenevalt on Wolframi funktsioonide hoidla rakendamise pĂ”himĂ”te ĂŒksiklĂ€henemise kasutamine programmeerimise ja uute funktsioonide vĂ€ljatöötamise osas, mis jĂ€rk-jĂ€rgult lisatakse ja sobivad keele raamidesse, et vĂ”imaldada selle arengut ja ĂŒhist evolutsiooni.
Iga funktsiooni rakendamise struktuuris toimub mitmesuguseid arvutusprotsesse. Oluline on mĂ€rkida, et kasutajale peaks funktsioon olema selge ja ĂŒhtlane ning kergesti loetav. Antud kontekstis on Wolfram Language'i sisseehitatud funktsioonid esitatud enam kui 6000 jĂ€rjestikuse nĂ€itena selle kohta, kuidas Ă”igesti funktsioone programmeerida (see on meie , mis sisaldavad ). See lĂ€henemine vĂ”imaldab lĂ”puks muuta Wolframi funktsioonide hoidla hĂ€sti toimivaks, kuna Wolfram Language'i struktuurne loomus koos suure hulga tĂ€iendavate ja mitmekesiste teekidega, mis on keelde juba integreeritud. NĂ€iteks, kui teil on funktsioon, mis töötleb pilte, vĂ”i , vĂ”i , samuti vĂ”i mĂ”ned teised â keeles on juba olemas nende ĂŒhtne sĂŒmboolne esitus, ja tĂ€nu sellele sobib teie funktsioon kohe teiste funktsioonidega keeles.
Funktsionaalsete piirangute puudumine takistab algoritmi Ă”iget tööprotsessi rakendamist. Meta-programmeerimise raames on huvitav ĂŒlesanne luua tĂ”eliselt hĂ€sti toimiv hoidla. NĂ€iteks ei saa ĂŒleliigne piirangute hulk tagada vajaliku ĂŒhtsuse ja universaalsuse taset algoritmi töös. Sama kehtib ka siis, kui funktsionaalseid piiranguid on liiga vĂ€he. , mis kĂ€ivitati 2007. aastal ja töötab nĂŒĂŒd interaktiivses reĆŸiimis internetis, pakkudes ĂŒle 12000 kasutaja interaktiivset demonstratsiooni. Wolfram on rohkem kui 600 valmis andmebaasi, mida saab kasutada Wolfram Language'i keeles. Samuti tĂ€iendatakse praktiliselt iganĂ€dalaselt uute neuronivĂ”rkudega (hetkel juba 118) ja need on kohe saadaval Funktsiooni kaudu Wolfram Language'i keeles.
KĂ”ik ĂŒlaltoodud nĂ€ited on pĂ”himĂ”tteliselt sarnased â projektis kogutud objektid ja funktsioonid omavad vĂ€ga kĂ”rget struktuuri ja protsesside jaotamise taset. Ilma kahtluseta vĂ”ivad detailid, mis nĂ€itavad, kas tegemist on demonstreeerimise vĂ”i tehisintellekti vĂ”rguga, olenevalt olukorrast mĂ€rkimisvÀÀrselt erineda, kuid pĂ”histruktuur mis tahes olemasoleva repositooriumi jaoks jÀÀb alati muutumatuks. Kuidas on teie, austatud kasutaja, arvamus sellise repositooriumi loomisest, mis lisab Wolframi keelele laiendusi? Wolfram Language on kavandatud vĂ€ga paindlikuks, mistĂ”ttu saab seda igasugustel viisidel laiendada ja muuta. See aspekt on ÀÀrmiselt oluline vĂ”imaldades kiiresti luua erinevaid suuri tarkvaraprojekte Wolfram Language'il. Siinkohal tuleb mĂ€rkida, et keele paindlikkuse kasvuga suureneb paratamatult ka projektide maksumus, mis sellel keeles realiseeritakse. See juhtub seetĂ”ttu, et mida rohkem kasutaja seda keelt rakendab, seda rohkem ta saab erifunktsioone, kuid ei tohi unustada, et see lĂ€henemine vĂ”ib omada ka negatiivseid kĂŒlgi seoses jĂ€rjepideva programmimoodulite kooskĂ”la tagamise keerukusega.
Traditsioonilistes programmeerimiskeeltes on levinud probleem raamatukogudega â kui kasutate nĂ€iteks ĂŒhte raamatukogu, töötab kood Ă”igesti, kuid kui proovite kasutada mitut raamatukogu, ei ole garanteeritud, et need omavahel korrektselt koostööd teevad. Samuti puuduvad traditsioonilistes programmeerimiskeeltes â erinevalt tĂ€ielikest arvutikeeltest â vĂ”imalused garanteerituks kontrollida, kas on olemas ĂŒhtsed sisseehitatud esitlused mingite funktsioonide vĂ”i andmetĂŒĂŒpide jaoks, vĂ€lja arvatud nende pĂ”histruktuurid. Kuid sisuliselt on probleem isegi suurem, kui esmapilgul tundub: kui keegi loob suures mahus funktsionaalsuse vertikaali, on ilma tohutute kulutusteta projekti keskse programmeerimisele, mida oleme Wolframi keelde investeerinud, vĂ”imatu saavutada ĂŒhtsust. SeetĂ”ttu on oluline, et kĂ”ik tarkvaramoodulid töötaksid alati korralikult koos.
Wolfram'i funktsioonide hoidla idee seisneb selles, et vĂ€ltida ĂŒlalmainitud probleeme, lisades keelele laiendusi, mis koosnevad suhteliselt vĂ€ikestest programmikoodielementidest, mille arendamine kooskĂ”lastatud moodulitena on lihtsam ĂŒlesanne. Samuti on olemas programmeerimise eripĂ€ra, mida ei saa eraldi funktsioonide abil mugavaks muuta (ja meie ettevĂ”te plaanib lĂ€hitulevikus vĂ€lja anda optimeeritud tarkvaraalgoritmi, et aidata suurte tarkvarapakettide rakendamisel). Siiski on Wolfram Language'i keele sisse ehitatud funktsioonide pĂ”hjal palju programmeerimisvĂ”imalusi, mis on rakendatud eraldi funktsioonide baasil. Idee on see, et suhteliselt vĂ€ikeste programmeerimisvaevadega saab luua sarja uusi ja vĂ€ga kasulikke funktsioone, mis tagavad projekti piisava ĂŒhtsuse, olles omavahel hĂ€sti kooskĂ”lastatud ja vĂ”imaldades neid edaspidiselt kergesti ja laialdaselt keeles kasutada.
See lÀhenemine on kindlasti kompromiss. Olles valmis suurema paketi rakendamiseks, on vÔimalik ette kujutada tÀiesti uut funktsionaalsuse maailma, mis on ÀÀrmiselt vÔimas ja kasulik. Kui on vajadus saada uusi funktsionaalsusi, mis sobivad kÔikide teistega, kuid te ei ole valmis investeerima suuri jÔupingutusi projekti arendamisse, vÔib see kahjuks viia teie projekti ulatuse vÀhenemiseni. Wolfram'i funktsioonide repositooriumi mÔte on pakkuda funktsionaalsust, mis mÀÀratleb projekti tuuma, vÔimaldades lisada vÔimsaid funktsioone, samal ajal lihtsustades projekti programmeerimise head jÀrjepidevust.
Abi kasutajafunktsioonide lisamisel funktsioonide repositooriumisse
Meie ettevĂ”tte spetsialistid on vaeva nĂ€inud, et muuta Wolfram'i funktsioonide repositooriumisse panustamine kasutajatele piisavalt lihtsaks. Töölaud (juba ), saate lihtsalt jĂ€rjestikku navigeerida pĂ”hivaliku vahekaartide kaudu: File > New > RepositoryItem > Function Repository Item ja saate â» (programmiliselt töökeskkonnas. Samuti vĂ”ite kasutada funktsiooni sarnane - ):

On kaks peamist tegevust, mida peate tegema: esmalt kirjutage oma funktsiooni kood ja seejÀrel dokumenteerige, kuidas teie funktsioon peaks töötama.
KlĂ”psake ĂŒlaosas nuppu «Ava nĂ€idis», et nĂ€ha, milline nĂ€idis on vajalik:

Tegelikult pĂŒĂŒdlete luua midagi sarnast sisseehitatud funktsiooniga Wolfram keeles. Erinevus seisneb aga selles, et see vĂ”ib teha midagi palju konkreetsemat kui sisseehitatud funktsioon. Samuti on oodatud selle tĂ€psuse ja usaldusvÀÀrsuse mÀÀr madalam.
Peate mÀÀrama oma funktsiooni nime, mis jĂ€rgitaks Wolfram keele funktsiooni nimetegevuse pĂ”himĂ”tteid. Samuti peate vĂ€lja töötama oma funktsiooni dokumentatsiooni, jĂ€rgides sisseehitatud funktsioonide nĂ€iteid. RÀÀgin sellest hiljem lĂ€hemalt. Praegu pöörake tĂ€helepanu, et mÀÀratlemise failis ĂŒlaosas on nupp , kus selgitatakse, mida teha, ja nupp âTööriistadâ, mis pakub teie funktsiooni dokumentatsiooni vormindamise tööriistu.
Kui olete kindel, et kĂ”ik on Ă”igesti tĂ€idetud ja olete valmis, vajutage nuppu âCheckâ (âKontrolliâ). On tĂ€iesti normaalne, et te ei ole veel kĂ”iki ĂŒksikasju selgeks saanud. SeetĂ”ttu viiakse funktsioon âCheckâ automaatselt lĂ€bi ja teostatakse palju stiili ja jĂ€rjepidevuse kontrolli. Tihti pakub see kohe teile kinnitamist ja paranduste aktsepteerimist (nt: âSee rida peaks lĂ”ppema koolonigaâ, ja see pakub sissekandmiseks kooloni). MĂ”nikord palub see teil midagi ise lisada vĂ”i muuta. Me kavatseme pidevalt lisada uusi funktsioone nupu âCheckâ automaatsetele funktsioonidele, kuid selle peamine eesmĂ€rk on tagada, et kĂ”ik, mida saadate funktsioonide hoidlasse, vastab vĂ”imalikult paljusid stiilisoovitusi.

Nii et pĂ€rast âKontrolliâ kĂ€ivitamist saate kasutada âEelvaadetâ. âEelvaadeâ loob eelvaate dokumentatsiooni lehe jaoks, mille olete mÀÀranud oma funktsiooni jaoks. Samuti saate luua eelvaate faili jaoks, mis on loodud teie arvutisse vĂ”i failile, mis asub pilves. Kui te ei ole mingil pĂ”hjusel rahul sellega, mida te eelvaates nĂ€ete, minge lihtsalt tagasi ja tehke vajalikud parandused ning seejĂ€rel vajutage uuesti nuppu Eelvaade.
NĂŒĂŒd olete valmis oma funktsiooni hoidlas avaldama. Nupp Deploy pakub teile nelja tegevusvĂ”imalust:

Sellel etapil on oluline, et saate oma funktsiooni saata Wolframi funktsioonide hoidlasse, et see oleks kergesti kergesti kÀttesaadav igale kasutajale. Samuti saate avaldada oma funktsiooni piiratud arvule kasutajatele. NÀiteks saate luua funktsiooni, mis asub kohapeal teie arvutis, nii et see oleks kergesti kÀtte saadav, kui kasutate just seda konkreetset arvutit. VÔi saate selle avaldada , et see oleks teile kergesti ligipÀÀsetav, kui olete pilves. Samuti saate avalikult funktsiooni jagada (deploiida) oma pilvekonto kaudu. Sel juhul ei ole see Wolframi funktsioonide kesksete hoidlate seas, kuid saate kellelegi anda URL-i, mis vÔimaldab neil teie funktsiooni teie kontolt kÀtte saada. (Tulevikus toetame me ka keskseid hoidlaid kogu meie ettevÔtte mastaabis).
Oletame, et soovite tÔesti oma funktsiooni Wolframi funktsioonide teadmistebaasi edastada. Selleks vajutate nuppu 'Saada' hoidlasse. Mis toimub sel hetkel? Teie taotlus suunatakse kohe meie spetsiaalsete kuraatorite meeskonna lÀbivaatamiseks ja heakskiitmiseks.
Kuna Teie taotlus lÀbib heakskiitmisprotsessi (mis tavaliselt vÔtab mitu pÀeva), saate teateid selle lÀbivaatamise seisust, samuti vÔimalikke soovitusi selle edasise kasutamise osas. Kuid niipea, kui Teie funktsioon on heaks kiidetud, avaldatakse see kohe Wolframi funktsioonide hoidlas ja see on igasuguseks kasutamiseks kÀttesaadav. (Ja see kuvatakse jne.)
Mida peaks hoidlas sisaldama?
Oluline on mĂ€rkida, et meie ettevĂ”ttes kehtivad vĂ€ga kĂ”rged tĂ€ielikkuse, usaldusvÀÀrsuse ja ĂŒldise kvaliteedi standardid. Ăle 6000 funktsiooni, mille oleme viimase 30+ aasta jooksul Wolframi keelde integreerinud, vastavad kĂ”ik neile nĂ”uetele. Wolframi funktsioonide hoidla eesmĂ€rk on kasutada kogu struktuuri ja funktsionaalsust, mis juba olemas Wolframi keeles, et lisada vĂ”imalikult palju palju kergemaid funktsioone (ehk funktsioone, millel on parem jĂ”udlus).
Wolfram'i funktsioonide depot olevad funktsioonid peavad kindlasti vastama Wolfram Language'i arendusprintsiipidele, et nad saaksid tÀielikult suhelda teiste funktsioonide ja kasutajate ootustega selle osas, kuidas funktsioonid peaksid Ôigesti töötama. Samas ei tohi funktsioonid olla sama tÀielikud ega usaldusvÀÀrsed.
Wolfram'i keele sisseehitatud funktsioonides pĂŒĂŒame teha tarkvara funktsioone vĂ”imalikult ĂŒldiseks. SeetĂ”ttu ei ole Wolfram'i funktsioonide depoos halb, kui sinna satub funktsioon, mis kĂ€sitleb mĂ”nda vĂ€ga konkreetset, kuid kasulikku juhtumit. NĂ€iteks funktsioon saab vastu vĂ”tta faile kindlas formaadis ja luua meiliteateid kindlal viisil. loob diagramme, kasutades ainult kindlaid vĂ€rve ja sildistamist jne.
Ăks aspekt, mis on seotud sisseehitatud funktsioonidega, on see, et meie ettevĂ”te teeb kĂ”ik endast oleneva, et kĂ€sitleda kĂ”iki erandeid, et Ă”igesti töötleda vale sisendit ja nii edasi. Funktsioonide registris on tĂ€iesti tavaline, et seal on spetsiaalne funktsioon, mis kĂ€sitleb ĂŒlesande lahendamise pĂ”hijuhtumeid ja ignoreerib kĂ”iki teisi.
On ilmne, et parem on omada funktsioone, mis teevad rohkem ja teevad seda paremini, kuid funktsioonide registri optimeerimine â erinevalt Wolframi keele sisseehitatud funktsioonidest â peaks sisaldama rohkem funktsioone, mis on seotud suure hulga teiste funktsioonidega, selle asemel et sĂŒveneda iga konkreetse funktsiooni rakendamise protsessidesse.
NĂŒĂŒd vaatame nĂ€idet funktsioonide testimisest hoidlas. Selliste funktsioonide ĂŒhtsuse ootused on loomulikult palju madalamad kui keele sisseehitatud funktsioonidel. See on eriti oluline juhtudel, kus funktsioonid sĂ”ltuvad vĂ€listest ressurssidest, nagu API-d; seetĂ”ttu on pidev jĂ€rjestikuste testide lĂ€biviimine oluline, mis toimub automaatselt kontrollialgoritmide sees. Failis nb saate selgelt mÀÀrata mÀÀratlemised (jaotises 'Lisateave') ja seadistada nii palju teste, nagu peate, mÀÀratletud kas sisendi ja vĂ€ljundi ridade vĂ”i tĂ€iskarakterobjektide tĂŒĂŒbina , nii palju kui peate vajalikuks. Lisaks pĂŒĂŒab sĂŒsteem pidevalt muuta teie esitatud dokumentatsiooni nĂ€iteid kontrollprotsessiks (mĂ”nikord vĂ”ib see olla ĂŒsna ressursimahukas, nĂ€iteks funktsiooni puhul, mille tulemus sĂ”ltub juhuslikest arvudest vĂ”i pĂ€evast).
Funktsioonide hoidlas eeldatakse mitmeid rakendamise keerukusi. MĂ”ned neist vĂ”ivad olla lihtsalt ĂŒhe koodirea pikkused, teised vĂ”ivad sisaldada tuhandeid vĂ”i kĂŒmneid tuhandeid ridu, ilmselt kasutades mitmeid abifunktsioone. Millal on mĂ”ttekas lisada funktsioon, mille mÀÀratlemiseks on vaja vĂ€ga vĂ€he koodi? Ăldiselt, kui funktsioonil on , mida kasutajad mĂ”istaksid, nĂ€hes seda koodiosas, siis on see juba lisamiseks valmis. Vastupidisel juhul on tĂ”enĂ€oliselt parem lihtsalt kirjutada oma programmi kood igakordselt uuesti, kui teil on seda vaja kasutada.
Funktsioonide hoidla pĂ”hieesmĂ€rk (nagu nimest jĂ€reldub) on keele funktsionaalsuse tĂ€iendamine uute funktsioonidega. Kui soovite lisada uusi andmeid vĂ”i , kasutage . Aga mida teha, kui soovite sisse viia uusi objektitĂŒĂŒpe oma arvutustes?
Tegelikult on kaks teed. VĂ”ib-olla soovite tutvustada uut objektitĂŒĂŒpi, mida kasutatakse uutes funktsioonides funktsioonide hoidlas. Sellisel juhul vĂ”ite alati lihtsalt kirjutada selle sĂŒmboolse esinduse ja kasutada seda funktsioonide sisendiks vĂ”i vĂ€ljundiks funktsioonide hoidlas.
Aga mis siis, kui soovite esitada objekti ja seejĂ€rel mÀÀrata, kuidas olemasolevad funktsioonid Wolfram Language'is peaksid koos töötama? Selleks on Wolfram Language'il alati olnud lihtne mehhanism, mida nimetatakse . MĂ”ningate piirangutega (eriti funktsioonide jaoks, mis ), funktsioonide hoidla vĂ”imaldab teil lihtsalt funktsiooni esitada ja selle jaoks vÀÀrtused mÀÀrata. (Uue olulise struktuuri loomisel, mis on tĂ€ielikult integreeritud Wolfram Language'i keelde, on oluline tagada jĂ€rjepidevuse ootused â see on tavaliselt vĂ€ga oluline protseduur, mida ei suuda saavutada ainult projekti kulude suurenemisega, ja see on midagi, mida meie ettevĂ”te teeb keele pikaajaliste arendusprojektide raames, see ĂŒlesanne ei ole eesmĂ€rk, mis on seatud hoidla arendamise raames).
Nii et mis vĂ”ib funktsioonide hoidlas koodis olla? , muidugi (kui see ei esinda vĂ€hemalt kuna ja programmide, nagu arvutuslik keskkond, toimimisele) samuti nagu mis tahes funktsioon funktsioonide hoidlast. Samuti on olemas teisi funktsioneerimise vĂ”imalusi: funktsioon funktsioonide hoidlas vĂ”ib kutsuda API-d, kas , vĂ”i . Muidugi on sellega seotud mĂ”ned riskid. Kuna ei ole garantiisid, et API ei muutu ning funktsioon funktsioonide hoidlas lakkab töötamast. Taoliste probleemide avastamiseks on dokumendilehtedel (jaotises âNĂ”udedâ) mĂ€rge iga funktsiooni kohta, mis sĂ”ltub mitte ainult Wolfram Language sisseehitatud funktsionaalsusest. (Muidugi, kui teema on reaalsed andmed, vĂ”ivad isegi sellise funktsionaalsuse puhul tekkida probleemid â sest reaalsed andmed maailmast muutuvad pidevalt ja mĂ”nikord isegi muutuvad nende mÀÀratlused ja struktuur.)
Kas kogu Wolframi funktsioonide hoidla kood peab olema kirjutatud Wolfram keeles? Kindlasti ei tohi vÀline API kood olla kirjutatud Wolfram keeles, kuna see isegi ei ole keele kood. Tegelikult, kui leiate funktsiooni praktiliselt igas vÀlist keeles vÔi raamatukogus, saate luua kest, mis vÔimaldab seda kasutada Wolframi funktsioonide hoidlas. (Tavaliselt tuleks selleks kasutada sisseehitatud funktsioone vÔi Wolfram keeles.)
Milline pole siis selle tegemise mĂ”te? See vĂ”imaldab kasutada kogu integreeritud Wolfram Language sĂŒsteemi ja selle ĂŒhtset tarkvara funktsioonide kogumit. Kui saad pĂ”hiteost vĂ€lisest raamatukogust vĂ”i keelest, siis saad kasutada Wolfram Language'i rikkalikku sĂŒmboolset struktuuri, et luua kasutajasĂ”bralik tippfunktsioon, mis vĂ”imaldab kasutajatel suhteliselt lihtsalt kasutada juba olemasolevat funktsionaalsust. VĂ€hemalt tuleks see toimida ideaalses maailmas, kus kĂ”ik teekide laadimise osad jms on olemas, ning selles olukorras lahendatakse need automaatselt Wolfram Language'i abil. (Tuleb mĂ€rkida, et praktikas vĂ”ivad esineda probleemid konkreetse arvutisĂŒsteemis, ning pilvesalvestuses vĂ”ivad tekkida tĂ€iendavad turbeprobleemid).
TĂ€nane arutelu: kui analĂŒĂŒsite esmakordselt tĂŒĂŒpilisi vĂ€liseid teeke, vĂ”ivad need sageli tunduda liiga keerulised, et neid saaks katta vaid paari funktsiooniga. Kuid paljude juhtumite puhul tuleneb suurem osa keerukusest infrastruktuuri loomisest, mis on vajalik teegi ja selle kĂ”ikide tugifunktsioonide jaoks. Siiski, kui kasutada Wolfram Language'i, on infrastruktuur reeglina juba pakettidesse integreeritud ning seega ei pea te kĂ”iki neid tugifunktsioone ĂŒksikasjalikult kĂ€sitlema; piisab, kui luua funktsioonid vaid paarile âtipptasemelâ funktsioonile, mis on suunatud teegi rakendusele.
Teadmistebaasi âökosĂŒsteemâ
Kui olete kirjutanud funktsioone, mida pidevalt kasutate, siis saatke need Wolfram'i funktsioonide repository! Isegi kui sellest ei tule lÔpuks midagi suuremat (keele arendus), on teil kindlasti mugavam kasutada neid funktsioone enda tarbeks. Siiski on loogiline eeldada, et kui te kasutate funktsioone pidevalt, siis vÔivad ka teised kasutajad neid kasulikeks pidada.
On loomulik, et vĂ”ite sattuda olukorda, kus teil ei ole vĂ”imalik â vĂ”i te ei soovi â oma funktsioone jagada vĂ”i kui juurdepÀÀsetakse privaatsetele teabele. Isegi sellistes olukordades saate lihtsalt oma funktsioone kĂ€ivitada oma isiklikus pilvekontos, neile juurdepÀÀsuks. (Kui teie organisatsioonil on , siis peagi saab see majutada oma privaatset funktsioonide hoidlit, mida saab teie organisatsioonist hallata ja mÀÀrata, kas kolmandatele kasutajatele esitada eelvaateid vĂ”i mitte.)
Wolfram'i funktsioonide registrisse saadetud funktsioonid ei pea olema ideaalsed; need peaksid olema lihtsalt kasulikud. See on natuke sarnane Unix'i klassikalise dokumentatsiooni âVigadeâ jaotisele â âMÀÀratlemise jaotisesâ on autorite mĂ€rkuste sektsioon, kus saate kirjeldada oma funktsiooni teadlikke piiranguid, probleeme jne. Lisaks, kui saadate oma funktsiooni registrisse, saate lisada saatmise mĂ€rkmeid, mida lugeda spetsiaalne kuraatorite meeskond.
PĂ€rast funktsiooni avaldamist on selle lehe allosas alati kaks linki: â» ja «â. Kui lisate mĂ€rkuse (nĂ€iteks âteatage mulle vigadestâ), vĂ”ite mĂ€rkida ruudu, mis ĂŒtleb, et soovite, et teie sĂ”num ja kontaktandmed edastataks funktsiooni autorile.
MĂ”nikord on vajalik lihtsalt kasutada Wolframi funktsioonide reposte funktsioone, nĂ€iteks sisseehitatud funktsioone, pilk nende koodi vaatamata. Kui aga soovite âsisse vaadataâ, on ĂŒlespool alati nupp âMĂ€rkmikâ. KlĂ”psake sellel ja saate oma koopia originaalsest mÀÀratlemismĂ€rkmikust, mis saadeti funktsioonide reposte. MĂ”nikord vĂ”ite selle lihtsalt kasutada oma vajaduste jaoks nĂ€idisena. Samuti saate arendada oma kohandatud versiooni sellest funktsioonist. VĂ”ib-olla soovite need teie leitud funktsioonid reposte salvestada oma arvutisse vĂ”i oma kontole oma pilvesalvestuses, vĂ”ib-olla soovite saata need funktsioonide teadmusbaasi, vĂ”ib-olla tĂ€iendatud, tĂ€iustatud versioonina algsest funktsioonist.
Tulevikus plaanime toetada Git-stiilis haru jagamist funktsioonide repositooriumide jaoks, kuid praegu pĂŒĂŒame seda lihtsamaks teha ning meil on alati ainult ĂŒks aktsepteeritud versioon iga funktsiooni jaoks, mis on keelde integreeritud. Enamasti (kui arendajad ei loobu nende loodud funktsioonide toetamisest ja vastavad kasutajate kĂŒsimustele) omandab funktsiooni esialgne autor uuenduste ĂŒle kontrolli ning saadab uued versioonid, mis seejĂ€rel lĂ€bivad kontrollimise ning, kui kĂ”ik on korras, avaldatakse keeles.
Vaatame, kuidas töötab loodud funktsioonide âversioonilisusâ. Praegu, kui kasutate funktsiooni funktsioonide repositooriumist, salvestatakse selle mÀÀratlemine teie arvutisse (vĂ”i teie pilvekonto, kui kasutate pilve). Kui ilmub uus versioon funktsioonist, saate jĂ€rgmise kasutamise korral teate selle kohta. Ja kui soovite funktsiooni uue versiooniga uuendada, saate seda teha kĂ€suga . ("Funktsionaalne BLOB-objekt" sisaldab tegelikult rohkem teavet versioonide kohta ja tulevikus plaanime muuta selle meie kasutajatele kergemini kĂ€ttesaadavaks.)
Wolframi funktsioonide hoidla ĂŒks suurepĂ€raseid omadusi on see, et iga Wolfram Language'i programm vĂ”ib igal kohal kasutada seal olevate funktsioonide. Kui programm on esindatud mĂ€rkmikus, on sageli mugav vormindada hoidla funktsioone kergesti loetavate âfunktsionaalsete binaarobjektidenaâ (vĂ”ib-olla koos vastava versioonide komplektiga).
Saate alati viidata igale funktsioonile funktsioonide hoidlas, kasutades tekstilist . Ja see on vĂ€ga mugav, kui kirjutate koodi vĂ”i skripte otse Wolfram Engine'i jaoks, nĂ€iteks (tuleb eraldi rĂ”hutada, et funktsioonide hoidla on tĂ€ielikult ĂŒhilduv ).
Kuidas see töötab?
Wolframi hoidlas on funktsioonide sees vĂ”imalik kasutada tĂ€pselt sama andmebaasi, nagu ka (andmehoidla, , ja jne), nagu kĂ”ik ĂŒlejÀÀnud Wolfram sĂŒsteemiresursid, pĂ”hineb lĂ”ppkokkuvĂ”ttes funktsioonil .
Vaadakem :

Sisemiselt saate nÀha teatud teavet, kasutades funktsiooni :

Kuidas töötab ressursifunktsiooni seadistamine? Lihtsaim on puhas kohalik juhtum. Siin on nÀide, mis vÔtab funktsiooni (antud juhul lihtsalt puhta funktsiooni) ja mÀÀratleb selle ressursifunktsioonina antud programmi seansi jooksul:

PÀrast mÀÀratlemist saate ressursifunktsiooni kasutada:

Pange tÀhele, et selle BLOB-objekti funktsiooni juures on must ikoon
. See tÀhendab, et BLOB-funktsioon kuulub mÀlu ressursifunktsiooni alla, mis on mÀÀratletud praegusele seansile. Ressursifunktsiooni puhul, mis on pidevalt talletatud teie arvutis vÔi pilvekontos, on hall ikoon
. Ja Wolframi funktsioonide rikkas ametlikus ressursifunktsiooni repodes on oranĆŸ ikoon
.
Nii et mis toimub, kui kasutate mÀÀratlemise mĂ€rguande menĂŒĂŒd? Esiteks vĂ”tab see kĂ”ik mÀÀratlused mĂ€rguandes ja loob neist sĂŒmboolse ). (Ja kui kasutate tekstilist IDE-d vĂ”i programmi, saate ka selgelt luua )
Funktsiooni lokaalne juurutamine oma arvutis toimub kĂ€suga ressursi objekti jaoks, et salvestada see kui teie failisĂŒsteemis. Pilvekontole juurutamine toimub kĂ€suga ressursi objekti jaoks, ning avalik juurutamine pilves â . KĂ”igis olukordades kasutatakse ka ressursifunktsiooni nime registreerimiseks, nii et töötaks.
Kui vajutate nuppu Submit funktsioonide hoidlas, toimub selle all see, mis kutsutakse ressursi objektil. (Ja kui te kasutate tekstilist sisestusliidest, vÔite ka seda otse kutsuda.)
Vaikimisi toimub esitamine nime all, mis on seotud teie Wolfram ID identifikaatoriga. Kuid kui esitate taotluse arendajate rĂŒhma vĂ”i organisatsiooni nimel, saate ja kasutada seda oma vaadete suhtlemiseks nime asemel.
PĂ€rast seda, kui olete saatnud oma funktsiooni funktsioonide teadmistebaasi, saab see kontrollimiseks jĂ€rjekorda. Kui saate tagasisidet, on see tavaliselt tekstifaili kujul, millele on lisatud tĂ€iendavaid âkommentaarirakkeâ. saate alati kontrollida oma taotluse staatust, minnes . Kuid niipea kui teie funktsioon on heaks kiidetud, saadetakse teile teade (e-posti teel) ja teie funktsioon lisatakse Wolfram'i funktsioonide hoidlasse.
MÔned peensused töötamises
Esmapilgul vĂ”ib tunduda, et saab lihtsalt vĂ”tta mÀÀratlemise mĂ€rkmiku ja sĂ”na-sĂ”nalt selle funktsioonide hoidlasse panna, kuid tegelikult on palju peensusi - nende töötlemiseks on vaja teostada ĂŒsna keeruline meta-programmeerimine, kĂ€sitledes nii koodi, mis mÀÀratleb funktsiooni, kui ka mÀÀratlemise mĂ€rkmiku. Suur osa sellest toimub sisemiselt, st 'ĂŒle pildi', kuid see vĂ”ib avaldada mĂ”ned tagajĂ€rjed, mida on hea mĂ”ista, kui kavatsete panustada funktsioonide teadmistebaasi.
Esimene konks: Kui tĂ€idate "MÀÀratlemise mĂ€rkmikku", saate igal pool lihtsalt viidata oma funktsioonile, kasutades nime, mis on sarnane MyFunction, mis nĂ€eb vĂ€lja nagu tavaline funktsiooni nimi Wolfram Language'is, kuid dokumentatsioonis asendatakse see â see on tĂ€pselt see, mida kasutajad tegelikult funktsiooni kasutamisel kasutavad.
Teine konks: kui loote funktsiooni ressurssi mÀÀratlemise mÀrkmikust, peavad kÔik funktsiooni mÀÀratlemises osalevad sÔltuvused olema fikseeritud ja selgelt kaasatud. Siiski, et tagada, et mÀÀratlemised jÀÀvad modulaarseteks, tuleb kÔik paigutada unikaalsesse . (Ilmselgelt on need , olemas funktsioonide registris.)
Tavaliselt ei nĂ€e te kunagi mingit jĂ€lge koodist, mis on kasutatud selle nimeiruumi seadistamiseks. Kuid kui mingil pĂ”hjusel kutsute oma funktsioonis vĂ€lja tĂ€itmata sĂŒmboli, nĂ€ete, et see sĂŒmbol asub funktsiooni sisekontekstis. Siiski, kui töötate mÀÀratlemiskirjaga, siis vĂ€hemalt sĂŒmbol, mis vastab funktsioonile, funktsionaalse BLOB-ina, mitte töötlemata sĂŒmbolina sisekontekstis.
Funktsioonide kogu on mĂ”eldud uute funktsioonide mÀÀratlemiseks. Need funktsioonid vĂ”ivad omada valikuid. Sageli on need valikud (nĂ€iteks, vĂ”i ) on vĂ”imalik kasutada integreeritud funktsioonide jaoks, samuti nende jaoks, millel on juba olemas integreeritud sĂŒmbolid. Kuid mĂ”nikord vĂ”ivad uued funktsioonid vajada ka uusi valikuid. Moodulsuse sĂ€ilitamiseks on vajalik, et need parameetrid oleksid sĂŒmbolid, mis on mÀÀratletud ainulaadses sisemises kontekstis (vĂ”i midagi sellist nagu tervete ressursside funktsioonid, mis tĂ€hendavad neid endid). Lihtsuse huvides vĂ”imaldab funktsioonide hoidla mÀÀrata uusi valikuid definitsioonides stringidena. Ja kasutaja mugavuse huvides töödeldakse neid definitsioone (eeldusel, et nad kasutasid ja ) töödeldakse ka nii, et funktsioonide kasutamisel vĂ”ivad parameetrid olla mÀÀratud mitte ainult stringidena, vaid ka globaalsete sĂŒmbolitena sama nimega.
Enamik funktsioone teeb lihtsalt seda, mida nad peavad tegema iga kord, kui neid kutsutakse, kuid mĂ”ned funktsioonid vajavad initsialiseerimist, enne kui nad saavad töötada teatud sessioonis â ja selle probleemi lahendamiseks on jaotises âMÀÀratlemineâ jaotis âInitsialiseerimine.â
Repo funktsioonid saavad kasutada teisi funktsioone, mis juba repo sees on, et kohandada funktsioonide mÀÀratlemisi. Kui on vaja luua kaks (vĂ”i enam) funktsiooni, mis viitavad ĂŒksteisele, tuleb need oma töö seansi kĂ€igus avada, et saaksite neile viidata nagu , seejĂ€rel saate luua vajalikud nende funktsioonide kombinatsioonid nĂ€iteks (ei saanud aru) ja lisada repo uus funktsioon juba varasemate pĂ”hjal. (vĂ”i juba vĂ”i varasem â mĂ”lemad sĂ”nad ei sobi)
ArenguvÔimalused. Mis peaks juhtuma, kui depot tÔeliselt suur (suureks) kasvab?
TÀna kÀivitasime ainult Wolframi funktsioonide repo, kuid aja jooksul ootame, et selle maht ja funktsionaalsus vÔivad dramaatiliselt kasvada. Selle kasvuga vÔivad esile kerkida erinevad probleemid, mida me juba osaliselt ette nÀeme.
Esimene probleem puudutab funktsioonide nimesid ja nende ainulaadsust. Funktsioonide hoidla on kavandatud nii, et nagu Wolfram Language'i sisseehitatud funktsioonide puhul, saab viidata igale antud funktsioonile, nimetades lihtsalt selle nime. Kuid see tĂ€hendab paratamatult, et funktsioonide nimed peavad olema kogu hoidlas globaalsetena ainulaadsed, nii et nĂ€iteks vĂ”ib hoidlas olla ainult ĂŒks .
Esmapilgul vĂ”ib see tunduda suure probleemina, kuid on oluline mĂ”ista, et see on peamiselt sama probleem, mis on seotud nĂ€iteks internetidomeenide vĂ”i sotsiaalmeedia mĂ€rkidega. Tegelikult on sĂŒsteemis hĂ€davajalik omada registreerijat â ja see on ĂŒks rolle, mida meie ettevĂ”te tĂ€idab Wolfram'i funktsioonide teadmistebaasis. (Privaatsete hoidlate versioonide puhul vĂ”ivad registreerijateks olla administraatorid.) Loomulikult vĂ”ib internetidomeeni registreerida, isegi kui seal ei ole midagi, kuid funktsioonide hoidlas saab funktsiooni nime registreerida ainult siis, kui sellel on tegelik funktsiooni mÀÀratlus.
Osa meie rollist Wolfram'i funktsioonide teadmusbaasi haldamisel on tagada, et valitud funktsiooni nimi oleks loogiline vastavalt funktsiooni mÀÀratlemisele ning vastaks Wolfram Language'i nimekonventsioonidele. Meil on enam kui 30 aastat kogemust Wolfram Language'i sisseehitatud funktsioonide nimede andmisel, ja meie kureerimise meeskond toob selle kogemuse ka funktsioonide kogusse. Loomulikult on alati erandeid. NĂ€iteks vĂ”ib nĂ€ida eelistatavam, et mĂ”nel funktsioonil on lĂŒhike nimi, kuid sageli on parem âkaitstaâ end pikema, spetsiifilisema nimega, sest siis on vĂ€iksem tĂ”enĂ€osus, et keegi soovib tulevikus sarnase nimega funktsiooni teha.
(Siinkohal tasub mÀrkida, et osaleja sildi lihtne lisamine funktsioonide ebaselguse vÀltimiseks ei too oodatud tulemust. Kui ei nÔuta, et silt alati mÀÀratletakse, tuleb iga antud funktsiooni jaoks mÀÀrata vaikimisi silt ning esile tÔsta autori silte, mis nÔuab taas globaalset koordineerimist.)
Wolfram'i funktsioonide teadmistebaasi kasvu korral on ĂŒks probleem, mis kindlasti ilmneb, funktsioonide leitavus. Selleks on sĂŒsteemis ette nĂ€htud (ja mÀÀratlemiseks vajalikud failid vĂ”ivad sisaldada mĂ€rksĂ”nu jne). Wolfram Language'i sisseehitatud funktsioonide jaoks on dokumentatsioonis kĂ”ikvĂ”imalikud ristviidatud lingid, mis aitavad funktsioone "reklaamida". Funktsioonid funktsioonide hoidlas vĂ”ivad viidata sisseehitatud funktsioonidele. Aga kuidas on vastupidi? Selleks kavatseme katsetada erinevaid skeeme, et esitada hoidla funktsioone sisseehitatud funktsioonide dokumentatsioonilehtedel.
Wolfram Language'i sisseehitatud funktsioonide jaoks on olemas nii-öelda avastamisaste, mida tagab , mis pakuvad organiseeritud funktsioonide loendeid, mis on seotud konkreetsete valdkondadega. Alati on keeruline Ă”igesti tasakaalustada kĂ€siraamatute lehti ja kui Wolframi keele tase tĂ”useb, peavad kĂ€siraamatu lehed sageli olema tĂ€ielikult ĂŒmber korraldatud. Funktsioonide paigutamine laialdastesse kategooriatesse on ĂŒsna lihtne ning isegi nende kategooriate jĂ€rkjĂ€rguline jaotamine on vĂ”imalik, kuid palju vÀÀrtuslikum on omada Ă”igesti korraldatud kĂ€siraamatu lehti. Siiani pole selge, kuidas neid kĂ”ige paremini kogu funktsioonide teadmiste baasi jaoks luua. NĂ€iteks, funktsioonide repos saavad kĂ”ik avaldada veebilehe, mis sisaldab nende âvalikuidâ repos:

Wolframi funktsioonide repot on seadistatud kui pĂŒsiv funktsioonide hoidla, kus iga funktsioon seal alati töötab. Kahtlemata vĂ”ivad ilmuda ka uued versioonid funktsioonidest ning me ootame, et mĂ”ni funktsioon aegub aja jooksul. Funktsioonid toimivad, kui neid kasutatakse programmides, kuid nende dokumentatsiooni lehed viitavad uutele, arenenumatele funktsioonidele.
Wolfram'i funktsioonide repositorium on loodud kiireks juurdepÀÀsuks uutele funktsioonidele ja Wolfram'i keele uute vĂ”imaluste uurimiseks. Suure optimistlikkusega loodame, et osa sellest, mida funktsioonide repositoriumis on uuritud, vĂ”ib lĂ”puks saada Wolfram Language'i pĂ”hiosaks. Viimase kĂŒmne aasta jooksul on meil olnud sarnane hulk . Ăks Ă”ppetund, mis on saadud selle kogemuse pĂ”hjal, on see, et meie kvaliteedi- ja jĂ€rjepidevuse standardite saavutamine, millele keskendume kĂ”iges, mis on Wolfram'i keeles, nĂ”uab palju tööd, mis on enamasti keerulisem kui algsete ideede elluviimise katsed. Kuid isegi sel juhul vĂ”ib funktsioonide andmebaas olla vĂ€ga kasulik tĂ”estus tulevase funktsiooni kontseptsioonist, mis vĂ”ib lĂ”puks Wolfram'i keelde inteeritud saada.
Siin on kĂ”ige olulisem see, et funktsioonide hoidla funktsioon on kergesti kasutatav iga kasutaja jaoks juba praegu. Kuigi keele sisseehitatud funktsioonid vĂ”ivad olla palju paremad ja tĂ”husamad, vĂ”imaldab funktsioonide hoidla kasutajatel koheselt juurde pÀÀseda kĂ”igile uutele funktsioonidele. Mis veelgi olulisem, see kontseptsioon vĂ”imaldab igalĂŒhel lisada oma uusi funktsioone.
Varem ei olnud Wolfram keele ajaloos see idee nii hĂ€sti toimiv nagu praegu, kuid praeguses etapis on keeles juba nii palju pingutusi investeeritud ning arusaamine keele kavandamise printsiipidest on sĂŒgavam, et nĂŒĂŒd tundub tĂ€iesti vĂ”imalik, et suur kasutajate kogukond lisab funktsioone, mis toetavad projekti ĂŒhtsust, et neid saaks kasutada laiemalt.
Wolfram Language'i kasutajate seas on uskumatult tugev talentide vaim. (Loomulikult kuuluvad sellesse kogukonda paljud valdkonna juhtivad teadlased ja arendajad eri valdkondadest.) Loodan, et Wolfram'i funktsioonide repo annab tÔhusalt platvormi selle talentide vaimu avastamiseks ja levitamiseks. Ainult koos suudame me luua midagi, mis oluliselt laiendab valdkonda, kuhu Wolfram'i keele arvutuslik paradigma saab rakenduda.
KolmekĂŒmne aasta jooksul oleme teinud pika teekonna Wolfram'i keele valdkonnas. NĂŒĂŒd, liikugu edasi koos. Kutsun ĂŒles kĂ”iki Wolfram'i keele austajaid ĂŒle kogu maailma kasutama funktsionaalseid repoteid ja uusi tarkvaraprojekte, nagu tasuta Wolfram Engine arendajatele.
Allikas: habr.com
