Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Ciao, Habr! Prestu à a vostra attenzione una traduzzione di u post di Stephen Wolfram "U Repositoriu di Funzioni Wolfram: Lanciazione di una Piattaforma Aperta per Estende a Lingua Wolfram".

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Prerequisiti per a cunsistenza di a lingua Wolfram

Oghje simu nantu à a soglia di grandi rializazioni inseme cù a lingua di prugrammazione Lingua Wolfram. Solu trè settimane fà avemu lanciatu mutore Wolfram gratuitu per i sviluppatoriper aiutà i nostri utilizatori à integrà u Wolfram Language in i so prughjetti di software à grande scala. Oghje avemu lanciatu Repositoriu di funzioni Wolfram, Per furnisce una piattaforma coordinata per e funzioni create per allargà a lingua Wolfram, è avemu ancu apertu un repository di funzioni per quellu chì pò cuntribuisce à u sviluppu di u nostru pruduttu software.

U Wolfram Function Repository hè qualcosa resu pussibule da a natura unica di u Wolfram Language micca solu cum'è una lingua di prugrammazione, ma ancu cum'è un linguaggio di computing à grande scala. In i linguaggi di prugrammazione tradiziunali, l'aghjunzione di una nova funziunalità significativa implica generalmente a creazione di biblioteche supplementari intere chì ponu o micca funzionanu quandu sò aduprate inseme. Tuttavia, in u Wolfram Language tantu hè digià custruitu in a lingua stessa, chì hè pussibule di espansione significativamente a so funziunalità da solu aghjunghjendu novi funzioni chì sò immediatamente integrati in a struttura olistica di tutta a lingua.

Per esempiu, u repositoriu di funzioni Wolfram cuntene digià 532 funzioni novi strutturatu in 26 categurie tematiche:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Cume più di 6000 funzioni standard, custruitu in a lingua Wolfram, ogni funzione da u repository hà una pagina di documentazione cù una descrizzione dettagliata di elli è esempi di travagliu:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Per ghjunghje à a pagina, copià l'ughjettu sopra (funzione BLOB), incollà in a linea di input è poi eseguite a funzione - hè digià integrata in a lingua Wolfram è supportata per difettu cuminciendu cù versione 12.0:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Si deve esse nutatu quì chì quandu u prucessu LogoQRCode Ùn avete bisognu, per esempiu, di stallà una "biblioteca di trasfurmazioni di l'imaghjini" - postu chì avemu digià implementatu un modu coerente è currettamente algoritmicu in a lingua Wolfram. trattamentu di l'imagine, chì pò esse immediatamente processatu da diverse funzioni di lingua gràfica:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Spergu chì cù u sustegnu cumunità maravigliosa è talentuosa, chì hè stata in crescita è espansione (basatu nantu à a Lingua Wolfram) in l'ultimi decennii. U repositoriu di funzioni Wolfram permetterà in u futuru previdibile di espansione significativamente a gamma di funzioni (forse potenzialmente significative, specializate in diversi campi di scienza è tecnulugia) dispunibili in a lingua. Cusì, diventa pussibule aduprà sia u cuntenutu di a lingua (e so funzioni integrate) sia principii di sviluppu, chì sò implementati basatu annantu à a lingua. (Si deve esse nutatu quì chì a Lingua Wolfram hà digià più di 30 anni di storia di sviluppu è crescita stabile).
E funzioni da u repositoriu ponu cuntene pezzi di codice chjuchi o grandi scritti in a lingua Wolfram. Per esempiu, questi puderanu esse chjamati API è servizii esterni o biblioteche esterne in altre lingue. A caratteristica unica di stu approcciu hè chì quandu si drill down to user-level functionality, ùn ci sarà micca inconsistenzi putenziali perchè l'approcciu hè custruitu nantu à a struttura coherente di a Lingua Wolfram - è ogni funzione funziona automaticamente currettamente - esattamente cum'è intendeva.
A struttura di cunchiglia è di prugrammazione di u Repositoriu di Funzioni di Wolfram hè pensata per chì tutti ponu cuntribuisce à a causa cumuna in u modu più simplice è convenientu per elli - in fattu, solu. cumpiendu u schedariu di testu di u bloccu note (cù estensione nb) WL. E funzioni automatiche integrate permettenu di verificà e funzioni novi aghjunte à u repositoriu per assicurà a so integrazione in a lingua. A nostra sucetà scommette nantu à a larga gamma di utilizatori chì ponu integrà e so funzioni in a lingua, piuttostu cà nantu à a grande cumplessità di e funzioni novi - è ancu s'ellu ci hè un prucessu di rivisione, ùn insistemu micca in qualcosa cum'è. analisi meticulosa di u disignu o standard stretti per a cumpleta è l'affidabilità di e novi funzioni di l'utilizatori, in uppusizione à a prova più rigurosa di e funzioni integrate in a lingua core chì impiegemu.

Ci hè parechje scambii è dettagli in questu approcciu, ma u nostru scopu hè di ottimisà u repositoriu di funzioni di Wolfram sia per l'esperienza di l'utilizatori sia per assicurà chì e novi funzioni di l'utilizatori cuntribuiscenu significativamente à u sviluppu di a lingua. Cume cresce, ùn aghju micca dubbitu chì avemu da inventà novi metudi per processà è validà e funzioni integrate in u repositoriu, micca menu per urganizà un gran numaru di funzioni è truvà quelli chì l'utilizatori necessitanu. Tuttavia, hè incuragisce chì a strada chì avemu sceltu hè un bonu principiu. I personalmente aghjunghje parechje funziunalità à a basa di dati originale. Parechji di elli sò basati nantu à u codice chì aghju sviluppatu personalmente per un bellu pezzu. È mi pigliò solu uni pochi di minuti per spinghjalli à u repository. Avà ch'elli sò in u repository, possu finarmenti - immediatamente è in ogni mumentu - aduprà sti funzioni cum'è necessariu, senza avè da preoccupari di circà i schedari, di scaricà pacchetti, etc.

Aumentà l'efficienza mentre riduce i costi

Ancu prima di l'Internet, ci era modi per sparte u codice Wolfram Language (u nostru primu prughjettu centralizatu maiò era MathSource, creatu per Mathematica in u 1991 basatu nantu à CD-ROM, etc.). Di sicuru, l'approcciu prupostu per l'implementazione basatu annantu à u repositoriu di funzione Wolfram hè un strumentu più putente è affidabile per implementà e attività sopra.

Per più di 30 anni, a nostra cumpagnia hà travagliatu diligentemente per mantene l'integrità di a struttura di a lingua Wolfram, è questu hè criticu per assicurà chì a lingua Wolfram diventa micca solu una lingua di prugrammazione, ma ancu una lingua di prugrammazione. linguaggio d'informatica a pieno titolo. È cusì, l'essenza di l'approcciu per implementà u repositoriu di funzione Wolfram hè di utilizà un approcciu unificatu per a prugrammazione è u sviluppu di e funzioni novi chì sò aghjuntu sequenzialmente è si mette in u quadru di a lingua in modu chì pò sviluppà è co-evoluzione.

Diversi prucessi di computazione sò in a struttura di implementazione di ogni funzione. Hè da esse nutatu quì chì hè necessariu chì a funzione hà un aspettu chjaru è uniforme è leghjibilità visuale per l'utilizatore. In questu cuntestu, e funzioni integrate di a Lingua Wolfram sò presentate cù più di 6000 esempi sequenziali di cumu prugrammà bè funzioni (questi sò i nostri video di prugrammazione in direttachì includenu centinaie d'ore di prucessu di creazione di prugrammi standard). Ciò chì questu approcciu in ultimamente rende u repositoriu di funzioni Wolfram capace di fà bè hè a natura strutturale di a Lingua Wolfram, cù u so gran numaru di biblioteche supplementari è variate chì sò digià integrate in a lingua. Per esempiu, s'è vo avete una funzione chì prucessi images, o matrici sparseo strutture molecolari, cum'è ancu dati geografichi o certi altri - a so rapprisintazioni simbolica coherente esiste digià in a lingua, è grazia à questu, a vostra funzione diventa subitu cumpatibile cù altre funzioni in a lingua.

A creazione di un repository chì funziona veramente bè hè un interessante travagliu di meta-programmazione. Per esempiu, un eccessu di restrizioni in u prugramma ùn permettenu micca ottene l'unificazione necessaria è l'universalità di l'algoritmu. Cum'è cù un numeru insufficiente di restrizioni funziunali, ùn sarete micca capaci di implementà una sequenza abbastanza curretta di l'esecuzione di l'algoritmu. Parechji esempi previ di implementazione di un cumprumissu di sti approcci, implementati da a nostra cumpagnia, anu travagliatu abbastanza stabile - questi sò: Prughjettu Tungsten Demostrazioni, lanciatu in u 2007 è avà funziona in linea in linea cù più di 12000 XNUMX demo interattivi cù l'utilizatori. IN basa di dati Wolfram ci sò più di 600 basa di dati ready-made chì pò ièssiri usatu in lu Wolfram Language, è Storage di rete neurale Wolfram hè rimbursatu cù novi rete neurale quasi ogni settimana (ci sò digià 118 di elli avà) è sò immediatamente cunnessi attraversu a funzione NetModel in a lingua Wolfram.

Tutti l'esempii di sopra anu una funzione fundamentale - l'uggetti è e funzioni cullati in u prugettu anu un altu gradu di strutturazione è distribuzione di prucessi. Di sicuru, u dettagliu di a struttura di ciò chì hè una demo o una rete neurale o qualcosa d'altru pò varià assai, ma a struttura fundamentale per ogni repository attuale ferma sempre a stessa. Allora chì hè a vostra opinione, caru utilizatore, di creà un tali repository chì aghjunghje estensioni à a lingua Wolfram? U Wolfram Language hè pensatu per esse estremamente flessibile, cusì pò esse allargatu è mudificatu in ogni modu. Questa circustanza hè estremamente impurtante per a capacità di creà rapidamente diversi prughjetti di software à grande scala in Wolfram Language. Ci vole à nutà quì chì, à l’aumentu di a flessibilità di a lingua, u costu di i prughjetti messi in opera in una tale lingua, inevitabbilmente, cresce. Questu hè duvuta à u fattu chì più l'utilizatore usa una tale lingua, più funziunalità dedicata chì riceve, ma ùn deve esse scurdate chì questu approcciu pò ancu avè lati negativi in ​​quantu à l'incapacità di assicurà a coherenza di i moduli di u prugramma.

Ci hè un prublema cumuni cù e biblioteche in linguaggi di prugrammazione tradiziunali - se aduprate una biblioteca, per esempiu, u codice hà da travaglià currettamente, ma se pruvate d'utilizà parechje biblioteche, ùn ci hè micca garanzia chì interagiscenu bè cù l'altri. . Inoltre, in i linguaggi di prugrammazione tradiziunali - à u cuntrariu di una lingua di informatica cumpleta - ùn ci hè micca manera di guarantiscia a presenza di rapprisentazione integrata coherente per qualsiasi funzioni o tippi di dati altru ch'è e so strutture basiche. Ma, in fattu, u prublema hè ancu più grande di ciò chì pare à u primu sguardu: se unu hè custruendu una verticale di funziunalità à grande scala, allora senza i costi enormi di prugrammazione di prughjettu centralizata chì mettemu in a lingua Wolfram, hè impussibile di fà. ottene a coerenza. Hè dunque impurtante chì tutti i moduli di u software travaglianu sempre inseme currettamente.

Allora l'idea daretu à u repositoriu di funzioni Wolfram hè di evità u prublema delineatu sopra solu aghjunghjendu estensioni à a lingua in pezzi relativamente chjuchi di codice per via di funzioni individuali chì sò più faciuli di sviluppà cum'è moduli coerenti. Dittu chistu, ci sò funzioni di prugrammazione chì ùn ponu micca esse fatte cunvene cù e funzioni individuali (è a nostra cumpagnia hà pensatu à liberà un algoritmu di prugrammazione ottimizatu in un futuru vicinu per aiutà à implementà pacchetti di software à grande scala). In ogni casu, basatu annantu à e funzioni digià integrate in a Lingua Wolfram, ci sò parechje pussibulità di prugrammazione chì sò implementate in basa di funzioni individuali. L'idea quì hè chì cù un pocu sforzu di prugrammazione hè pussibule di creà una quantità di funzioni novi è assai utili chì furnisceranu una coerenza sufficiente à u disignu, seranu bè coordinati cù l'altri, è ancu, in più di questu, Puderà facilmente è largamente utilizatu in a lingua in u futuru.

Stu approcciu hè, sicuru, un cumprumissu. Se un pacchettu più grande hè statu implementatu, un mondu sanu novu di funziunalità puderia esse imaginatu chì seria estremamente putente è utile. Se ci hè bisognu di ottene una nova funziunalità chì si mette in tuttu u restu, ma ùn site micca dispostu à passà assai sforzu in u sviluppu di u prugettu, questu, sfurtunatamenti, pò purtà à una riduzzione di u scopu di u vostru prughjettu. L'idea daretu à u repositoriu di funzioni di Wolfram hè di furnisce funziunalità à una parte di definizione di un prughjettu, questu approcciu aghjunghje una funziunalità putente mentre facilita a mantene una bona cunsistenza in un prughjettu di prugrammazione.

Aiutate à aghjunghje funzioni persunalizate à u repositariu di funzioni

U nostru squadra hà travagliatu duru per fà più faciule per l'utilizatori di cuntribuisce à e funzioni di repository Wolfram. Nantu à u desktop (dighjà in versione 12.0), Pudete simpricimenti passà per e tabulazioni di u menù principale in sequenza: File> New> RepositoryItem> Function Repository Item è uttene "Notebook di definizione" (Programmatically inside the workbench. Pudete ancu aduprà a funzione analogica - Crea Notebook["Risorse di funzione"]):

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Ci hè dui passi principali chì avete bisognu di fà: prima, scrive veramente u codice per a vostra funzione è, secondu, scrive a documentazione chì illustra cumu a vostra funzione deve travaglià.
Cliccate u buttone "Open Sample" in cima per vede un esempiu di ciò chì avete bisognu di fà:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Essenzialmente, cercate di creà qualcosa simili à una funzione integrata in u Wolfram Language. Eccettu chì pò fà qualcosa assai più specificu cà una funzione integrata. À u listessu tempu, l'aspettattivi in ​​quantu à a so cumpletezza è affidabilità seranu assai più bassi.
Avete bisognu di dà à a vostra funzione un nome chì seguita e linee di nome di funzioni di Wolfram Language. Inoltre, avete bisognu di sviluppà documentazioni per a vostra funzione, simili à e funzioni integrate di a lingua. Parlaraghju di questu in più dettagliu dopu. Per avà, basta à nutà chì in a fila di i buttoni in cima di u schedariu di notebook di definizione ci hè un buttone "Linee di stile", chì spiega ciò chì deve fà, è un buttone di Strumenta, chì furnisce strumenti per furmà a documentazione di a vostra funzione.
Quandu site sicuru chì tuttu hè cumpletu bè è vi sò pronti, cliccate nant'à u buttone "Verificà". Hè cumplettamente normale chì ùn avete micca capitu tutti i dettagli. Allora a funzione "Verificate" correrà automaticamente è fà assai cuntrolli di stile è di coerenza. Spessu, vi invià subitu à cunfirmà è accettà e currezzione (Per esempiu: "Questa linea deve finisce cù un colon", è vi invitarà à inserisce un colon). Calchì volta vi dumandarà di aghjunghje o cambià qualcosa sè stessu. Avemu da aghjunghje constantemente novi funziunalità à a funziunalità automatica di u buttone Verificate, ma in fondu u so scopu hè di assicurà chì tuttu ciò chì sottumette à u repositoriu di funzioni seguita da vicinu quante linee di stile pussibule.

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Cusì, dopu à eseguisce "Check", pudete aduprà "Preview". "Preview" crea una vista previa di a pagina di documentazione chì avete definitu per a vostra funzione. Pudete ancu creà una vista previa per un schedariu creatu in u vostru urdinatore o per un schedariu situatu in u almacenamentu in nuvola. Se per una certa ragione ùn site micca cuntentu di ciò chì vede in l'anteprima, simpricimenti torna è fate e correzioni necessarie, è dopu cliccate nantu à u buttone Preview di novu.
Avà site prontu à spinghja a vostra funzione in u repository. U buttone Deploy vi dà quattru opzioni:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

L'impurtante in questu passu hè chì pudete mandà a vostra funzione à u repositoriu di funzione Wolfram per ch'ella sia dispunibule per qualcunu. À u listessu tempu, pudete ancu mette a vostra funzione per un numeru limitatu di utilizatori. Per esempiu, pudete creà una funzione chì hè ospitu in u locu in u vostru urdinatore in modu chì hè dispunibule quandu utilizate quellu computer particulari. O pudete pubblicà in u vostru contu nuvola, cusì chì hè dispunibule per voi quandu site cunnessu à u nuvulu. Pudete ancu ospitu publicamente (spiegà) a funzione attraversu u vostru contu nuvola. Ùn serà micca in u repositoriu di funzioni cintrali di Wolfram, ma puderete dà à qualchissia un URL chì li permetterà di uttene a vostra funzione da u vostru contu. (In u futuru, supporteremu ancu i repositori cintrali in tutta a nostra cumpagnia.)

Allora dicemu chì vulete veramente sottumette a vostra funzione à a basa di cunniscenza di a funzione Wolfram. Per fà questu, cliccate nantu à u buttone "Invia" à u repository. Allora chì succede in u mumentu? A vostra applicazione hè immediatamente messa in fila per a revisione è l'appruvazioni da u nostru squadra dedicata di curatori.

Quandu a vostra applicazione avanza in u prucessu di appruvazioni (chì generalmente dura parechji ghjorni), riceverete cumunicazioni in quantu à u so statutu è possibbilmente suggerimenti per l'usu futuru. Ma una volta chì a vostra funzione hè appruvata, serà publicata immediatamente à u Repositoriu di Funzioni di Wolfram è serà dispunibule per qualcunu. (È questu apparirà in nutizie riassuntu di novi funziunalità ecc.)

Chì duverebbe esse in u almacenamentu?

Si deve esse nutatu chì a nostra cumpagnia hà standard assai altu di cumpleta, affidabilità è a qualità generale, è di e funzioni 6000+ chì avemu digià custruitu in a lingua Wolfram in l'ultimi anni 30+, tutti rispondenu à i requisiti sopra. L'obiettivu di u Repositoriu di Funzioni Wolfram hè di utilizà tutte e strutture è e funziunalità chì esiste digià in a Lingua Wolfram per aghjunghje tante funzioni più ligeri (vale à dì, funzioni di rendiment più altu) pussibule.

Di sicuru, e funzioni in u repositoriu di funzioni Wolfram devenu cunfurmà cù i principii di cuncepimentu di a Lingua Wolfram - in modu chì ponu interazzione cumplettamente cù altre funzioni è l'aspettattivi di l'utilizatori di cumu a funzione deve travaglià bè. Tuttavia, e funzioni ùn anu micca esse di uguali completezza o affidabilità.

In e funzioni integrate di a lingua Wolfram, travagliemu duramente per fà e funzioni di prugrammazione cum'è generale pussibule. Dittu chistu, quandu site in u repositoriu di funzione Wolfram, ùn ci hè nunda di male à avè una funzione in questu chì simpricimenti gestisce un casu assai specificu ma utile. Per esempiu, a funzione MandateMailFromNotebook ponu riceve i schedari in un furmatu specificu è creà mail in un modu specificu. Diagramma poligonale crea carte cù solu certi culori è etichettatura, etc.

Un altru puntu ligatu à e funzioni integrate hè chì a nostra cumpagnia face ogni sforzu per trattà tutti i casi atipichi, per trattà currettamente l'input incorrect, etc. In un repository di funzioni, hè cumplettamente normale per esse una funzione speciale chì tratta i casi principali di risolve un prublema è ignora tutti l'altri.

U puntu ovviu hè chì hè megliu avè funzioni chì facenu più è fà megliu, ma l'ottimisazione per un repository di funzioni - in uppusizione à e funzioni integrate di a lingua Wolfram - duverebbe avè più funzioni bundled cù più funzioni piuttostu cà sfondate in. i prucessi di implementazione di ogni funzione specifica.

Avà fighjemu un esempiu di teste di funzioni in un repository. L'aspettattivi di cunsistenza per tali funzioni sò naturalmente assai più bassi cà per e funzioni di lingua integrata. Questu hè soprattuttu veru in i casi induve e funzioni dependenu di risorse esterne, cum'è l'API, hè impurtante di cunducerà constantemente teste coerenti, chì succede automaticamente in l'algoritmi di verificazione. In u schedariu nb, pudete specificà esplicitamente definizioni (in a sezione d'Informazioni Addiziunali) è specificà quante teste definite da stringhe di input è output o oggetti di caratteri sanu di tipu. Test di verificazione, quant'è vo vede bè. Inoltre, u sistema hè sempre à pruvà à trasfurmà l'esempii di documentazione chì furnisce in un prucessu di verificazione (è qualchì volta questu pò esse assai risorsa intensiva, per esempiu, per una funzione chì u risultatu dipende di numeri aleatorii o l'ora di u ghjornu).

In u risultatu, u repositariu di funzioni avarà una quantità di cumplessità di implementazione. Qualchidunu seranu solu una sola linea di codice, altri pò esse implicati millaie o decine di millaie di linii, prubabilmente utilizendu parechje funzioni d'aiutu. Quandu vale a pena aghjunghje una funzione chì richiede pocu codice per definisce? In fondu, se per una funzione ci hè bonu nomu mnemonicu, chì l'utilizatori capiscenu facilmente s'ellu l'anu vistu in un pezzu di codice, allora pò esse digià aghjuntu. Altrimenti, hè prubabilmente megliu solu appiccicà u codice à u vostru prugramma ogni volta chì avete bisognu di usà.

U scopu principale di un repositoriu di funzioni (cum'è u so nome suggerisce) hè di introduci novi funziunalità in a lingua. Sè vo vulete aghjunghje novi dati o entità novi, usu Repositoriu di dati Wolfram. Ma chì si vulete intruduce novi tipi d'uggetti per i vostri calculi?

Ci hè in realtà duie manere. Pudete vulete intruduce un novu tipu d'ughjettu chì serà utilizatu in novi funzioni in u repositoriu di funzioni. È in questu casu, pudete sempre scrivite a so rapprisintazioni simbolica è l'utilizate quandu inserite o emettenu funzioni in un repository di funzioni.

Ma chì sè vo vulete rapprisintà un ughjettu è poi definisce, attraversu funzioni esistenti in u Wolfram Language, chì vulete travaglià cun ellu? U Wolfram Language hà sempre avutu un mecanismu ligeru per questu, chjamatu UpValues. Cù alcune restrizioni (in particulare per e funzioni chì ùn pò micca valutà i so argumenti), un repository di funzioni vi permette di rapprisintà solu una funzione è definisce i valori per ella. (Per elevà l'aspettativa di a coerenza quandu crea un novu disignu maiò chì hè integratu cumplettamente in tutta a lingua di Wolfram hè in generale una prucedura assai impurtante chì ùn pò micca esse ottenuta solu per aumentà u costu di u prugettu è hè qualcosa chì a nostra cumpagnia faci cum'è parte di prughjetti. per u sviluppu à longu andà di a lingua, stu compitu ùn hè micca un scopu chì si mette in parte di u sviluppu di u repository).

Allora, chì puderia esse in u codice di funzione in un repositoriu di funzioni? Tuttu custruitu in a Lingua Wolfram, di sicuru (almenu s'ellu ùn rapprisenta micca minacce di sicurità è u funziunamentu di u prugramma stessu, cum'è un ambiente informaticu) è ancu qualsiasi funzione da u repositariu di funzioni. Tuttavia, ci sò altre funziunalità: una funzione in un repository di funzioni pò chjamà una API, o in Wolfram Cloud, o da una altra fonte. Di sicuru, ci sò parechji risichi assuciati à questu. A causa di u fattu chì ùn ci hè micca guarantisci chì l'API ùn cambierà micca, è a funzione in u magazinu di funzioni cesserà di travaglià. Per aiutà à identificà prublemi cum'è questu, ci hè una nota nantu à a pagina di documentazione (in a sezione Requisiti) per qualsiasi funzione chì si basa in più di una funziunalità Wolfram Language integrata. (Di sicuru, quandu si tratta di dati veri, pò esse prublemi ancu cù sta funziunalità - perchè e dati di u mondu reale cambianu constantemente, è qualchì volta ancu e so definizione è a struttura cambianu.)

Tuttu u codice per u repository di funzioni Wolfram deve esse scrittu in Wolfram? Certamente, u codice in l'API esterna ùn deve esse scrittu in a lingua Wolfram, chì ùn face mancu u codice di lingua. In fatti, se truvate una funzione in quasi ogni lingua esterna o biblioteca, pudete creà un wrapper chì vi permette di usà in u repositoriu di funzione Wolfram. (Di solitu duvete aduprà e funzioni integrate per questu Evaluazione Esterna o Funzione esterna in codice di lingua Wolfram.)

Allora chì hè u puntu di fà questu? Essenzialmente, questu permette di utilizà tuttu u sistema integratu di Wolfram Language è u so tutale unificatu di capacità di software. Se ottene l'implementazione di basa da una biblioteca o una lingua esterna, pudete aduprà a ricca struttura simbolica di Wolfram Language per creà una funzione di primu livellu cunvene chì permette à l'utilizatori di utilizà facilmente qualsiasi funziunalità digià implementata. À u minimu, questu deve esse fattibile in un mondu ideale induve tutti i blocchi di custruzzione di e librerie di carica ecc. (Deve esse nutatu chì in a pratica pò esse prublemi cù stabilisce lingue esterne un sistema informaticu specificu, è u almacenamentu in nuvola ponu esse prublemi di sicurezza supplementari).

A propositu, quandu avete prima guardatu à e biblioteche esterne tipiche, spessu parenu troppu cumplessi per esse cuparti solu in uni pochi di funzioni, ma in parechji casi, assai di a cumplessità vene da a creazione di l'infrastruttura necessaria per a biblioteca è di tutte e funzioni per sustene lu. Tuttavia, quandu si usa u Wolfram Language, l'infrastruttura hè tipicamente digià integrata in i pacchetti, è cusì ùn ci hè bisognu di espose tutte queste funzioni di supportu in dettagliu, ma creanu solu funzioni per e funzioni specifiche di l'applicazione "più" in a biblioteca. .

"Ecosistema" di a basa di cunniscenza

Se avete scrittu funzioni chì utilizate regularmente, mandate à u Repositoriu di Funzioni Wolfram! Se qualcosa di più ùn esce da questu (sviluppu di a lingua), allora ancu allora serà assai più còmuda per voi di utilizà e funzioni per usu persunale. In ogni casu, hè logicu per suppone chì, se aduprate e funzioni regularmente, forse l'altri utilizatori li trovanu ancu utili.

Naturalmente, pudete truvà in una situazione induve ùn pudete - o ùn vulete micca - di sparte e vostre funzioni o in casu d'accessu à risorse d'infurmazione privata. Ancu in tali casi, pudete simpricimenti implementà e funzioni in u vostru contu nuvola, specificà i diritti accessu à elli. (Se a vostra urganizazione hà Wolfram Enterprise cloud privatu, tandu serà prestu capace di accoglie u so propiu repositoriu di funziunalità privatu, chì pò esse amministratu da l'internu di a vostra urganizazione è stabilisce s'ellu deve furzà o micca a vista per esse vista da l'utilizatori di terzu.)

E funzioni chì sottumettenu à u repository di funzioni Wolfram ùn anu micca esse perfettu; anu solu esse utile. Questu hè un pocu cum'è a sezione "Errori" in a documentazione Unix classica - in a "Sezione Definizioni" ci hè una sezione "Noti di l'autore" induve pudete descriverà limitazioni, prublemi, etc. chì sapete digià di a vostra funzione. Inoltre, quandu invià a vostra funzione à u repository, pudete aghjunghje note di sottumissione chì saranu leghjite da una squadra dedicata di curatori.

Quandu una funzione hè publicata, a so pagina hà sempre dui ligami in u fondu: "Mandate un missaghju nantu à sta funzione"E"Discute in a cumunità Wolfram" Sè vo site attache una nota (per esempiu, dimmi circa bugs), pudete cuntrollà a casella chì dice chì vulete chì u vostru messagiu è l'infurmazioni di cuntattu per esse spartutu cù l'autore di a funzione.

Calchì volta vulete solu aduprà funzioni da u repository di funzione Wolfram, cum'è funzioni integrate, senza fighjà u so codice. Tuttavia, sè vo vulete piglià un ochju à l'internu, ci hè sempre un buttone Notepad in cima. Cliccate nantu à ellu è uttene a vostra propria copia di u librettu di definizione originale chì hè statu sottumessu à u repositoriu di funzioni. Calchì volta pudete solu aduprà cum'è un esempiu per i vostri bisogni. À u listessu tempu, pudete ancu sviluppà a vostra propria mudificazione di sta funzione. Puderete vulete postà queste funzioni chì avete trovu da u repository in u vostru urdinatore o in u vostru contu di almacenamentu in nuvola di afide, forse vulete mandà à a basa di a cunniscenza di a funzione, forsi cum'è una versione mejorata è ampliata di a funzione originale.

In u futuru, pensamu di supportà a furchetta in stile Git per i repositori di funzioni, ma per avà simu pruvatu à mantene a simplicità, è avemu sempre solu una versione accettata di ogni funzione integrata in a lingua. Più spessu chè micca (salvo chì i sviluppatori rinunzià à mantene e funziunalità chì anu sviluppatu è rispundenu à i sottumissioni di l'utilizatori), l'autore originale di a funzione piglia u cuntrollu di l'aghjurnamenti è sottumette e versioni novi, chì sò poi rivisionate è, se passanu u prucessu di rivisione. , publicatu in lingua.

Cunsideremu a quistione di cumu funziona "versione" di e funzioni sviluppate. Avà, quandu aduprate una funzione da u repositoriu di funzioni, a so definizione serà almacenata in permanenza in u vostru urdinatore (o in u vostru contu nuvola se aduprate u nuvulu). Se una nova versione di una funzione hè dispunibule, a prossima volta chì l'utilizate, riceverete un missaghju chì vi informa di questu. È se vulete aghjurnà a funzione à una nova versione, pudete fà cù u cumandimu Actualizazione di risorse. (U "function blob" in realtà almacena più infurmazione di versione, è avemu pensatu à rende questu più accessibile à i nostri utilizatori in u futuru).

Una di e belli cose nantu à u Repositoriu di Funzioni Wolfram hè chì ogni prugramma di lingua Wolfram, in ogni locu pò aduprà funzioni da ellu. Se un prugramma apparisce in un bloccu note, hè spessu cunvenutu di furmà e funzioni di repository cum'è funzioni di "funzione binariu d'ughjettu" facili à leghje (forse cù una versione adattata).

Pudete sempre accede à qualsiasi funzione in u repositoriu di funzioni usendu testu Funzione di risorsa[...]. È questu hè assai còmuda si scrive u codice o script direttamente per u Wolfram Engine, per esempiu, cù utilizendu un editore di codice IDE o testu (Deve esse nutatu soprattuttu chì u repositariu di funzioni hè cumplettamente cumpatibile cù Wolfram Engine gratuitu per i sviluppatori).

Cumu viaghja?

Dentru e funzioni in u repository Wolfram, questu hè pussibule utilizendu esattamente u listessu sistemi di risorse basi, cum'è in tutti i nostri altri repository esistenti (magazine di dati, Repository Neural Net, cullizzioni di prughjetti demo etc.), cum'è tutte l'altri risorse di u sistema Wolfram, Funzione di risorsa in ultimamente basatu nantu à a funzione ResourceObject.

Cunsigliate Funzione di risorsa:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Dentru pudete vede qualchì infurmazione cù a funzione nfurmazzioni:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Cumu funziona a creazione di una funzione di risorsa? U più simplice hè un casu puramente lucale. Eccu un esempiu chì piglia una funzione (in questu casu solu una funzione pura) è a definisce cum'è una funzione di risorsa per una sessione di prugramma:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Quandu avete fattu a definizione, pudete aduprà a funzione di risorsa:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

Nota chì ci hè una icona nera in questa funzione blob Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram. Questu significa chì a funzione BLOB si riferisce à a funzione di risorse in memoria definita per a sessione attuale. Una funzione di risorsa chì hè almacenata in permanenza in u vostru urdinatore o in u vostru contu nuvola hà una icona grisa Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram. È ci hè un icona aranciu per una funzione ufficiale di risorse in u Repositoriu di Funzioni di Wolfram Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram.

Allora chì succede quandu utilizate u menù Expand in u Notebook di Definizione? Prima, piglia tutte e definizione in u bloccu note è da elli crea un simbolicu ResourceObject). (È sè vo aduprate un IDE o un prugramma basatu in testu, pudete ancu creà esplicitamente ResourceObject)

A implementazione locale di una funzione da un repository in u vostru urdinatore hè realizatu cù u cumandimu LocalCache per un oggettu di risorsa per salvà cum'è Local Object nant'à u vostru sistema di schedari. A implementazione in un contu nuvola hè fatta cù u cumandimu CloudDeploy per un oggettu di risorsa, è una implementazione di nuvola publica hè CloudPublish. In tutti i casi Resource Register ancu usatu per registrà u nome di a funzione di risorsa, cusì Funzione di risorsa["nome"] travaglià.

Se cliccate nantu à u buttone Invia per un Repositoriu di Funzioni, ciò chì succede sottu Resource Submit chjamatu nantu à un oggettu di risorsa. (È sè vo aduprate una interfaccia di input di testu, pudete ancu chjamà Resource Submit direttamente.)

Per automaticamente, i sottumissioni sò fatte sottu u nome assuciatu cù u vostru ID Wolfram. Ma s'è vo invià una dumanda in nome di una squadra di sviluppu o urganizazione, pudete stabilisce un ID di editore separatu è invece l'utilizanu cum'è u nome per interagisce cù i vostri punti di vista.

Dopu avè mandatu qualsiasi di e vostre funzioni à a basa di cunniscenza di a funzione, serà in fila per a revisione. Se riceve cumenti in risposta, sò generalmente in forma di un schedariu di testu cù "cellule di cumentu" supplementari aghjuntu. Pudete sempre verificà u statutu di a vostra applicazione visitendu Portale di membri di u sistema di risorse. Ma una volta chì a vostra funzione hè appruvata, sarete avvisatu (via email) è a vostra funzione serà publicata in u repository di funzioni Wolfram.

Certi suttilità à u travagliu

À u primu sguardu, pò sembrà chì pudete solu piglià un taccuino di definizione è mettelu verbatim in un repository di funzioni, in ogni modu, ci sò in realtà assai suttilità implicate - è a gestione di elli richiede di fà qualchì meta-programmazione abbastanza cumplessa, gestione di trasfurmazioni simboliche. cum'è u codice chì definisce a funzione, è u Notepad stessu hè definitu. A maiò parte di questu succede internamente, daretu à i sceni, ma pò avè qualchì implicazione chì vale a pena capisce se avete da cuntribuisce à a basa di cunniscenza di e funzioni.

Prima sutilezza immediata: Quandu compie u Notebook di Definizione, pudete simpricimenti riferite à a vostra funzione in ogni locu usendu un nome cum'è MyFunction, chì s'assumiglia à un nome regulare per una funzione in u Wolfram Language, ma per a documentazione di u repositariu di funzioni questu hè rimpiazzatu Funzione di risorsa["A mo funzione"] hè ciò chì l'utilizatori anu daveru aduprà quandu travaglianu cù a funzione.

A seconda sutilezza: quandu crea una funzione di risorsa da u Notebook di Definizione, tutte e dipendenze implicate in a definizione di a funzione deve esse catturata è esplicitamente incluse. In ogni casu, per assicurà chì e definizioni fermanu modulari, avete bisognu di mette tuttu in un unicu namespace. (Ben intesu, funzioni chì facenu tuttu, sò in u repositoriu di funzioni.)

Di genere, ùn vi vede mai alcuna traccia di u codice utilizatu per cunfigurà stu spaziu di nomi. Ma s'è per qualchì mutivu chjamate un simbulu sottu-eseguitu in a vostra funzione, allora vi vede chì stu simbulu hè in u cuntestu internu di a funzione. Tuttavia, quandu si tratta di u Notepad di Definizione, almenu u simbulu currispundente à a funzione stessu hè regolabile per a megliu visualizazione cum'è un BLOB funziunale piuttostu cà un caratteru crudu in u cuntestu internu.

U repositariu di funzioni hè per definisce e funzioni novi. E queste funzioni ponu avè opzioni. Spessu sti paràmetri (per esempiu, Appruntera o ImageSize) puderà esse utilizatu per e funzioni integrate, è ancu per quelli per i quali esistenu dighjà simboli integrati. Ma qualchì volta una nova funzione pò esse bisognu di novi opzioni. Per mantene a modularità, questi paràmetri anu da esse simboli definiti in un cuntestu internu unicu (o qualcosa cum'è funzioni di risorse intere, vale à dì elli stessi). Per simplicità, u repositoriu di funzioni vi permette di definisce novi opzioni in definizioni di stringa. È per a cunvenzione di l'utilizatori, queste definizioni (assume chì anu utilizatu OptionValue и Opzioni Pattern) sò ancu processati in modu chì quandu si usanu funzioni, i paràmetri ponu esse specificati micca solu cum'è strings, ma ancu cum'è simboli globale cù i stessi nomi.

A maiò parte di e funzioni facenu solu ciò chì deve fà ogni volta ch'elli sò chjamati, ma alcune funzioni anu da esse inizializzate prima di pudè eseguisce in una sessione particulare - è per risolve stu prublema, ci hè una sezione "Inizializazione" in a sezione Definizione.

Funzioni da un repositoriu ponu aduprà altre funzioni chì sò digià in u repositoriu per stabilisce definizioni per un repositoriu di funzioni chì includenu duie (o più) funzioni chì si riferite l'una à l'altra, duvete implementà in a vostra sessione di prugramma per pudè; riferimentu cum'è nantu à elli Funzione di risorsa["nome"], Allora pudete creà e cumminazzioni di sti funzioni chì avete bisognu, esempi (ùn aghju micca capitu) è aghjunghje una nova funzione à u repositoriu basatu annantu à quelli chì sò digià publicati prima. (o digià o prima - e duie parolle sò goffa)

Perspettivi di sviluppu. Chì duverebbe succede quandu u repositoriu diventa veramente grande?

Oghje avemu appena lanciatu u Repository di Funzioni di Wolfram, ma cù u tempu aspittemu chì a so dimensione è e so funziunalità puderanu aumentà dramaticamente, è cum'è cresce in u sviluppu, ci saranu diversi prublemi chì avemu digià anticipatu.

U primu prublema riguarda i nomi di funzioni è a so unicità. U repositoriu di funzioni hè cuncepitu in tale manera chì, cum'è e funzioni integrate in u Wolfram Language, pudete riferite ogni funzione determinata solu per specificà u so nome. Ma questu inevitabbilmente significa chì i nomi di funzioni devenu esse globalmente unichi in u repositoriu, cusì chì, per esempiu, ci pò esse solu unu. Funzione di risorsa["A mo funzione preferita"].

Questu pò sembrà un grande prublema in prima, ma vale a pena capisce chì hè basicamente u stessu prublema cum'è per e cose cum'è domini internet o manichi di e social media. È u fattu hè chì u sistema hà solu bisognu di avè un registratu - è questu hè unu di i roli chì a nostra cumpagnia farà per a basa di cunniscenza di a funzione Wolfram. (Per versioni privati ​​​​di un repository, i so registratori ponu esse amministratori.) Di sicuru, un duminiu Internet pò esse registratu senza avè nunda nantu à questu, ma in un repository di funzione, un nome di funzione pò esse registratu solu s'ellu ci hè una definizione attuale di a funzione.

Una parte di u nostru rolu in a gestione di a basa di cunniscenza di a funzione Wolfram hè di assicurà chì u nome sceltu per una funzione hè logicu datu a definizione di a funzione è chì seguita e cunvenzioni di nome di Wolfram Language. Avemu più di 30 anni di sperienza in nome di funzioni integrate in a Lingua Wolfram, è a nostra squadra di curatori (curatori?) Purtarà quella sperienza ancu in u repository di funzioni. Di sicuru, ci sò sempre eccezzioni. Per esempiu, pò parè preferibile avè un nome curtu per una certa funzione, ma hè megliu "difesa" cù un nome più longu è più specificu, perchè avete menu prubabile di scuntrà qualcunu chì vulete fà un nome di funzione simili in u futuru. .

(Si deve esse nutatu quì chì solu aghjunghje qualchì tag di membru per disambiguate e funzioni ùn avarà micca l'effettu previstu. Perchè, salvu chì ùn insisti à assignà sempre una tag, avete bisognu di definisce una tag predeterminata per ogni funzione, è ancu attribuisce tag d'autore. , chì di novu averia bisognu di coordinazione globale.)

Cume a basa di cunniscenza di e funzioni di Wolfram cresce, unu di i prublemi chì prubabilmente sorgerà hè a scoperta di funzioni, per quale u sistema furnisce funzione di ricerca (è i schedarii di definizione ponu include parole chjave, etc.). Per e funzioni integrate in u Wolfram Language, ci sò ogni tipu di riferimenti incruciati in a documentazione per aiutà à "publicità" e funzioni. E funzioni in un repositoriu di funzioni ponu riferite e funzioni integrate. Ma chì ne hè di l'inversu ? Per fà questu, andemu à spirimintà cù diversi disinni per espose e funzioni di repository in pagine di documentazione per e funzioni integrate.

Per e funzioni integrate in u Wolfram Language ci hè un cusì chjamatu stratu di rilevazione furnitu da rete di "pagine d'aiutu", chì furnisce listi urganizati di funzioni ligati à spazii specifichi. Hè sempre difficiuli di equilibrà bè e pagine man, è cum'è a lingua Wolfram cresce, e pagine man sò spessu bisognu à esse riorganizzate cumpletamente. Hè abbastanza faciule di mette e funzioni da un repositoriu in categurie larghe, è ancu di scumpressà queste categurie in modu coerente, ma hè assai più preziosu per avè pagine di riferimentu di lingua organizzate bè. Ùn hè ancu chjaru cumu megliu per creà elli per tutta a basa di cunniscenza di a funzione. Per esempiu, Crea una galleria d'oggetti di risorsa in u repositoriu di funzioni, qualcunu pò pubblicà una pagina web chì cuntene i so "scelti" da u repository:

Wolfram Function Repository: piattaforma d'accessu apertu per l'estensioni di lingua Wolfram

U repositoriu di funzione Wolfram hè cunfiguratu cum'è un repositoriu di funzione persistente, induve ogni funzione in questu sempre travaglià. Di sicuru, e novi versioni di e funzioni ponu esse dispunibili, è aspittemu chì alcune funzioni diventeranu di sicuru obsolete cù u tempu. E funzioni funziunaranu s'ellu sò usati in i prugrammi, ma e so pagine di documentazione liganu à e funzioni novi è più avanzate.

U Repositoriu di Funzioni Wolfram hè pensatu per aiutà à scopre rapidamente e funzioni novi è amparà novi modi per aduprà a lingua Wolfram. Hè cun grande ottimisimu chì una parte di ciò chì hè stata esplorata in u repositoriu di funzioni averà eventualmente sensu per diventà parti integrate di u core Wolfram Language. In l'ultima decada avemu avutu un set simili funziunalità chì sò stati urigginariamenti introduttu in Wolfram | Alfa. È una di e lezioni amparate da sta sperienza hè chì per ottene i normi di qualità è coerenza chì avemu focu annantu à tuttu ciò chì hè custruitu in a lingua Wolfram richiede assai travagliu, chì hè spessu più difficiule di u sforzu iniziale di implementazione di l'idea. Ancu cusì, una funzione in a basa di cunniscenza di a funzione pò serve cum'è una prova di cuncettu assai utile per una funzione futura chì pò esse eventualmente integrata in a lingua Wolfram.

A più impurtante quì hè chì una funzione in un repositoriu di funzioni hè qualcosa chì hè dispunibule per ogni utilizatore per aduprà avà. Hè pussibule chì una funzione di lingua nativa puderia esse assai megliu è più performante, ma un repositoriu di funziunalità permette à l'utilizatori di avè accessu à tutte e funzioni novi subitu. E, più impurtante, stu cuncettu permette à ognunu di aghjunghje tutte e funzioni novi chì volenu.

Nanzu à a storia di a lingua Wolfram, sta idea ùn averia micca travagliatu cum'è, ma in questa tappa ci hè tantu sforzu misu in a lingua, è una cunniscenza cusì prufonda di i principii di cuncepimentu di lingua, chì avà pare assai assai. pussibile per una grande cumunità d'utilizatori per aghjunghje funziunalità chì mantenenu a coerenza di u disignu per rende utili à una larga gamma di utilizatori.

Ci hè un spiritu incredibile di talentu (?) in a cumunità d'utilizatori di Wolfram Language. (Di sicuru, sta cumunità include assai esperti di R & D di punta in una varietà di campi.) Spergu chì u Repositoriu di Funzioni Wolfram furnisce una piattaforma efficace per sbloccà è sparghje stu spiritu di talentu. Solu inseme pudemu creà qualcosa chì espansione significativamente l'area à quale u paradigma di l'informatica in lingua Wolfram pò esse applicatu.

In più di 30 anni, avemu fattu una longa strada cù a lingua Wolfram. Avà inseme, andemu ancu più luntanu. Incuragisce fermamente tutti l'utilizatori rispettati di a lingua Wolfram in u mondu à aduprà u repositoriu funziunale cum'è una piattaforma per questu, è ancu u novu prughjettu di u software cum'è u Free Wolfram Engine for Developers.

Source: www.habr.com

Add a comment