Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Saluton, Habr! Mi prezentas al via atento tradukon de la afiŝo de Stephen Wolfram "La Wolfram Funkcia Deponejo: Lanĉante Malferma Platformo por Etendi la Wolfram Lingvon".

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Antaŭkondiĉoj por la konsistenco de la Wolfram-lingvo

Hodiaŭ ni staras ĉe la sojlo de grandaj atingoj kune kun la programlingvo Wolfram Lingvo. Antaŭ nur tri semajnoj ni lanĉis senpaga Wolfram-motoro por programistojhelpi niajn uzantojn integri la Wolfram Lingvon en siajn grandskalajn programajn projektojn. Hodiaŭ ni lanĉas Wolfram-funkcia deponejo, por provizi kunordigan platformon por funkcioj kreitaj por etendi la Wolfram-lingvon, kaj ni ankaŭ malfermas deponejon de funkcioj por ĉiu, kiu povas kontribui al la evoluo de nia programaro.

La Wolfram Function Repository estas io ebligita de la unika naturo de la Wolfram Lingvo ne nur kiel programlingvo, sed ankaŭ kiel plenskala komputika lingvo. En tradiciaj programlingvoj, aldoni signifan novan funkciecon kutime implikas krei tutajn kromajn bibliotekojn kiuj eble aŭ eble ne funkcias kiam uzataj kune. Tamen, en la Wolfram Lingvo tiom multe jam estas konstruita en la lingvon mem, ke eblas signife vastigi ĝian funkciecon simple aldonante novajn funkciojn, kiuj tuj integriĝas en la tutecan strukturon de la tuta lingvo.

Ekzemple, la Wolfram-funkcia deponejo jam enhavas 532 novaj funkcioj strukturita en 26 temajn kategoriojn:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Same pli ol 6000 normaj funkcioj, konstruita en la Wolfram-lingvon, ĉiu funkcio el la deponejo havas dokumentarpaĝon kun detala priskribo de ili kaj ekzemploj de laboro:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Por atingi la paĝon, kopiu la supran objekton (funkcio BLOB), algluu ĝin en la eniglinion kaj poste rulu la funkcion - ĝi jam estas konstruita en la Wolfram-lingvo kaj subtenata defaŭlte komencante per versio 12.0:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Oni devas rimarki ĉi tie, ke dum prilaborado LogoQRCodo Vi ne bezonas, ekzemple, starigi "bibliotekon de prilaborado de bildoj" - ĉar ni jam efektivigis konsekvencan kaj zorge algoritman manieron en la Wolfram Lingvo. prilaborado de bildoj, kiu povas esti tuj prilaborita per diversaj grafikaj lingvofunkcioj:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Mi esperas tion kun la subteno mirinda kaj talenta komunumo, kiu kreskis kaj disetendiĝis (surbaze de la Wolfram Lingvo) dum la pasintaj pluraj jardekoj. La Wolfram-funkcideponejo permesos por la antaŭvidebla estonteco signife vastigi la gamon da (eble eble signifaj, specialigitaj en diversaj kampoj de scienco kaj teknologio) disponeblaj en la lingvo. Tiel, fariĝas eble uzi kaj la enhavon de la lingvo (ĝiaj enkonstruitaj funkcioj) kaj evoluprincipoj, kiuj estas efektivigitaj surbaze de la lingvo. (Oni notu ĉi tie, ke la Wolfram Lingvo jam havas pli ol 30-jara historio de disvolviĝo kaj stabila kresko).
Funkcioj de la deponejo povas enhavi malgrandajn aŭ grandajn pecojn de kodo skribita en la Wolfram Lingvo. Ekzemple, ĉi tiuj povus esti alvokoj eksteraj APIoj kaj servoj aŭ eksteraj bibliotekoj en aliaj lingvoj. La unika trajto de ĉi tiu aliro estas, ke kiam oni profundigas al uzantnivela funkcieco, ne estos eblaj nekongruoj ĉar la aliro estas konstruita sur la konsekvenca strukturo de la Wolfram Lingvo - kaj ĉiu funkcio aŭtomate funkcios ĝuste - ekzakte kiel celis.ŝi devus.
La ŝelo kaj programa strukturo de la Wolfram Feature Repository estas dizajnitaj por ke ĉiuj povu kontribui al la komuna afero en la plej simpla kaj oportuna maniero por ili - fakte, nur plenigante la tekstdosieron de notbloko (kun etendo nb) WL. Enkonstruitaj aŭtomataj funkcioj permesas vin kontroli novajn funkciojn aldonitajn al la deponejo por certigi ilian integriĝon en la lingvo. Nia kompanio vetas je la vasta gamo de uzantoj, kiuj povas integri siajn funkciojn en la lingvon, prefere ol je la granda komplekseco de novaj funkcioj - kaj kvankam estas revizia procezo, ni ne insistas pri io simila. peniga analizo pri dezajno aŭ striktaj normoj por la kompleteco kaj fidindeco de novaj uzantfunkcioj, kontraste al la pli rigora testado de funkcioj konstruitaj en la kerna lingvo kiun ni uzas.

Estas multaj kompromisoj kaj detaloj en ĉi tiu aliro, sed nia celo estas optimumigi la deponejon de funkcioj de Wolfram kaj por la sperto de uzanto kaj certigi, ke novaj uzantfunkcioj kontribuas signife al la evoluo de la lingvo. Dum ni kreskas, mi ne dubas, ke ni devos inventi novajn metodojn por prilabori kaj validigi funkciojn enkonstruitajn en la deponejo, ne laste por organizi grandajn nombrojn da funkcioj kaj trovi tiujn, kiujn uzantoj bezonas. Tamen estas kuraĝige, ke la vojo, kiun ni elektis, estas bona komenco. mi persone aldonis plurajn funkciojn al la origina datumbazo. Multaj el ili baziĝas sur kodo, kiun mi persone evoluigis dum sufiĉe da tempo. Kaj mi bezonis nur kelkajn minutojn por puŝi ilin al la deponejo. Nun kiam ili estas en la deponejo, mi povas finfine - tuj kaj iam ajn - uzi ĉi tiujn funkciojn laŭbezone, sen devi zorgi pri serĉado de dosieroj, elŝuto de pakaĵoj ktp.

Pliigante efikecon dum redukto de kostoj

Eĉ antaŭ la Interreto, ekzistis manieroj kunhavigi Wolfram Language-kodon (nia unua grava centralizita projekto estis MathSource, kreita por Mathematica en 1991 surbaze de KD-ROM, ktp.). Kompreneble, la aliro proponita por efektivigo bazita sur la Wolfram-funkcia deponejo estas pli potenca kaj fidinda ilo por efektivigi la suprajn taskojn.

Dum pli ol 30 jaroj, nia firmao diligente laboris por konservi la integrecon de la Wolfram-lingva strukturo, kaj ĉi tio estas kritika por certigi, ke la Wolfram-lingvo fariĝu ne nur programlingvo, sed ankaŭ plenrajta komputika lingvo. Kaj tiel, la esenco de la aliro al efektivigado de la Wolfram-funkciodeponejo estas uzi unuigitan aliron al programado kaj evoluigado de novaj funkcioj kiuj estas sinsekve aldonitaj kaj konvenas en la kadron de la lingvo tiel ke ĝi povas evoluigi kaj kunevolui.

Diversaj komputilaj procezoj okazas en la efektivigstrukturo de ĉiu funkcio. Oni notu ĉi tie, ke necesas, ke la funkcio havu klaran kaj unuforman aspekton kaj vidan legeblecon por la uzanto. En ĉi tiu kunteksto, la enkonstruitaj funkcioj de la Wolfram Lingvo estas prezentitaj kun pli ol 6000 sinsekvaj ekzemploj pri kiel ĝuste programi funkciojn (ĉi tiuj estas niaj viva programado filmetojkiuj inkluzivas centoj da horoj da procezo de kreado de normaj programoj). Kion ĉi tiu aliro finfine igas la Wolfram-trajtodeponejon kapabla bone rezulti, estas la struktura naturo de la Wolfram Lingvo, kun ĝia granda nombro da kromaj kaj multfacetaj bibliotekoj kiuj jam estas konstruitaj en la lingvon. Ekzemple, se vi havas funkcion, kiu prilaboras bildojn, aŭ malabundaj tabelojmolekulaj strukturojKaj geografiaj datumoj aŭ iuj aliaj - ilia konsekvenca simbola prezento jam ekzistas en la lingvo, kaj dank' al tio, via funkcio tuj fariĝas kongrua kun aliaj funkcioj en la lingvo.

Krei deponejon, kiu efektive funkcias bone, estas interesa metaprograma tasko. Ekzemple, troo de limigoj en la programo ne permesos akiri la bezonatan unuiĝon kaj universalecon de la algoritmo. Same kiel kun nesufiĉa nombro da funkciaj limigoj, vi ne povos efektivigi sufiĉe ĝustan sinsekvon de algoritmo ekzekuto. Pluraj antaŭaj ekzemploj de efektivigo de kompromiso de ĉi tiuj aliroj, efektivigitaj de nia kompanio, funkciis sufiĉe stabile - ĉi tiuj estas: Projekto Tungsten Manifestacioj, lanĉita en 2007 kaj nun funkcias interrete interrete kun pli ol 12000 uzant-interagaj demonstraĵoj. EN Wolfram datumbazo estas pli ol 600 pretaj datumbazoj uzeblaj en la Wolfram Lingvo, kaj Stokado de neŭrala reto de Wolfram estas replenigita per novaj neŭralaj retoj preskaŭ ĉiusemajne (jam estas 118 el ili nun) kaj ili tuj estas konektitaj per la funkcio NetModel en la Wolfram Lingvo.

Ĉiuj ĉi-supraj ekzemploj havas fundamentan trajton - la objektoj kaj funkcioj kolektitaj en la projekto havas tre altan gradon de strukturado kaj distribuado de procezoj. Kompreneble, la detalo de la strukturo de kio estas demo aŭ neŭrala reto aŭ io alia povas multe varii, sed la fundamenta strukturo por iu nuna deponejo ĉiam restas la sama. Kia do vi opinias, kara uzanto, pri kreado de tia deponejo, kiu aldonas etendaĵojn al la lingvo Wolfram? La Wolfram Lingvo estas desegnita por esti ekstreme fleksebla, do ĝi povas esti etendita kaj modifita iel ajn. Tiu ĉi cirkonstanco estas ege grava por la kapablo rapide krei diversajn grandskalajn programajn projektojn en la Wolfram Lingvo. Oni notu ĉi tie, ke laŭ la fleksebleco de la lingvo pligrandiĝas, la kosto de projektoj realigitaj en tia lingvo neeviteble plialtiĝos. Ĉi tio estas pro la fakto, ke ju pli la uzanto uzas tian lingvon, des pli dediĉita funkcieco li ricevas, sed ni ne forgesu, ke ĉi tiu aliro ankaŭ povas havi negativajn flankojn rilate la nekapablon certigi konsekvencan konsistencon de programmoduloj.

Estas ofta problemo kun bibliotekoj en tradiciaj programlingvoj - se vi uzas unu bibliotekon, ekzemple, la kodo funkcios ĝuste, sed se vi provos uzi plurajn bibliotekojn, ne garantias, ke ili interagas ĝuste inter si. . Ankaŭ en tradiciaj programlingvoj - male al plena komputika lingvo - ne ekzistas maniero garantii la ĉeeston de konsekvencaj enkonstruitaj reprezentoj por iuj funkcioj aŭ datumtipoj krom iliaj bazaj strukturoj. Sed, fakte, la problemo estas eĉ pli granda ol ĝi ŝajnas unuavide: se oni konstruas grandskalan vertikalon de funkcieco, tiam sen la grandegaj kostoj de centralizita projektprogramado, kiujn ni metas en la lingvo Wolfram, estas neeble. atingi konsistencon. Tial gravas, ke ĉiuj programaraj moduloj ĉiam funkcias kune ĝuste.

Do la ideo malantaŭ la Wolfram-trajtodeponejo estas eviti la problemon skizitan supre simple aldonante etendaĵojn al la lingvo en relative malgrandaj pecoj de kodo per individuaj funkcioj kiuj estas pli facile evoluigi kiel koheraj moduloj. Dirite, ekzistas programaj funkcioj, kiuj ne povas esti oportunaj uzante individuajn funkciojn (kaj nia kompanio planas liberigi optimumigitan programan algoritmon en proksima estonteco por helpi efektivigi grandskalajn programajn pakaĵojn). Tamen, surbaze de la funkcioj jam konstruitaj en la Wolfram Lingvo, ekzistas multaj programaj eblecoj kiuj estas efektivigitaj surbaze de individuaj funkcioj. La ideo ĉi tie estas, ke kun relative malmulte da programada penado eblas krei kelkajn novajn kaj tre utilajn funkciojn, kiuj provizos sufiĉan koherecon al la dezajno, ili estos bone kunordigitaj unu kun la alia, kaj ankaŭ, krom tio, ili estonte povos facile kaj vaste uzata en la lingvo.

Ĉi tiu aliro estas, kompreneble, kompromiso. Se pli granda pakaĵo estus efektivigita, tute nova mondo de funkcieco povus esti imagita, kiu estus ekstreme potenca kaj utila. Se necesas akiri novajn funkciojn, kiuj kongruos kun ĉio alia, sed vi ne pretas elspezi multan penon por disvolvi la projekton, ĉi tio, bedaŭrinde, povas konduki al redukto de la amplekso de via projekto. La ideo malantaŭ la Wolfram-funkcia deponejo estas disponigi funkciecon al difina parto de projekto; ĉi tiu aliro aldonos potencan funkciecon faciligante konservi bonan konsistencon en programa projekto.

Helpu aldoni kutimajn funkciojn al la funkcio-deponejo

Nia teamo multe laboris por faciligi al uzantoj kontribui al la funkcioj de la deponejo de Wolfram. Sur la labortablo (jam en versio 12.0), Vi povas simple trairi la ĉefmenuajn langetojn sinsekve: Dosiero > Nova > Deponejo > Funkcia Deponejo kaj vi ricevos "Difina Kajero" (programme ene de la laborbenko. Vi ankaŭ povas uzi la analogan funkcion - Krei Kajeron["Funkcia Rimedo"]):

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Estas du ĉefaj paŝoj, kiujn vi devos plenumi: unue, efektive skribu la kodon por via funkcio kaj, due, skribu dokumentadon ilustrantan kiel via funkcio devus funkcii.
Alklaku la butonon "Malfermu Specimeno" supre por vidi ekzemplon pri tio, kion vi devas fari:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Esence, vi provas krei ion similan al enkonstruita funkcio en la Wolfram Lingvo. Krom ke ĝi povas fari ion multe pli specifan ol enkonstruita funkcio. Samtempe, atendoj pri ĝia kompleteco kaj fidindeco estos multe pli malaltaj.
Vi devas doni al via funkcio nomon kiu sekvas la gvidliniojn pri nomado de funkcioj de Wolfram Language. Krome, vi devos evoluigi dokumentadon por via funkcio, simile al la enkonstruitaj funkcioj de la lingvo. Mi parolos pri tio pli detale poste. Nuntempe, nur rimarku, ke en la vico de butonoj supre de la difina kajero-dosiero estas butono "Stilgvidlinioj", kiu klarigas kion fari, kaj Iloj-butono, kiu provizas ilojn por formati la dokumentaron de via funkcio.
Kiam vi certas, ke ĉio estas plenigita ĝuste kaj vi estas preta, alklaku la butonon "Kontrolu". Estas tute normale, ke vi ankoraŭ ne eltrovis ĉiujn detalojn. Do la funkcio "Kontrolu" aŭtomate funkcios kaj faros multajn stilajn kaj konsekvencajn kontrolojn. Ofte, ĝi tuj instigos vin konfirmi kaj akcepti la korektojn (Ekzemple: "Ĉi tiu linio devas finiĝi per dupunkto", kaj ĝi instigos vin enigi dupunkton). Foje ŝi petos vin aldoni aŭ ŝanĝi ion mem. Ni konstante aldonos novajn funkciojn al la aŭtomata funkcieco de la butono Kontrolo, sed esence ĝia celo estas certigi, ke ĉio, kion vi sendas al la funkcio-deponejo, jam atente sekvas kiel eble plej multajn stilajn gvidliniojn.

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Do, post funkciado de "Kontrolo", vi povas uzi "Antaŭrigardon". "Antaŭrigardo" kreas antaŭrigardon de la dokumenta paĝo, kiun vi difinis por via funkcio. Vi ankaŭ povas krei antaŭrigardon por dosiero kreita en via komputilo aŭ por dosiero situanta en nuba stokado. Se, ial, vi ne kontentas pri tio, kion vi vidas en la antaŭvido, simple reiru kaj faru la necesajn korektojn, kaj poste alklaku la butonon Antaŭrigardo denove.
Nun vi pretas puŝi vian funkcion en la deponejon. La butono Deploy donas al vi kvar eblojn:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

La grava afero ĉe ĉi tiu paŝo estas, ke vi povas sendi vian funkcion al la Wolfram-funkcia deponejo por ke ĝi estu disponebla por iu ajn. Samtempe, vi ankaŭ povas meti vian funkcion por limigita nombro da uzantoj. Ekzemple, vi povas krei funkcion kiu estas gastigita loke sur via komputilo tiel ke ĝi estas havebla kiam vi uzas tiun apartan komputilon. Aŭ vi povas afiŝi ĝin en via nuba konto, por ke ĝi estu disponebla por vi kiam vi estas konektita al la nubo. Vi ankaŭ povas publike gastigi (deploji) la funkcion per via nuba konto. Ĝi ne estos en la centra Wolfram-funkcia deponejo, sed vi povos doni al iu URL, kiu permesos al ili akiri vian funkcion de via konto. (Estonte ni ankaŭ subtenos centrajn deponejojn tra nia kompanio.)

Do ni diru, ke vi volas efektive sendi vian funkcion al la Wolfram-funkcia sciobazo. Por fari tion, vi alklaku la butonon "Sendu" al la deponejo. Kio do okazas nun? Via kandidatiĝo tuj estas atendata por revizio kaj aprobo de nia diligenta teamo de kuratoroj.

Dum via kandidatiĝo progresas tra la aprobprocezo (kiu kutime daŭras plurajn tagojn), vi ricevos komunikadojn pri ĝia stato kaj eble sugestojn por estonta uzo. Sed post kiam via funkcio estas aprobita, ĝi tuj estos publikigita al la Wolfram Feature Depony kaj estos disponebla por iu ajn por uzi. (Kaj ĉi tio aperos en novaĵdigestoj de novaj funkcioj ktp.)

Kio devus esti en la stokado?

Oni devas rimarki, ke nia kompanio havas tre altajn normojn pri kompleteco, fidindeco kaj ĝenerala kvalito, kaj el la 6000+ funkcioj, kiujn ni jam konstruis en la Wolfram-lingvon dum la pasintaj 30+ jaroj, ĉiuj plenumas la ĉi-suprajn postulojn. La celo de la Wolfram Funkcia Deponejo estas uzi la tutan strukturon kaj funkciojn kiuj jam ekzistas en la Wolfram Lingvo por aldoni kiel eble plej multe da pli malpezaj funkcioj (tio estas, pli altaj agadofunkcioj) kiel eble.

Kompreneble, funkcioj en la Wolfram-funkcia deponejo devas konformiĝi al la dezajnoprincipoj de la Wolfram Lingvo - tiel ke ili povas plene interagi kun aliaj funkcioj kaj la atendoj de uzantoj pri kiel la funkcio devus funkcii ĝuste. Tamen, la funkcioj ne devas esti de egala kompleteco aŭ fidindeco.

En la enkonstruitaj funkcioj de la lingvo Wolfram, ni multe laboras por ke programaj funkcioj kiel eble plej ĝeneralaj. Dirite, kiam en la Wolfram-funkcia deponejo estas nenio malbona havi funkcion en ĝi, kiu simple pritraktas iun tre specifan sed utilan kazon. Ekzemple, la funkcio SendMailFromNotebook povas ricevi dosierojn en unu specifa formato kaj krei poŝton en unu specifa maniero. Plurlatera Diagramo kreas diagramojn kun nur certaj koloroj kaj etikedado, ktp.

Alia punkto rilata al la enkonstruitaj funkcioj estas, ke nia kompanio faras ĉiujn klopodojn por trakti ĉiujn maltipajn kazojn, por ĝuste trakti malĝustan enigon, ktp. En funkcio-deponejo, estas tute normale, ke ekzistas speciala funkcio, kiu pritraktas la ĉefajn kazojn de solvado de problemo kaj ignoras ĉiujn aliajn.

La evidenta punkto estas, ke estas pli bone havi funkciojn kiuj faras pli kaj faras ĝin pli bone, sed optimumigo por funkcio-deponejo - kontraste al la enkonstruitaj funkcioj de la lingvo Wolfram - devus havi pli da funkcioj kunigitaj kun pli da funkcioj prefere ol enprofundiĝi en. la efektivigprocezoj de ĉiu specifa funkcio.

Nun ni rigardu ekzemplon de testado de funkcioj en deponejo. Konsekvencaj atendoj por tiaj funkcioj estas nature multe pli malaltaj ol por enkonstruitaj lingvofunkcioj. Ĉi tio estas precipe vera en kazoj kie funkcioj dependas de eksteraj rimedoj kiel APIoj, estas grave konstante fari konsekvencajn testojn, kio aŭtomate okazas ene de la kontrolaj algoritmoj. En la nb-dosiero, vi povas eksplicite specifi difinojn (en la sekcio Aldonaj Informoj) kaj specifi tiom da testoj kiel difinitaj per aŭ enigo kaj eligo ĉenoj aŭ plenaj signobjektoj de tipo. Kontrola Testo, kiom vi opinias taŭga. Krome, la sistemo konstante provas igi la dokumentajn ekzemplojn, kiujn vi provizas, en kontrolan procezon (kaj foje ĉi tio povas esti sufiĉe rimeda, ekzemple por funkcio, kies rezulto dependas de hazardaj nombroj aŭ de la horo de la tago).

Kiel rezulto, la funkcio-deponejo havos kelkajn efektivigkompleksaĵojn. Iuj estos nur unuopa linio de kodo, aliaj povas impliki milojn aŭ dekojn da miloj da linioj, verŝajne uzante multajn helpajn funkciojn. Kiam indas aldoni funkcion, kiu postulas tre malmulte da kodo por difini? Esence, se por funkcio ekzistas bona mnemonika nomo, kiun uzantoj facile komprenus se ili vidus ĝin en peco de kodo, tiam ĝi jam povas esti aldonita. Alie, verŝajne estas pli bone simple re-aldoni la kodon al via programo ĉiufoje kiam vi bezonas uzi ĝin.

La ĉefa celo de funkcio-deponejo (kiel ĝia nomo sugestas) estas enkonduki novajn funkciojn en la lingvon. Se vi volas aldoni novajn datumojn aŭ novaj estaĵoj, uzi Deponejo de datumoj de Wolfram. Sed kio se vi volas enkonduki novajn specojn de objektoj por viaj kalkuloj?

Estas fakte du manieroj. Vi eble volas enkonduki novan objektotipon, kiu estos uzata en novaj funkcioj en la funkcio-deponejo. Kaj en ĉi tiu kazo, vi ĉiam povas simple noti ĝian simbolan reprezenton kaj uzi ĝin dum enigo aŭ eligo de funkcioj en funkcio-deponejo.

Sed kio se vi volas reprezenti objekton kaj poste difini, per ekzistantaj funkcioj en la Wolfram Lingvo, ke vi volas labori kun ĝi? La Wolfram Lingvo ĉiam havis malpezan mekanismon por tio, nomita Supraj Valoroj. Kun kelkaj restriktoj (precipe por funkcioj kiuj ne povas taksi iliajn argumentojn), funkcio-deponejo permesas vin simple reprezenti funkcion kaj difini valorojn por ĝi. (Levigi la atendon de konsistenco dum kreado de nova grava dezajno kiu estas plene integra tra la Wolfram Lingvo estas ĝenerale tre grava proceduro kiu ne povas esti atingita per simple pliigo de la kosto de la projekto kaj estas io kion nia firmao faras kiel parto de projektoj. por longdaŭra evoluo de la lingvo, tiu ĉi tasko ne estas celo kiu estas fiksita kiel parto de la evoluo de la deponejo).

Do, kio povus esti en la funkciokodo en funkcio-deponejo? Ĉio enkonstruita en la Wolfram Lingvo, kompreneble (almenaŭ se ĝi ne reprezentas minacoj por sekureco kaj la agado de la programo mem, kiel komputika medio) same kiel ajna funkcio de la funkcio-deponejo. Tamen, ekzistas aliaj funkcioj: funkcio en funkcio-deponejo povas voki API, aŭ en Lupvirŝafo Nuboel alia fonto. Kompreneble, estas iuj riskoj asociitaj kun ĉi tio. Pro la fakto, ke ne ekzistas garantioj, ke la API ne ŝanĝos, kaj la funkcio en la funkcia vendejo ĉesos funkcii. Por helpi identigi tiajn problemojn, estas noto sur la dokumenta paĝo (en la sekcio Postuloj) por iu ajn funkcio, kiu dependas de pli ol nur enkonstruita Wolfram Language-funkcio. (Kompreneble, se temas pri realaj datumoj, povas esti problemoj eĉ kun ĉi tiu funkcio - ĉar realaj mondaj datumoj konstante ŝanĝiĝas, kaj foje eĉ ĝiaj difinoj kaj strukturo ŝanĝiĝas.)

Ĉu ĉiu kodo por la Wolfram-funkcia deponejo estu skribita en Wolfram? Certe, la kodo ene de la ekstera API ne estu skribita en la lingvo Wolfram, kiu eĉ ne faras la lingvokodon. Fakte, se vi trovas funkcion en preskaŭ ajna ekstera lingvo aŭ biblioteko, vi povas krei envolvaĵon, kiu ebligas uzi ĝin en la Wolfram-funkcia deponejo. (Kutime vi devus uzi la enkonstruitajn funkciojn por tio Ekstera taksadoEkstera Funkcio en Wolfram-lingva kodo.)

Do kio estas la signifo fari ĉi tion? Esence, tio ebligas al vi uzi la tutan integran Wolfram Language-sistemon kaj ĝian tutan unuigitan aron de programaraj kapabloj. Se vi akiras la bazan efektivigon de ekstera biblioteko aŭ lingvo, vi povas tiam uzi la riĉan simbolan strukturon de la Wolfram Lingvo por krei oportunan altnivelan funkcion, kiu ebligas al uzantoj facile uzi ajnan funkciecon jam efektivigitan. Almenaŭ, tio devus esti farebla en ideala mondo kie ĉiuj konstrubriketoj de ŝarĝado de bibliotekoj ktp ekzistas, en kiu kazo ili estus aŭtomate pritraktitaj de la Wolfram Lingvo. (Indas rimarki, ke praktike povas esti problemoj kun starigi eksterajn lingvojn specifa komputila sistemo, kaj nuba stokado povas kaŭzi kromajn sekurecproblemojn).

Cetere, kiam vi unue rigardas tipajn eksterajn bibliotekojn, ili ofte ŝajnas tro kompleksaj por esti kovritaj per nur kelkaj funkcioj, sed en multaj kazoj, multe de la komplekseco venas de kreado de la infrastrukturo necesa por la biblioteko kaj ĉiuj funkcioj por subteni ĝin. Tamen, kiam oni uzas la Wolfram Lingvon, la infrastrukturo estas kutime jam enkonstruita en la pakaĵojn, kaj do ne necesas elmontri ĉiujn ĉi tiujn subtenajn funkciojn detale, sed nur krei funkciojn por la "plej supraj" aplikaĵ-specifaj funkcioj en la biblioteko. .

"Ekosistemo" de la sciobazo

Se vi skribis funkciojn, kiujn vi uzas regule, sendu ilin al la Funkcia Deponejo de Wolfram! Se io plia ne eliras el tio (lingva evoluo), tiam eĉ tiam estos multe pli oportune por vi uzi la funkciojn por persona uzo. Tamen, estas logike supozi, ke se vi uzas la funkciojn regule, eble ankaŭ aliaj uzantoj trovos ilin utilaj.

Kompreneble, vi povas trovi vin en situacio, kie vi ne povas - aŭ ne volas - kunhavigi viajn funkciojn aŭ okaze de aliro al privataj informaj rimedoj. Eĉ en tiaj kazoj, vi povas simple disfaldi la funkciojn en via propra nuba konto, specifante rajtojn aliro al ili. (Se via organizo havas Wolfram Enterprise privata nubo, tiam ĝi baldaŭ povos gastigi sian propran privatan deponejon de funkcioj, kiu povas esti administrita de ene de via organizo kaj agordi ĉu aŭ ne devigi vidojn esti viditaj de triapartaj uzantoj.)

La funkcioj, kiujn vi sendas al la Wolfram-funkcia deponejo, ne devas esti perfektaj; ili nur devas esti utilaj. Ĉi tio iom similas al la sekcio "Eraroj" en klasika Unix-dokumentado - en la "Sekcio de Difinoj" estas sekcio "Notoj de Aŭtoro", kie vi povas priskribi limigojn, problemojn ktp, kiujn vi jam konas pri via funkcio. Aldone, kiam vi sendas vian funkcion al la deponejo, vi povas aldoni prezento-notojn, kiuj estos legataj de dediĉita teamo de kuratoroj.

Post kiam funkcio estas publikigita, ĝia paĝo ĉiam havas du ligilojn malsupre: "Sendu mesaĝon pri ĉi tiu funkcio"Kaj"Diskutu en la Wolfram-komunumo" Se vi aldonas noton (ekz., diru al mi pri cimoj), vi povas marki la skatolon, kiu diras, ke vi volas, ke via mesaĝo kaj kontaktinformoj estu dividitaj kun la aŭtoro de la funkcio.

Kelkfoje vi nur volas uzi funkciojn de la Wolfram-funkcia deponejo, kiel enkonstruitaj funkcioj, sen rigardi ilian kodon. Tamen, se vi volas rigardi enen, ĉiam estas Notepad-butono supre. Alklaku ĝin kaj vi ricevos vian propran kopion de la originala difina kajero, kiu estis sendita al la deponejo de funkcioj. Kelkfoje vi povas nur uzi ĝin kiel ekzemplon por viaj bezonoj. Samtempe, vi ankaŭ povas evoluigi vian propran modifon de ĉi tiu funkcio. Vi eble volas afiŝi ĉi tiujn funkciojn, kiujn vi trovis el la deponejo en via komputilo aŭ en via afida nuba stokado-konto, eble vi volas sendi ilin al la funkcia sciobazo, eble kiel plibonigita, vastigita versio de la originala funkcio.

En la estonteco, ni planas subteni Git-stilan forkadon por funkcio-deponejoj, sed nuntempe ni provas konservi ĝin simpla, kaj ni ĉiam havas nur unu akceptitan version de ĉiu funkcio konstruita en la lingvo. Pli ofte ol ne (krom se programistoj rezignas konservi la funkciojn kiujn ili evoluigis kaj respondas al uzantsubmetadoj), la origina aŭtoro de la funkcio prenas kontrolon de ĝisdatigoj al ĝi kaj sendas novajn versiojn, kiuj tiam estas reviziitaj kaj, se ili trapasas la revizian procezon. , eldonita en la lingvo.

Ni konsideru la demandon kiel funkcias "versiado" de evoluintaj funkcioj. Ĝuste nun, kiam vi uzas funkcion de la funkcio-deponejo, ĝia difino estos konstante konservita en via komputilo (aŭ en via nuba konto se vi uzas la nubon). Se nova versio de funkcio estas disponebla, la venontan fojon kiam vi uzos ĝin, vi ricevos mesaĝon informante vin pri tio. Kaj se vi volas ĝisdatigi la funkcion al nova versio, vi povas fari ĝin per la komando Rimedo Ĝisdatigo. (La "funkcia blob" fakte stokas pli da versioj de informoj, kaj ni planas fari tion pli alirebla por niaj uzantoj estonte.)

Unu el la belaj aferoj pri la Wolfram Function Depository estas ke iu ajn Wolfram Language programo, ie ajn povas uzi funkciojn de ĝi. Se programo aperas en notbloko, estas ofte oportune formati la deponajn funkciojn kiel facile legeblajn funkciojn de "funkcia binara objekto" (eble kun taŭga versio-aro).

Vi ĉiam povas aliri ajnan funkcion en la funkcio-deponejo uzante tekston Rimeda Funkcio[...]. Kaj ĉi tio estas tre oportuna se vi skribas kodon aŭ skriptojn rekte por la Wolfram Engine, ekzemple, kun uzante IDE aŭ tekstkodredaktilon (Indas precipe rimarki, ke la funkcio-deponejo estas plene kongrua kun Senpaga Wolfram Engine por Programistoj).

Kiel ĝi funkcias?

Ene de la funkcioj en la Wolfram-deponejo tio eblas uzante ĝuste la samon sistemoj de rimedoj bazoj, kiel en ĉiuj niaj aliaj ekzistantaj deponejoj (datumvendejo, Neŭrala Reta Deponejo, kolekto de demo-projektoj ktp.), kiel ĉiuj aliaj Wolfram-sistemresursoj, Rimeda Funkcio finfine bazita sur funkcio RimedoObjekto.

Konsideru Rimeda Funkcio:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Ene vi povas vidi iujn informojn uzante la funkcion informoj:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Kiel funkcias agordo de rimeda funkcio? La plej simpla estas pure loka kazo. Jen ekzemplo, kiu prenas funkcion (en ĉi tiu kazo nur puran funkcion) kaj difinas ĝin kiel rimedfunkcion por antaŭfiksita programsesio:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Post kiam vi faris la difinon, vi povas uzi la rimedan funkcion:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

Notu, ke estas nigra piktogramo en ĉi tiu funkcio blob Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj. Ĉi tio signifas, ke la BLOB-funkcio rilatas al la enmemora rimedfunkcio difinita por la nuna sesio. Rimeda funkcio, kiu estas konstante konservita en via komputilo aŭ nuba konto, havas grizan ikonon Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj. Kaj estas oranĝa ikono por oficiala rimeda funkcio en la Wolfram Feature Depony Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj.

Kio do okazas kiam vi uzas la Ekspandi menuon en la Difina Kajero? Unue, ĝi prenas ĉiujn difinojn en la notbloko kaj el ili kreas simbolan RimedoObjekto). (Kaj se vi uzas tekst-bazitan IDE aŭ programon, tiam vi ankaŭ povas eksplicite krei RimedoObjekto)

Loka deplojo de funkcio de deponejo sur via komputilo estas farita per la komando Loka Cache por rimeda objekto konservi ĝin kiel LokaObjekto sur via dosiersistemo. Deplojo al nuba konto estas farita per la komando CloudDeploy por rimedobjekto, kaj publika nuba deplojo estas CloudPublish. En ĉiuj kazoj RimedoRegistriĝi ankaŭ uzata por registri la rimedfunkcian nomon, do Rimeda Funkcio["nomo"] funkcios.

Se vi alklakas la butonon Sendi por Funkcia Deponejo, kio okazas sub ĝi ResourceSubmit vokis sur rimedobjekto. (Kaj se vi uzas tekstan eniginterfacon, vi ankaŭ povas telefoni ResourceSubmit rekte.)

Defaŭlte, sendadoj estas faritaj sub la nomo asociita kun via Wolfram ID. Sed se vi sendas kandidatiĝon nome de evolua teamo aŭ organizo, vi povas starigu apartan eldonan ID kaj anstataŭe uzu ĝin kiel la nomon por interagi kun viaj opinioj.

Post kiam vi sendis iun el viaj funkcioj al la funkcia sciobazo, ĝi estos atendata por revizio. Se vi ricevas komentojn kiel respondo, ili kutime estos en formo de tekstdosiero kun pliaj "komentaj ĉeloj" aldonitaj. Vi ĉiam povas kontroli la staton de via kandidatiĝo vizitante portalo de membrosistemaj rimedoj. Sed post kiam via funkcio estas aprobita, vi estos sciigita (per retpoŝto) kaj via funkcio estos afiŝita al la deponejo de funkcioj de Wolfram.

Kelkaj subtilecoj en la laboro

Unuavide eble ŝajnas, ke vi povas simple preni difinan kajeron kaj meti ĝin laŭvorte en funkcio-deponejon, tamen efektive estas sufiĉe multaj subtilecoj implikitaj - kaj pritrakti ilin postulas fari iom da kompleksa meta-programado, pritraktado de simbola prilaborado. kiel la kodo, kiu difinas la funkcion, kaj la Notepad mem estas difinita. Plejparto de ĉi tio okazas interne, malantaŭ la scenoj, sed ĝi povas havi kelkajn implicojn kompreneblajn, se vi kontribuos al la funkcio-sciobazo.

Unua tuja subtileco: Kiam vi plenigas la Difinan Kajeron, vi povas simple referenci vian funkcion ĉie uzante nomon kiel Mia Funkcio, kiu aspektas kiel regula nomo por funkcio en la Wolfram Lingvo, sed por funkcio-deponejo-dokumentado tio estas anstataŭigita Rimeda Funkcio["Mia Funkcio"] estas tio, kion uzantoj efektive uzos kiam ili laboras kun la funkcio.

La dua subtileco: kiam vi kreas rimedfunkcion el la Difina Kajero, ĉiuj dependecoj implikitaj en la funkciodifino devas esti kaptitaj kaj eksplicite inkluzivitaj. Tamen, por certigi, ke la difinoj restas modulaj, vi devas meti ĉion en unikaĵo nomspaco. (Kompreneble, funkcioj kiuj faras ĉion, estas en la funkcio-deponejo.)

Kutime vi neniam vidos spuron de la kodo uzata por agordi ĉi tiun nomspacon. Sed se ial vi nomas subefektitan simbolon ene de via funkcio, tiam vi vidos, ke ĉi tiu simbolo estas en la interna kunteksto de la funkcio. Tamen, kiam oni prilaboras la Difinan Notepad, almenaŭ la simbolo responda al la funkcio mem estas alĝustigebla por plej bona ekrano kiel funkcia BLOB prefere ol kruda karaktero en la interna kunteksto.

La funkcio-deponejo estas por difini novajn funkciojn. Kaj ĉi tiuj funkcioj povas havi eblojn. Ofte ĉi tiuj parametroj (ekzemple, telefonoBildgrandeco) povos esti uzata por enkonstruitaj funkcioj, same kiel por tiuj por kiuj jam ekzistas enkonstruitaj simboloj. Sed foje nova funkcio povas postuli novajn opciojn. Por konservi modularecon, ĉi tiuj parametroj devas esti simboloj difinitaj en unika interna kunteksto (aŭ io kiel tutaj rimedfunkcioj, tio estas, sin). Por simpleco, la funkcio-deponejo ebligas al vi difini novajn opciojn en ĉendifinoj. Kaj por la komforto de la uzanto, ĉi tiuj difinoj (supozante ke ili uzis OpcioValoro и Opcioj Ŝablono) ankaŭ estas prilaboritaj tiel ke kiam oni uzas funkciojn, parametroj povas esti specifitaj ne nur kiel ĉenoj, sed ankaŭ kiel tutmondaj simboloj kun la samaj nomoj.

Plej multaj funkcioj simple faras tion, kion ili devas fari ĉiun fojon kiam ili estas vokataj, sed kelkaj funkcioj devas esti pravaligitaj antaŭ ol ili povas ruliĝi en aparta sesio - kaj por solvi ĉi tiun problemon, estas sekcio "Initigo" en la sekcio Difino.

Funkcioj de deponejo povas uzi aliajn funkciojn, kiuj jam estas en la deponejo; por agordi difinojn por funkcio deponejo, kiu inkluzivas du (aŭ pli) funkciojn, kiuj referencas unu la alian, vi devas disfaldi ilin en via programa sesio por ke vi povu. referenco kiel sur ili Rimeda Funkcio["nomo"], tiam vi povas krei la kombinaĵojn de ĉi tiuj funkcioj, kiujn vi bezonas, ekzemplojn (mi ne komprenis) kaj aldoni novan funkcion al la deponejo bazita sur tiuj jam afiŝitaj antaŭe. (aŭ jam aŭ antaŭe - ambaŭ vortoj estas mallertaj)

Evoluperspektivoj. Kio devus okazi kiam la deponejo iĝas vere granda?

Hodiaŭ ni ĵus lanĉas la Wolfram Feature Repository, sed kun la tempo ni atendas, ke ĝia grandeco kaj funkcieco eble pliiĝos draste, kaj dum ĝi kreskos en evoluo, estos diversaj problemoj, kiujn ni jam antaŭvidas, ke eble aperos.

La unua problemo koncernas funkcionomojn kaj ilian unikecon. La funkcio-deponejo estas desegnita tiel ke, kiel la enkonstruitaj funkcioj en la Wolfram Lingvo, vi povas referenci ajnan antaŭfiksitan funkcion simple specifante ĝian nomon. Sed tio neeviteble signifas, ke funkcionomoj devas esti tutmonde unikaj tra la deponejo, tiel ke, ekzemple, povas ekzisti nur unu Rimeda Funkcio["Mia Favorita Funkcio"].

Ĉi tio eble ŝajnas granda problemo komence, sed indas rimarki, ke ĝi estas esence la sama problemo kiel por aferoj kiel interretaj domajnoj aŭ sociaj amaskomunikiloj. Kaj la fakto estas, ke la sistemo simple bezonas havi registrilon - kaj ĉi tiu estas unu el la roloj, kiujn nia kompanio plenumos por la Wolfram-funkcia sciobazo. (Por privataj versioj de deponejo, iliaj registriloj povas esti administrantoj.) Kompreneble, Interreta domajno povas esti registrita sen havi ion ajn sur ĝi, sed en funkciodeponejo, funkcionomo povas esti registrita nur se ekzistas reala difino de la funkcio.

Parto de nia rolo en administrado de la Wolfram-funkcia scio-bazo estas certigi, ke la nomo elektita por funkcio estas logika pro la difino de la funkcio kaj ke ĝi sekvas la nomkonvenciojn de Wolfram Language. Ni havas pli ol 30 jarojn da sperto nomi enkonstruitajn funkciojn en la Wolfram Lingvo, kaj nia teamo de kuratoroj alportos tiun sperton ankaŭ al la funkcio-deponejo. Kompreneble, ĉiam estas esceptoj. Ekzemple, eble ŝajnas preferinde havi mallongan nomon por iu funkcio, sed estas pli bone "defendi" per pli longa, pli specifa nomo ĉar vi malpli verŝajne renkontos iun, kiu volas fari similan funkcionomon estonte. .

(Oni notu ĉi tie, ke simple aldoni iun membro-etikedon por malambiguigi funkciojn ne havos la celitan efikon. Ĉar krom se vi insistas pri ĉiam atribui etikedon, vi devos difini defaŭltan etikedon por iu ajn donita funkcio, kaj ankaŭ asigni aŭtorajn etikedojn. , kiu denove postulus tutmondan kunordigon.)

Ĉar la sciobazo de Wolfram-funkcioj kreskas, unu el la problemoj kiuj verŝajne ekestiĝos estas la eltrovebleco de funkcioj, por kiuj la sistemo provizas serĉfunkcio (kaj difindosieroj povas inkluzivi ŝlosilvortojn ktp.). Por enkonstruitaj funkcioj en la Wolfram Lingvo, estas ĉiaj krucreferencoj en la dokumentaro por helpi "reklami" la funkciojn. Funkcioj en funkcio-deponejo povas referenci enkonstruitajn funkciojn. Sed kio pri inverse? Por fari tion, ni eksperimentos kun malsamaj dezajnoj por elmontri deponajn funkciojn en dokumentaj paĝoj por enkonstruitaj funkcioj.

Por enkonstruitaj funkcioj en la Wolfram Lingvo ekzistas tiel nomata detekta tavolo provizita de reto de "helppaĝoj", kiuj disponigas fakorganizitajn listojn de funkcioj ligitaj al specifaj areoj. Ĉiam malfacilas ĝuste ekvilibrigi manpaĝojn, kaj dum la lingvo Wolfram kreskas, manpaĝoj ofte devas esti tute reorganizitaj. Estas sufiĉe facile meti funkciojn de deponejo en larĝajn kategoriojn, kaj eĉ rompi tiujn kategoriojn konsekvence, sed multe pli valoras havi taŭge organizitajn lingvajn referencpaĝojn. Ankoraŭ ne estas klare kiel plej bone krei ilin por la tuta funkcia sciobazo. Ekzemple, Krei ResourceObjectGallery en la funkcio-deponejo, iu ajn povas afiŝi retpaĝon enhavantan siajn "elektojn" el la deponejo:

Wolfram Function Repository: Malferma alira platformo por Wolfram-lingvaj etendaĵoj

La Wolfram-funkcia deponejo estas agordita kiel konstanta funkcio-deponejo, kie ajna funkcio en ĝi ĉiam funkcios. Kompreneble, novaj versioj de funkcioj eble estos disponeblaj, kaj ni atendas, ke iuj funkcioj kompreneble malnoviĝos kun la tempo. La funkcioj funkcios se ili estas uzataj en programoj, sed iliaj dokumentaj paĝoj ligos al novaj, pli altnivelaj funkcioj.

La Wolfram Feature-Deponejo estas dizajnita por helpi vin rapide malkovri novajn funkciojn kaj lerni novajn manierojn uzi la Wolfram-lingvon. Ni estas tre optimismaj, ke iuj el tio, kio estis esplorita en la funkcio-deponejo, poste havos sencon fariĝi enkonstruitaj partoj de la kerna Wolfram Language. Dum la lasta jardeko ni havis similan aron ecoj kiuj estis origine lanĉitaj en Wolfram | Alfa. Kaj unu el la lecionoj lernitaj de ĉi tiu sperto estas, ke atingi la normojn de kvalito kaj konsistenco, pri kiuj ni fokusiĝas en ĉio konstruita en la Wolfram-lingvo, postulas multan laboron, kio ofte estas pli malfacila ol la komenca peno al efektivigo de la ideo. Eĉ tiel, funkcio en la funkcia sciobazo povas funkcii kiel tre utila pruvo de koncepto por estonta funkcio kiu povas eventuale esti konstruita en la Wolfram-lingvon.

La plej grava afero ĉi tie estas, ke funkcio en funkcio-deponejo estas io disponebla por ĉiu uzanto nun. Eblas, ke gepatra lingvo trajto povus esti multe pli bona kaj pli efika, sed trajto-deponejo permesus al uzantoj havi aliron al ĉiuj novaj funkcioj tuj. Kaj, plej grave, ĉi tiu koncepto permesas al ĉiuj aldoni iujn ajn novajn funkciojn, kiujn ili volas.

Pli frue en la historio de la lingvo Wolfram, ĉi tiu ideo ne funkcius tiel bone kiel ĝi, sed en ĉi tiu etapo estas tiom da penado metita en la lingvon, kaj tiom profunda kompreno de lingvodezajnprincipoj, ke ĝi nun ŝajnas tre tre. ebla por granda komunumo de uzantoj aldoni funkciojn kiuj konservos projektan konsistencon por igi ilin utilaj al larĝa gamo de uzantoj.

Estas nekredebla spirito de talento(?) en la uzantkomunumo de Wolfram Language. (Kompreneble, ĉi tiu komunumo inkluzivas multajn ĉefajn spertulojn pri R&D en diversaj kampoj.) Mi esperas, ke la Wolfram Feature Repository provizos efikan platformon por malŝlosi kaj disvastigi ĉi tiun spiriton de talento. Nur kune ni povas krei ion kiu signife vastigos la areon al kiu la Wolfram-lingva komputikparadigmo povas esti aplikita.

En pli ol 30 jaroj, ni faris longan vojon kun la lingvo Wolfram. Nun kune, ni iru eĉ plu. Mi forte instigas ĉiujn respektatajn uzantojn de la lingvo Wolfram tra la mondo uzi la funkcian deponejon kiel platformon por tio, same kiel la novan programaran projekton kiel la Free Wolfram Engine for Developers.

fonto: www.habr.com

Aldoni komenton