Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Përshëndetje, Habr! Po paraqes për ju përkthimin e postit të Steven Wolfram «Repoja e Funksioneve Wolfram: Lansimi i një Platforme të Hapur për Zgjerimin e Gjuhës Wolfram».

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Parakushtet për qëndrueshmërinë e gjuhës Wolfram

Sot jemi në prag të arritjeve të mëdha me gjuhën e programimit Wolfram Language. Para vetëm tre javësh, ne lançuam një motor falas Wolfram për zhvilluesit, për t'i ndihmuar përdoruesit tanë të integrojnë gjuhën Wolfram Language në projektet e tyre të mëdha të softuerit. Sot, ne po lançojmë repozanë e funksioneve Wolfram, për të ofruar një platformë të koordinuar për funksionet e krijuara për të zgjeruar gjuhën Wolfram, si dhe po hapim repozenë e funksioneve për çdo njeri që mund të kontribuojë në zhvillimin e produktit tonë të softuerit.

Repoja e funksioneve (Function Repository) Wolfram është diçka që bëhet e mundur përmes karakteristikave unike të Wolfram Language, jo vetëm si gjuhë programimi, por edhe si një gjuhë të plotë computative. Në gjuhët tradicionale të programimit, shtimi i funksioneve të reja të konsiderueshme zakonisht përfshin krijimin e tërë biblioteka të shtesave, që mund të funksionojnë ose jo në bashkëveprimin e tyre. Megjithatë, në gjuhën Wolfram Language ka shumë gjëra që janë tashmë të integruara në vetë gjuhën, që krijon mundësinë për të zgjeruar dukshëm funksionalitetin e saj, thjesht duke shtuar funksione të reja, që integrohen menjëherë në strukturën e plotë të gjithë gjuhës.

Për shembull, tani në repozenë e funksioneve Wolfram ndodhen 532 funksione të reja të strukturuara në 26 kategori tematike:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Po ashtu si më shumë se 6000 funksione standarde, të integruara në gjuhën Wolfram, çdo funksion nga repoza ka një faqe dokumentimi me përshkrime të detajuar dhe shembuj të përdorimit:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Për të kaluar në faqen, kopjoni objektin e mësipërm (BLOB funksional), ngjitni atë në linjën e hyrjes dhe pastaj ekzekutoni funksionin – ai është tashmë i integruar në gjuhën Wolfram dhe mbështetet si standard, duke filluar nga versioni 12.0:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Këtu duhet theksuar se gjatë trajtimit LogoQRCode Nuk keni nevojë, për shembull, të konfiguroni «bibliotekën për përpunimin e imazheve» — pasi në gjuhën Wolfram Language ne kemi implementuar një mënyrë të rregullt dhe të algoritmizuar për përpunimin e imazheve, të cilat mund të përpunohen menjëherë nga funksione të ndryshme grafike të gjuhës:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Shpresoj se me mbështetje të një komuniteti të jashtëzakonshëm dhe të talentuar, i cili po rritet dhe zgjerohet (në bazë të gjuhës Wolfram) për disa dekada të fundit. Repository i funksioneve Wolfram do të mundësojë, në një të ardhme të afërt, zgjerimin e konsiderueshëm të gamës (ndoshta 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 parimet e zhvillimit, të cilat realizohen mbi bazën e gjuhës. (Këtu duhet theksuar se Wolfram Language ka një histori zhvillimi dhe rritje të stabilizuar prej më shumë se 30 vjetësh.).
Brenda funksioneve të repository-t mund të ketë fragmente të vogla ose mjaft të mëdha kodi, të shkruara në gjuhën Wolfram. Për shembull, këto mund të jenë thirrje nga API dhe shërbime të jashtme ose biblioteka të jashtme në gjuhë të tjera.. Një veçori unike e këtij qasjeje është se, kur kaloni në funksionalitetin në nivelin e përdoruesit, do të mungojnë çdo përçarje potenciale për shkak se kjo qasje është ndërtuar mbi një strukturë të harmonizuar të gjuhës Wolfram — dhe çdo funksion automatikisht do të punojë siç duhet — ashtu siç duhet ta bëjë.
Shell-i dhe struktura programore e repository-t të funksioneve Wolfram janë rregulluar në mënyrë që secili të mund të kontribuojë në këtë çështje sa më lehtë dhe më të përshtatshme — në thelb, thjesht duke plotësuar një dokument tekstual në një skedar notepad (me shtrirje nb) WL. Funksionet automatike të integruara lejojnë verifikimin e funksioneve të reja që shtohen në repository me synimin e integrimit të garantuar në gjuhë. Kompania jonë i drejtohet një grupi të gjerë përdoruesish, të cilët mund të integrojnë funksionet e tyre në gjuhë, dhe jo në vështirësi të mëdha të funksioneve të reja — dhe megjithëse këtu zbaton një proces verifikimi, nuk këmbëngulim për diçka si analiza e mundimshme e konstrukcionit ose standarde të rrepta të plotesisë dhe besueshmërisë së funksioneve të reja të përdoruesit, në krahasim me kontrollime më të rrepta të funksioneve të integruara në bërthamën e gjuhës, të cilat ne aplikojmë.

Në këtë qasje ekzistojnë shumë kompromise dhe detaje, por qëllimi ynë është që të optimizojmë depozitat e funksioneve Wolfram për të mirën e përdoruesve dhe që funksionet e reja të funksionarëve të japin një kontribut të dukshëm në zhvillimin e gjuhës. Me rritjen e saj, nuk kam dyshim se do të kemi nevojë të shpikim metoda të reja për përpunimin dhe verifikimin e funksioneve të integruara në depo, dhe kjo nuk është pak e rëndësishme për organizimin e numrit të madh të funksioneve dhe për gjetjen e atyre që i duhen përdoruesve. Megjithatë, nuk mund të mos jetë shpresëdhënëse se rruga që kemi zgjedhur është një fillim i mirë. Unë vetë kam shtuar disa funksione në bazën fillestare. Shumica e tyre bazohen në kodin që unë vetë e kam zhvilluar për një kohë relativisht të gjatë. Dhe më zgjati vetëm disa minuta për t'i transferuar ato në depo. Tani, kur ato janë në depo, unë mund përfundimisht - menjëherë dhe në çdo kohë të përdor këto funksione sipas nevojës, pa u shqetësuar për gjetjen e skedarëve, shkarkimin e paketave, etj.

Rritja e efikasitetit me uljen e kostove

Edhe para se të shfaqej Interneti, ekzistonin mënyra për të ndarë kodin e Gjuhës Wolfram (projekti ynë i parë i madh të centralizuar ishte MathSource, i krijuar për Mathematica në vitin 1991 mbi bazën e CD-ROM dhe të tjerë). Sigurisht, qasja që propozohet për implementimin e depozitave të funksioneve Wolfram është një mjet më i fuqishëm dhe më të besueshëm për realizimin e detyrave të mësipërme.

Që nga 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 për ta bërë gjuhën Wolfram jo vetëm një gjuhë programimi, por edhe një gjuhë të plotë të llogaritjes. Dhe kështu, thelbi i qasjes për implementimin e depozitave të funksioneve Wolfram është përdorimi i një qasjeje të bashkëveprimit në programim dhe zhvillimin e funksioneve të reja, të cilat shtohen dhe përfshihen në kuadrin e gjuhës për të mundësuar zhvillimin e saj dhe evoluimin e përbashkët.

Në strukturën e realizimit të çdo funksioni ndodhin procese të ndryshme të llogaritjes. Këtu duhet të theksohet se është e nevojshme që funksioni të ketë një pamje të qartë dhe uniforme për përdoruesin, si dhe lexueshmëri të lehtë. Në këtë kontekst, funksionet e integruara të gjuhës Wolfram Language paraqiten me më shumë se 6000 shembuj se si duhen programuar funksionet (kjo është tonë video-përmbledhje për programimin në kohë reale, të cilat përfshijnë qindra orë procesi të krijimit të programeve standarde). Ky qasje në fund të fundit e bën depozitat e funksioneve të Wolfram të afta për të funksionuar mirë, karakteri strukturor i gjuhës Wolfram Language me numrin e tij të madh të bibliotikave shtesë dhe të ndryshme, të cilat janë tashmë të integruara në gjuhë. Për shembull, nëse keni një funksion që përpunon imazhe, ose matrica të sparse, ose strukturat molekulare, si dhe të dhënat gjeografike apo ndonjë tjetër - në gjuhë tashmë ekziston një paraqitje simbolike koherente, dhe falë kësaj funksioni juaj bëhet menjëherë kompatibël me funksionet e tjera në gjuhë.

Krijimi i një depozite që do të funksiononte vërtet mirë është një detyrë interesante e meta-programimit. Për shembull, një mbipeshtirë në program nuk do të lejojë që të arrihet unifikimi dhe universaliteti i nevojshëm i punës së algoritmit. Ashtu si edhe me një numër të pamjaftueshëm të kufizimeve funksionale, nuk do të mund të realizoni një renditje mjaft 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ë: Projekti Wolfram Demonstrations, i nisur në vitin 2007 dhe tani i funksionueshëm në mënyrë interaktive në Internet dhe që përmban më shumë se 12000 demonstrata interaktive të përdoruesve. Në bazën e të dhënave Wolfram ka më shumë se 600 baza të dhënash gati, që mund të përdoren në gjuhën Wolfram Language, ndërsa depoja e rrjeteve neuronale Wolfram plotësohet me rrjete të reja neuronale pothuajse çdo javë (tani ka tashmë 118) dhe ato lidhen menjëherë përmes funksionit NetModel në gjuhën Wolfram Language.

Të gjitha shembujt e përmendur kanë një veçori thelbësore — objektet dhe funksionet e mbledhura në projekt kanë një shkallë shumë të lartë strukture dhe shpërndarjeje të proceseve. Pa dyshim, detajizimi i strukturës së asaj që është një demonstrim ose një rrjet nervor ose diçka tjetër mund të ndryshojë ndjeshëm, por struktura themelore për çdo depo aktuale mbetet gjithmonë e pandryshuar. Pra, cila është mendimi juaj, i nderuar përdorues, rreth krijimit të një depoje që shton zgjerime në gjuhën Wolfram? Gjuha Wolfram Language është projektuar në një mënyrë që të jetë jashtëzakonisht fleksibël, prandaj mund të zgjerohet dhe modifikohet në çdo mënyrë. Ky faktor është jashtëzakonisht i rëndësishëm për mundësinë e krijimit të shpejtë të projekteve të ndryshme në shkallë të gjerë në gjuhën Wolfram Language. Këtu vlen të theksohet se me rritjen e fleksibilitetit të gjuhës, ndihmësisht do të rritet edhe kostoja e projekteve të realizuara në një gjuhë të tillë. Kjo ndodh për shkak se sa më shumë që përdoruesi e përdor një gjuhë të tillë, aq më shumë funksionalitet specifik merr, por nuk duhet harruar se ky qasje mund të ketë edhe anë negative në pjesën e pamundësisë për të garantuar koherencën e 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 funksionon siç duhet, por nëse provoni të përdorni disa biblioteka, nuk ka garanci që ato do të bashkëpunojnë siç duhet. Po ashtu, në gjuhët tradicionale të programimit — për dallim nga një gjuhë e plotë e llogaritjeve – mungojnë mundësitë për të garantuar kontrollin e pranisë së përfaqësimeve të integruara të koherencës, për ndonjë funksion ose lloj të dhënash, përveç strukturave të tyre bazë. Por, në thelb, problemi është akoma më i madh se sa duket në shikim të parë: nëse dikush ndërtan një vertical funksional në shkallë të gjerë, pa investime të mëdha në programimin qendror të projektit, të cilat i kemi investuar në gjuhën Wolfram, është e pamundur të arrihet koherenca. Prandaj, e rëndësishme është që të gjitha modulet programore të punojnë gjithmonë në mënyrë të saktë së bashku.

Kështu, ideja e depozitës së funksioneve Wolfram është të shmangë problemin e përmendur më parë — duke shtuar thjesht zgjerime në gjuhë në formën e elementeve të vogla programore përmes funksioneve të veçanta, zhvillimi i të cilave si module koherente është një detyrë më e lehtë. Megjithatë, ekzistojnë karakteristika programimi që nuk mund të bëhen të përshtatshme përmes funksioneve të veçanta (dhe kompania jonë ka ndërmend të lëshojë një algoritëm programimi të optimizuar për të ndihmuar në zbatimin e paketave programore të mëdha në të ardhmen e afërt). Sidoqoftë, mbi bazën e funksioneve tashmë të ndërtuara në gjuhën Wolfram Language, ekzistojnë shumë mundësi për programimin që realizohen mbi funksione të veçanta. Ideja është që me përpjekje programimi relativisht të vogla, të mund të krijosh një sërë funksionesh të reja dhe shumë të dobishme, të cilat do të sigurojnë një koherencë të mjaftueshme të projektit, ndërkohë që ato do të jenë të mirëkoordinuara me njëra-tjetrën, si dhe, për më tepër, ato do të kenë mundësinë të përdoren lehtësisht dhe gjerësisht në gjuhë në të ardhmen.

Ky qasje, padyshim, është një kompromis. Me zbatimin e një pakete më të madhe, mund të imagjinohet një botë krejt tjetër funksionaliteti, e cila do të bëhet jashtëzakonisht e fuqishme dhe e dobishme. Nëse ka nevojë për të marrë funksionalitete të reja që do të përshtaten me gjithçka tjetër, por që ju nuk jeni të gatshëm të shpenzoni përpjekje të mëdha për zhvillimin e projektit, kjo, fatkeqësisht, mund të çojë në një zvogëlim të shkallës së projektit tuaj. Ideja e depozitës së funksioneve Wolfram është të ofrojë funksionalitetin që përcakton pjesën e projektit, ky qasje do të lejojë shtimin e funksionaliteteve të fuqishme, duke e bërë njëkohësisht më të lehtë mirëmbajtjen e një koherencë të mirë të programimit të projektit.

Ndihma për shtimin e funksioneve të personalizuara në depozitën e funksioneve

Specialistët e kompanisë sonë kanë punuar me përkushtim për të bërë kontributin e tyre në funksionet e depozitës Wolfram mjaft të lehtë për përdoruesit. Në desktop (padyshim në versioni 12.0), Ju mund të kaloni thjesht përmes skedave të menusë kryesore: File > New > RepositoryItem > Function Repository Item dhe do të merrni "Definicioni Notebook" (programatikisht brenda mjedisit të punës. Ju gjithashtu mund të përdorni funksionin e ngjashëm — CreateNotebook["FunctionResource"]):

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

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

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Në fakt, ju po përpiqeni të krijoni diçka të ngjashme me një funksion të integruar në gjuhën Wolfram Language. Ndryshe nga ajo, ajo mund të bëjë diçka më specifike se funksioni i integruar. Megjithatë, pritshmëritë për plotesinë dhe besueshmërinë do të jenë shumë më të ulta.
Ju nevojitet të caktoni një emër për funksionin tuaj, i cili do të përputhet me parimet e emërtimit të funksioneve në gjuhën Wolfram. Përveç kësaj, ju do të duhet të zhvilloni dokumentacionin për funksionin tuaj, siç është bërë për 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ë skedës së definicionit ka një buton "Rekomandimet për stilin", i cili shpjegon se çfarë duhet të bëni, dhe butoni "Veglat", i cili ofron një mjet për formatimin e dokumentacionit për funksionin tuaj.
Kur të jeni të sigurt se gjithçka është mbushur siç duhet dhe jeni gati, klikoni butonin "Check" ("Kontrollo"). Është krejt normale që ju ende nuk keni kuptuar të gjithë detajet. Prandaj, funksioni "Check" do të ekzekutohet automatikisht dhe do të bëjë shumë kontrollime stili dhe koherencës. shpesh do t'ju ofrojë menjëherë të konfirmoni dhe pranojnë korrigjimet (Për shembull: "Kjo rresht duhet të përfundojë me kolonë", dhe ajo do të ofrojë të futni kolonën). Ndonjëherë ajo 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 kryesisht qëllimi i tij është të sigurojë që gjithçka që ju dërgoni në repository-të e funksioneve, tashmë plotëson sa më shumë rekomandime për stilin.

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Pra ndaj, pas aktivizimit të «Check», mund të përdorni «Preview» («Shikoni paraprakisht»). «Preview» krijon një paraprikim të faqes së dokumentacionit që keni përcaktuar për funksionin tuaj. Ju gjithashtu mund të krijoni një paraprikim për një skedare të krijuar në kompjuterin tuaj ose për një skedare që ndodhet në ruajtjen në cloud. Nëse për ndonjë arsye nuk jeni të kënaqur me atë që do të shihni në paraprikim, thjesht kthehuni dhe bëni korrigjimet e nevojshme, pastaj përsëri klikoni butonin Preview.
Tani jeni të gatshëm ta vendosni funksionin tuaj në repositorin. Butoni Deploy ju ofron katër mundësi veprimi:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Në këtë hap, është e rëndësishme të theksohet se mund të dërgoni funksionin tuaj në repositorin e funksioneve Wolfram, në mënyrë që të jetë e disponueshme për çdo përdorues. Në të njëjtën kohë, mund ta vendosni funksionin tuaj për një numër të kufizuar përdoruesish. Për shembull, mund të krijoni një funksion që është vendosur lokalisht në kompjuterin tuaj, në mënyrë që të jetë e disponueshme kur përdorni këtë kompjuter të veçantë. Ose mund ta vendosni në llogarinë tuaj në cloud, në mënyrë që të jetë e disponueshme për ju kur jeni të lidhur në cloud. Ju gjithashtu mund ta publikoni (deploy) funksionin përmes llogarisë tuaj në cloud. Në këtë rast, ajo nuk do të jetë në repositorin qendror të funksioneve Wolfram, por do të keni mundësinë t’i jepni dikujt URL-në që do t’i lejojë të marrë funksionin tuaj nga llogaria juaj. (Në të ardhmen, ne gjithashtu do të mbështesim repositorët qendrorë në shkallë të kompanisë sonë).

Prandaj, supozoni se dëshironi të dërgoni funksionin tuaj në bazën e të dhënave të funksioneve Wolfram. Për këtë, klikoni butonin «Dërgo» në repositor. Çfarë ndodh në atë moment? Kërkesa juaj menjëherë shkon në radhën për shqyrtim dhe miratim nga ekipi ynë i veçantë i kuratorëve.

Ndërsa kërkesa juaj kalon në procesin e miratimit (i cili zakonisht zgjat disa ditë), do të merrni njoftime për statusin e shqyrtimit të saj, si dhe ndoshta oferta për përdorimin e mëtejshëm të saj. Por sapo funksioni juaj të miratohet, ai do të publikohet menjëherë në depozitat e funksioneve Wolfram dhe do të jetë në dispozicion për çdo përdorim. (Dhe kjo do të shfaqet në përmbledhjet e lajmeve për funksionet e reja etj.)

Çfarë duhet të jetë në depo?

Duhet të theksohet se kompania jonë ka standarde shumë të larta për plotësinë, besueshmërinë dhe cilësinë e përgjithshme; nga mbi 6000 funksione që ne kemi integruar në gjuhën Wolfram gjatë më shumë se 30 viteve të fundit, të gjitha përmbushin këto kërkesa. Qëllimi i depozitave të funksioneve Wolfram është që të përdorë të gjithë strukturën dhe funksionalitetet që tashmë ekzistojnë në gjuhën Wolfram Language për të shtuar sa më shumë funksione shumë të lehta (dmth. funksione me performancë më të lartë).

Patjetër, 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ë plotësisht me funksione të tjera dhe pritshmëritë e përdoruesve për atë se si funksionet duhet të funksionojnë saktësisht. Megjithatë, funksionet nuk duhet të kenë të njejtën plotësi ose besueshmëri.

Në funksionet e integruara të gjuhës Wolfram, ne punojmë fort për të bërë funksionet programore sa më të përgjithshme. Megjithatë, nuk ka asgjë të keqe në faktin që një funksion që thjesht përpunon një rast shumë specifik, por të dobishëm, të përfshihet në depozitat e funksioneve Wolfram. Për shembull, funksioni SendMailFromNotebook mund të pranojë skedarë në një format të caktuar dhe të krijojë email në një mënyrë të caktuar. PolygonalDiagram krijon diagrame vetëm me ngjyra dhe etiketë të caktuara, etj.

Një moment tjetër që lidhet me funksionet e integruara është se kompania jonë përpiqet maksimalisht të trajtojë të gjitha rastet e parashikuara, për përpunimin e saktë të hyrjeve të pasakta dhe kështu me radhë. Në depozitën e funksioneve, është krejt normale që të ekzistojë një funksion i veçantë, i cili trajton rastet themelore të zgjidhjes së problemit dhe injoron të gjitha rastet e tjera.

Është e qartë se është më mirë të kesh funksione që bëjnë më shumë dhe bëjnë më mirë, por optimizimi për depozitën e funksioneve — ndryshe nga funksionet e integruara të gjuhës Wolfram — duhet të ketë më shumë funksione të lidhura me një numër më të madh funksionesh, sesa të thellohet në proceset e implementimit të çdo funksioni të veçantë.

Tani le të shqyrtojmë një shembull të testimit të funksioneve në depozita. Pritet që koherenca për këto funksione natyrshëm të jetë shumë më e ulët sesa për funksionet e integruara të gjuhës. Kjo është veçanërisht e rëndësishme në raste kur funksionet varen nga burime të jashtme, si API-të, dhe është e rëndësishme të bëhen vazhdimisht teste të qëndrueshme, që ndodhin automatikisht brenda algoritmeve të verifikimit. Në skedarin nb mund të specifikoni qartë përkufizimet (në seksionin "Informacione Shtesë") dhe të vendosni aq teste sa e shikoni të arsyeshme, të përcaktuara ose nga rreshtat e hyrjes dhe daljes, ose nga objektet simbolike të plota. VerificationTest, sa të doni. Për më tepër, sistemi përpiqet vazhdimisht ta kthejë dokumentacionin tuaj në një proces verifikimi (ndonjëherë kjo mund të jetë mjaft e ngarkuar me resurse, për shembull, për një funksion, rezultati i të cilit varet nga numrat rastësorë ose koha e ditës).

Si rezultat, në depozitën e funksioneve do të ketë një sërë sfidash për implementim. Disa do të jenë vetëm një rresht kod, të tjerë mund të përfshijnë mijëra ose dhjetëra mijëra rreshta, ndoshta duke përdorur shumë funksione ndihmëse. Në cilat raste është e nevojshme të shtoni një funksion, për përcaktimin e të cilit është e nevojshme shumë pak kod? Në parim, nëse funksioni ka një emër mnemonik të mirë, që përdoruesit do ta kuptonin me kënaqësi, duke e parë këtë pjesë në kod, atëherë mund ta shtoni. Ndryshe, ndoshta është më mirë ta shkruani përsëri kodin në programin tuaj çdo herë, kur ju nevojitet.

Qëllimi kryesor i depozitës së funksioneve (siç sugjeron emri i saj) është të introduktojë në funksionalitetin e gjuhës funksione të reja. Nëse doni të shtoni të dhëna të reja ose entitete të reja, përdorni depozitën Wolfram Data. Por çfarë duhet të bëni nëse dëshironi të introduktoni lloje të reja objektesh për llogaritjet tuaja?

Në të vërtetë, ka dy rrugë. Ndoshta dëshironi të introduktoni një lloj të ri objekti që do të përdoret në funksione të reja në depozitën e funksioneve. Në këtë rast, gjithmonë mund ta shkruani përfaqësimin e tij simbolik dhe ta përdorni atë gjatë futjes ose daljes së funksioneve në depozitën e funksioneve.

Por çfarë duhet të bëni nëse dëshironi të paraqisni një objekt dhe pastaj ta përcaktoni, nëpërmjet funksioneve ekzistuese në gjuhën Wolfram, që duhet të punojnë së bashku me të? Për këtë, gjuhës Wolfram gjithmonë i ka pasur një mekanizëm të lehtë, që quhet UpValues. Me disa kufizime (përveç për funksionet që nuk mund të vlerësojnë argumentet e tyre), depozita e funksioneve ju lejon të paraqitni thjesht një funksion dhe të përcaktoni vlerat për të. (Për të rritur pritshmërinë përkohe gjatë krijimit të një konstrukti të ri të rëndësishëm, plotësisht të integruar kudo në gjuhën Wolfram, — kjo zakonisht është një procedurë shumë e rëndësishme, e cila nuk mund të arrihet vetëm me rritjen e kostos së projektit dhe kjo është ajo që kompania jonë bën në kuadër të projekteve të zhvillimit afatgjatë të gjuhës, kjo detyrë nuk përbën qëllimin që vendoset në kuadër të zhvillimit të depozitës).

Pra, çfarë mund të ketë në kodin e funksioneve në depozitën e funksioneve? Gjithçka që është e integruar në gjuhën Wolfram, natyrisht (të paktën nëse nuk paraqet kërcënimi për siguri dhe funksionalitetin e programit të vet, si një mjedis llogaritës) ashtu si çdo funksion nga depozitë e funksioneve. Ndërkohë, ekzistojnë edhe mundësi të tjera për funksionimin: funksioni në depozitën e funksioneve mund të thërrasë API, ose në Wolfram Cloud, ose nga një burim tjetërNatyrisht, ekzistojnë disa rreziqe që lidhen me këtë. Për shkak se nuk ka garanci që API do të ndryshojë, funksioni në depozitat e funksioneve mund të ndalojë së funksionuari. Për të identifikuar probleme 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 flasim për të dhëna reale, mund të ketë probleme edhe me atë funksionalitet - sepse të dhënat reale për botën ndryshojnë vazhdimisht, dhe ndonjëherë madje ndryshojnë definicionet dhe strukturat e tyre.)

A duhet që e gjithë kodi për depozitën e funksioneve Wolfram të shkruhet në gjuhën Wolfram? Definitivisht, kodi brenda API-së së jashtme nuk duhet të shkruhet në gjuhën Wolfram, e cila saktësisht nuk e bën kodin e gjuhës. Në të vërtetë, nëse gjeni një funksion pothuajse në çdo gjuhë të jashtme ose bibliotekë, mund të krijoni një mbështjellës që do t'ju lejojë ta përdorni atë në depozitën e funksioneve Wolfram. (Zakonisht për këtë duhet të përdoren funksionet e integruara ExternalEvaluate ose ExternalFunction në kodin e gjuhës Wolfram.)

Pra, çfarë kuptimi ka që ta bëni këtë? Në thelb, kjo mundëson përdorimin e të gjithë sistemit të integruar Wolfram Language dhe të gjithë grupit të tij të unifikuar të mundësive programore. Nëse merrni një implementim bazë nga një bibliotekë ose gjuhë të jashtme, atëherë mund të përdorni strukturën e pasur simbolike të gjuhës Wolfram Language për të krijuar një funksion të nivelit më të lartë, që u lejon përdoruesve të përdorin mjaft lehtësisht çdo funksionalitet të implementuar tashmë. Të paktën, kjo duhet të ketë mundësinë e implementimit në një botë ideale, ku ekzistojnë të gjithë elementët për ngarkimin e bibliotekave dhe tjerë, në këtë rast ato do të zgjidhen automatikisht me ndihmën e Wolfram Language. (Duhet të theksohet se në praktikë mund të ketë probleme me konfigurimin e gjuhëve të jashtme në një sistem kompjuterik specifik, dhe në një depo të cloud mund të lindin probleme shtesë me sigurinë).

Kur për herë të parë analizoni bibliotekat tipike të jashtme, ato shpesh duken shumë komplekse për t'u mbuluar vetëm me disa funksione, por në shumë raste pjesa më e madhe e kompleksitetit buron nga krijimi i infrastrukturës së nevojshme për bibliotekën dhe të gjitha funksionet për mbështetje. Megjithatë, duke përdorur gjuhën Wolfram Language, infrastruktura, në përgjithësi, është tashmë e instaluar në paketat, dhe kështu nuk është e nevojshme të zbulohet në detaje të gjitha këto funksione mbështetëse, por duhet të krijoni funksione për disa funksione "më të larta" që janë të orientuara drejt aplikacionit në bibliotekë.

Ekosistemi i bazës së njohurive

Nëse keni shkruar funksione që i përdorni vazhdimisht, dërgoni ato në depozitën e funksioneve Wolfram! Nëse nuk del ndonjë gjë më e madhe (zhvillim i gjuhës), edhe atëherë do t'ju jetë shumë më e lehtë të përdorni funksionet për përdorim të personal. Megjithatë, është logjike të supozohet se, nëse i përdorni funksionet vazhdimisht, ndoshta edhe përdorues të tjerë do t'i gjejnë ato të dobishme.

Natyrisht, mund të ndodheni në një situatë kur nuk keni mundësi — ose nuk doni — të shpërndani funksionet tuaja ose në rastin e aksesit në burime informacioni private. Edhe në këto raste, mund ta zhvilloni thjesht funksionet në llogarinë tuaj në cloud, duke specifikuar të drejtat e aksesit tek ato. (Nëse organizata juaj ka një cloud privat të Wolfram Enterprise, atëherë së shpejti do të jetë në gjendje të hostojë një depo private të funksioneve, e cila mund të administrohet nga organizata juaj dhe të vlerësojë nëse do të ketë pamje të detyruara për përdoruesit e jashtëm ose jo.)

Funksionet që dërgoni në depozitën e funksioneve Wolfram nuk duhet të jenë domosdoshmërisht perfekte; ato thjesht duhet të jenë të dobishme. Kjo është pak si seksioni "Gabimet" në dokumentacionin klasik të Unix-it — në "Seksionin e definicioneve" ka një seksion "Shënimet e autorit" ku mund të përshkruani kufizimet, problemet dhe kështu me radhë që tashmë i dini për funksionin tuaj. Për më tepër, kur dërgoni funksionin tuaj në depozitë, mund të shtoni shënime për dërgimin që do të lexohen nga një ekip i posaçëm kuratorësh.

Pas publikimit të funksionit, faqja e tij gjithmonë ka dy lidhje poshtë: "Dërgo një mesazh në lidhje me këtë funksion» dhe "Diskutoni në komunitetin Wolfram». Nëse bashkëngjitni një shënim (p.sh., më njoftoni për gabimet), mund të vendosni një kutizë që thotë se dëshironi që mesazhi juaj dhe informatat tuaja të kontaktit t'i dërgohen autorit të funksionit.

Ndonjëherë ndodh nevoja për të përdorur thjesht funksionet nga depo e funksioneve Wolfram, si për shembull funksionet e ndërtuara, pa shkuar në kodin e tyre. Megjithatë, nëse dëshironi "të shikoni brenda", në pjesën e sipërme gjithmonë ka një buton "Notebook". Klikoni mbi të, dhe do të merrni një kopje të vetë origjinës të notës që u dërguar në depo e funksioneve. Ndonjëherë mund ta përdorni atë si një shembull për nevojat tuaja. Në këtë mënyrë gjithashtu mund të zhvilloni modifikimin tuaj të këtij funksioni. Mund të dëshironi të vendosni funksionet që keni gjetur nga depoja në kompjuterin tuaj ose në llogarinë tuaj në ruajtjen tuaj cloud, ndoshta doni t'i dërgoni ato në bazën e të dhënave të funksioneve, ndoshta si një version të përmirësuar, të plotësuar të funksionit origjinal.

Në të ardhmen planifikojmë të mbështesim degëzimin në stilin Git për depot e funksioneve, por tani po përpiqemi ta bëjmë atë më të thjeshtë, dhe gjithmonë kemi vetëm një version të pranuar të çdo funksioni të integruar në gjuhë. Më shpesh (nëse zhvilluesit nuk heqin dorë nga mbështetja e funksioneve që kanë zhvilluar dhe përgjigjen në mesazhet e përdoruesve), autori origjinal i funksionit merr kontroll mbi përditësimet e tij dhe dërgon versione të reja, që më pas shqyrtohen dhe, nëse kalojnë procesin e verifikimit, publikohen në gjuhë.

Le të shqyrtojmë pyetjen se si funksionon "versionimi" i funksioneve të zhvilluara. Tani për tani, kur përdorni një funksion nga depo e funksioneve, përcaktimi i tij do të ruhet përherë në kompjuterin tuaj (ose në llogarinë tuaj cloud, nëse po përdorni cloud). Nëse ka një version të ri të funksionit, në përdorimin e ardhshëm do të merrni një mesazh që ju njofton për këtë. Dhe nëse dëshiron të përditësosh funksionin në versionin e ri, mund ta bësh atë me komandën ResourceUpdate("BLOB object" në të vërtetë ruan më shumë informacion rreth variableve, dhe në të ardhmen ne planifikojmë ta bëjmë këtë më të arritshëm për përdoruesit tanë.)

Një nga veçoritë e shkëlqyera të repository-t së funksioneve Wolfram është se çdo program Wolfram Language kudo mund të përdorë funksione nga ajo. Nëse programi ndodhet në një notebook, shpesh është e dobishme të formatojmë funksionet e repository-t si funksione të lehta për tu lexuar "objekte binarë funksionalë" (ndoshta me një grup përputhjeje versionesh).

Ju gjithmonë mund të aksesoni çdo funksion të repository-t së funksioneve duke përdorur tekstin ResourceFunction […]. Dhe kjo është shumë e dobishme nëse po shkruani kod ose skenare direkt për Wolfram Engine, për shembull, me ndihmën e IDE-së ose redaktorit të kodit (duhet theksuar se repository-i i funksioneve është plotësisht i përputhshëm me Free Wolfram Engine për zhvilluesit).

Si funksionon kjo?

Brenda funksioneve në repository-n e Wolfram është e mundur të përdoret e njëjta sistem burimesh siç është në të gjitha repository-t e tjera ekzistuese (depo të dhënash, Neural Net Repository, koleksion projektesh demonstrues etj.), siç janë të gjitha burimet sistemore të Wolfram, ResourceFunction është, në fund të fundit, e bazuar në funksionin ResourceObject.

Le të shqyrtojmë ResourceFunction:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

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

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Si funksionon caktimi i funksionit të burimit? Më i thjeshti është një rast krejtësisht lokal. Këtu është një shembull që merr një funksion (në këtë rast thjesht një funksion të pastër) dhe e cakton atë si funksion burimi për këtë seancë pune në program:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

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

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Kujdes, në këtë BLOB objekt të funksionit ka një ikonë të zezë Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram. Kjo do të thotë se funksioni BLOB i përket një funksioni burimi në memorie, të përcaktuar për seancën aktuale. Për një funksion burimi, i cili ruhet përherë në kompjuterin tuaj ose në llogarinë tuaj në re, ka një ikonë gri Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram. Ndërsa për një funksion burimi zyrtar në repository-n e funksioneve Wolfram ka një ikonë portokalli Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram.

Pra, çfarë ndodh kur përdorni menynë "Zhvillim" në notebook-un e caktimit? Së pari, ai merr të gjitha caktimet në notebook dhe nga ato krijon një simbolikë ResourceObject). (Dhe nëse po përdorni një IDE tekstual ose një program, atëherë mund ta krijoni gjithashtu qartë ResourceObject)

Zhvillimi lokal i funksionit nga repository në kompjuterin tuaj bëhet me komandën LocalCache për objektin burimor, për ta ruajtur si LocalObject në sistemin tuaj të skedarëve. Zhvillimi në llogarinë tuaj në re bëhet me komandën CloudDeploy për objektin burimor, ndërsa publikimi i funksonit në re — CloudPublish. Në të gjitha rastet ResourceRegister përdoret gjithashtu për të regjistruar emrin e funksionit burimor, kështu që ResourceFunction[«name»] do të funksionojë.

Nëse shtypni butonin Submit për Repository-në e Funksioneve, atëherë ajo që ndodh poshtë ResourceSubmit thirret mbi objektin burimor. (Dhe nëse po përdorni një ndërfaqe shkrimi tekstual, mund ta thërrisni ResourceSubmit në mënyrë të drejtpërdrejtë.)

Për default, dërgimi bëhet nën emrin që lidhet me identifikuesin tuaj Wolfram ID. Por nëse po dërgoni një aplikim në emër të një grupi zhvilluesish ose organizate, mund të vendosni një identifikues të veçantë të botuesit dhe ta përdorni atë si emër për të bashkëvepruar me pamjet tuaja.

Pasi të dërgoni ndonjë funksion tuaj në bazën e njohurive të funksioneve, ai do të hyjë në një radhë për kontroll. Nëse merrni komente në përgjigje, ato zakonisht do të jenë në formën e një skedari tekstual me ‘cella komentesh’ të shtuar. Ju gjithmonë mund të kontrolloni statusin e aplikimit tuaj duke shkuar në portalin e anëtarit të sistemit të burimeve. Por sapo funksioni juaj të aprovohet, do të njoftoheni (nëpërmjet email-it), dhe funksioni juaj do të jetë i vendosur në repository-në e funksioneve Wolfram.

Disa ngjashmëri në punë

Në shikim të parë, mund të duket se mund ta merrni thjesht një notebook definicioni dhe ta vendosni fjalë për fjalë në repository-në e funksioneve, por në të vërtetë ka shumë nuanca — dhe për t'i përpunuar ato kërkohet të realizoni një meta-programim të komplikuar, duke përpunuar si kodin që përcakton funksionin ashtu edhe vetë notebook-un e definicionit. Shumica e kësaj ndodh brenda, pra ‘nën sipërfaqe’, por kjo mund të ketë disa pasoja që është e rëndësishme të kuptoni, nëse planifikoni të kontribuoni në bazën e njohurive të funksioneve.

Një detaj i parë i menjëhershëm: Kur plotësoni "Bllokun e Definimeve", 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, por për dokumentacionin e depozitës së funksioneve, kjo zëvendësohet ResourceFunction["MyFunction"] – kjo është saktësisht ajo që përdoruesit do të përdorin gjatë punës me funksionin.

Një detaj i dytë: kur krijoni një funksion burimi nga Blloku i Definimeve, të gjitha varësitë e përfshira në definimin e funksionit duhet të jenë të fiksuara dhe të përfshira në mënyrë të qartë. Megjithatë, për të garantuar që definimet të mbeten modulare, duhet të vendosni gjithçka në një emërzuar unik. (Natyrisht, që funksionet që e bëjnë këtë, janë në depozita të funksioneve.)

Zakonisht, kurrë nuk do të shihni ndonjë shenjë të punës së kodit që përdoret për të konfiguruar këtë emërzim. Por nëse për ndonjë arsye thirrni një simbol të papërfunduar brenda funksionit tuaj, do të shihni që ky simbol ndodhet në kontekstin e brendshëm të funksionit. Megjithatë, gjatë përpunimit të Bllokut të Definimeve, së paku, simboli që korrespondon me funksionin e vet konfigurohet për shfaqje optimale në formën e një BLOB-i funksional, dhe jo si një simbol të papërpunuar në kontekstin e brendshëm.

Depozita e funksioneve është e destinuar për të përcaktuar funksione të reja. Dhe këto funksione mund të kenë opcione. Shpesh, këto parametra (për shembull, Metoda ose ImageSize) do të kenë mundësinë e përdorimit për funksione të ndërtuara, si dhe për ata për të cilat tashmë ekzistojnë simbole të ndërtuara. Por ndonjëherë, funksionit të ri mund t’i nevojiten edhe opcione 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 si funksione të plota burimi, pra vetë ato). Për thjeshtësi, depozita e funksioneve lejon caktimin e opcioneve të reja në definita si vargje. Dhe për lehtësi të përdoruesit, këto definita (nën kushtin se ata përdornin OptionValue dhe OptionsPattern) gjithashtu përpunohen në mënyrë që, gjatë përdorimit të funksioneve, parametrat të mund të caktohen jo vetëm si vargje, por edhe si simbole globale me të njëjtin emër.

Shumica e funksioneve thjesht bëjnë atë që duhet të bëjnë çdo herë që thirren, por disa funksione kanë nevojë të inicializohen përpara se të mund të funksionojnë në një seancë të caktuar — dhe për të zgjidhur këtë problem, në pjesën "Definimi" ka një seksion "Inicializimi".

Funksionet nga depo mund të përdorin funksione të tjera që tashmë ndodhen në depo për të konfiguruar definicionet për depo të funksioneve, duke përfshirë dy (ose më shumë) funksione të cilat referohen njëra-tjetrës, duhet të zhvillohen në seancën tuaj të punës me programin, në mënyrë që të mund t’i referoheni si ResourceFunction[«name»], pastaj mund të krijoni kombinimet e nevojshme të këtyre funksioneve shembuj (nuk e kuptova) dhe të shtoni një funksion të ri në depo mbi baza të funksioneve të mëparshme. (ose tashmë – të dyja fjalët janë të çuditshme)

Perspektivat e zhvillimit. Çfarë duhet të ndodhë kur depoja të bëhet vërtet e madhe?

Sot ne sapo po lançohemi depo e funksioneve Wolfram, por me kalimin e kohës ne presim që volumi dhe funksionaliteti i saj mund të rritet ndjeshëm, dhe me rritjen e saj do të shfaqen probleme të ndryshme, të cilat, siç e kemi parashikuar, mund të ndodhin.

Problemi i parë ka të bëjë me emrat e funksioneve dhe unikësinë e tyre. Depo e funksioneve është projektuar në një mënyrë që, ashtu si për funksionet e integruara në gjuhën Wolfram, mund të referoheni çdo funksioni duke e treguar vetëm emrin e tij. Por kjo domosdoshmërisht do të thotë që emrat e funksioneve duhet të jenë globalisht unikë në të gjithë depo, kështu që, për shembull, në depo mund të ketë vetëm një ResourceFunction["MyFavoriteFunction"].

Në shikim të parë, kjo mund të duket si një problem madhor, por duhet të kuptohet se kjo është kryesisht e njëjta problematikë si dhe për gjëra të tilla si emrat e domaineve të internetit ose etiketat e mediave sociale. Dhe e vërteta është se në sistemin e nevojshëm ka nevojë për një regjistrues — dhe kjo është një nga rolet që kompania jonë do të ketë për bazën e njohurive të funksioneve Wolfram. (Për versionet private të depo, regjistruesit e tyre mund të jenë administratorët.) Sigurisht, një domen i internetit mund të regjistrohet pa pasur asgjë mbi të, por në depo të funksioneve emri i funksionit mund të regjistrohet vetëm nëse ka një definicion funksioni në fakt.

Pjesa e rolit tonë në menaxhimin e bazës së njohurive të funksioneve Wolfram është siguruar që emri i zgjedhur për funksionin të jetë logjik në përputhje me definicionin e funksionit, si dhe të përputhet me marrëveshjet e emërtimeve të Wolfram Language. Kemi më shumë se 30 vjet përvojë në emërimin e funksioneve të integruara në Wolfram Language, dhe ekipi ynë i kuratorëve do ta sjellë këtë përvojë në depozitat e funksioneve. Sigurisht, gjithmonë ka përjashtime. Për shembull, mund të duket më e preferueshme që të ketë një emër të shkurtër për një funksion të caktuar, por është më mirë të

(Duhet të theksohet se thjesht shtimi i ndonjë etikete të pjesëmarrësit për të eliminuar ambiguitetin e funksioneve nuk do të sjellë efektin e pritur. Sepse, nëse nuk insistoni që gjithmonë të caktohet një etiketë, do të jetë e nevojshme të përcaktoni një etiketë të parazgjedhur për çdo funksion të caktuar, si dhe të identifikoni etiketat e autorëve, gjë që përsëri do të kërkonte koordinim global.)

Me rritjen e volumit të bazës së njohurive për funksionet Wolfram, një nga problemet që me siguri do të shfaqet është zbuleshmëria e funksioneve, për këtë sistemi parashikon funkcioni i kërkimit (dhe skedarët e përcaktimit mund të përfshijnë fjalë kyçe e.tj.). Për funksionet e integruara në Wolfram Language, në dokumentacion ka të gjitha llojet e referimeve që ndihmojnë për të "reklamuar" funksionet. Funksionet në depozitat e funksioneve mund të referohen në funksionet e integruara. Po si për të kundërtën? Për këtë, ne kemi në plan të eksperimentohemi me skema të ndryshme për të paraqitur funksionet e depozitave në faqet e dokumentacionit për funksionet e integruara.

Për funksionet e integruara në Wolfram Language, ekziston një nivel i quajtur zbuleshmëri, i siguruar nga rrjeti i "faqeve ndihmëse", që ofrojnë lista të organizuara funksionesh që i përkasin fushave të caktuara. Është gjithmonë e vështirë të balançohet siç duhet faqet e referencës dhe me rritjen e gjuhës Wolfram, faqet e referencës shpesh duhet të riorganizohen plotësisht. Mjaft e thjeshtë është të vendosësh funksionet nga repo në kategori të gjera dhe madje t'i ndash këto kategori në mënyrë të renditur, por më e vlefshme është të kesh faqe referencash të organizuara saktësisht për gjuhën. Ende nuk është e qartë se si është më mirë t'i krijosh ato për të gjithë bazën e njohurive për funksionet. Për shembull, CreateResourceObjectGallery në repo funksionesh, çdo njeri mund të vendosë një faqe webi që përmban 'zgjedhjet' e tij nga repo:

Wolfram Function Repository: qasje e hapur në platformën për zgjerimet e gjuhës Wolfram

Repoja e funksioneve Wolfram është e konfiguruar si një depo e përhershme funksionesh, ku çdo funksion në të do të funksionojë gjithmonë. Sigurisht, mund të ketë versione të reja të funksioneve, dhe ne presim që disa funksione me kalimin e kohës do të bëhen të vjetra. Funksionet do të funksionojnë nëse përdoren në programe, por faqet e dokumentacionit të tyre do të referojnë në funksione të reja dhe më të avancuara.

Repoja e funksioneve Wolfram është e destinuar për të marrë shpejt funksione të reja dhe për të eksploruar mundësi të reja të përdorimit të gjuhës Wolfram. Me një optimizëm të madh shpresojmë që një pjesë e asaj që është eksploruar në repo funksionesh, përfundimisht do të ketë kuptim të bëhet pjesë e integruar e gjuhës kryesore Wolfram Language. Në dekadën e fundit, kemi pasur një grup të ngjashëm funksionesh që fillimisht u prezantuan në Wolfram | Alpha. Dhe një nga mësimet e nxjerra nga kjo përvojë është se për të arritur standardet e cilësisë dhe konsistencës, të cilat ne theksojmë në gjithçka që është e integruar në gjuhën Wolfram, kërkohet shumë punë, e cila shpesh është më e vështirë se përpjekjet fillestare për të mbjellë idenë. Por edhe në këtë rast, funksioni në bazën e njohurive për funksionet mund të shërbejë si një provë shumë e dobishme për konceptin e një funksioni të ardhshëm, i cili përfundimisht mund të integrohet në gjuhën Wolfram.

Këtu më e rëndësishmja është që funksioni në depozitat e funksioneve është ajo që është e disponueshme për çdo përdorues për ta përdorur tani menjëherë. Mundësisht, funksioni i integruar i gjuhës mund të jetë shumë më i mirë dhe më i fuqishëm, por depozita e funksioneve do t'u lejojë përdoruesve të kenë qasje të menjëhershme në të gjitha funksionet e reja. Dhe, çfarë është veçanërisht e rëndësishme, kjo koncept e lejon çdo njeri të shtojë çdo funksion të ri që dëshiron.

Në historinë e mëparshme të gjuhës Wolfram, kjo ide nuk do të funksiononte kaq mirë si sot, por në këtë fazë është investuar kaq shumë përpjekje, si dhe një kuptim kaq të thellë të parimeve të projektimit të gjuhës, saqë tani duket shumë e mundur 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ë audiencë të gjerë.

Në komunitetin e përdoruesve të Wolfram Language ka një shpirt të jashtëzakonshëm talenti. (Natyrisht, në këtë komunitet bëjnë pjesë shumë specialistë kryesorë në kërkime dhe zhvillime në fusha të ndryshme.) Shpresoj që depozita e funksioneve Wolfram të ofrojë një platformë efikase për zbulimin dhe shpërndarjen e këtij shpirti talenti. Vetëm së bashku mund të krijojmë diçka që do të zgjasë ndjeshëm fushën në të cilën mund të aplikohet paradigma e llogaritjes së gjuhës Wolfram.

Pas më shumë se 30 vjetësh kemi kaluar një rrugë të gjatë në gjuhën Wolfram. Tani së bashku, le të shkojmë edhe më tej. Ju bëj thirrje të gjithëve përdoruesve të respektuar të gjuhës Wolfram në të gjithë botën, të shfrytëzojnë depozitën funksionale si platformë për këtë, si dhe një projekt të ri softuerik si Free Wolfram Engine për zhvilluesit.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster