Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Hallo, Habr! Ik presintearje jo oandacht in oersetting fan Stephen Wolfram's post "De Wolfram Function Repository: In iepen platfoarm lansearje foar it útwreidzjen fan de Wolfram-taal".

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Betingsten foar de gearhing fan de Wolfram-taal

Hjoed steane wy ​​tegearre mei de programmeartaal op de drompel fan grutte prestaasjes Wolfram Taal. Krekt trije wike lyn hawwe wy lansearre frije Wolfram-motor foar ûntwikkeldersom ús brûkers te helpen de Wolfram-taal te yntegrearjen yn har grutskalige softwareprojekten. Hjoed wy lansearje Wolfram function repository, om in koördinearre platfoarm te leverjen foar funksjes dy't makke binne om de Wolfram-taal út te wreidzjen, en wy iepenje ek in repository fan funksjes foar elkenien dy't bydrage kin oan 'e ûntwikkeling fan ús softwareprodukt.

It Wolfram Function Repository is wat mooglik makke troch de unike aard fan de Wolfram-taal net allinnich as programmeartaal, mar ek as in folsleine kompjûter taal. Yn tradisjonele programmeartalen giet it tafoegjen fan wichtige nije funksjonaliteit gewoanlik om it meitsjen fan folsleine ekstra bibleteken dy't al of net wurkje as se tegearre wurde brûkt. Lykwols, yn de Wolfram Taal safolle is al yn de taal sels ynboud, dat it mooglik is om syn funksjonaliteit flink út te wreidzjen troch gewoan nije funksjes ta te foegjen dy't daliks yntegrearre wurde yn de holistyske struktuer fan de hiele taal.

Bygelyks, it Wolfram-funksjerepository befettet al 532 nije funksjes strukturearre yn 26 tematyske kategoryen:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Likegoed mear as 6000 standert funksjes, ynboud yn 'e Wolfram-taal, hat elke funksje fan it repository in dokumintaasjeside mei in detaillearre beskriuwing fan har en foarbylden fan wurk:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Om nei de side te kommen, kopiearje it boppesteande objekt (funksje BLOB), plak it yn 'e ynfierrigel en fier dan de funksje út - it is al ynboud yn 'e Wolfram-taal en wurdt standert stipe, begjinnend mei ferzje 12.0:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Dêrby moat opmurken wurde dat by it ferwurkjen LogoQRCode Jo hoege bygelyks gjin "ôfbyldingsferwurkingsbibleteek" yn te stellen - om't wy al in konsekwinte en soarchfâldich algoritmyske manier yn 'e Wolfram-taal hawwe ymplementearre ôfbylding ferwurking, dy't fuortendaliks ferwurke wurde kin troch ferskate grafyske taalfunksjes:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Ik hoopje dat mei de stipe prachtige en talintfolle mienskip, dy't yn 'e ôfrûne ferskate desennia groeid en útwreide is (basearre op 'e Wolfram-taal). De Wolfram-funksje-repository sil it mooglik meitsje foar de foar te fernimmen takomst om it berik fan (mooglik potinsjeel wichtige, spesjalisearre yn ferskate fjilden fan wittenskip en technology) funksjes dy't beskikber binne yn 'e taal signifikant út te wreidzjen. Sa wurdt it mooglik om sawol de ynhâld fan 'e taal (syn ynboude funksjes) as ûntwikkeling prinsipes, dy't útfierd wurde op basis fan 'e taal. (Hjir moat opmurken wurde dat de Wolfram-taal al mear hat as 30-jierrige skiednis fan ûntwikkeling en stabile groei).
Funksjes út it repository kinne lytse of grutte stikken koade befetsje dy't skreaun binne yn 'e Wolfram-taal. Dit kinne bygelyks oproppen wêze eksterne API's en tsjinsten as eksterne bibleteken yn oare talen. It unike ding oer dizze oanpak is dat as jo nei de funksjonaliteit op brûkersnivo drillen, d'r gjin potinsjele inkonsistinsjes sille wêze, om't de oanpak is boud boppe op 'e konsekwinte struktuer fan' e Wolfram-taal - en elke funksje sil automatysk goed wurkje - krekt as bedoeld. sy moat.
De shell en programmearring struktuer fan de Wolfram Feature Repository is ûntwurpen sadat elkenien kin bydrage oan de mienskiplike saak op de meast ienfâldige en handige manier foar harren - yn feite, krekt troch it ynfoljen fan it notepad-tekstbestân (mei nb-útwreiding) WL. Ynboude automatyske funksjes kinne jo nije funksjes kontrolearje dy't tafoege binne oan it repository om har yntegraasje yn 'e taal te garandearjen. Us bedriuw wedzjen op it brede oanbod fan brûkers dy't har funksjes yn 'e taal kinne yntegrearje, ynstee fan op 'e grutte kompleksiteit fan nije funksjes - en hoewol d'r in beoardielingsproses is, steane wy ​​net op sa'n ding mjitten design analyze of strange noarmen foar de folsleinens en betrouberens fan nije brûkersfunksjes, yn tsjinstelling ta de strangere testen fan funksjes ynboud yn 'e kearntaal dy't wy brûke.

D'r binne in protte ôfwikselingen en details yn dizze oanpak, mar ús doel is om de Wolfram-funksje-repository te optimalisearjen sawol foar de brûkersûnderfining en om te soargjen dat nije brûkersfunksjes sinfol bydrage oan de ûntwikkeling fan 'e taal. As wy groeie, haw ik gjin twifel dat wy nije metoaden sille moatte útfine foar it ferwurkjen en validearjen fan funksjes ynboud yn 'e repository, net yn it minst foar it organisearjen fan grutte oantallen funksjes en it finen fan dyjingen dy't brûkers nedich binne. It is lykwols bemoedigend dat it paad dat wy keazen hawwe in goed begjin is. Ik persoanlik tafoege ferskate funksjes nei de oarspronklike databank. In protte fan harren binne basearre op koade dy't ik persoanlik in skoft haw ûntwikkele. En it duorre my mar in pear minuten om se nei it repository te triuwen. No't se yn 'e repository binne, kin ik einliks - daliks en op elk momint - dizze funksjes brûke as it nedich is, sûnder soargen te hawwen oer it sykjen nei bestannen, it downloaden fan pakketten, ensfh.

Ferheegjen fan effisjinsje by it ferminderjen fan kosten

Sels foar it ynternet wiene d'r manieren om Wolfram-taalkoade te dielen (ús earste grutte sintralisearre projekt wie MathSource, makke foar Mathematica yn 1991 basearre op CD-ROM, ensfh.). Fansels is de foarstelde oanpak foar ymplemintaasje basearre op it Wolfram-funksjerepository in machtiger en betrouberer ark foar it útfieren fan de boppesteande taken.

Al mear as 30 jier hat ús bedriuw iverich wurke om de yntegriteit fan 'e Wolfram-taalstruktuer te behâlden, en dit is kritysk om te garandearjen dat de Wolfram-taal net allinich in programmeartaal wurdt, mar ek in folweardige kompjûtertaal. En sadwaande is de essinsje fan 'e oanpak foar it ymplementearjen fan it Wolfram-funksjerepository it brûken fan in unifoarme oanpak foar it programmearjen en ûntwikkeljen fan nije funksjes dy't sequentieel tafoege wurde en passe yn it ramt fan 'e taal, sadat it kin ûntwikkelje en mei-evolúsje.

Ferskate berekkeningsprosessen komme foar yn 'e ymplemintaasjestruktuer fan elke funksje. Dêrby moat opmurken wurde dat it nedich is dat de funksje hat in dúdlik en unifoarm uterlik en fisuele lêsberens foar de brûker. Yn dit ferbân wurde de ynboude funksjes fan 'e Wolfram-taal presintearre mei mear dan 6000 opienfolgjende foarbylden fan hoe't jo funksjes goed kinne programmearje (dit binne ús live programmearring videosdy't befetsje hûnderten oeren proses foar it meitsjen fan standertprogramma's). Wat dizze oanpak úteinlik makket dat it Wolfram-funksjerepository goed prestearje kin, is it strukturele karakter fan 'e Wolfram-taal, mei syn grutte oantal ekstra en farieare biblioteken dy't al yn 'e taal binne ynboud. Bygelyks, as jo in funksje hawwe dy't ôfbyldings ferwurket, of sparse arraysof molekulêre struktueren, lykas ek geografyske gegevens of guon oaren - har konsekwinte symboalyske foarstelling bestiet al yn 'e taal, en hjirtroch wurdt jo funksje fuortendaliks kompatibel mei oare funksjes yn 'e taal.

It meitsjen fan in repository dat eins goed wurket is in nijsgjirrige meta-programmearring taak. Bygelyks, in oerskot oan beheiningen yn it programma sil net tastean it krijen fan de fereaske ienwurding en universaliteit fan it algoritme. Krekt as by in net genôch oantal funksjonele beheiningen, kinne jo net in foldwaande korrekte folchoarder fan algoritme útfiere. Ferskate eardere foarbylden fan it útfieren fan in kompromis fan dizze oanpak, ymplementearre troch ús bedriuw, wurken frij stabyl - dit binne: Project Tungsten Demonstraasjes, lansearre yn 2007 en rint no online online mei mear as 12000 brûkersynteraktive demo's. YN Wolfram databank der binne mear as 600 ready-made databases dy't brûkt wurde kinne yn de Wolfram Taal, en Wolfram neural netwurk opslach wurdt hast elke wike oanfolle mei nije neurale netwurken (d'r binne no al 118) en se binne direkt ferbûn fia de funksje NetModel yn de Wolfram-taal.

Alle boppesteande foarbylden hawwe in fûnemintele funksje - de objekten en funksjes sammele yn it projekt hawwe in heul hege graad fan strukturearjen en ferdieling fan prosessen. Fansels kin it detail fan 'e struktuer fan wat is in demo of in neural netwurk of wat oars sterk ferskille, mar de fûnemintele struktuer foar elke aktuele repository bliuwt altyd itselde. Dus wat is jo miening, bêste brûker, oer it meitsjen fan sa'n repository dy't tafoegings tafoegje oan 'e Wolfram-taal? De Wolfram-taal is ûntworpen om ekstreem fleksibel te wêzen, sadat it op elke manier útwreide en oanpast wurde kin. Dizze omstannichheid is ekstreem wichtich foar de mooglikheid om fluch ferskate grutskalige softwareprojekten yn 'e Wolfram-taal te meitsjen. Dêrby moat opmurken wurde dat as de fleksibiliteit fan 'e taal tanimt, de kosten fan projekten dy't yn sa'n taal útfierd wurde ûnûntkomber tanimme. Dit komt troch it feit dat hoe mear de brûker sa'n taal brûkt, de mear tawijde funksjonaliteit hy krijt, mar wy moatte net ferjitte dat dizze oanpak ek negative kanten hawwe kin yn termen fan it ûnfermogen om konsekwint konsistinsje fan programmamodules te garandearjen.

D'r is in mienskiplik probleem mei biblioteken yn tradisjonele programmeartalen - as jo bygelyks ien bibleteek brûke, sil de koade goed wurkje, mar as jo besykje meardere biblioteken te brûken, is d'r gjin garânsje dat se goed mei-inoar ynteraksje. . Ek yn tradisjonele programmeartalen - yn tsjinstelling ta in folsleine kompjûtertaal - is d'r gjin manier om de oanwêzigens fan konsekwinte ynboude foarstellings te garandearjen foar oare funksjes of gegevenstypen dan har basisstruktueren. Mar yn feite is it probleem noch grutter as it op it earste each liket: as men in grutskalige fertikaal fan funksjonaliteit bouwt, dan is it sûnder de enoarme kosten fan sintralisearre projektprogrammearring dy't wy yn 'e Wolfram-taal sette, ûnmooglik om berikke gearhing. It is dêrom wichtich dat alle software modules altyd wurkje gear goed.

Dat it idee efter it Wolfram-funksje-repository is om it hjirboppe beskreaune probleem te foarkommen troch gewoan útwreidingen ta te foegjen oan 'e taal yn relatyf lytse stikken koade fia yndividuele funksjes dy't makliker te ûntwikkeljen binne as gearhingjende modules. Dat sei, d'r binne programmearfunksjes dy't net handich kinne wurde makke mei help fan yndividuele funksjes (en ús bedriuw is fan plan om yn 'e heine takomst in optimalisearre programmearring-algoritme frij te jaan om te helpen by it útfieren fan grutskalige softwarepakketten). Op grûn fan de funksjes dy't al yn 'e Wolfram-taal boud binne, binne d'r lykwols in protte programmearmooglikheden dy't op basis fan yndividuele funksjes ymplementearre wurde. It idee hjir is dat it mei relatyf lytse programmearring ynspannings mooglik is om in oantal nije en tige brûkbere funksjes te meitsjen dy't genôch gearhing sille leverje oan it ûntwerp, se sille goed op elkoar ôfstimme, en ek, neist dit, se sil yn 'e takomst maklik en breed brûkt wurde kinne yn' e taal.

Dizze oanpak is fansels in kompromis. As in grutter pakket waard ymplementearre, koe in hiele nije wrâld fan funksjonaliteit wurde foarsteld dy't ekstreem krêftich en nuttich soe wêze. As der ferlet is om nije funksjonaliteit te krijen dy't past by al it oare, mar jo binne net ree om in protte muoite te besteegjen oan it ûntwikkeljen fan it projekt, dit kin spitigernôch liede ta in fermindering fan 'e omfang fan jo projekt. It idee efter it Wolfram-funksjerepository is om funksjonaliteit te leverjen oan in definiearjend diel fan in projekt; dizze oanpak sil krêftige funksjonaliteit tafoegje, wylst it makliker wurdt om goede konsistinsje te behâlden yn in programmearprojekt.

Help by it tafoegjen fan oanpaste funksjes oan it funksje-repository

Us team hat hurd wurke om it maklik te meitsjen foar brûkers om by te dragen oan de funksjes fan Wolfram-repository. Op it buroblêd (al yn ferzje 12.0), Jo kinne gewoan troch de haadmenu-ljeppers opfolgjend gean: Triem > Nij > RepositoryItem > Function Repository Item en jo krije "Definysje Notebook" (programmatysk binnen de wurkbank. Jo kinne ek de analoge funksje brûke - CreateNotebook["FunctionResource"]):

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

D'r binne twa haadstappen dy't jo moatte útfiere: earst, skriuw de koade foar jo funksje feitlik op en, twadde, skriuw dokumintaasje op dy't yllustrearret hoe't jo funksje wurkje moat.
Klikje op de knop "Iepenje Sample" boppe-oan om in foarbyld te sjen fan wat jo moatte dwaan:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Yn essinsje besykje jo wat te meitsjen dat ferlykber is mei in ynboude funksje yn 'e Wolfram-taal. Utsein dat it wat folle spesifiker kin dwaan as in ynboude funksje. Tagelyk, ferwachtings oangeande syn folsleinens en betrouberens sil folle leger.
Jo moatte jo funksje in namme jaan dy't de rjochtlinen foar nammejouwing fan 'e Wolfram Language folget. Derneist sille jo dokumintaasje moatte ûntwikkelje foar jo funksje, fergelykber mei de ynboude funksjes fan 'e taal. Dêr sil ik letter yn mear detail oer prate. Tink derom dat yn 'e rige knoppen oan' e boppekant fan 'e definysje-notebookbestân in knop is "Stylrjochtlinen", dy't útleit wat te dwaan, en in knop Tools, dy't ark biedt foar it opmaakjen fan de dokumintaasje fan jo funksje.
As jo ​​der wis fan binne dat alles goed is ynfolle en do bist klear, klik dan op de "Kontrolearje" knop. It is folslein normaal dat jo noch net alle details útfine. Dat de funksje "Kontrolearje" sil automatysk rinne en in protte styl- en konsistinsjekontrôles dwaan. Faak sil it jo fuortendaliks freegje om de korreksjes te befêstigjen en te akseptearjen (Bygelyks: "Dizze rigel moat einigje mei in dûbele punt," en it sil jo freegje om in kolon yn te fieren). Soms sil se jo freegje om sels wat ta te foegjen of te feroarjen. Wy sille konstant nije funksjes tafoegje oan 'e automatyske funksjonaliteit fan' e knop Kontrolearje, mar yn prinsipe is it doel om te soargjen dat alles wat jo yntsjinje by it funksje-repository al sa folle mooglik stylrjochtlinen folget

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Dus, nei it útfieren fan "Kontrolearje", kinne jo "foarbyld" brûke. "Foarbyld" makket in foarbyld fan de dokumintaasjeside dy't jo foar jo funksje definiearre hawwe. Jo kinne ek in foarbyld meitsje foar in bestân dat is makke op jo kompjûter of foar in bestân yn 'e wolk opslach. As jo ​​om ien of oare reden net tefreden binne mei wat jo sjogge yn 'e foarbyld, gean dan gewoan werom en meitsje de nedige korreksjes, en klik dan nochris op de knop Foarbyld.
No binne jo ree om jo funksje yn it repository te triuwen. De knop ynsette jout jo fjouwer opsjes:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

It wichtige ding by dizze stap is dat jo jo funksje kinne yntsjinje by it Wolfram-funksjerepository sadat it foar elkenien beskikber is. Tagelyk kinne jo jo funksje ek pleatse foar in beheind oantal brûkers. Jo kinne bygelyks in funksje oanmeitsje dy't lokaal op jo kompjûter wurdt hosted, sadat it beskikber is as jo dy bepaalde kompjûter brûke. Of jo kinne it pleatse yn jo wolk account, sadat it foar jo beskikber is as jo ferbûn binne mei de wolk. Jo kinne de funksje ek iepenbier hostje (ynsette) fia jo wolkakkount. It sil net yn 'e sintrale Wolfram-funksjerepository wêze, mar jo sille ien in URL kinne jaan dy't har tastean jo funksje fan jo akkount te krijen. (Yn 'e takomst sille wy ek sintrale repositories yn ús bedriuw stypje.)

Litte wy sizze dat jo jo funksje feitlik wolle yntsjinje by de kennisbasis fan Wolfram-funksje. Om dit te dwaan, klikje jo op de knop "Ferstjoere" nei it repository. Dus wat bart der dan op it stuit? Jo oanfraach wurdt fuortendaliks yn 'e wachtrige steld foar beoardieling en goedkarring troch ús tawijd team fan kurators.

As jo ​​​​oanfraach troch it goedkarringsproses trochgiet (dat typysk ferskate dagen duorret), sille jo kommunikaasje krije oer de status en mooglik suggestjes foar takomstich gebrûk. Mar as jo funksje ienris goedkard is, sil it fuortendaliks publisearre wurde yn it Wolfram Feature Repository en sil beskikber wêze foar elkenien om te brûken. (En dit sil ferskine yn nijs digests fan nije funksjes en sa fierder)

Wat moat yn 'e opslach?

Dêrby moat opmurken wurde dat ús bedriuw hat heul hege noarmen foar folsleinens, betrouberens en algemiene kwaliteit, en fan 'e 6000+ funksjes dy't wy de ôfrûne 30+ jier al yn 'e Wolfram-taal boud hawwe, foldogge allegear oan 'e boppesteande easken. It doel fan it Wolfram Function Repository is om alle struktuer en funksjonaliteit te brûken dy't al bestiet yn 'e Wolfram Language om safolle mooglik lichtere funksjes (dat is, funksjes mei hegere prestaasjes) ta te foegjen.

Fansels moatte funksjes yn it Wolfram-funksjerepository foldwaan oan de ûntwerpprinsipes fan 'e Wolfram-taal - sadat se folslein ynteraksje kinne mei oare funksjes en de ferwachtingen fan brûkers fan hoe't de funksje goed wurkje moat. De funksjes hoege lykwols net fan likefolle folsleinens of betrouberens te wêzen.

Yn de ynboude funksjes fan de Wolfram-taal wurkje wy hurd om programmearfunksjes sa algemien mooglik te meitsjen. As it wurdt sein, as yn 'e Wolfram-funksje-repository d'r neat mis is mei it hawwen fan in funksje dy't gewoan in heul spesifike, mar brûkbere saak behannelet. Bygelyks, de funksje SendMailFromNotebook kinne bestannen yn ien spesifyk formaat ûntfange en e-post op ien spesifike manier oanmeitsje. PolygonalDiagram makket charts mei allinich bepaalde kleuren en labeling, ensfh.

In oar punt yn ferbân mei de ynboude funksjes is dat ús bedriuw alle war docht om alle atypyske gefallen te behanneljen, om ferkearde ynfier korrekt te behanneljen, ensfh. Yn in funksje repository is it folslein normaal dat d'r in spesjale funksje is dy't de wichtichste gefallen fan it oplossen fan in probleem behannelet en alle oaren negearret.

It foar de hân lizzende punt is dat it better is om funksjes te hawwen dy't mear dogge en it better dogge, mar optimisaasje foar in funksje-repository - yn tsjinstelling ta de ynboude funksjes fan 'e Wolfram-taal - soe mear funksjes moatte hawwe bondele mei mear funksjes ynstee fan ferdjipje yn de útfieringsprosessen fan elke spesifike funksje.

Litte wy no in foarbyld sjen fan testfunksjes yn in repository. Konsistinsjeferwachtings foar sokke funksjes binne fansels folle leger as foar ynboude taalfunksjes. Dit is benammen wier yn gefallen wêr't funksjes ôfhinklik binne fan eksterne boarnen lykas API's, is it wichtich om konstant konsekwinte testen te fieren, wat automatysk bart binnen de ferifikaasjealgoritmen. Yn it nb-bestân kinne jo definysjes eksplisyt oantsjutte (yn 'e seksje Oanfoljende ynformaasje) en safolle tests opjaan as definieare troch ynput- en útfierstrings of objekten mei folslein karakter fan type FerifikaasjeTest, safolle as jo goed fine. Dêrnjonken besiket it systeem konstant de dokumintaasjefoarbylden dy't jo leverje yn in ferifikaasjeproses te feroarjen (en soms kin dit frijwat boarne-yntinsyf wêze, bygelyks foar in funksje wêrfan it resultaat hinget fan willekeurige sifers of de tiid fan 'e dei).

As gefolch, it funksje repository sil hawwe in oantal ymplemintaasje kompleksiteiten. Guon sille mar in inkele rigel koade wêze, oaren kinne tûzenen of tsientûzenen rigels belûke, wierskynlik mei in protte helperfunksjes. Wannear is it wurdich om in funksje ta te foegjen dy't heul lyts koade fereasket om te definiearjen? Yn prinsipe, as foar in funksje der is goede mnemonyske namme, dy't brûkers maklik begripe as se it yn in stik koade seagen, dan kin it al tafoege wurde. Oars is it wierskynlik better om de koade gewoan opnij oan jo programma te foegjen elke kear as jo it brûke moatte.

It haaddoel fan in funksje-repository (lykas de namme al seit) is om nije funksjes yn 'e taal yn te fieren. As jo ​​wolle tafoegje nije gegevens of nije entiteiten, brûke Wolfram Data repository. Mar wat as jo nije soarten objekten yntrodusearje wolle foar jo berekkeningen?

Der binne eins twa manieren. Jo kinne in nij objekttype yntrodusearje dat brûkt wurdt yn nije funksjes yn it funksjerepository. En yn dit gefal kinne jo altyd gewoan syn symboalyske fertsjintwurdiging opskriuwe en it brûke by it ynfieren of útfieren fan funksjes yn in funksje-repository.

Mar wat as jo in objekt representearje wolle en dan troch besteande funksjes yn 'e Wolfram-taal definiearje dat jo dermei wurkje wolle? De Wolfram Taal hat altyd in lichtgewicht meganisme foar dit, neamd UpWaarden. Mei guon beheiningen (benammen foar funksjes dy't kin har arguminten net evaluearje), in funksje-repository kinne jo gewoan in funksje fertsjintwurdigje en wearden foar definiearje. (Om de ferwachting fan konsistinsje te ferheegjen by it meitsjen fan in nij grut ûntwerp dat folslein yntegrearre is yn 'e Wolfram-taal is oer it algemien in heul wichtige proseduere dy't net kin wurde berikt troch gewoan de kosten fan it projekt te ferheegjen en is iets dat ús bedriuw docht as ûnderdiel fan projekten foar lange-termyn ûntwikkeling fan de taal, dizze taak is gjin doel dat wurdt steld as ûnderdiel fan de ûntwikkeling fan de repository).

Dat, wat kin wêze yn 'e funksjekoade yn in funksjerepository? Alles ynboud yn de Wolfram Taal, fansels (teminsten as it net fertsjintwurdiget bedrigingen foar feiligens en de prestaasjes fan it programma sels, as in komputeromjouwing) lykas elke funksje fan it funksjerepository. D'r binne lykwols oare mooglikheden foar funksjonearjen: in funksje yn in funksjerepository kin in API oanroppe, of yn Wolfram Cloud, of út in oare boarne. Fansels binne d'r guon risiko's ferbûn mei dit. Fanwegen it feit dat d'r gjin garânsjes binne dat de API net sil feroarje, en de funksje yn 'e funksjewinkel sil stopje mei wurkjen. Om problemen lykas dit te identifisearjen is d'r in notysje op 'e dokumintaasjeside (yn' e seksje Requirements) foar elke funksje dy't fertrout op mear dan allinich ynboude Wolfram Language-funksjonaliteit. (Fansels, as it giet om echte gegevens, kinne d'r sels problemen wêze mei dizze funksjonaliteit - om't gegevens yn 'e echte wrâld konstant feroarje, en soms sels har definysjes en struktuer feroarje.)

Moat alle koade foar it Wolfram-funksjerepository yn Wolfram skreaun wurde? Wis, de koade binnen de eksterne API moat net skreaun wurde yn 'e Wolfram-taal, dy't de taalkoade net iens makket. Yn feite, as jo in funksje fine yn hast elke eksterne taal of bibleteek, kinne jo in wrapper meitsje wêrmei jo it brûke kinne yn it Wolfram-funksjerepository. (Meastentiids moatte jo de ynboude funksjes hjirfoar brûke Eksterne Evaluearje of Eksterne funksje in Wolfram taalkoade.)

Dus wat is it punt fan dit te dwaan? Yn essinsje lit dit jo it heule yntegreare Wolfram Language-systeem en har heule ferienige set fan softwaremooglikheden brûke. As jo ​​​​de basis-ymplemintaasje krije fan in eksterne bibleteek of taal, kinne jo dan de rike symboalyske struktuer fan 'e Wolfram-taal brûke om in handige funksje op it heechste nivo te meitsjen wêrmei brûkers maklik elke funksjonaliteit kinne brûke dy't al ymplementearre binne. Dat soe op syn minst mooglik wêze moatte yn in ideale wrâld dêr't alle boustiennen fan it laden fan bibleteken ensfh. (It moat opmurken wurde dat d'r yn 'e praktyk problemen kinne wêze mei it opsetten fan eksterne talen spesifyk kompjûtersysteem, en wolk opslach kinne ekstra feiligensproblemen foarstelle).

Trouwens, as jo earst nei typyske eksterne bibleteken sjogge, lykje se faaks te kompleks om yn mar in pear funksjes te dekken, mar yn in protte gefallen komt in protte fan 'e kompleksiteit fan it meitsjen fan de ynfrastruktuer dy't nedich is foar de bibleteek en alle funksjes om stypje it. By it brûken fan de Wolfram-taal is de ynfrastruktuer lykwols typysk al ynboud yn 'e pakketten, en dus is it net nedich om al dizze stipefunksjes yn detail út te lizzen, mar allinich funksjes te meitsjen foar de "boppeste" applikaasje-spesifike funksjes yn 'e bibleteek .

"Ekosysteem" fan 'e kennisbasis

As jo ​​​​funksjes skreaun hawwe dy't jo regelmjittich brûke, stjoer se dan nei it Wolfram Function Repository! As hjir net wat mear út komt (taalûntwikkeling), dan sil it ek dan folle handiger wêze foar jo om de funksjes foar persoanlik gebrûk te brûken. It is lykwols logysk om oan te nimmen dat as jo de funksjes regelmjittich brûke, miskien oare brûkers se ek nuttich fine.

Fansels kinne jo josels yn in situaasje fine wêr't jo jo funksjes net kinne - of net wolle - of yn it gefal dat jo tagong krije ta privee ynformaasjeboarnen. Sels yn sokke gefallen kinne jo de funksjes gewoan ynsette yn jo eigen wolkakkount, spesifisearje rjochten tagong ta harren. (As jo ​​organisaasje hat Wolfram Enterprise privee wolk, dan sil it ynkoarten in eigen privee-funksje-repository kinne hostje, dat kin wurde beheard fanút jo organisaasje en ynstelle of jo werjeften wol of net twinge om te besjen troch brûkers fan tredden.)

De funksjes dy't jo yntsjinje by de Wolfram-funksje-repository hoege net perfekt te wêzen; se moatte gewoan nuttich wêze. Dit is in bytsje as de seksje "Flaters" yn klassike Unix-dokumintaasje - yn 'e seksje "Definysjes" is in seksje "Author's Notes" wêr't jo beheiningen, problemen, ensfh. kinne beskriuwe dy't jo al witte oer jo funksje. Derneist, as jo jo funksje yntsjinje by it repository, kinne jo ynstjoeringsnotysjes tafoegje dy't sille wurde lêzen troch in tawijd team fan kurators.

Sadree't in funksje is publisearre, hat syn side altyd twa keppelings oan 'e ûnderkant: "Stjoer in berjocht oer dizze funksje"En"Beprate yn 'e Wolfram-mienskip" As jo ​​in notysje taheakje (bygelyks fertel my oer bugs), kinne jo it fakje oanvinkje dat seit dat jo wolle dat jo berjocht en kontaktynformaasje dield wurde mei de funksje-auteur.

Soms wolle jo gewoan funksjes brûke fan it Wolfram-funksjerepository, lykas ynboude funksjes, sûnder nei har koade te sjen. As jo ​​​​lykwols nei binnen wolle sjen, is d'r altyd in Notepad-knop oan 'e boppekant. Klikje derop en jo krije jo eigen kopy fan it orizjinele definysje-notebook dat is yntsjinne by it funksje-repository. Soms kinne jo it gewoan brûke as foarbyld foar jo behoeften. Tagelyk kinne jo ek jo eigen wiziging fan dizze funksje ûntwikkelje. Jo kinne dizze funksjes pleatse dy't jo fûn hawwe fan it repository op jo kompjûter of yn jo aphid-wolk-opslachaccount, miskien wolle jo se yntsjinje by de funksjekennisbasis, miskien as in ferbettere, útwreide ferzje fan 'e orizjinele funksje.

Yn 'e takomst binne wy ​​fan plan om Git-styl forking te stypjen foar funksje-repositories, mar foar no besykje wy it ienfâldich te hâlden, en wy hawwe altyd mar ien akseptearre ferzje fan elke funksje ynboud yn 'e taal. Faker as net (útsein as ûntwikkelders it behâld fan de funksjes dy't se ûntwikkele hawwe opjaan en reagearje op ynstjoerings fan brûkers), nimt de orizjinele auteur fan 'e funksje kontrôle oer updates derfan en stelt nije ferzjes yn, dy't dan wurde hifke en, as se it beoardielingsproses trochjaan , publisearre yn 'e taal.

Litte wy de fraach beskôgje hoe't "ferzje" fan ûntwikkele funksjes wurket. Op it stuit, as jo in funksje brûke fan it funksje-repository, sil de definysje dêrfan permanint wurde opslein op jo kompjûter (of yn jo wolkakkount as jo de wolk brûke). As in nije ferzje fan in funksje beskikber is, krije jo de folgjende kear dat jo dizze brûke in berjocht dat jo hjirfan ynformearje. En as jo de funksje wolle bywurkje nei in nije ferzje, kinne jo it dwaan mei it kommando ResourceUpdate. (De "funksje blob" slaat feitlik mear ferzjeynformaasje op, en wy binne fan plan dit yn 'e takomst tagonkliker te meitsjen foar ús brûkers.)

Ien fan 'e moaie dingen oer it Wolfram Function Repository is dat elk Wolfram Language-programma, oeral, funksjes dêrfan kin brûke. As in programma yn in notepad ferskynt, is it faaks handich om de repositoryfunksjes op te meitsjen as maklik te lêzen "funksje binêr objekt" funksjes (miskien mei in passende ferzjeset).

Jo kinne altyd tagong krije ta elke funksje yn it funksjerepository mei tekst ResourceFunction[...]. En dit is hiel handich as jo skriuwe koade of skripts direkt foar de Wolfram Engine, bygelyks, mei mei help fan in IDE of tekstkoade bewurker (It moat foaral opmurken wurde dat de funksje repository folslein kompatibel is mei Fergees Wolfram Engine foar ûntwikkelders).

Hoe wurket it?

Binnen de funksjes yn it Wolfram-repository is dit mooglik mei krekt itselde boarne systemen basis, lykas yn al ús oare besteande repositories (data winkel, Neural Net Repository, kolleksje fan demo projekten ensfh.), lykas alle oare Wolfram-systeemboarnen, ResourceFunction úteinlik basearre op funksje ResourceObject.

Consider ResourceFunction:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Binnen kinne jo wat ynformaasje sjen mei de funksje Ynformaasje:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Hoe wurket it ynstellen fan in boarnefunksje? De ienfâldichste is in suver lokale gefal. Hjir is in foarbyld dat in funksje nimt (yn dit gefal gewoan in suvere funksje) en definiearret as in boarnefunksje foar in opjûne programma sesje:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

As jo ​​​​ienris de definysje makke hawwe, kinne jo de boarnefunksje brûke:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

Tink derom dat d'r in swart ikoan is yn dizze funksje blob Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings. Dit betsjut dat de BLOB-funksje ferwiist nei de boarnefunksje yn it ûnthâld definieare foar de aktuele sesje. In boarnefunksje dy't permanint is opslein op jo kompjûter of wolkkonto hat in griis ikoan Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings. En d'r is in oranje ikoan foar in offisjele boarnefunksje yn it Wolfram Feature Repository Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings.

Dus wat bart der as jo it menu útwreidzje yn it Definition Notebook brûke? Earst nimt it alle definysjes yn 'e notepad en makket fan har in symboalyske ResourceObject). (En as jo in tekstbasearre IDE of programma brûke, dan kinne jo ek eksplisyt oanmeitsje ResourceObject)

Lokale ynset fan in funksje fan in repository op jo kompjûter wurdt útfierd mei it kommando LocalCache foar in boarne foarwerp te bewarjen it as LocalObject op jo triemsysteem. Ynset nei in wolkakkount wurdt dien mei it kommando CloudDeploy foar in boarne foarwerp, en in iepenbiere wolk ynset is CloudPublish. Yn alle gefallen ResourceRegister ek brûkt om te registrearjen de boarne funksje namme, dus ResourceFunction["namme"] sil wurkje.

As jo ​​​​op 'e knop Submit klikke foar in funksje-repository, wat bart der ûnder it ResourceSubmit neamd op in boarne foarwerp. (En as jo in tekstynfier-ynterface brûke, kinne jo ek skilje ResourceSubmit direkt.)

Standert wurde ynstjoerings makke ûnder de namme dy't ferbûn is mei jo Wolfram ID. Mar as jo in oanfraach yntsjinje út namme fan in ûntwikkelingsteam of organisaasje, kinne jo set aparte útjouwer ID en ynstee brûke it as de namme om ynteraksje mei jo views.

Neidat jo hawwe yntsjinne ien fan jo funksjes oan de funksje kennis basis, it wurdt wachtrige foar resinsje. As jo ​​reaksjes ûntfange as antwurd, sille se meastentiids wêze yn 'e foarm fan in tekstbestân mei ekstra "kommentaarsellen" tafoege. Jo kinne de status fan jo applikaasje altyd kontrolearje troch te besykjen boarne systeem lid portal. Mar as jo funksje ienris goedkard is, wurde jo op 'e hichte (fia e-post) en jo funksje sil wurde pleatst nei it Wolfram-funksjerepository.

Guon subtiliteiten op it wurk

Op it earste each kin it lykje dat jo gewoan in definysje-notebook kinne nimme en it ferbatim yn in funksje-repository pleatse, lykwols binne d'r eins nochal in protte subtiliteiten belutsen - en it behanneljen fan har fereasket wat frij komplekse meta-programmearring, it behanneljen fan symboalyske ferwurking as de koade dy't de funksje definiearret, en it Notepad sels wurdt definieare. It measte fan dit bart yntern, efter de skermen, mar it kin wat gefolgen hawwe dy't it wurdich binne te begripen as jo sille bydrage oan 'e funksjekennisbasis.

Earste direkte subtiliteit: as jo it Definition Notebook ynfolje, kinne jo oeral gewoan nei jo funksje ferwize mei in namme lykas MyFunction, dy't liket op in gewoane namme foar in funksje yn 'e Wolfram-taal, mar foar funksje-repository dokumintaasje wurdt dit ferfongen ResourceFunction["Mynfunksje"] is wat brûkers eins sille brûke as se wurkje mei de funksje.

De twadde subtiliteit: as jo in boarnefunksje meitsje fanút it Definition Notebook, moatte alle ôfhinklikens belutsen by de funksjedefinysje wurde fêstlein en eksplisyt opnommen. Om lykwols te soargjen dat de definysjes modulêr bliuwe, moatte jo alles yn in unyk sette nammeromte. (Fansels, funksjes dy't it allegear dogge, binne yn it funksje repository.)

Typysk sille jo noait gjin spoar sjen fan 'e koade dy't brûkt wurdt om dizze nammeromte te konfigurearjen. Mar as jo om ien of oare reden in ûnderútfierd symboal yn jo funksje neame, dan sille jo sjen dat dit symboal yn 'e ynterne kontekst fan' e funksje is. By it ferwurkjen fan de Definition Notepad is lykwols teminsten it symboal dat oerienkomt mei de funksje sels ferstelbere foar bêste werjefte as in funksjonele BLOB ynstee fan in rau karakter yn de ynterne kontekst.

De funksje repository is foar it definiearjen fan nije funksjes. En dizze funksjes kinne opsjes hawwe. Faak binne dizze parameters (bgl. Metoade of Ofbyldinggrutte) sil brûkt wurde kinne foar ynboude funksjes, lykas foar dyjingen wêrfoar ynboude symboalen al besteane. Mar soms kin in nije funksje nije opsjes fereaskje. Om modulariteit te behâlden, moatte dizze parameters symboalen wêze definieare yn in unike ynterne kontekst (of soksawat as folsleine boarnefunksjes, dat is harsels). Foar ienfâld lit it funksje-repository jo nije opsjes definiearje yn tekenrige definysjes. En foar it gemak fan de brûker, dizze definysjes (oannommen dat se brûkt OptionValue и OpsjesPatroan) wurde ek ferwurke sadat by it brûken fan funksjes parameters kinne wurde opjûn net allinich as stringen, mar ek as globale symboalen mei deselde nammen.

De measte funksjes dogge gewoan wat se moatte dwaan elke kear as se wurde neamd, mar guon funksjes moatte inisjalisearre wurde foardat se kinne rinne yn in bepaalde sesje - en om dit probleem op te lossen is d'r in seksje "Inisjalisaasje" yn 'e Definysje seksje.

Funksjes út in repository kinne oare funksjes brûke dy't al yn 'e repository binne; om definysjes op te setten foar in funksje repository dy't twa (of mear) funksjes befetsje dy't inoar ferwize, moatte jo se yn jo programma sesje ynsette, sadat jo kinne ferwizing lykas op harren ResourceFunction["namme"], dan kinne jo de kombinaasjes meitsje fan dizze funksjes dy't jo nedich binne, foarbylden (ik haw it net begrepen) en in nije funksje tafoegje oan it repository basearre op dy al earder pleatst. (of al of earder - beide wurden binne ûnhandich)

Untwikkelingsperspektyf. Wat moat barre as de repository echt grut wurdt?

Hjoed lansearje wy gewoan it Wolfram Feature Repository, mar oer de tiid ferwachtsje wy dat syn grutte en funksjonaliteit dramatysk kin tanimme, en as it groeit yn ûntwikkeling, sille d'r ferskate problemen wêze dy't wy al ferwachtsje kinne ûntstean.

It earste probleem giet oer funksjenammen en harren eigenheid. It funksje-repository is op sa'n manier ûntwurpen dat jo, lykas de ynboude funksjes yn 'e Wolfram-taal, elke opjûne funksje kinne ferwize troch gewoan de namme op te jaan. Mar dit betsjut ûnûntkomber dat funksjenammen globaal unyk moatte wêze oer de repository, sadat d'r bygelyks mar ien wêze kin ResourceFunction["MyFavoriteFunction"].

Dit kin earst in grut probleem lykje, mar it is de muoite wurdich om te realisearjen dat it yn prinsipe itselde probleem is as foar dingen lykas ynternetdomeinen of sosjale media-handgrepen. En it feit is dat it systeem gewoan in registrar moat hawwe - en dit is ien fan 'e rollen dy't ús bedriuw sil útfiere foar de kennisbasis fan Wolfram-funksje. (Foar partikuliere ferzjes fan in repository kinne harren registrars administrators wêze.) Fansels kin in ynternetdomein registrearre wurde sûnder der wat op te hawwen, mar yn in funksje repository kin in funksjenamme allinnich registrearre wurde as der in eigentlike definysje is fan de funksje.

In diel fan ús rol by it behearen fan de kennisbasis fan Wolfram-funksje is om te soargjen dat de namme dy't keazen is foar in funksje logysk is sjoen de definysje fan de funksje en dat it Wolfram Language-nammekonvinsjes folget. Wy hawwe mear as 30 jier ûnderfining mei it neamen fan ynboude funksjes yn 'e Wolfram-taal, en ús team fan kurators sil dy ûnderfining ek nei it funksjebewarplak bringe. Fansels binne der altyd útsûnderingen. It kin bygelyks better lykje om in koarte namme foar guon funksje te hawwen, mar it is better om te "ferdedigjen" mei in langere, mear spesifike namme, om't jo minder wierskynlik ien tsjinkomme dy't yn 'e takomst in ferlykbere funksjenamme meitsje wol .

(Hjir moat opmurken wurde dat it gewoan tafoegjen fan guon lidtags om funksjes te disambiguearje, net it beëage effekt hat. Om't jo, útsein as jo oanstriid om altyd in tag ta te jaan, in standerttag foar elke opjûne funksje definiearje moatte, en ek auteurstags tawize moatte , wat wer globale koördinaasje soe fereaskje.)

As de kennisbasis fan Wolfram-funksjes groeit, is ien fan 'e problemen dy't wierskynlik ûntsteane de ûntdekking fan funksjes, wêrfoar it systeem leveret sykfunksje (en definysjebestannen kinne trefwurden befetsje, ensfh.). Foar ynboude funksjes yn 'e Wolfram-taal binne d'r allerhanne krúsferwizings yn 'e dokumintaasje om te helpen "advertearje" foar de funksjes. Funksjes yn in funksje-repository kinne ferwize nei ynboude funksjes. Mar hoe sit it oarsom? Om dit te dwaan, sille wy eksperimintearje mei ferskate ûntwerpen om repositoryfunksjes te eksposearjen yn dokumintaasjesiden foar ynboude funksjes.

Foar ynboude funksjes yn de Wolfram Taal is der in saneamde deteksjelaach fersoarge troch netwurk fan "helpsiden", dy't organisearre listen fan funksjes leverje dy't relatearre binne oan spesifike gebieten. It is altyd lestich om man-siden goed te balansearjen, en as de Wolfram-taal groeit, moatte man-siden faak folslein reorganisearre wurde. It is frij maklik om funksjes út in repository yn brede kategoryen te setten, en sels dy kategoryen konsekwint op te brekken, mar it is folle weardefoller om goed organisearre taalreferinsjesiden te hawwen. It is noch net dúdlik hoe't se it bêste oanmakke wurde kinne foar de hiele funksjekennisbasis. Bygelyks, CreateResourceObjectGallery yn it funksje-repository kin elkenien in webside pleatse mei har "picks" út it repository:

Wolfram Function Repository: Platfoarm foar iepen tagong foar Wolfram-taalútwreidings

It Wolfram-funksje-repository is konfigureare as in persistent funksje-repository, wêr't elke funksje dêryn altyd sil wurkje. Fansels kinne nije ferzjes fan funksjes beskikber wurde, en wy ferwachtsje dat guon funksjes fansels oer de tiid ferâldere wurde. De funksjes sille wurkje as se wurde brûkt yn programma's, mar harren dokumintaasje siden sille keppele oan nije, mear avansearre funksjes.

It Wolfram Feature Repository is ûntworpen om jo te helpen fluch nije funksjes te ûntdekken en nije manieren te learen om de Wolfram-taal te brûken. It is mei grut optimisme dat wat fan wat is ferkend yn 'e funksje-repository úteinlik sin sil meitsje om ynboude dielen fan' e kearn Wolfram-taal te wurden. Yn 'e lêste desennia hawwe wy in ferlykbere set hân funksjes dy't oarspronklik waarden yntrodusearre yn Wolfram | Alpha. En ien fan de lessen leard út dizze ûnderfining is dat it berikken fan de noarmen fan kwaliteit en konsistinsje dêr't wy rjochtsje op yn alles ynboud yn de Wolfram-taal freget in soad wurk, dat is faaks dreger as de earste poging ta útfiering fan it idee. Dochs kin in funksje yn 'e funksjekennisbasis tsjinje as in tige brûkber bewiis fan konsept foar in takomstige funksje dy't úteinlik yn 'e Wolfram-taal ynboud wurde kin.

It wichtichste ding hjir is dat in funksje yn in funksje-repository iets is dat beskikber is foar elke brûker om no te brûken. It is mooglik dat in memmetaalfunksje folle better en performanter kin wêze, mar in funksje-repository soe brûkers tagong krije ta alle nije funksjes direkt. En, it wichtichste, lit dit konsept elkenien alle nije funksjes tafoegje dy't se wolle.

Earder yn 'e skiednis fan 'e Wolfram-taal soe dit idee net sa goed wurke hawwe as it hat, mar op dit stadium wurdt der safolle muoite dien mei de taal, en sa'n djip begryp fan taalûntwerpprinsipes, dat it no tige liket mooglik foar in grutte mienskip fan brûkers om funksjes ta te foegjen dy't ûntwerpkonsistinsje sille behâlde om se nuttich te meitsjen foar in breed skala oan brûkers.

Der is in ûnbidige geast fan talint(?) yn de brûkersmienskip fan Wolfram Language. (Fansels omfettet dizze mienskip in protte liedende R&D-minsken yn in ferskaat oan fjilden.) Ik hoopje dat it Wolfram Feature Repository in effektyf platfoarm sil leverje foar it ûntsluten en fersprieden fan dizze geast fan talint. Allinnich tegearre kinne wy ​​wat meitsje dat it gebiet dêr't it Wolfram-taalberekkeningsparadigma op tapast wurde kin, signifikant útwreidzje sil.

Yn mear as 30 jier binne wy ​​in hiel ein kommen mei de Wolfram-taal. No tegearre, litte wy noch fierder gean. Ik moedigje alle respekteare brûkers fan 'e Wolfram-taal oer de hiele wrâld sterk oan om it funksjonele repository as platfoarm foar dit te brûken, lykas ek it nije softwareprojekt lykas de Free Wolfram Engine for Developers.

Boarne: www.habr.com

Add a comment