Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Pozdrav, Habr! Vašoj pozornosti predstavljam prijevod posta Stephena Wolframa "Repozitorij funkcija Wolfram: Pokretanje otvorene platforme za proširenje jezika Wolfram".

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Preduvjeti za konzistentnost Wolfram jezika

Danas stojimo na pragu velikih postignuća zajedno s programskim jezikom jezik Wolfram. Prije samo tri tjedna pokrenuli smo besplatni Wolfram motor za programerekako bismo pomogli našim korisnicima da integriraju jezik Wolfram u svoje velike softverske projekte. Danas pokrećemo Spremište funkcija Wolfram, kako bismo osigurali koordiniranu platformu za funkcije stvorene za proširenje jezika Wolfram, a također otvaramo repozitorij funkcija za svakoga tko može doprinijeti razvoju našeg softverskog proizvoda.

Wolfram Function Repository nešto je što je omogućila jedinstvena priroda Wolfram jezika ne samo kao programskog jezika, već i kao puni računalni jezik. U tradicionalnim programskim jezicima, dodavanje značajnih novih funkcija obično uključuje stvaranje cijelih dodatnih biblioteka koje mogu, ali ne moraju raditi kada se koriste zajedno. Međutim, u jeziku Wolfram toliko toga je već ugrađeno u sam jezik, da je moguće značajno proširiti njegovu funkcionalnost jednostavnim dodavanjem novih funkcija koje se odmah integriraju u holističku strukturu cijelog jezika.

Na primjer, spremište funkcija Wolfram već sadrži 532 nove značajke strukturiran u 26 tematskih kategorija:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Isto tako više od 6000 standardnih funkcija, ugrađen u jezik Wolfram, svaka funkcija iz repozitorija ima stranicu dokumentacije s njihovim detaljnim opisom i primjerima rada:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Da biste došli do stranice, kopirajte gornji objekt (funkcija BLOB), zalijepite ga u redak za unos i zatim pokrenite funkciju - već je ugrađena u jezik Wolfram i podržana prema zadanim postavkama počevši od inačica 12.0:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Ovdje treba napomenuti da prilikom obrade Logo QRCode Ne morate, na primjer, postaviti "biblioteku za obradu slika" - budući da smo već implementirali dosljedan i pažljivo algoritamski način u jeziku Wolfram obrada slike, koji se mogu odmah obraditi raznim funkcijama grafičkog jezika:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Nadam se da uz podršku divna i talentirana zajednica, koji je rastao i širio se (na temelju jezika Wolfram) tijekom posljednjih nekoliko desetljeća. Wolframov repozitorij funkcija omogućit će u doglednoj budućnosti značajno proširenje raspona (moguće potencijalno značajnih, specijaliziranih za različita područja znanosti i tehnologije) funkcija dostupnih u jeziku. Dakle, postaje moguće koristiti i sadržaj jezika (njegove ugrađene funkcije) i načela razvoja, koji se implementiraju na temelju jezika. (Ovdje treba napomenuti da jezik Wolfram već ima više od 30-godišnja povijest razvoja i stabilnog rasta).
Funkcije iz repozitorija mogu sadržavati male ili velike dijelove koda napisane u jeziku Wolfram. Na primjer, to mogu biti pozivi vanjski API-ji i usluge ili vanjske knjižnice na drugim jezicima. Jedinstvena značajka ovog pristupa je da kada dublje analizirate funkcionalnost na razini korisnika, neće biti potencijalnih nedosljednosti jer je pristup izgrađen na vrhu dosljedne strukture jezika Wolfram - i svaka će funkcija automatski raditi ispravno - točno kao namjeravala.trebala bi.
Shell i programska struktura Wolfram Feature Repository dizajnirana je tako da svatko može doprinijeti zajedničkoj stvari na najjednostavniji i najprikladniji način za njih - zapravo, samo ispunjavanjem tekstualne datoteke bilježnice (s nastavkom nb) WL. Ugrađene automatske funkcije omogućuju vam provjeru novih funkcija dodanih u repozitorij kako biste osigurali njihovu integraciju u jezik. Naša tvrtka se kladi na širok raspon korisnika koji mogu integrirati svoje funkcije u jezik, a ne na veliku složenost novih funkcija - i iako postoji proces pregleda, ne inzistiramo na nečem sličnom mukotrpnu analizu dizajna ili stroge standarde za potpunost i pouzdanost novih korisničkih značajki, za razliku od rigoroznijeg testiranja značajki ugrađenih u temeljni jezik koji koristimo.

Postoji mnogo kompromisa i detalja u ovom pristupu, ali naš je cilj optimizirati skladište značajki Wolfram za korisničko iskustvo i osigurati da nove korisničke značajke značajno pridonose razvoju jezika. Kako rastemo, ne sumnjam da ćemo morati izmisliti nove metode za obradu i provjeru valjanosti funkcija ugrađenih u repozitorij, ne samo za organiziranje velikog broja funkcija i pronalaženje onih koje su korisnicima potrebne. Ipak, ohrabruje činjenica da je put koji smo odabrali dobar početak. Ja osobno dodao nekoliko značajki u izvornu bazu podataka. Mnogi od njih temelje se na kodu koji sam osobno razvijao duže vrijeme. I trebalo mi je samo nekoliko minuta da ih gurnem u spremište. Sada kada su u repozitoriju, konačno mogu - odmah i u bilo koje vrijeme - koristiti ove funkcije prema potrebi, bez potrebe za traženjem datoteka, preuzimanjem paketa itd.

Povećanje učinkovitosti uz smanjenje troškova

Čak i prije interneta, postojali su načini dijeljenja koda jezika Wolfram (naš prvi veliki centralizirani projekt bio je MathSource, stvoren za Mathematicu 1991. na temelju CD-ROM-a itd.). Naravno, pristup predložen za implementaciju temeljen na repozitoriju funkcija Wolfram moćniji je i pouzdaniji alat za implementaciju gore navedenih zadataka.

Više od 30 godina naša tvrtka marljivo radi na održavanju integriteta strukture jezika Wolfram, a to je ključno za osiguranje da jezik Wolfram postane ne samo programski jezik, već i punopravni računalni jezik. Stoga je bit pristupa implementaciji repozitorija funkcija Wolfram korištenje jedinstvenog pristupa programiranju i razvoju novih funkcija koje se sekvencijalno dodaju i uklapaju u okvir jezika tako da se može razvijati i koevoluirati.

U strukturi implementacije svake funkcije pojavljuju se različiti računalni procesi. Ovdje treba napomenuti da je nužno da funkcija ima jasan i ujednačen izgled te vizualnu čitljivost za korisnika. U tom kontekstu, ugrađene funkcije jezika Wolfram predstavljene su s više od 6000 sekvencijalnih primjera kako pravilno programirati funkcije (ovo su naši video programiranja uživokoji uključuju stotine sati procesa stvaranja standardnih programa). Ono što ovaj pristup u konačnici čini Wolfram repozitorij značajki sposobnim za dobre performanse je strukturna priroda Wolfram jezika, s velikim brojem dodatnih i raznolikih biblioteka koje su već ugrađene u jezik. Na primjer, ako imate funkciju koja obrađuje slike, ili rijetki nizoviIli molekularne struktureI geografski podaci ili neke druge - njihova dosljedna simbolička reprezentacija već postoji u jeziku, i zahvaljujući tome vaša funkcija odmah postaje kompatibilna s drugim funkcijama u jeziku.

Stvaranje repozitorija koji zapravo dobro radi zanimljiv je zadatak metaprogramiranja. Na primjer, višak ograničenja u programu neće omogućiti postizanje potrebne unifikacije i univerzalnosti algoritma. Kao što kod nedovoljnog broja funkcionalnih ograničenja nećete moći implementirati dovoljno točan slijed izvršavanja algoritma. Nekoliko prethodnih primjera implementacije kompromisa ovih pristupa, koje je implementirala naša tvrtka, radilo je prilično stabilno - to su: Demonstracije projekta Tungsten, pokrenut 2007. i sada radi na mreži s više od 12000 korisnički interaktivnih demonstracija. U Wolfram baza podataka postoji više od 600 gotovih baza podataka koje se mogu koristiti u jeziku Wolfram, i Wolfram neuronska mreža za pohranu nadopunjuje se novim neuronskim mrežama gotovo svaki tjedan (sada ih ima već 118) i odmah se povezuju putem funkcije NetModel na jeziku Wolfram.

Svi navedeni primjeri imaju temeljnu značajku - objekti i funkcije prikupljeni u projektu imaju vrlo visok stupanj strukturiranosti i distribucije procesa. Naravno, detalji strukture onoga što je demo ili neuronska mreža ili nešto drugo mogu uvelike varirati, ali temeljna struktura za bilo koje trenutno spremište uvijek ostaje ista. Dakle, koje je vaše mišljenje, dragi korisniče, o stvaranju takvog repozitorija koji dodaje proširenja jeziku Wolfram? Wolfram Language je dizajniran da bude izuzetno fleksibilan, tako da se može proširivati ​​i modificirati na bilo koji način. Ova je okolnost izuzetno važna za mogućnost brzog stvaranja raznih softverskih projekata velikih razmjera u jeziku Wolfram. Ovdje treba napomenuti da će se s povećanjem fleksibilnosti jezika troškovi projekata koji se implementiraju na takvom jeziku neizbježno povećati. To je zbog činjenice da što više korisnik koristi takav jezik, dobiva više namjenske funkcionalnosti, ali ne treba zaboraviti da ovakav pristup može imati i negativne strane u smislu nemogućnosti osiguranja konzistentne konzistentnosti programskih modula.

Postoji čest problem s bibliotekama u tradicionalnim programskim jezicima - ako koristite jednu biblioteku, na primjer, kod će raditi ispravno, ali ako pokušate koristiti više biblioteka, nema jamstva da će one međusobno ispravno komunicirati . Također, u tradicionalnim programskim jezicima - za razliku od punopravnog računalnog jezika - ne postoji način da se jamči prisutnost dosljednih ugrađenih prikaza za bilo koje funkcije ili tipove podataka osim njihovih osnovnih struktura. Ali, zapravo, problem je čak i veći nego što se čini na prvi pogled: ako se gradi vertikala funkcionalnosti velikih razmjera, tada je nemoguće bez ogromnih troškova centraliziranog projektnog programiranja koje stavljamo u jezik Wolfram postići dosljednost. Stoga je važno da svi softverski moduli uvijek ispravno rade zajedno.

Dakle, ideja iza repozitorija značajki Wolfram je izbjeći gore navedeni problem jednostavnim dodavanjem proširenja jeziku u relativno malim dijelovima koda putem pojedinačnih značajki koje je lakše razviti kao koherentne module. Imajući to u vidu, postoje značajke programiranja koje se ne mogu učiniti praktičnim korištenjem pojedinačnih funkcija (i naša tvrtka planira objaviti optimizirani algoritam programiranja u bliskoj budućnosti kako bi pomogla u implementaciji velikih softverskih paketa). Međutim, na temelju funkcija koje su već ugrađene u jezik Wolfram, postoje mnoge mogućnosti programiranja koje se implementiraju na temelju pojedinačnih funkcija. Ideja ovdje je da je uz relativno malo programiranja moguće stvoriti niz novih i vrlo korisnih funkcija koje će osigurati dovoljnu koherentnost dizajna, one će biti međusobno dobro usklađene, a također, uz to, moći će se lako i široko koristiti u jeziku u budućnosti.

Ovaj pristup je, naravno, kompromis. Kada bi se implementirao veći paket, mogao bi se zamisliti cijeli novi svijet funkcionalnosti koji bi bio iznimno moćan i koristan. Ako postoji potreba za novom funkcionalnošću koja će se uklopiti u sve ostalo, ali niste spremni uložiti puno truda u razvoj projekta, to, nažalost, može dovesti do smanjenja opsega vašeg projekta. Ideja koja stoji iza repozitorija značajki Wolfram je pružiti funkcionalnost definirajućem dijelu projekta; ovaj pristup će dodati snažnu funkcionalnost istovremeno olakšavajući održavanje dobre dosljednosti u programskom projektu.

Pomoć pri dodavanju prilagođenih funkcija u spremište funkcija

Naš tim naporno je radio kako bi korisnicima olakšao doprinos značajkama Wolfram repozitorija. Na radnoj površini (već u inačica 12.0), možete jednostavno ići redom kroz kartice glavnog izbornika: File > New > RepositoryItem > Function Repository Item i dobit ćete "Definicija Bilježnica" (programski unutar radnog stola. Također možete koristiti analognu funkciju - Stvori bilježnicu["Resurs funkcije"]):

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Postoje dva glavna koraka koja ćete morati izvršiti: prvo, zapravo zapišite kod za svoju funkciju i, drugo, zapišite dokumentaciju koja ilustrira kako vaša funkcija treba raditi.
Kliknite gumb "Otvori uzorak" na vrhu kako biste vidjeli primjer onoga što trebate učiniti:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

U biti, pokušavate stvoriti nešto slično ugrađenoj funkciji u jeziku Wolfram. Osim što može učiniti nešto puno specifičnije od ugrađene funkcije. Istovremeno, očekivanja u pogledu njegove cjelovitosti i pouzdanosti bit će znatno niža.
Svojoj funkciji trebate dati naziv koji slijedi smjernice za imenovanje funkcija jezika Wolfram. Osim toga, trebat ćete razviti dokumentaciju za svoju funkciju, sličnu ugrađenim funkcijama jezika. O tome ću detaljnije govoriti kasnije. Za sada samo primijetite da se u redu gumba na vrhu datoteke definicije bilježnice nalazi gumb "Stilske smjernice", koji objašnjava što učiniti, i gumb Alati, koji pruža alate za formatiranje dokumentacije vaše funkcije.
Kada ste sigurni da je sve ispravno popunjeno i da ste spremni, kliknite gumb "Provjeri". Sasvim je normalno da još niste shvatili sve detalje. Tako će se funkcija "Provjeri" automatski pokrenuti i izvršiti mnoge provjere stila i dosljednosti. Često će vas odmah tražiti da potvrdite i prihvatite ispravke (Na primjer: "Ovaj redak mora završavati dvotočkom," i od vas će se tražiti da unesete dvotočku). Ponekad će vas zamoliti da sami nešto dodate ili promijenite. Neprestano ćemo dodavati nove značajke automatskoj funkciji gumba Provjeri, ali u osnovi je njegova svrha osigurati da sve što pošaljete u repozitorij značajki već pobliže slijedi što više stilskih smjernica

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Dakle, nakon pokretanja "Provjeri", možete koristiti "Pregled". "Pregled" stvara pregled stranice dokumentacije koju ste definirali za svoju funkciju. Također možete stvoriti pregled za datoteku stvorenu na vašem računalu ili za datoteku koja se nalazi u pohrani u oblaku. Ako iz nekog razloga niste zadovoljni onim što vidite u pretpregledu, jednostavno se vratite i izvršite potrebne ispravke, a zatim ponovno kliknite gumb Pregled.
Sada ste spremni gurnuti svoju funkciju u repozitorij. Gumb Deploy daje vam četiri mogućnosti:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Važna stvar u ovom koraku je da možete poslati svoju funkciju u Wolframov repozitorij funkcija tako da bude dostupna svima. Istodobno, svoju funkciju možete postaviti i za ograničeni broj korisnika. Na primjer, možete stvoriti funkciju koja se nalazi lokalno na vašem računalu tako da bude dostupna kada koristite to određeno računalo. Ili ga možete objaviti u svom račun u oblaku, tako da vam bude dostupan kada ste spojeni na oblak. Također možete javno ugostiti (postaviti) značajku putem svog računa u oblaku. Neće biti u središnjem spremištu značajki Wolframa, ali ćete nekome moći dati URL koji će im omogućiti da dobiju vašu značajku s vašeg računa. (U budućnosti ćemo također podržavati središnja spremišta u cijeloj našoj tvrtki.)

Recimo da zapravo želite poslati svoju funkciju u bazu znanja o funkcijama Wolfram. Da biste to učinili, kliknite gumb "Pošalji" u repozitorij. Pa što se onda događa u ovom trenutku? Vaša prijava odmah je stavljena u red čekanja za pregled i odobrenje našeg predanog tima kustosa.

Kako vaša prijava bude prolazila kroz proces odobravanja (koji obično traje nekoliko dana), primit ćete obavijesti o njenom statusu i moguće prijedloge za buduću upotrebu. Ali nakon što vaša značajka bude odobrena, bit će odmah objavljena u Wolfram Feature Repository i bit će dostupna svima za korištenje. (I ovo će se pojaviti u sažetci vijesti o novim značajkama i tako dalje)

Što bi trebalo biti u spremištu?

Treba napomenuti da naša tvrtka ima vrlo visoke standarde za cjelovitost, pouzdanost i ukupnu kvalitetu, a od 6000+ funkcija koje smo već ugradili u jezik Wolfram tijekom proteklih 30+ godina, sve ispunjavaju gore navedene zahtjeve. Cilj Wolfram Function Repository je koristiti svu strukturu i funkcionalnost koja već postoji u jeziku Wolfram kako bi se dodalo što više lakših funkcija (to jest, funkcija s većom izvedbom).

Naravno, funkcije u repozitoriju funkcija Wolfram moraju biti u skladu s načelima dizajna jezika Wolfram - tako da mogu u potpunosti komunicirati s drugim funkcijama i očekivanjima korisnika o tome kako bi funkcija trebala ispravno raditi. Međutim, funkcije ne moraju biti jednake cjelovitosti ili pouzdanosti.

U ugrađenim funkcijama jezika Wolfram naporno radimo na tome da programske funkcije budu što općenitije moguće. Uz to, kada ste u repozitoriju funkcija Wolfram, nema ništa loše u tome da u njemu imate funkciju koja jednostavno obrađuje neki vrlo specifičan, ali koristan slučaj. Na primjer, funkcija SendMailFromNotebook može primati datoteke u jednom određenom formatu i stvarati poštu na jedan određeni način. Poligonalni dijagram stvara grafikone samo s određenim bojama i oznakama itd.

Još jedna točka povezana s ugrađenim funkcijama je da naša tvrtka ulaže sve napore da obradi sve atipične slučajeve, da ispravno obradi netočan unos i tako dalje. U repozitoriju funkcija potpuno je normalno da postoji posebna funkcija koja obrađuje glavne slučajeve rješavanja problema i zanemaruje sve ostale.

Očigledno je da je bolje imati funkcije koje rade više i bolje, ali optimizacija za repozitorij funkcija - za razliku od ugrađenih funkcija jezika Wolfram - trebala bi imati više funkcija u paketu s više funkcija umjesto da se zadubljuje u procese implementacije svake specifične funkcije.

Sada pogledajmo primjer testiranja funkcija u repozitoriju. Očekivanja dosljednosti za takve funkcije su prirodno mnogo niža nego za funkcije ugrađenog jezika. To je osobito istinito u slučajevima kada funkcije ovise o vanjskim resursima kao što su API-ji, važno je stalno provoditi dosljedna testiranja, što se automatski događa unutar algoritama verifikacije. U nb datoteci možete eksplicitno navesti definicije (u odjeljku Dodatne informacije) i navesti onoliko testova koliko je definirano ulaznim i izlaznim nizovima ili punim karakternim objektima tipa VerificationTest, koliko vam odgovara. Osim toga, sustav stalno pokušava pretvoriti primjere dokumentacije koje dajete u proces provjere (i ponekad to može biti prilično zahtjevno, na primjer, za funkciju čiji rezultat ovisi o nasumičnim brojevima ili dobu dana).

Kao rezultat toga, repozitorij funkcija će imati brojne složenosti implementacije. Neki će biti samo jedan redak koda, drugi mogu uključivati ​​tisuće ili desetke tisuća redaka, vjerojatno koristeći mnoge pomoćne funkcije. Kada se isplati dodati funkciju koja zahtijeva vrlo malo koda za definiranje? Uglavnom, ako za funkciju postoji dobro mnemotehničko ime, što bi korisnici lako razumjeli da su ga vidjeli u dijelu koda, tada se već može dodati. U suprotnom, vjerojatno je bolje samo ponovno dodati kod svom programu svaki put kada ga trebate koristiti.

Glavna svrha repozitorija funkcija (kao što mu ime sugerira) je uvođenje novih značajki u jezik. Ako želite dodati nove podatke ili novi entiteti, koristiti Wolfram Repozitorij podataka. Ali što ako želite uvesti nove vrste objekata za svoje izračune?

Zapravo postoje dva načina. Možda ćete htjeti uvesti novi tip objekta koji će se koristiti u novim funkcijama u repozitoriju funkcija. I u ovom slučaju, uvijek možete samo zapisati njegovu simboličku reprezentaciju i koristiti je prilikom unosa ili izlaza funkcija u repozitorij funkcija.

Ali što ako želite predstaviti objekt i zatim definirati, kroz postojeće funkcije u jeziku Wolfram, da želite raditi s njim? Wolfram Language je uvijek imao lagani mehanizam za to, tzv UpValues. Uz određena ograničenja (osobito za funkcije koje ne može procijeniti njihove argumente), repozitorij funkcija omogućuje vam jednostavno predstavljanje funkcije i definiranje vrijednosti za nju. (Povećanje očekivanja dosljednosti pri stvaranju novog glavnog dizajna koji je u potpunosti integriran kroz jezik Wolfram općenito je vrlo važan postupak koji se ne može postići jednostavnim povećanjem troškova projekta i nešto je što naša tvrtka radi kao dio projekata za dugoročni razvoj jezika, ova zadaća nije cilj koji se postavlja u sklopu razvoja repozitorija).

Dakle, što bi moglo biti u kodu funkcije u repozitoriju funkcija? Sve je ugrađeno u jezik Wolfram, naravno (barem ako ne predstavlja prijetnje za sigurnost i performanse samog programa, kao računalnog okruženja) kao i bilo koje funkcije iz repozitorija funkcija. Međutim, postoje i druge funkcionalnosti: funkcija u repozitoriju funkcija može pozvati API ili in Wolfram CloudIli iz drugog izvora. Naravno, postoje određeni rizici povezani s tim. Zbog činjenice da nema jamstava da se API neće promijeniti, funkcija u pohrani funkcija prestat će raditi. Kako bi se lakše identificirali problemi poput ovog, postoji napomena na stranici dokumentacije (u odjeljku Zahtjevi) za bilo koju značajku koja se oslanja na više od samo ugrađene funkcije jezika Wolfram. (Naravno, kada se radi o stvarnim podacima, može biti problema čak i s ovom funkcionalnošću - jer se podaci iz stvarnog svijeta stalno mijenjaju, a ponekad se mijenjaju i njihove definicije i struktura.)

Treba li sav kod za repozitorij značajki Wolfram biti napisan u Wolframu? Svakako, kod unutar vanjskog API-ja ne bi trebao biti napisan na jeziku Wolfram, koji čak i ne čini jezični kod. Zapravo, ako pronađete funkciju u gotovo bilo kojem vanjskom jeziku ili biblioteci, možete stvoriti omot koji vam omogućuje da je koristite u Wolfram repozitoriju funkcija. (Obično biste za to trebali koristiti ugrađene funkcije ExternalEvaluate ili Vanjska funkcija u kodu jezika Wolfram.)

Dakle, koja je svrha raditi ovo? U biti, ovo vam omogućuje da koristite cijeli integrirani sustav Wolfram Language i njegov cijeli objedinjeni skup softverskih mogućnosti. Ako dobijete osnovnu implementaciju iz vanjske biblioteke ili jezika, tada možete koristiti bogatu simboličku strukturu jezika Wolfram za stvaranje prikladne funkcije najviše razine koja korisnicima omogućuje jednostavnu upotrebu bilo koje već implementirane funkcionalnosti. U najmanju ruku, ovo bi trebalo biti izvedivo u idealnom svijetu u kojem postoje svi sastavni dijelovi učitavanja knjižnica itd., u kojem bi slučaju njima automatski upravljao jezik Wolfram. (Treba napomenuti da u praksi može biti problema s postavljanje vanjskih jezika određeni računalni sustav i pohrana u oblaku mogu predstavljati dodatne sigurnosne probleme).

Usput, kada prvi put pogledate tipične vanjske knjižnice, često se čine previše složene da bi bile pokrivene u samo nekoliko funkcija, ali u mnogim slučajevima, velik dio složenosti dolazi od stvaranja infrastrukture potrebne za knjižnicu i sve funkcije za podržati to. Međutim, kada koristite jezik Wolfram, infrastruktura je obično već ugrađena u pakete, pa nema potrebe detaljno izlagati sve ove funkcije podrške, već samo stvoriti funkcije za "najviše" funkcije specifične za aplikaciju u biblioteci. .

"Ekosustav" baze znanja

Ako ste napisali funkcije koje redovito koristite, pošaljite ih u Wolfram Function Repository! Ako iz ovoga ne proizađe nešto više (jezični razvoj), čak i tada će vam biti mnogo prikladnije koristiti funkcije za osobnu upotrebu. Međutim, logično je pretpostaviti da ako redovito koristite funkcije, možda će i drugim korisnicima biti korisne.

Naravno, možete se naći u situaciji u kojoj ne možete - ili ne želite - dijeliti svoje funkcije ili u slučaju dobivanja pristupa privatnim izvorima informacija. Čak i u takvim slučajevima, možete jednostavno implementirati funkcije na svom vlastitom računu u oblaku, navođenje prava pristup njima. (Ako vaša organizacija ima Wolfram Enterprise privatni oblak, tada će uskoro moći ugostiti vlastito privatno spremište značajki, kojim se može upravljati iz vaše organizacije i postaviti hoće li se prisilno nametnuti prikazi korisnicima trećih strana.)

Funkcije koje šaljete u Wolframov repozitorij funkcija ne moraju biti savršene; samo moraju biti korisni. Ovo je pomalo poput odjeljka "Pogreške" u klasičnoj Unix dokumentaciji - u "Odjeljku definicija" postoji odjeljak "Bilješke autora" gdje možete opisati ograničenja, probleme itd. koje već znate o svojoj funkciji. Osim toga, kada pošaljete svoju značajku u repozitorij, možete dodati bilješke o predaji koje će pročitati posvećeni tim kustosa.

Nakon što je značajka objavljena, njena stranica uvijek ima dvije veze na dnu: "Pošaljite poruku o ovoj značajki"A"Raspravljajte u zajednici Wolfram" Ako prilažete bilješku (npr. recite mi o greškama), možete označiti okvir koji kaže da želite da se vaša poruka i kontakt podaci dijele s autorom značajke.

Ponekad samo želite koristiti funkcije iz Wolfram repozitorija funkcija, kao što su ugrađene funkcije, bez gledanja njihovog koda. Međutim, ako želite baciti pogled unutra, na vrhu uvijek postoji gumb Notepad. Kliknite na nju i dobit ćete vlastitu kopiju izvorne definicijske bilježnice koja je poslana u repozitorij značajki. Ponekad ga možete koristiti samo kao primjer za svoje potrebe. U isto vrijeme, također možete razviti vlastitu modifikaciju ove funkcije. Možda ćete htjeti objaviti ove funkcije koje ste pronašli iz repozitorija na svom računalu ili u svom računu za pohranu u oblaku lisnih uši, možda ih želite poslati u bazu znanja o funkcijama, možda kao poboljšanu, proširenu verziju originalne funkcije.

U budućnosti planiramo podržati račvanje u Git stilu za repozitorije značajki, ali za sada se trudimo da bude jednostavno i uvijek imamo samo jednu prihvaćenu verziju svake značajke ugrađene u jezik. Češće nego ne (osim ako razvojni programeri odustanu od održavanja značajki koje su razvili i odgovore na podneske korisnika), izvorni autor značajke preuzima kontrolu nad njezinim ažuriranjima i podnosi nove verzije, koje se zatim pregledavaju i, ako prođu postupak pregleda, , objavljeno na jeziku.

Razmotrimo pitanje kako funkcionira "versioniranje" razvijenih funkcija. Upravo sada, kada koristite funkciju iz repozitorija funkcija, njena će definicija biti trajno pohranjena na vašem računalu (ili na vašem računu u oblaku ako koristite oblak). Ako je dostupna nova verzija značajke, sljedeći put kada je koristite primit ćete poruku koja vas obavještava o tome. A ako želite ažurirati funkciju na novu verziju, možete to učiniti pomoću naredbe ResourceUpdate. ("Function blob" zapravo pohranjuje više informacija o verzijama i planiramo to učiniti dostupnijim našim korisnicima u budućnosti.)

Jedna od lijepih stvari kod Wolfram Function Repository je ta da svaki program na jeziku Wolfram, bilo gdje, može koristiti funkcije iz njega. Ako se program pojavi u bilježnici, često je zgodno formatirati funkcije repozitorija kao jednostavne funkcije "funkcijski binarni objekt" (možda s odgovarajućim postavljenim verzijama).

Uvijek možete pristupiti bilo kojoj funkciji u repozitoriju funkcija pomoću teksta ResourceFunction[...]. I to je vrlo zgodno ako pišete kod ili skripte izravno za Wolfram Engine, na primjer, s koristeći IDE ili uređivač tekstualnog koda (posebno treba napomenuti da je repozitorij funkcija u potpunosti kompatibilan s Besplatan Wolfram Engine za programere).

Kako se to radi?

Unutar funkcija u Wolfram repozitoriju to je moguće pomoću potpuno istih sustavi resursa baze, kao u sva ostala naša postojeća spremišta (pohrana podataka, Repozitorij neuronske mreže, zbirka demo projekata itd.), kao i svi ostali resursi sustava Wolfram, ResourceFunction u konačnici temeljeno na funkciji ResourceObject.

Uzeti u obzir ResourceFunction:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Unutra možete vidjeti neke informacije pomoću funkcije Informacija:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Kako funkcionira postavljanje funkcije resursa? Najjednostavniji je čisto lokalni slučaj. Evo primjera koji uzima funkciju (u ovom slučaju samo čistu funkciju) i definira je kao funkciju resursa za danu sesiju programa:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Nakon što napravite definiciju, možete koristiti funkciju resursa:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Imajte na umu da postoji crna ikona u ovoj funkcijskoj mrljici Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram. To znači da se funkcija BLOB odnosi na funkciju resursa u memoriji definiranu za trenutnu sesiju. Značajka resursa koja je trajno pohranjena na vašem računalu ili računu u oblaku ima sivu ikonu Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram. Tu je i narančasta ikona za značajku službenog resursa u Wolfram Feature Repository Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram.

Dakle, što se događa kada koristite izbornik Proširi u Bilježnici definicija? Prvo, uzima sve definicije u bilježnici i iz njih stvara simboliku ResourceObject). (A ako koristite IDE ili program temeljen na tekstu, možete i eksplicitno stvoriti ResourceObject)

Lokalna implementacija funkcije iz repozitorija na vašem računalu izvodi se pomoću naredbe LocalCache za objekt resursa da ga spremite kao LocalObject na vašem datotečnom sustavu. Implementacija na račun u oblaku vrši se pomoću naredbe CloudDeploy za objekt resursa, a implementacija javnog oblaka je CloudPublish. U svakom slučaju ResourceRegister također se koristi za registraciju naziva funkcije resursa, dakle ResourceFunction["Ime"] će raditi.

Ako kliknete gumb Pošalji za repozitorij funkcija, što se događa ispod njega Resurs Submit pozvan na objekt resursa. (A ako koristite sučelje za unos teksta, također možete nazvati Resurs Submit direktno.)

Prema zadanim postavkama, podnesci se podnose pod imenom povezanim s vašim Wolfram ID-om. Ali ako podnosite prijavu u ime razvojnog tima ili organizacije, možete postavite zasebni ID izdavača i umjesto toga upotrijebite ga kao naziv za interakciju s vašim pogledima.

Nakon što pošaljete bilo koju od svojih funkcija u bazu znanja o funkcijama, ona će biti u redu za pregled. Ako dobijete komentare kao odgovor, oni će obično biti u obliku tekstualne datoteke s dodanim dodatnim "ćelijama komentara". Uvijek možete provjeriti status svoje prijave posjetom resource portal član sustava. Ali nakon što vaša značajka bude odobrena, bit ćete obaviješteni (putem e-pošte) i vaša će značajka biti objavljena u repozitoriju značajki Wolfram.

Neke suptilnosti na djelu

Na prvi pogled može se činiti da jednostavno možete uzeti bilježnicu s definicijama i doslovno je staviti u spremište funkcija, međutim, zapravo je uključeno dosta suptilnosti - a rukovanje njima zahtijeva prilično složeno meta-programiranje, rukovanje simboličkom obradom kao kod koji definira funkciju, a definiran je i sam Notepad. Većina toga događa se interno, iza scene, ali može imati neke implikacije koje vrijedi razumjeti ako namjeravate pridonijeti bazi znanja o značajkama.

Prva neposredna suptilnost: kada ispunite Bilježnicu definicija, možete se jednostavno svugdje pozivati ​​na svoju funkciju koristeći naziv kao što je Moja Funkcija, koji izgleda kao uobičajeni naziv za funkciju u jeziku Wolfram, ali za dokumentaciju repozitorija funkcija ovo je zamijenjeno ResourceFunction["Moja funkcija"] je ono što će korisnici zapravo koristiti kada rade s funkcijom.

Druga suptilnost: kada kreirate funkciju resursa iz Bilježnice definicija, sve ovisnosti uključene u definiciju funkcije moraju biti uhvaćene i eksplicitno uključene. Međutim, kako biste osigurali da definicije ostanu modularne, sve trebate staviti u jedinstveni imenski prostor. (Naravno, funkcije koje rade sve, nalaze se u spremištu funkcija.)

Obično nikada nećete vidjeti nikakav trag koda korištenog za konfiguraciju ovog prostora imena. Ali ako iz nekog razloga pozovete nedovoljno izvršen simbol unutar svoje funkcije, tada ćete vidjeti da je taj simbol u unutarnjem kontekstu funkcije. Međutim, kada se obrađuje Definition Notepad, postoji barem simbol koji odgovara samoj funkciji podesivo za najbolji prikaz kao funkcionalni BLOB, a ne neobrađeni lik u unutarnjem kontekstu.

Repozitorij funkcija služi za definiranje novih funkcija. I ove funkcije mogu imati opcije. Često ovi parametri (npr. način ili Veličina slike) moći će se koristiti za ugrađene funkcije, kao i za one za koje već postoje ugrađeni simboli. Ali ponekad nova značajka može zahtijevati nove opcije. Kako bi se održala modularnost, ovi parametri trebaju biti simboli definirani u jedinstvenom unutarnjem kontekstu (ili nešto poput cijelih funkcija resursa, to jest, njih samih). Radi jednostavnosti, repozitorij funkcija omogućuje vam definiranje novih opcija u definicijama nizova. A radi praktičnosti korisnika, ove definicije (pod pretpostavkom da se koriste OpcijaVrijednost и OptionsPattern) također se obrađuju tako da se pri korištenju funkcija parametri mogu specificirati ne samo kao nizovi, već i kao globalni simboli s istim imenima.

Većina funkcija jednostavno radi ono što bi trebale raditi svaki put kad se pozovu, ali neke funkcije moraju biti inicijalizirane prije nego što se mogu pokrenuti u određenoj sesiji - a za rješavanje ovog problema postoji odjeljak "Inicijalizacija" u odjeljku Definicija.

Funkcije iz repozitorija mogu koristiti druge funkcije koje su već u repozitoriju; kako biste postavili definicije za repozitorij funkcija koje uključuju dvije (ili više) funkcija koje se međusobno referiraju, morate ih implementirati u svojoj programskoj sesiji tako da možete referenca kao na njima ResourceFunction["Ime"], tada možete stvoriti kombinacije ovih funkcija koje su vam potrebne, primjere (nisam razumio) i dodati novu funkciju u repozitorij na temelju onih koje su već objavljene ranije. (ili već ili prije – obje riječi su nespretne)

Izgledi razvoja. Što bi se trebalo dogoditi kada skladište postane stvarno veliko?

Danas upravo pokrećemo Wolfram Feature Repository, ali s vremenom očekujemo da bi se njegova veličina i funkcionalnost mogle dramatično povećati, a kako bude rastao u razvoju, pojavit će se različiti problemi za koje već predviđamo da bi se mogli pojaviti.

Prvi problem odnosi se na nazive funkcija i njihovu jedinstvenost. Repozitorij funkcija dizajniran je na takav način da, poput ugrađenih funkcija u jeziku Wolfram, možete referencirati bilo koju funkciju jednostavnim navođenjem njezina naziva. Ali to neizbježno znači da nazivi funkcija moraju biti globalno jedinstveni u čitavom repozitoriju, tako da, na primjer, može postojati samo jedan ResourceFunction["Moja omiljena funkcija"].

Ovo se u početku može činiti kao veliki problem, ali vrijedi shvatiti da je to u osnovi isti problem kao i za stvari kao što su internetske domene ili ručke društvenih medija. A činjenica je da sustav jednostavno mora imati registratora - a to je jedna od uloga koju će naša tvrtka obavljati za bazu znanja Wolfram funkcije. (Za privatne verzije repozitorija, njihovi registrari mogu biti administratori.) Naravno, internetska domena se može registrirati bez ičega na njoj, ali u repozitoriju funkcije, naziv funkcije može se registrirati samo ako postoji stvarna definicija funkcija.

Dio naše uloge u upravljanju bazom znanja o funkcijama Wolfram je osigurati da je naziv odabran za funkciju logičan s obzirom na definiciju funkcije i da slijedi konvencije imenovanja jezika Wolfram. Imamo više od 30 godina iskustva u imenovanju ugrađenih funkcija u jeziku Wolfram, a naš tim kustosa to će iskustvo prenijeti i na repozitorij funkcija. Naravno, uvijek postoje iznimke. Na primjer, može se činiti poželjnijim imati kratak naziv za neku funkciju, ali bolje je "braniti" se dužim, konkretnijim nazivom jer je manja vjerojatnost da ćete u budućnosti naići na nekoga tko želi napraviti sličan naziv funkcije .

(Ovdje treba imati na umu da jednostavno dodavanje neke oznake člana za razjašnjavanje funkcija neće imati željeni učinak. Jer osim ako ne inzistirate na uvijek dodjeljivanju oznake, morat ćete definirati zadanu oznaku za bilo koju datu funkciju i također dodijeliti oznake autora , što bi opet zahtijevalo globalnu koordinaciju.)

Kako baza znanja o Wolframovim funkcijama raste, jedan od problema koji će se vjerojatno pojaviti jest otkrivanje funkcija za koje sustav pruža funkcija pretraživanja (i definicijske datoteke mogu uključivati ​​ključne riječi itd.). Za ugrađene funkcije u jeziku Wolfram, u dokumentaciji postoje sve vrste unakrsnih referenci koje pomažu u "reklamiranju" funkcija. Funkcije u repozitoriju funkcija mogu referencirati ugrađene funkcije. Ali što je s obrnutim putem? Da bismo to učinili, eksperimentirat ćemo s različitim dizajnom kako bismo otkrili funkcije repozitorija na stranicama dokumentacije za ugrađene funkcije.

Za ugrađene funkcije u jeziku Wolfram postoji takozvani sloj otkrivanja koji osigurava mreža "stranica pomoći", koji pružaju organizirane popise značajki povezanih s određenim područjima. Uvijek je teško pravilno uravnotežiti stranice priručnika, a kako Wolfram jezik raste, stranice priručnika često je potrebno potpuno reorganizirati. Prilično je lako staviti funkcije iz repozitorija u široke kategorije, pa čak i dosljedno rastaviti te kategorije, ali mnogo je vrjednije imati pravilno organizirane jezične referentne stranice. Još nije jasno kako ih najbolje izraditi za cjelokupnu bazu znanja o funkcijama. Na primjer, CreateResourceObjectGallery u repozitoriju značajki svatko može objaviti web stranicu koja sadrži njihove "odabire" iz repozitorija:

Wolfram Function Repository: Platforma otvorenog pristupa za jezična proširenja Wolfram

Wolframov repozitorij funkcija konfiguriran je kao trajni repozitorij funkcija, gdje će svaka funkcija u njemu uvijek raditi. Naravno, nove verzije značajki mogu postati dostupne i očekujemo da će neke značajke s vremenom postati zastarjele. Funkcije će raditi ako se koriste u programima, ali će njihove stranice s dokumentacijom povezivati ​​na nove, naprednije funkcije.

Wolfram Feature Repository osmišljen je kako bi vam pomogao da brzo otkrijete nove značajke i naučite nove načine korištenja jezika Wolfram. Vrlo smo optimistični da će nešto od onoga što je istraženo u repozitoriju značajki na kraju imati smisla da postane ugrađeni dio jezgre jezika Wolfram. Tijekom posljednjeg desetljeća imali smo sličan skup značajke koje su izvorno uvedene u Wolfram | Alfa. A jedna od lekcija naučenih iz ovog iskustva je da postizanje standarda kvalitete i dosljednosti na koje smo fokusirani u svemu što je ugrađeno u jezik Wolfram zahtijeva puno rada, koji je često teži od početnog napora da se ideja implementira. Unatoč tome, funkcija u bazi znanja o funkcijama može poslužiti kao vrlo koristan dokaz koncepta za buduću funkciju koja bi se eventualno mogla ugraditi u jezik Wolfram.

Najvažnija stvar ovdje je da je funkcija u repozitoriju funkcija nešto što je dostupno svakom korisniku za korištenje upravo sada. Moguće je da bi značajka materinjeg jezika mogla biti mnogo bolja i učinkovitija, ali repozitorij značajki omogućio bi korisnicima da odmah imaju pristup svim novim značajkama. I što je najvažnije, ovaj koncept omogućuje svakome dodavanje bilo koje nove značajke koju želi.

Ranije u povijesti jezika Wolfram ova ideja ne bi funkcionirala tako dobro kao što jest, ali u ovoj fazi toliko je truda uloženo u jezik i tako duboko razumijevanje načela dizajna jezika da se sada čini vrlo velika zajednica korisnika može dodati značajke koje će održati dosljednost dizajna kako bi bile korisne širokom rasponu korisnika.

Postoji nevjerojatan duh talenta (?) u zajednici korisnika jezika Wolfram. (Naravno, ova zajednica uključuje mnoge vodeće ljude iz istraživanja i razvoja u raznim područjima.) Nadam se da će Wolfram Feature Repository pružiti učinkovitu platformu za otključavanje i širenje ovog duha talenta. Samo zajedno možemo stvoriti nešto što će značajno proširiti područje na koje se može primijeniti paradigma računarstva jezika Wolfram.

U više od 30 godina, prešli smo dug put s jezikom Wolfram. Sada zajedno, idemo još dalje. Snažno potičem sve poštovane korisnike jezika Wolfram diljem svijeta da koriste funkcionalni repozitorij kao platformu za to, kao i novi softverski projekt kao što je Free Wolfram Engine for Developers.

Izvor: www.habr.com

Dodajte komentar