Përshëndetje, Habr! Ju prezantoj përkthimin e postit nga Steven Wolfram .

Parakushtet e qëndrueshmërisë së gjuhës Wolfram
Sot jemi në prag të arritjeve të mëdha së bashku me gjuhën e programimit . Vetëm tre javë më parë ne lancuam , për t'i ndihmuar përdoruesit tanë të integrojnë gjuhën Wolfram Language në projektet e tyre të mëdha të softuerit. Pikërisht sot ne lançojmë , për të ofruar një platformë të koordinuar për funksionet e krijuara për zgjerimin e gjuhës Wolfram, si dhe ne hapim repositorin e funksioneve për çdo kush që mund të kontribuojë në zhvillimin e produktit tonë të software-it.
Repositori i funksioneve (Function Repository) Wolfram — është ajo që bëhet e mundur falë specifikës unike të Wolfram Language jo vetëm si një gjuhë programimi, por gjithashtu si . Në gjuhët tradicionale të programimit, shtimi i veçorive të reja zakonisht përfshin krijimin e bibliotekave të reja, të cilat mund të funksionojnë ose jo në mënyrë të përbashkët. Megjithatë, në gjuhën Wolfram Language , sa që ekziston mundësia për të zgjeruar dukshëm funksionalitetin e saj, thjesht duke shtuar funksione të reja, që integrowhen menjëherë në strukturën e përgjithshme të gjithë gjuhës.
Për shembull, tani në depozitën e funksioneve Wolfram ndodhen të strukturuara në 26 kategori tematike:

Në mënyrë të ngjashme, më shumë se , të ndërtuara në gjuhën Wolfram, çdo funksion nga depozita ka një faqe dokumentimi me përshkrime të hollësishme dhe shembuj të punës:

Për të kaluar në faqen, kopjoni objektin e mësipërm (BLOB funksional), ngjiteni në fushën e hyrjes dhe pastaj aktivizoni funksionin - ai tashmë është i ndërtuar në gjuhën Wolfram dhe mbështetet si standard, duke filluar nga :

Këtu duhet të theksohet se gjatë përpunimit Nuk ju nevojitet, për shembull, të konfiguroni "bibliotekën për përpunimin e imazheve" — pasi në gjuhën Wolfram Language ne kemi realizuar një metodë të vazhdueshme dhe të strukturuar për përpunimin e imazheve. , të cilat mund të përpunohen menjëherë nga funksione të ndryshme grafike të gjuhës:

Shpresoj që me mbështetje nga , i cili po rritet dhe do të zgjerohet (në bazë të gjuhës Wolfram Language) për disa dekada të fundit. Repositori i funksioneve të Wolfram do të lejojë në të ardhmen e afërt të ndihmojë shumë në zgjerimin e gamës (ndoshta funksioneve potencialisht të rëndësishme, të specializuara në fusha të ndryshme të shkencës dhe teknikës) të funksioneve të disponueshme në gjuhë. Kështu, krijohet mundësia për të përdorur si përmbajtjen e gjuhës (funksionet e saj të integruara), ashtu edhe , të cilat realizohen mbi bazën e gjuhës. (Këtu duhet të theksohet se Wolfram Language ka mbi ).
Brenda funksioneve nga depoja mund të ketë fragmente të vogla ose mjaft të mëdha kodi, të shkruara në gjuhën Wolfram Language. Për shembull, kjo mund të jetë thirrje . Një veçori unike e këtij qasjes është se, kur kaloni në funksionalitetin në nivelin e përdoruesit, do të mungojnë moskoordinimet e mundshme për shkak se ky qasja është ndërtuar mbi një strukturë të qëndrueshme të gjuhës Wolfram Language — dhe secila funksion automatikisht do të punojë saktë — ashtu siç duhet ndodhur.
Shella dhe struktura programore e depozitës së funksioneve Wolfram janë të konfigurara në mënyrë që çdo individ të mund të kontribuojë në kauzën e përbashkët në mënyrën më të thjeshtë dhe të përshtatshme për ta — në thelb, thjesht . Funksionet automatike të ndërtuara lejojnë verifikimin e funksioneve të reja të shtuar në depo me qëllim integarimin e garantuar në gjuhë. Kompania jonë synon një rreth të gjerë përdoruesish që mund të integrojnë funksionet e tyre në gjuhë, dhe jo ndërlikime të mëdha të funksioneve të reja — dhe ndonëse procesi i verifikimit është i zbatuar këtu, ne nuk insistojmë në asgjë si apo standarde strikte të plotësisë dhe besueshmërisë së funksioneve të reja të përdoruesve, në ndryshim nga verifikimet më të kujdesshme të funksioneve të ndërtuara në bërthama të gjuhës, të cilat ne i aplikojmë.
Në këtë qasje ekzistojnë shumë kompromise dhe detaje, por qëllimi ynë është të optimizojmë depozitën e funksioneve Wolfram si për lehtësi për përdoruesit, ashtu edhe që funksionet e reja të përdoruesve të kontribuojnë ndjeshëm në zhvillimin e gjuhës. Ndërsa rritemi, nuk kam dyshim se do të na duhet të shpikim metoda të reja për përpunimin dhe verifikimin e funksioneve të integruara në depozitë, dhe kjo sidomos për të organizuar një numër të madh funksionesh dhe për të gjetur ato që u nevojiten përdoruesve. Megjithatë, nuk mund të mos ngjallë optimizëm fakti që rruga që kemi zgjedhur është një fillim i mirë. Unë vetë në bazën e parë. Shumica prej tyre janë të bazuara në kodin që unë vetë e kam zhvilluar për një kohë të gjatë. Dhe më mori vetëm disa minuta për t'i transferuar ato në depo. Tani, kur ato janë në depo, unë mund më në fund – menjëherë dhe në çdo kohë – të përdor këto funksione sipas nevojës, pa u shqetësuar për të kërkuar skedarët, ngarkuar paketat etj.
Rritja e efikasitetit duke ulur kostot
Para se shfaqte interneti, ekzistonin mënyra për të shkëmbyer kode të Wolfram Language (projekti ynë i parë i madh i centralizuar ishte , i krijuar për Mathematica në vitin 1991 mbi CD-ROM dhe të ngjashme). Sigurisht, qasja e propozuar për zbatimin e depozitës së funksioneve të Wolfram është një mjet më të fuqishëm dhe të besueshëm për realizimin e detyrave të përmendura më lart.
Prej më shumë se 30 vjet, kompania jonë ka punuar me përkushtim për të ruajtur integritetin e strukturës së gjuhës Wolfram, dhe kjo është shumë e rëndësishme që gjuha Wolfram të mos jetë thjesht një gjuhë programimi, por edhe . Dhe kështu, thelbi i qasjes për realizimin e depozitës së funksioneve të Wolfram është përdorimi i një qasjeje të vetme për programimin dhe zhvillimin e funksioneve të reja, të cilat shtohen dhe përfshihen gradualisht në kuadër të gjuhës për mundësinë e zhvillimit të saj dhe evolucioni të përbashkët.
Në strukturën e realizimit të secilës funksion ndodhin procese të ndryshme llogaritëse. Duhet të theksohet se është e nevojshme që funksioni të ketë një pamje të qartë dhe uniforme për përdoruesin si dhe lehtësinë e leximit. Në këtë kontekst, funksionet e inkorporuara të gjuhës Wolfram Language paraqiten në më shumë se 6000 shembuj të vazhdueshëm të mënyrës së duhur për të programuar funksionet (kjo është e njohur si , të cilat përfshijnë ). Ky qasje në fund të fundit lejon që depoja e funksioneve Wolfram të jetë efektive, konkretisht karakteri struktural i gjuhës Wolfram Language me një numër të madh bibliotekash shtesë dhe të larmishme, të cilat tashmë janë të ndërtuara në gjuhë. Për shembull, nëse keni një funksion që përpunon imazhe, ose , ose , si dhe apo diçka tjetër - në gjuhë tashmë ekziston një përfaqësim simbolik i harmonizuar i tyre, dhe falë kësaj, funksioni juaj menjëherë bëhet i pajtueshëm me funksionet e tjera në gjuhë.
Krijimi i një depozite që funksionon vërtet mirë është një detyrë interesante e meta-programimit. Për shembull, një tepërt i kufizimeve në program nuk do të lejojë arritjen e unifikimit të kërkuar dhe universialitetit të funksionimit të algoritmit. Njësoj si dhe me numrin e pamjaftueshëm të kufizimeve funksionale, nuk do të jeni në gjendje të realizoni një renditje të saktë të ekzekutimit të algoritmit. Disa nga shembujt e mëparshëm të realizimit të kompromisit të këtyre qasjeve, të realizuara nga kompania jonë, kanë funksionuar mjaft stabilisht — këto janë: , i lançuar në vitin 2007 dhe tani funksionon në modalitetin interaktiv në Internet, duke përfshirë më shumë se 12000 demonstracione interaktive nga përdoruesit. Në kanë më shumë se 600 baza të dhënash të gatshme, që mund të përdoren në gjuhën Wolfram Language, dhe po pasurohet me rrjete të reja neurale pothuajse çdo javë (tani janë tashmë 118) dhe ato menjëherë lidhen përmes funksionit në gjuhën Wolfram Language.
Të gjitha shembujt e mësipërm kanë një karakteristikë thelbësore — objektet dhe funksionet e mbledhura në një projekt kanë një shkallë shumë të lartë strukturimi dhe shpërndarjeje të proceseve. Pa dyshim, detaji i strukturës së asaj që është një demonstrim ose një rrjet neuronal ose ndonjë gjë tjetër mund të ndryshojë ndjeshëm, por struktura themelore për çdo depo aktuale mbetet gjithmonë e pandryshuar. Pra, cila është opinioni juaj, i nderuar përdorues, mbi krijimin e një depoje të tillë që shton zgjerime në gjuhën Wolfram? Gjuha Wolfram Language është projektuar në mënyrë që të jetë jashtëzakonisht e fleksibël, prandaj mund të zgjerohet dhe modifikohet në çdo mënyrë. Ky fakt është jashtëzakonisht i rëndësishëm për mundësinë e krijimit të shpejtë të projekteve të mëdha software në gjuhën Wolfram Language. Këtu duhet të theksohet se me rritjen e fleksibilitetit të gjuhës do të rritet gjithashtu kostoja e projekteve që realizohen në atë gjuhë. Kjo ndodh për shkak se sa më shumë që përdoruesi të aplikojë këtë gjuhë, aq më shumë funksionalitete të dedikuara ai merr, por nuk duhet të harrojmë se ky qasje mund të ketë edhe anët negative në lidhje me pamundësinë për të siguruar një koherencë të vazhdueshme të moduleve programore.
Në gjuhët tradicionale të Programimit ekziston një problem i zakonshëm me bibliotekat — nëse, për shembull, përdorni një bibliotekë, kodi punon siç duhet, por, nëse përpiqeni të përdorni disa biblioteka, nuk ka garanci se ato do të funksionojnë siç duhet së bashku. Po ashtu, në gjuhët tradicionale të Programimit — ndryshe nga një gjuhë e plotë llogaritjeje – mungojnë mundësitë për të kontrolluar garantueshëm praninë e paraqitjeve të integruara të pajtueshme për funksionet ose llojet e të dhënave, përveç strukturave të tyre themelore. Por, në të vërtetë, problemi është edhe më i madh se sa duket në shikim të parë: nëse dikush ndërtuon një verticalitet të madhe funksionaliteti, atëherë pa shpenzime të mëdha për programimin e centralizuar të projektit, që ne kemi investuar në gjuhën Wolfram, nuk është e mundur të arrihet një pajtueshmëri. Prandaj, është e rëndësishme që të gjithë modulat e softuerit të funksionojnë gjithmonë së bashku në mënyrë korrekte.
Kështu, ideja e depozitës së funksioneve Wolfram është të shmangë problematikën e përmendur më lart — thjesht duke shtuar zgjerime në gjuhë si elemente të ndryshme programimi përmes funksioneve të veçanta, zhvillimi i të cilave si module të koordinuara është një detyrë më e thjeshtë. Megjithatë, ka karakteristika të programimit që nuk mund të bëhen të përshtatshme përmes funksioneve të veçanta (dhe kompania jonë planifikon të lëshojë së shpejti një algoritëm të optimizuar për të ndihmuar në realizimin e paketave të mëdha programore). Megjithatë, mbi funksionet e ngurta të integruara në gjuhën Wolfram Language, ekzistojnë shumë mundësi për programim që janë realizuar mbi bazën e funksioneve të veçanta. Këtu idea është që, me një përpjekje relativisht të vogël programimi, të krijohen një sërë funksionesh të reja dhe shumë të dobishme që sigurojnë një konsistencë të mjaftueshme të projektit, njëkohësisht që ato do të jenë të mirëpërshtatshme me njëra-tjetrën dhe, përveç kësaj, do të kenë mundësinë të përdoren lehtësisht dhe gjerësisht në gjuhë në të ardhmen.
Ky kyçje përfshin, padyshim, një kompromis. Nëse implementohet një paketë më të gjerë, mund të imagjinojmë një botë krejtësisht të re funksionaliteti që do të jetë jashtëzakonisht e fuqishme dhe e dobishme. Nëse ka nevojë për të fituar mundësi të reja funksionale që do të integrohen me gjithçka tjetër, por nuk jeni të gatshëm të shpenzoni një sasi të madhe për zhvillimin e projektit, kjo, fatkeqësisht, mund të çojë në zvogëlimin e shkallës së projektit tuaj. Ideja e depozitës së funksioneve Wolfram është të sigurojë funksionalitetin e pjesës përcaktuese të projektit, ky qasje do të lejojë shtimin e një funksionaliteti të fuqishëm, njëherësh duke thjeshtuar mbajtjen e një koherencie të mirë të programimit të projektit.
Ndihmë për shtimin e funksioneve të përdoruesve në depozitën e funksioneve
Specialistët e kompanisë sonë kanë punuar fort për ta bërë kontributin e tyre në funksionet e depozitës Wolfram mjaft të lehtë për përdoruesit. Në desktop (tashmë në ), thjesht mund të kaloni rresht pas rreshti përmes skedave të menusë kryesore: File > New > RepositoryItem > Function Repository Item dhe do të merrni "» (programatikisht brenda mjedisit të punës. Ju gjithashtu mund të përdorni funksionin analog - ):

Ekzistojnë dy veprime kryesore që duhet të kryeni: së pari, të shkruani faktikisht kodin e funksionit tuaj dhe, së dyti, të shkruani dokumentacionin që ilustron si duhet të funksionojë funksioni juaj.
Klikoni butonin «Hap shembullin» lart, për të parë një shembull të asaj që duhet të bëni:

Faktikisht, po përpiqeni të krijoni diçka të ngjashme me një funksion të integruar në gjuhën Wolfram Language. Përveç se ajo mund të bëjë diçka shumë më specifike sesa funksioni i integruar. Ndërkohë, pritshmëritë për plotesinë dhe besueshmërinë e saj do të jenë shumë më të ulta.
Ju nevojitet të jepni një emër për funksionin tuaj që do të përputhet me parimet e emërtimeve të funksioneve të Wolfram Language. Përveç kësaj, do t'ju nevojitet të zhvilloni dokumentacion për funksionin tuaj, në përputhje me funksionet e integruara të gjuhës. Më shumë detaje do t'ju jap më vonë. Tani thjesht vini re se në rreshtin e butonave në pjesën e sipërme të skedarit të bllokut të definimeve ka një buton , në të cilën shpjegohet se çfarë të bëni, dhe butoni 'Instruments', i cili ofron mjete për formatimin e dokumentacionit të funksionit tuaj.
Kur të jeni të sigurt që gjithçka është plotësuar siç duhet dhe jeni gati, klikoni butonin 'Check' ('Kontrollo'). Është krejt normale që të mos jeni akoma të sigurt në të gjitha detajet. Prandaj, funksioni 'Check' do të ekzekutohet automatikisht dhe do të bëjë shumë kontrollime të stilit dhe përputhshmërisë. Shpesh do t'ju ofrojë menjëherë të konfirmoni dhe pranoni korrigjimet (për shembull: 'Kjo rresht duhet të përfundojë me një dy pikë', dhe do të propozojë të shtoni dy pikë). N sometimes do t'ju kërkojë të shtoni ose ndryshoni diçka vetë. Ne do të vazhdojmë të shtojmë mundësi të reja në funksionalitetin automatik të butonit 'Check', por qëllimi i tij kryesor është të garantojë — gjithçka që dërgoni në depozitën e funksioneve, të përputhet sa më shumë me rekomandimet për stilin.

Pas një herë që e keni aktivizuar "Check", mund të përdorni "Preview". "Preview" krijon një pamje paraprake të faqes së dokumentacionit që keni përcaktuar për funksionin tuaj. Po ashtu, mund të krijoni një pamje paraprake për një skedar të krijuar në kompjuterin tuaj ose për një skedar që ndodhet në ruajtjen në re. Nëse, për ndonjë arsye, nuk jeni të kënaqur me atë që shihni në pamjen paraprake, thjesht kthehuni prapa dhe bëni ndryshimet e nevojshme, pastaj klikoni përsëri butonin Preview.
Tani jeni gati të publikoni funksionin tuaj në depo. Butoni Deploy ju ofron katër mundësi veprimi:

Në këtë hap, është e rëndësishme të kuptoni se mund të dërgoni funksionin tuaj në depo të funksioneve Wolfram, në mënyrë që të jetë i aksesueshëm për çdo përdorues. Gjithashtu, mund të publikoni funksionin tuaj për një numër të kufizuar përdoruesish. Për shembull, mund të krijoni një funksion që është vendosur lokal në kompjuterin tuaj, në mënyrë që të jetë i aksesueshëm kur përdorni këtë kompjuter specifik. Ose mund ta publikoni në , në mënyrë që të jetë e disponueshme për ju kur jeni të lidhur me re. Ju gjithashtu mund të publikoni (zbatoni) funksionin tuaj përmes llogarisë suaj në re. Kështu, nuk do të jetë në depozitarin qendror të funksioneve të Wolfram, por do t'ju lejojë të jepni dikujt URL-në që i mundëson atij të marrë funksionin tuaj nga llogaria juaj. (Në të ardhmen do të mbështesim gjithashtu depozitat qendrore në nivelin e kompanisë sonë).
Pra, le të themi se dëshironi ta kaloni funksionin tuaj në bazën e njohurive të funksioneve të Wolfram. Për këtë, klikoni butonin «Dërgo» në depo. Çfarë ndodh në këtë moment? Aplika juaj menjëherë kalon në radhë për shqyrtim dhe miratim nga ekipi ynë i specializuar i curatorëve.
Ndërsa aplikimi juaj kalon nëpërmjet procesit të miratimit (i cili zakonisht zgjat disa ditë), ju do të merrni njoftime mbi statusin e shqyrtimit të tij, si dhe ndoshta propozime për përdorimin e mëtejshëm. Por sapo funksioni juaj të miratohet, ai do të publikohen menjëherë në depozitën e funksioneve Wolfram dhe do të jetë i disponueshëm për çdo përdorim. (Dhe kjo do të shfaqet në etj.)
Çfarë duhet të jetë në depo?
Duhet theksuar se në kompaninë tonë standardet për plotësinë, besueshmërinë dhe cilësinë totale janë shumë të larta; nga 6000+ funksione që kemi integruar në gjuhën Wolfram gjatë 30 viteve të fundit, të gjitha përputhen me kërkesat e përmendura më sipër. Qëllimi i depozitës së funksioneve Wolfram është të shfrytëzojë të gjithë strukturën dhe mundësitë funksionale që tashmë ekzistojnë në gjuhën Wolfram Language, për të shtuar sa më shumë funksione shumë më të lehta (pra, funksione me performancë më të lartë).
Paqartësisht, funksionet në depozitat e funksioneve Wolfram duhet të përputhen me parimet e zhvillimit të gjuhës Wolfram Language — në mënyrë që ato të mund të ndërveprojnë plotesisht me funksionet e tjera dhe pritjet e përdoruesve për mënyrën se si funksionet duhet të funksionojnë. Megjithatë, funksionet nuk duhet të kenë të njëjtin nivel plotësie ose besueshmërie.
Në funksionet e integruara të gjuhës Wolfram, ne punojmë me përkushtim për t'i bërë funksionet programore sa më të përgjithshme të jetë e mundur. Megjithatë, nuk ka asgjë të keqe që në depozitat e funksioneve Wolfram të përfshihet një funksion që thjesht përpunon një rast shumë specifik, por të dobishëm. Për shembull, funksioni mund të pranojë skedarë në një format të caktuar dhe të krijojë email në një mënyrë të caktuar. krijon diagrame vetëm me ngjyra dhe etiketim të caktuar etj.
Një tjetër aspekt në lidhje me funksionet e integruara është se kompania jonë angazhohet për të përpunuar të gjitha rastet që nuk janë standarde, për të trajtuar saktësisht hyrjet e gabuara e kështu me radhë. Në depozitat e funksioneve, është plotësisht normale që të ekzistojë një funksion i veçantë që trajton rastet kryesore të zgjidhjes së një problemi dhe injoron të tjerët.
E qartë është se është më mirë të kesh funksione që bëjnë më shumë dhe e bëjnë atë më mirë, por optimizimi për depozitat e funksioneve — ndryshe nga funksionet e integruara të gjuhës Wolfram — duhet të ketë më shumë funksione të lidhura me një sërë funksionesh, sesa të thellohet në proceset e implementimit të çdo funksioni të veçantë.
Tani kaloni të shqyrtojmë një shembull testi të funksioneve në depo. Pritet që konsistenca për këto funksione të jetë natyrshëm më e ulët sesa për funksionet e ndërtuara në gjuhë. Kjo është veçanërisht e rëndësishme në raste kur funksionet varen nga burime të jashtme, si API, dhe është e nevojshme të realizohen teste të vazhdueshme, gjë që ndodh automatikisht brenda algoritmeve të verifikimit. Në skedarin nb mund të përcaktoni qartë definicionet (në seksionin 'Informata shtesë') dhe të vendosni aq teste sa të nevojshme, të përcaktuara ose nga rreshtat e hyrjeve dhe daljeve, ose nga objekte të plota simbolike të tipit , sa të dëshironit. Për më tepër, sistemi vazhdimisht përpiqet të kthejë shembujt e dhënë nga ju të dokumentacionit në një proces verifikimi (ndonjëherë kjo mund të jetë mjaft e kërkuar në burime, për shembull, për një funksion që rezultati i të cilit varet nga numra të rastësishëm ose koha e ditës).
Në fund, në depozitën e funksioneve do të ketë një numër të caktuar vështirësish për implementimin. Disa do të jenë thjesht një rresht kodi, të tjerat mund të përfshijnë mijëra ose dhjetëra mijëra rreshta, ndoshta duke përdorur shumë funksione ndihmëse. Kur duhet të shtoni një funksion, për të cilin kërkohet pak kod? Në principe, nëse funksioni ka , të cilin përdoruesit do ta kuptonin lehtësisht duke e parë në një pjesë të kodit, atëherë mund ta shtoni. Në të kundërt, ndoshta është më mirë që thjesht ta shkruani përsëri kodin në programin tuaj çdo herë, në ato raste kur keni nevojë për të.
Qëllimi kryesor i depozitës së funksioneve (siç sugjerohet nga emri i saj) është të futë në funksionalitetin e gjuhës funksione të reja. Nëse dëshirani të shtoni të dhëna të reja ose , përdorni . Por çfarë duhet të bëni nëse dëshironi të futni lloje të reja objektesh për llogaritjet tuaja?
Në të vërtetë ka dy mënyra. Mund të dëshironi të regjistroni një lloj të ri objekti që do të përdoret në funksionet e reja në depozitarin e funksioneve. Dhe në këtë rast, gjithmonë mund ta shkruani përfaqësimin e tij simbolik dhe ta përdorni atë gjatë regjistrimit ose daljes së funksioneve në depozitarin e funksioneve.
Por çfarë të bëni nëse dëshironi të paraqisni një objekt dhe pastaj të përcaktoni, përmes funksioneve ekzistuese në gjuhën Wolfram Language, që duhet të punojnë së bashku me të? Për këtë, Wolfram Language ka pasur gjithmonë një mekanizëm të lehtë, i cili quhet . Me disa kufizime (sidomos për funksionet që ), depozita i funksioneve ju lejon të paraqisni thjesht një funksion dhe të përcaktoni vlerat për të. (Për të rritur pritshmërinë e koherencës në krijimin e një konstrukti të ri të rëndësishëm, të integruar plotësisht në të gjithë gjuhën Wolfram Language, kjo është zakonisht një procedurë shumë e rëndësishme, që nuk mund të arrihet vetëm përmes rritjes së kostos së projektit, dhe kjo është diçka që kompania jonë e bën në kuadër të projekteve të zhvillimit afatgjatë të gjuhës; ky objektiv nuk është një qëllim që vendoset në kuadër të zhvillimit të depozitës).
Pra, çfarë mund të ketë në kodin e funksioneve në depozitë? , natyrisht (të paktën nëse nuk paraqet për dhe funksionaliteti i vetë programit, si mjedisi i llogaritjes) ashtu si çdo funksion tjetër nga depozita e funksioneve. Për më tepër, ekzistojnë mundësi të tjera për funksionimin: funksioni në depozitën e funksioneve mund të thërrasë API-në, ose në , ose . Sigurisht, ka disa rreziqe të lidhura me këtë. Për shkak se nuk ka garanci që API-ja nuk do të ndryshojë, dhe funksioni në depozitat e funksioneve mund të ndalojë së funksionuari. Për identifikimin e problemeve të tilla ekziston një shënim në faqen e dokumentacionit (në seksionin “Kërkesat”) për çdo funksion që mbështetet jo vetëm në funksionalitetin e integruar të Wolfram Language. (Natyrisht, kur bëhet fjalë për të dhënat reale, mund të ketë probleme edhe me një funksionalitet të tillë — sepse të dhënat reale për botën ndryshojnë vazhdimisht, dhe herë pas here ndosin edhe përkufizimet dhe strukturen e tyre.)
A duhet që gjithë kodi për depozitën e funksioneve Wolfram të shkruhet në gjuhën Wolfram? Sigurisht, kodi brenda API-së së jashtme nuk duhet të jetë i shkruar në gjuhën Wolfram, kjo në fakt as nuk e bën kodin një gjuhë. Në realitet, nëse gjeni një funksion në pothuajse çdo gjuhë të jashtme ose bibliotekë, do të jeni në gjendje të krijoni një mbështjellës që do të lejojë përdorimin e saj në depozitën e funksioneve Wolfram. (Zakonisht për këtë duhet përdorur funksionet e integruara ose në kodin e gjuhës Wolfram.)
Pra të thoshim, çfarë ka kuptim të bëjmë këtë? Në thelb, kjo lejon përdorimin e gjithë sistemit të integruar Wolfram Language dhe të gjithë gamës së tij të funksionaliteteve të standardizuara. Në rast se merrni një implementim bazë nga një bibliotekë ose gjuhë e jashtme, atëherë mund të shfrytëzoni strukturën simbole të pasura të gjuhës Wolfram për të krijuar një funksion të lartë që lejon përdoruesit të përdorin lehtësisht çdo funksionalitet që është realizuar tashmë. Të paktën, kjo duhet të ketë mundësinë e realizimit në një botë ideale, ku ekzistojnë të gjithë komponentët e ngarkimit të biblioteka dhe e tjera, në këtë rast ato do të zgjidhen automatikisht përmes Wolfram Language. (Duhet të theksohet se në praktikë mund të ketë probleme me në një sistem të caktuar kompjuterik, dhe në ruajtjen në re mund të ndodhin probleme të tjera me sigurinë).
Kështu që, kur e analizoni për herë të parë bibliotekat e jashtme standarde, ato shpesh duken tepër të komplikuara për t'u përfshirë vetëm me disa funksione, por në shumë raste, pjesa më e madhe e kompliktit ndodh për shkak të krijimit të infrastrukturës që është e nevojshme për bibliotekën dhe të gjitha funksioneve për ta mbështetur atë. Megjithatë, kur përdorni gjuhën Wolfram Language, infrastruktura zakonisht është e integruar në paketat, kështu që nuk është e nevojshme të thellohemi në të gjitha këto funksione mbështetëse, por thjesht të krijojmë funksione për disa "funksionet kryesore" të orientuara nga aplikacioni në bibliotekë.
"Ekosistemi" i bazës së njohurive
Nëse keni shkruar funksione që i përdorni rregullisht, dërgojini ato në depozitorin e funksioneve Wolfram! Nëse kjo përfundon duke mos u bërë diçka më e madhe (evolucioni i gjuhës), atëherë do t'ju jetë shumë më e lehtë të përdorni funksionet për përdorim personal. Megjithatë, është logjike të supozojmë se, nëse i përdorni funksionet vazhdimisht, ndoshta edhe përdorues të tjerë i gjejnë ato të dobishme.
Natyrisht, ju mund të gjendeni në një situatë ku nuk keni mundësi — ose nuk dëshironi — të ndani funksionet tuaja ose në rast të qasjes në burime informacioni të private. Edhe në këto raste, thjesht mund të zbatoni funksionet në llogarinë tuaj të vetme në cloud, e aksesit te ato. (Nëse organizata juaj ka , atëherë së shpejti do të mund të hostohet një depo private e funksioneve, e cila mund të administrohet nga organizata juaj dhe të vendosni nëse do të shfaqen pamjet apo jo për përdoruesit e tretë.)
Funksionet që dërgoni në repo-n e funksioneve Wolfram nuk duhet të jenë domosdoshmërisht perfekte; ato thjesht duhet të jenë të dobishme. Kjo është paksa si seksioni "Gabimet" në dokumentacionin klasik të Unix-it — në "Seksionin e definicioneve" ka një nënseksion "Shënimet e autorit", ku mund të përshkruani kufizimet, problemet etj., që tashmë i dini për funksionin tuaj. Për më tepër, kur dërgoni funksionin tuaj në repo, mund të shtoni shënime për dorëzimin që do të lexohen nga një komandë e posaçme e kuratorëve.
Pas publikimit të funksionit, faqja e tij gjithmonë ka dy lidhje poshtë: "» dhe «". Nëse lidhni një shënim (për shembull, më njoftoni për gabimet), mund të vendosni një shenjë që tregon se dëshironi që mesazhi juaj dhe informacioni juaj i kontaktit të dërgohen autorit të funksionit.
Ndonjëherë ndodh nevoja për të përdorur thjesht funksionet nga depozita e funksioneve Wolfram, për shembull funksionet e integruara, pa e parë kodin e tyre. Megjithatë, nëse dëshironi të "flisni brenda", në pjesën e sipërme gjithmonë ka një buton "Notebook". Klikoni në të dhe do të merrni një kopje të origjinalit të notebook-ut të definicionit, i cili është dërguar në depozitën e funksioneve. Ndonjëherë mund të përdorni atë si një shembull për nevojat tuaja. Po ashtu, mund të zhvilloni një modifikim të tuajin të këtij funksioni. Mbase dëshironi të vendosni këto funksione që keni gjetur nga depozita në kompjuterin tuaj ose në llogarinë tuaj në ruajtjen cloud, ndoshta dëshironi t'i dërgoni ato në bazën e njohurive të funksioneve, ndoshta si një version të përmirësuar dhe të zgjeruar të funksionit origjinal.
Në të ardhmen, ne planifikojmë të mbështesim degëzime në stilin Git për repozitorët e funksioneve, por tani jemi duke u përpjekur ta bëjmë më të thjeshtë, dhe gjithmonë kemi vetëm një version të pranuar të çdo funksioni të integruar në gjuhë. Një numër më i madh i herëve (nëse zhvilluesit nuk heqin dorë nga mbështetja e funksioneve që kanë zhvilluar dhe përgjigjen ndaj mesazheve të përdoruesve), autori fillestar i funksionit merr kontrollin e përditësimeve të tij dhe dërgon versionet e reja, të cilat më pas kontrollohen dhe, nëse kalojnë procesin e verifikimit, publikohen në gjuhë.
Le të shqyrtojmë çështjen se si funksionon "versionimi" i funksioneve të zhvilluara. Tani për tani, kur përdorni një funksion nga repozitori i funksioneve, definicioni i tij do të ruhet përherë në kompjuterin tuaj (ose në llogarinë tuaj në re, nëse po përdorni re). Nëse një version i ri i funksionit del, atëherë gjatë përdorimit të tij të ardhshëm do të merrni një mesazh që ju informon për këtë. Dhe nëse dëshironi ta përditësoni funksionin në një version të ri, mund ta bëni këtë me anë të komandës . («Objekti funksional BLOB» në të vërtetë ruan më shumë informacion në lidhje me versionet, dhe në të ardhmen ne planifikojmë ta bëjmë këtë më të aksesueshëm për përdoruesit tanë.)
Një nga veçoritë e mrekullueshme të depozitës së funksioneve Wolfram është se çdo program Wolfram Language në çdo vend mund të përdorë funksionet nga ajo. Kur një program shfaqet në një blloknote, shpesh është e dobishme të formatosh funksionet e depozitës si funksione lehtësisht të lexueshme "objekte binare funksionale" (ndoshta, me një grup versionesh përkatës).
Ju gjithmonë mund t'i qaseni çdo funksioni të depozitës së funksioneve duke përdorur tekstin . Dhe kjo është shumë e dobishme nëse jeni duke shkruar kod ose skenare drejtpërdrejt për Wolfram Engine, për shembull, me (duhet theksuar se depozita e funksioneve është plotësisht e kompatibilshme me ).
Si funksionon?
Brenda funksioneve në depozitën Wolfram është e mundur të përdoren sistemin e njëjtë baze, si në (depozita e të dhënave, , e.tj.), ashtu si edhe të gjithë burimet tjera sistemore Wolfram, fund, bazohet në funksionin .
Le të shqyrtojmë :

Brenda mund të shihni disa informacion, duke përdorur funksionin :

Si funksionon konfiguroja e funksionit të burimeve? Marlënda më e thjeshtë — është një rast krejtësisht lokal. Ja një shembull, i cili merr funksionin (në këtë rast thjesht një funksion të pastër) dhe e përcakton si funksion burimi për këtë sesion pune në program:

Pasi të keni bërë përcaktimin, mund të përdorni funksionin burimi:

Vini re se në këtë objekt BLOB të funksionit ka një ikonë të zezë
. Kjo do të thotë se funksioni BLOB i referohet funksionit të burimeve në memorie, të përcaktuar për sesionin aktual. Për funksionin burim, i cili ruhet vazhdimisht në kompjuterin tuaj ose në llogarinë tuaj cloud, ka një ikonë gri
. Ndërsa për funksionin zyrtar të burimeve në depozitat e funksioneve Wolfram ka një ikonë portokalli
.
Pra, çfarë ndodh kur përdorni menun "Shpalos" në bllokun e përcaktimit? Së pari, ajo merr të gjitha përcaktimet në bllok dhe prej tyre krijon simbolikën ). (Dhe nëse përdorni një IDE tekstual ose program, atëherë mund ta krijoni qartë )
Zhvillimi lokal i funksionit nga repozitori në kompjuterin tuaj realizohet me komandën për objektin e burimit, për ta ruajtur si në sistemin tuaj të skedarëve. Zhvillimi në llogarinë cloud realizohet me komandën për objektin e burimit, dhe zhvillimi publik në cloud — . Në të gjitha rastet përdoret gjithashtu për regjistrimin e emrit të funksionit të burimit, kështu që do të funksionojë.
Nëse shtypni butonin Submit për Repo-t e Funkcioneve, atë që ndodh poshtë tij thirret mbi objektin e burimit. (Dhe nëse përdorni një ndërfaqe të thjeshtë shkrimi, gjithashtu mund ta thirrni direkt.)
Me default, dërgimi realizohet me emrin e lidhur me identifikuesin tuaj të Wolfram ID. Por nëse dërgoni një kërkesë në emër të një grupi zhvilluesish ose organizate, mund të dhe ta përdorni atë si emër për ndërveprimin me pamjet tuaja.
Pas pas, pasi keni dërguar cilëndo nga funksionet tuaja në bazën e të dhënave të funksioneve, ajo do të futet në radhë për shqyrtim. Nëse merrni komente në përgjigje, ato zakonisht do të jenë në formën e një skedari teksti me «kolona komentesh» të shtuara. Mund të kontrolloni gjithmonë statusin e kërkesës suaj, duke e vizituar . Por sapo funksioni juaj të miratohet, do të njoftoheni (përmes emailit), dhe funksioni juaj do të publikohet në depozitat e funksioneve Wolfram.
Disa hollësi në funksionim
Në shikim të parë, mund të krijohet përshtypja se mund të merrni thjesht një bllok definicioni dhe ta vendosni fjalë për fjalë në depozitën e funksioneve, por në të vërtetë ka shumë hollësi — dhe për t'i trajtuar ato kërkohet të bëni programim të avancuar, duke përpunuar si kodin që definon funksionin ashtu edhe Bllokun e definicionit vetë. Shumica e kësaj ndodh brenda, pra «në sfond», por kjo mund të ketë disa pasoja që vlen të kuptoni nëse planifikoni të kontribuoni në bazën e njohurive të funksioneve.
Nuanca e parë e drejtpërdrejtë: Kur plotësoni "Bllokun e definicioneve", mund të referoheni thjesht në funksionin tuaj kudo, duke përdorur një emër si MyFunction, i cili duket si një emër i zakonshëm për funksion në gjuhën Wolfram Language, por për dokumentimin e repozitorit të funksioneve, kjo zëvendësohet – kjo është saktësisht ajo që përdoruesit do të përdorin gjatë punës me funksionin.
Nuanca e dytë: kur krijoni një funksion burimi nga Blloku i definicioneve, të gjitha varësitë e përfshira në definimin e funksionit duhet të jenë të rregulluara dhe të përfshira qartë. Megjithatë, për të garantuar që definita të mbeten modulare, duhet t'i vendosni të gjitha në një . (Natyrisht, që , ndodhen në repozitorin e funksioneve.)
Zakonisht nuk do të shihni kurrë asnjë gjurmë të kodit që përdoret për të konfiguruar këtë hapësirë emri. Por nëse për një arsye ndonjëherë thirni një simbol të papërfunduar brenda funksionit tuaj, atëherë do të shihni se ky simbol ndodhet në kontekstin e brendshëm të funksionit. Sidoqoftë, gjatë trajtimit të Notebook-it të përcaktimit, së paku simboli që korrespondon me funksionin vetë, në formën e një BLOB funksional, jo një simbol të papërpunuar në kontekstin e brendshëm.
Repoja e funksioneve është e destinuar për të përcaktuar funksione të reja. Dhe këto funksione mund të kenë opsione. Shpesh këto parametra (p.sh., ose ) do të kenë mundësinë të përdoren për funksione të integruara, si dhe për ata për të cilat tashmë ekzistojnë simbole të integruara. Por ndonjëherë një funksion i ri mund të kërkojë opsione të reja. Për të ruajtur modularitetin, është e nevojshme që këto parametra të jenë simbole të përcaktuara në një kontekst të brendshëm unik (ose diçka në mënyrë të ngjashme me funksionet e plota të burimeve, pra, vetë ato). Për thjeshtësi, repozitoriumi i funksioneve lejon përcaktimin e opsioneve të reja në definicionet si vargje. Dhe për lehtësimin e përdoruesit, këto definicione (në kushtet që ata përdorin dhe ) gjithashtu përpunohen në një mënyrë që, kur përdoren funksionet, parametrat mund të vendosen jo vetëm si vargje, por edhe si simbole globale me të njëjtat emra.
Shumica e funksioneve thjesht bëjnë atë që duhet të bëjnë çdo herë që thirren, por disa funksione kanë nevojë për inicializim para se të mund të punojnë në një sesion të caktuar — dhe për të zgjidhur këtë problem, në seksionin 'Përcaktimi' ka një nënseksion 'Inicializimi'.
Funksionet nga depoja mund të përdorin funksione të tjera që janë tashmë në depo, për të krijuar definita për depozitën e funksioneve. Në rast se përfshihen dy (apo më shumë) funksione që referohen njëra-tjetrës, duhet t’i shfaqni ato në seancën tuaj pune me programin, në mënyrë që të mund t’i referoheni si , atëherë mund të krijoni kombinimet që ju nevojiten nga këto funksione, shembuj (nuk e kuptova) dhe të shtoni një funksion të ri në depo mbi bazën e atyre që janë vendosur më parë.
Perspektivat e zhvillimit. Çfarë duhet të ndodhë kur depoja të bëhet vërtet e madhe?
Sot së bashku po fillojmë depozitat e funksioneve Wolfram, por me kalimin e kohës ne presim që vëllimi dhe funksionaliteti i saj të rritet ndjeshëm, dhe ndërsa ajo rritet, do të shfaqen problemet të ndryshme që, siç e parashikojmë, mund të lindin.
Problemi i parë lidhet me emrat e funksioneve dhe unikësinë e tyre. Repocitori i funksioneve është dizajnuar në mënyrë që, si për funksionet e ndërtuara në gjuhën Wolfram Language, të mund të referencehet çdo funksion duke shënuar thjesht emrin e tij. Por kjo do të thotë që emrat e funksioneve duhet të jenë globalisht unikë në tërë repozitorin, kështu që, për shembull, në repozitor mund të ketë vetëm një .
Me sa duket, kjo mund të duket një problem i madh, por është e rëndësishme të kuptohet se kjo është kryesisht e njëjta problematikë si për gjëra të tilla si emrat e domain-it në internet ose ndihmuesit e mediave sociale. Ndonëse sistemi ka nevojë për një regjistrues — dhe kjo është një nga rolet që kompania jonë do të kryejë për bazën e njohurive mbi funksionet Wolfram. (Për versionet private të repozitorit, regjistruesit e tyre mund të jenë administratorët.) Sigurisht, një domain në internet mund të regjistrohet pa pasur asgjë mbi të, por në repozitorin e funksioneve emri i funksionit mund të regjistrohet vetëm nëse ekziston një përkufizim real i funksionit.
Si pjesë e rolit tonë në menaxhimin e bazës së njohurive për funksionet Wolfram është të sigurojmë që emri i zgjedhur për funksionin të ketë kuptim në përputhje me definimin e funksionit, si dhe të jetë në përputhje me rregullat e emrave të Wolfram Language. Kemi më shumë se 30 vjet përvojë në emërtimin e funksioneve të ndërtuara në gjuhën Wolfram, dhe ekipi ynë i kuratorëve do ta përcjellë këtë përvojë në depozitat e funksioneve. Natyrisht, gjithmonë ka përjashtime. Për shembull, mund të duket më e preferuar të kesh një emër të shkurtër për ndonjë funksion, por është më mirë "të mbrohesh" me një emër më të gjatë, më specifik, sepse në këtë mënyrë ka më pak të ngjarë të hasësh në rastin kur dikush dëshiron të krijojë një emër funksioni të ngjashëm në të ardhmen.
(Këtu duhet të theksohet se thjesht shtimi i ndonjë etikete pjesëmarrësi për të eliminuar paqartësitë e funksioneve nuk do të sjellë efektin e pritur. Sepse, nëse nuk ngulmohet që etiketa gjithmonë të caktohet, do të nevojitet të përcaktohet një etiketë e parazgjedhur për çdo funksion të caktuar, përveç kësaj do të duhet të dallohen etiketat e autorit, që përsëri do të kërkonte koordinim global.)
Me rritjen e volumit të bazës së njohurive të funksioneve Wolfram, një nga problemet që padyshim do të shfaqet është gjendja e identifikueshmërisë së funksioneve; për këtë në sistem është parashikuar (dhe skedarët e definicionit mund të përfshijnë fjalë kyçe etj.). Për funksionet e ndërtuara në gjuhën Wolfram Language, në dokumentacion ka të gjitha llojet e lidhjeve që ndihmojnë në "reklamimin" e funksioneve. Funksionet në depozita të funksioneve mund të lidhin në funksionet e ndërtuara. E si është për të kundërtën? Për këtë, ne do të eksperimentojmë me skema të ndryshme për të paraqitur funksionet e depozitave në faqet e dokumentacionit për funksionet e ndërtuara.
Për funksionet e ndërtuara në gjuhën Wolfram Language ekziston një nivel i ashtuquajtur i identifikueshmërisë, i siguruar nga , të cilat ofrojnë lista të organizuara të funksioneve që i përkasin në fusha të caktuara. Është gjithmonë e vështirë të balancosh siç duhet faqet e referencës dhe ndërsa gjuha Wolfram rritet, faqet e referencës shpesh duhet të riorganizohen plotësisht. Është mjaft e lehtë të vendosësh funksionet nga repository në kategori të gjera dhe madje t’i ndash këto kategori në mënyrë të përsëritur, por shumë më e vlefshme është të kesh faqe reference të organizuara siç duhet për gjuhën. Aktualisht nuk është e qartë se si mund të krijohen ato më së miri për të gjithë bazën e njohurive të funksioneve. Për shembull, në repository të funksioneve, çdo kush mund të vendosë një faqe interneti që përmban 'zgjedhjet' e tij nga repository:

Repository i funksioneve të Wolfram është i konfiguruar si një depo e përhershme funksionesh, ku çdo funksion në të do të funksionojë gjithmonë. Sigurisht, mund të shfaqen versione të reja të funksioneve dhe ne presim që disa funksione me kalimin e kohës të bëhen të vjetra. Funksionet do të punojnë nëse përdoren në programe, por faqet e dokumentacionit të tyre do të referohen në funksione më të reja dhe më të avancuara.
Repoja e funksioneve Wolfram është krijuar për të lehtësuar marrjen e funksioneve të reja dhe për të eksploruar mundësitë e reja të përdorimit të gjuhës Wolfram. Me një optimizëm të lartë, ne shpresojmë që një pjesë e asaj që është kërkuar në repo do të ketë kuptim që në fund të bëhet pjesë e integruar e gjuhës kryesore Wolfram Language. Gjatë dekadës së kaluar, ne kemi pasur një grup të ngjashëm . Dhe një nga mësimet e nxjerra nga kjo përvojë është se për të arritur standardet e cilësisë dhe koherencës, të cilat ne i përqendrojmë në gjithçka që është integruar në gjuhën Wolfram, kërkohet shumë punë, që shpesh është më e komplikuar se përpjekjet fillestare për të implementuar një ide. Por, edhe në këtë rast, funksioniNë bazën e njohurive të funksioneve mund të shërbejë si një provë shumë e dobishme e konceptit të një funksioni të ardhshëm, i cili në fund mund të integrohet në gjuhën Wolfram.
Këtu, më e rëndësishmja është se funksioni në repositorin e funksioneve është diçka që është e disponueshme për cdo përdorues për ta përdorur menjëherë. Ndoshta funksioni i integruar i gjuhës është shumë më i mirë dhe më efikas, por repositori i funksioneve do të lejojë përdoruesit të kenë menjëherë qasje në të gjitha funksionet e reja. Dhe, çka është veçanërisht e rëndësishme, kjo koncept e lejon çdo person që të shtojë funksione të reja sipas dëshirsë.
Në të kaluarën, ideja në historinë e gjuhës Wolfram nuk do të kishte funksionuar kaq mirë si tani, por në këtë pikë, janë investuar shumë përpjekje, si dhe ka një kuptim të thellë të parime të projektimit të gjuhës, saqë tani duket mjaft e mundshme që një komunitet i madh përdoruesish të shtojë funksione që do të mbështesin koherencën e projektit, për t'i bërë ato të dobishme për një gamë të gjerë përdoruesish.
Në komunitetin e përdoruesve të Wolfram Language ka një shpirt të jashtëzakonshëm talenti. (Natyrisht, ky komunitet përfshin shumë specialistë lider në kërkime dhe zhvillime në fusha të ndryshme.) Shpresoj që depoja e funksioneve të Wolfram të ofrojë një platformë efektive për të zbuluar dhe përhapur këtë shpirt talenti. Vetëm së bashku mund të krijojmë diçka që do të expandontë ndjeshëm fushën në të cilën mund të aplikohet paradigma llogaritëse e gjuhës Wolfram.
Në mbi 30 vjet, ne kemi bërë një udhëtim të gjatë me gjuhën Wolfram. Tani së bashku, le të shkojmë akoma më tej. I bëj thirrje të gjithë përdoruesve të nderuar të gjuhës Wolfram në mbarë botën, që të përdorin depozitat funksionale si platformë për këtë, si dhe një projekt të ri software si Free Wolfram Engine për zhvilluesit.
Burimi: habr.com
