DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Bonjour, Habr ! Je vous prĂ©sente la traduction de l'article de Stephen Wolfram « Le RĂ©fĂ©rentiel de Fonctions Wolfram : Lancement d'une Plateforme Ouverte pour Étendre le Langage Wolfram ».

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Les prémisses de la richesse du langage Wolfram

Aujourd'hui, nous sommes au seuil de grandes réalisations avec le langage de programmation Wolfram Language. Il y a à peine trois semaines, nous avons lancé un moteur Wolfram gratuit pour les développeurs, afin d'aider nos utilisateurs à intégrer le langage Wolfram Language dans leurs projets logiciels à grande échelle. Aujourd'hui, nous lançons le référentiel de fonctions Wolfram, pour fournir une plateforme coordonnée pour les fonctions conçues pour étendre le langage Wolfram, et nous ouvrons également le référentiel de fonctions à tous ceux qui peuvent contribuer au développement de notre produit logiciel.

Le référentiel de fonctions (Function Repository) Wolfram est rendu possible grùce aux spécificités uniques du Wolfram Language, non seulement en tant que langage de programmation, mais aussi en tant que langage de calcul complet. Dans les langages de programmation traditionnels, l'ajout de nouvelles fonctionnalités significatives implique généralement la création de bibliothÚques supplémentaires entiÚres, qui peuvent fonctionner ou non ensemble. Cependant, dans le Wolfram Language , tant de fonctionnalités sont déjà intégrées directement dans le langage, qu'il est possible d'élargir considérablement sa fonctionnalité simplement en ajoutant de nouvelles fonctions qui s'intÚgrent immédiatement dans la structure globale du langage.

Par exemple, le référentiel de fonctions Wolfram contient déjà 532 nouvelles fonctions organisées en 26 catégories thématiques :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Tout comme plus de 6000 fonctions standard, intégrées dans le langage Wolfram, chaque fonction du référentiel a une page de documentation avec des descriptions détaillées et des exemples d'utilisation :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Pour accĂ©der Ă  la page, copiez l'objet ci-dessus (BLOB fonctionnel), collez-le dans la ligne d'entrĂ©e et lancez ensuite la fonction – elle est dĂ©jĂ  intĂ©grĂ©e dans le langage Wolfram et prise en charge par dĂ©faut, Ă  partir de la version 12.0:

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Il convient de noter qu'en ce qui concerne le traitement LogoQRCode , vous n'avez pas besoin, par exemple, de configurer une « bibliothĂšque de traitement d'images » — car dans le langage Wolfram Language, nous avons dĂ©jĂ  mis en place un moyen sĂ©quentiel et soigneusement algorithmique de traitement d'images, qui peuvent ĂȘtre rapidement traitĂ©es par diverses fonctions graphiques du langage :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

J'espÚre qu'avec le soutien de la merveilleuse et talentueuse communauté, qui croßt et s'élargit (sur la base du langage Wolfram) depuis plusieurs décennies. Le dépÎt de fonctions Wolfram permettra dans un avenir proche d'élargir considérablement la gamme de (potentiellement significatives, spécialisées dans divers domaines des sciences et techniques) fonctions disponibles dans le langage. Cela crée la possibilité d'utiliser à la fois le contenu du langage (ses fonctions intégrées) et les principes de développement, qui sont réalisés sur la base du langage. (Il convient de noter ici que le langage Wolfram a déjà plus de 30 ans d'histoire de développement et de croissance stable.).
À l'intĂ©rieur des fonctions du dĂ©pĂŽt, il peut y avoir de petits ou de suffisamment grands extraits de code Ă©crits en langage Wolfram. Par exemple, cela peut ĂȘtre des appels Ă  des API et services externes ou des bibliothĂšques externes dans d'autres langages.. Une caractĂ©ristique unique de cette approche est que, lorsque vous accĂ©dez Ă  la fonctionnalitĂ© au niveau de l'utilisateur, il n'y aura pas d'incohĂ©rences possibles car cette approche est basĂ©e sur une structure cohĂ©rente du langage Wolfram — et chaque fonction fonctionnera automatiquement correctement — exactement comme elle le doit.
L'interface et la structure logicielle du dĂ©pĂŽt de fonctions Wolfram sont conçues de maniĂšre Ă  ce que chacun puisse contribuer Ă  l'effort commun de maniĂšre simple et pratique — en gros, en remplissant simplement un fichier texte de bloc-notes (avec l'extension nb) WL.. Les fonctions automatiques intĂ©grĂ©es permettent de vĂ©rifier les nouvelles fonctions ajoutĂ©es au dĂ©pĂŽt pour garantir leur intĂ©gration dans le langage. Notre entreprise vise un large Ă©ventail d'utilisateurs qui peuvent intĂ©grer leurs fonctions dans le langage, et non la complexitĂ© des nouvelles fonctions — et bien que nous ayons un processus de vĂ©rification en place, nous ne faisons pas pression pour quelque chose comme une analyse minutieuse de la structure ou des normes rigoureuses de complĂ©tude et de fiabilitĂ© pour les nouvelles fonctions des utilisateurs, contrairement aux vĂ©rifications plus strictes des fonctions intĂ©grĂ©es au noyau du langage que nous appliquons.

Dans cette approche, il existe de nombreux compromis et dĂ©tails, mais notre objectif est d'optimiser le rĂ©pertoire des fonctions Wolfram tant pour le confort des utilisateurs que pour que les nouvelles fonctions apportent une contribution significative Ă  l'Ă©volution du langage. À mesure que nous grandissons, je ne doute pas que nous devrons inventer de nouvelles mĂ©thodes de traitement et de validation des fonctions intĂ©grĂ©es dans le rĂ©pertoire, et ce n'est pas le moindre des aspects que d'organiser un grand nombre de fonctions et de rechercher celles dont les utilisateurs ont besoin. Cependant, il est encourageant de constater que le chemin que nous avons choisi est un bon dĂ©but. J'ai personnellement ajoutĂ© plusieurs fonctions Ă  la base initiale. Beaucoup d'entre elles sont basĂ©es sur du code que j'ai personnellement dĂ©veloppĂ© pendant un temps assez long. Il m'a fallu seulement quelques minutes pour les transfĂ©rer dans le rĂ©pertoire. Maintenant qu'elles sont dans le rĂ©pertoire, je peux enfin – immĂ©diatement et Ă  tout moment – utiliser ces fonctions selon mes besoins, sans me soucier de la recherche de fichiers, du tĂ©lĂ©chargement de paquets, etc.

Augmenter l'efficacité tout en réduisant les coûts

Bien avant l'émergence d'Internet, il existait des moyens d'échanger du code Wolfram Language (notre premier grand projet centralisé était MathSource, créé pour Mathematica en 1991 sur CD-ROM, etc.). Il est certain que l'approche proposée à travers le répertoire des fonctions Wolfram est un moyen plus puissant et fiable de réaliser les tùches susmentionnées.

Depuis plus de 30 ans, notre entreprise travaille dur pour maintenir l'intĂ©gritĂ© de la structure du langage Wolfram, et cela est trĂšs important pour que le langage Wolfram devienne non seulement un langage de programmation, mais aussi un vĂ©ritable langage de calcul. Ainsi, l'essence de l'approche de mise en Ɠuvre du rĂ©pertoire des fonctions Wolfram consiste Ă  utiliser une approche unifiĂ©e pour la programmation et le dĂ©veloppement de nouvelles fonctions qui sont ajoutĂ©es de maniĂšre cohĂ©rente et intĂ©grĂ©es dans le cadre du langage pour permettre son Ă©volution et sa coĂ©volution.

Dans la structure d'implĂ©mentation de chaque fonction, divers processus de calcul se produisent. Il convient de noter qu'il est nĂ©cessaire que, pour l'utilisateur, la fonction ait un aspect clair et uniforme ainsi qu'une lisibilitĂ© Ă©vidente. Dans ce contexte, les fonctions intĂ©grĂ©es du langage Wolfram Language sont prĂ©sentĂ©es avec plus de 6000 exemples consĂ©cutifs de la maniĂšre correcte de programmer des fonctions (c'est notre vidĂ©os en direct sur la programmation, qui incluent des centaines d'heures de crĂ©ation de programmes types). Cette approche permet finalement de rendre le dĂ©pĂŽt de fonctions Wolfram capable de bien fonctionner, grĂące Ă  la nature structurĂ©e du langage Wolfram Language avec son grand nombre de bibliothĂšques supplĂ©mentaires et variĂ©es, qui sont dĂ©jĂ  intĂ©grĂ©es au langage. Par exemple, si vous avez une fonction traitant des images ou des tableaux clairsemĂ©s, ou structures molĂ©culaires, ainsi que donnĂ©es gĂ©ographiques ou d'autres — le langage possĂšde dĂ©jĂ  leur reprĂ©sentation symbolique cohĂ©rente, et grĂące Ă  cela, votre fonction devient immĂ©diatement compatible avec d'autres fonctions du langage.

CrĂ©er un dĂ©pĂŽt qui fonctionne rĂ©ellement bien est un dĂ©fi intĂ©ressant de mĂ©ta-programmation. Par exemple, un excĂšs de contraintes dans un programme pourrait empĂȘcher l'unification et la polyvalence nĂ©cessaires au bon fonctionnement d'un algorithme. Tout comme un nombre insuffisant de contraintes fonctionnelles pourrait rendre difficile la mise en Ɠuvre d'une sĂ©quence d'exĂ©cution suffisamment correcte de l'algorithme. Quelques exemples prĂ©cĂ©dents de mise en Ɠuvre de compromis dans ces approches, rĂ©alisĂ©s par notre entreprise, ont Ă©tĂ© assez stables — il s'agit de : Le projet Wolfram Demonstrations, lancĂ© en 2007 et fonctionnant dĂ©sormais en mode interactif sur Internet, contenant plus de 12000 dĂ©monstrations interactives utilisateur. Dans la base de donnĂ©es Wolfram , il existe plus de 600 bases de donnĂ©es prĂȘtes Ă  l'emploi qui peuvent ĂȘtre utilisĂ©es dans le langage Wolfram Language, et le dĂ©pĂŽt de rĂ©seaux neuronaux Wolfram est alimentĂ© par de nouveaux rĂ©seaux neuronaux presque chaque semaine (ils sont actuellement 118) et ils sont immĂ©diatement intĂ©grĂ©s via la fonction NetModel dans le langage Wolfram Language.

Tous les exemples mentionnĂ©s ci-dessus ont une caractĂ©ristique fondamentale : les objets et fonctions collectĂ©s dans le projet sont trĂšs hautement structurĂ©s et les processus sont rĂ©partis. Bien sĂ»r, les dĂ©tails de la structure, qu'il s'agisse d'une dĂ©monstration, d'un rĂ©seau de neurones ou autre, peuvent varier considĂ©rablement, mais la structure fondamentale de tout dĂ©pĂŽt actuel reste toujours inchangĂ©e. Quelle est donc votre opinion, cher utilisateur, sur la crĂ©ation d'un tel dĂ©pĂŽt ajoutant des extensions au langage Wolfram ? Le langage Wolfram Language est conçu pour ĂȘtre extrĂȘmement flexible, permettant d'ĂȘtre Ă©tendu et modifiĂ© de nombreuses maniĂšres. Cette flexibilitĂ© est cruciale pour la crĂ©ation rapide de divers projets de grande envergure en langage Wolfram Language. Il est Ă  noter qu'avec l'augmentation de la flexibilitĂ© du langage, le coĂ»t des projets rĂ©alisĂ©s avec celui-ci augmentera inĂ©vitablement. Cela est dĂ» au fait que plus un utilisateur utilise ce langage, plus il bĂ©nĂ©ficie de fonctionnalitĂ©s spĂ©cifiques, mais il ne faut pas oublier que cette approche peut Ă©galement prĂ©senter des aspects nĂ©gatifs en ce qui concerne l'impossibilitĂ© d'assurer la cohĂ©rence sĂ©quentielle des modules logiciels.

Dans les langages de programmation traditionnels, un problĂšme courant avec les bibliothĂšques existe : par exemple, si vous utilisez une bibliothĂšque, le code fonctionne correctement, mais si vous essayez d'en utiliser plusieurs, il n'y a aucune garantie qu'elles interagiront correctement entre elles. En outre, dans les langages de programmation traditionnels – contrairement Ă  un vĂ©ritable langage de calcul – il n'existe pas de moyens de garantir des reprĂ©sentations intĂ©grĂ©es cohĂ©rentes pour certaines fonctions ou types de donnĂ©es, Ă  part leurs structures de base. Mais, en substance, le problĂšme est encore plus important qu'il n'y paraĂźt : si quelqu'un construit une verticalitĂ© fonctionnelle Ă  grande Ă©chelle, sans des investissements Ă©normes dans la programmation centralisĂ©e du projet, comme nous l'avons fait avec le langage Wolfram, il est impossible d'atteindre une cohĂ©rence. Il est donc essentiel que tous les modules logiciels fonctionnent toujours correctement ensemble.

Ainsi, l'idĂ©e du dĂ©pĂŽt de fonctions Wolfram est d'Ă©viter le problĂšme mentionnĂ© prĂ©cĂ©demment en ajoutant simplement des extensions au langage sous la forme d'Ă©lĂ©ments de code relativement petits par le biais de fonctions distinctes, dont le dĂ©veloppement en modules cohĂ©rents est une tĂąche plus simple. Cependant, il existe des spĂ©cificitĂ©s de programmation qui ne peuvent pas ĂȘtre rendues confortables par le biais de fonctions distinctes (et notre entreprise prĂ©voit de publier prochainement un algorithme logiciel optimisĂ© pour aider Ă  mettre en Ɠuvre des paquets logiciels Ă  grande Ă©chelle). NĂ©anmoins, sur la base des fonctions dĂ©jĂ  intĂ©grĂ©es au langage Wolfram Language, il existe de nombreuses possibilitĂ©s de programmation qui s'appuient sur des fonctions distinctes. L'idĂ©e ici est qu'avec relativement peu d'efforts de programmation, on puisse crĂ©er une sĂ©rie de nouvelles fonctions trĂšs utiles, qui assureront une cohĂ©rence suffisante du projet, tout en Ă©tant bien coordonnĂ©es entre elles et, en outre, elles pourront ĂȘtre facilement et largement utilisĂ©es dans le langage Ă  l'avenir.

Cette approche est certainement un compromis. Si un paquet plus vaste est mis en Ɠuvre, on peut imaginer un tout nouveau monde de fonctionnalitĂ©s qui serait extrĂȘmement puissant et utile. Si vous avez besoin d'Ă©ventuelles nouvelles fonctionnalitĂ©s qui s'intĂšgrent dans tout le reste, mais que vous n'ĂȘtes pas prĂȘt Ă  consacrer d'Ă©normes efforts au dĂ©veloppement du projet, cela peut malheureusement conduire Ă  une rĂ©duction de l'Ă©chelle de votre projet. L'idĂ©e du dĂ©pĂŽt de fonctions Wolfram est d'assurer les fonctionnalitĂ©s dĂ©finissant une partie du projet, cette approche permettra d'ajouter une puissance fonctionnelle tout en simplifiant le maintien d'une bonne cohĂ©rence du projet de programmation.

Assistance pour l'ajout de fonctions personnalisées au dépÎt de fonctions

Les spĂ©cialistes de notre entreprise ont travaillĂ© dur pour rendre leur contribution aux fonctions du dĂ©pĂŽt Wolfram suffisamment facile pour les utilisateurs. Sur le bureau (dĂ©jĂ  dans la version 12.0), Vous pouvez simplement naviguer successivement dans les onglets du menu principal : Fichier > Nouveau > ÉlĂ©ment de RĂ©pertoire > ÉlĂ©ment de RĂ©pertoire de Fonction et vous obtiendrez «Carnet de DĂ©finition» (programmĂ© Ă  l'intĂ©rieur de l'environnement de travail. Vous pouvez Ă©galement utiliser la fonction analogue — CreateNotebook[«FunctionResource»]):

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Il existe deux actions principales que vous devrez effectuer : tout d'abord, coder effectivement votre fonction et, deuxiÚmement, rédiger la documentation qui illustre comment votre fonction doit fonctionner.
Cliquez sur le bouton «Ouvrir un exemple» en haut pour voir un exemple de ce que vous devez faire :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

En fait, vous essayez de crĂ©er quelque chose de similaire Ă  une fonction intĂ©grĂ©e dans le langage Wolfram. Sauf qu'elle peut faire quelque chose de beaucoup plus spĂ©cifique que la fonction intĂ©grĂ©e. En mĂȘme temps, les attentes concernant sa complĂ©tude et sa fiabilitĂ© seront beaucoup plus faibles.
Vous devez donner un nom à votre fonction qui respecte les principes de nommage des fonctions du langage Wolfram. En outre, vous devrez développer la documentation pour votre fonction, à l'instar des fonctions intégrées du langage. Je vous en parlerai plus en détail plus tard. Pour l'instant, faites juste attention à ce que dans la rangée de boutons en haut du fichier de carnet de définitions, il y a un bouton «Recommandations de Style», qui explique ce qu'il faut faire, et un bouton «Outils» qui fournit des outils pour formater la documentation de votre fonction.
Lorsque vous ĂȘtes sĂ»r que tout est correctement rempli et prĂȘt, cliquez sur le bouton «VĂ©rifier». Il est tout Ă  fait normal que vous ne soyez pas encore familiarisĂ© avec tous les dĂ©tails. Ainsi, la fonction «VĂ©rifier» sera exĂ©cutĂ©e automatiquement et effectuera de nombreuses vĂ©rifications de style et de cohĂ©rence. Souvent, elle vous proposera immĂ©diatement de confirmer et d'accepter des corrections (par exemple : «Cette ligne doit se terminer par un deux-points», et elle proposera d'ajouter le deux-points). Parfois, elle vous demandera d'ajouter ou de modifier quelque chose vous-mĂȘme. Nous ajouterons constamment de nouvelles fonctionnalitĂ©s Ă  la fonctionnalitĂ© automatique du bouton «VĂ©rifier», mais son objectif principal est de garantir que tout ce que vous soumettez au rĂ©pertoire des fonctions respecte autant que possible un maximum de recommandations de style.

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Ainsi, aprĂšs avoir lancĂ© « Check », vous pouvez utiliser « Preview ». « Preview » crĂ©e un aperçu de la page de documentation que vous avez dĂ©finie pour votre fonction. Vous pouvez Ă©galement crĂ©er un aperçu pour un fichier enregistrĂ© sur votre ordinateur ou pour un fichier se trouvant dans le stockage cloud. Si, pour une raison quelconque, vous n'ĂȘtes pas satisfait de ce que vous voyez dans l'aperçu, il vous suffit de revenir en arriĂšre et d'apporter les corrections nĂ©cessaires, puis de cliquer Ă  nouveau sur le bouton Preview.
Vous ĂȘtes maintenant prĂȘt Ă  dĂ©ployer votre fonction dans le rĂ©fĂ©rentiel. Le bouton Deploy vous offre quatre options d'action :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

À cette Ă©tape, il est important de noter que vous pouvez soumettre votre fonction au rĂ©fĂ©rentiel de fonctions Wolfram, afin qu'elle soit accessible Ă  tout utilisateur. Vous pouvez Ă©galement dĂ©ployer votre fonction pour un nombre limitĂ© d'utilisateurs. Par exemple, vous pouvez crĂ©er une fonction hĂ©bergĂ©e localement sur votre ordinateur, de maniĂšre Ă  ce qu'elle soit accessible lorsque vous utilisez cet ordinateur spĂ©cifique. Ou vous pouvez la dĂ©ployer dans votre compte cloud, afin qu'elle soit accessible lorsque vous ĂȘtes connectĂ© au cloud. Vous pouvez Ă©galement dĂ©ployer votre fonction de maniĂšre publique via votre compte cloud. Elle ne sera pas dans le rĂ©fĂ©rentiel central des fonctions Wolfram, mais vous pourrez donner Ă  quelqu'un l'URL qui lui permettra d'accĂ©der Ă  votre fonction depuis votre compte. (À l'avenir, nous prendrons Ă©galement en charge des rĂ©fĂ©rentiels centraux Ă  l'Ă©chelle de notre entreprise).

Supposons donc que vous souhaitiez réellement soumettre votre fonction à la base de connaissances des fonctions Wolfram. Pour ce faire, vous cliquez sur le bouton « Soumettre » dans le référentiel. Que se passe-t-il alors à ce moment-là ? Votre demande est immédiatement mise en attente pour examen et approbation par notre équipe spéciale de curateurs.

Au fur et à mesure que votre demande passe par le processus d'approbation (qui prend généralement quelques jours), vous recevrez des informations sur l'état de son examen, ainsi que, éventuellement, des suggestions pour son utilisation future. Mais dÚs que votre fonctionnalité est approuvée, elle sera immédiatement publiée dans le dépÎt des fonctions Wolfram et sera disponible pour toute utilisation. (Et cela sera affiché dans les bulletins d'information des nouvelles fonctionnalités etc.)

Que doit contenir le dépÎt ?

Il convient de noter que notre entreprise a des normes trÚs élevées en matiÚre de complétude, de fiabilité et de qualité générale, parmi plus de 6000 fonctionnalités que nous avons intégrées dans le langage Wolfram au cours des 30 derniÚres années, toutes respectent ces exigences. L'objectif du dépÎt des fonctions Wolfram est d'exploiter toute la structure et les fonctionnalités qui existent déjà dans le langage Wolfram Language, afin d'ajouter le plus possible de fonctionnalités beaucoup plus légÚres (c'est-à-dire des fonctions avec une performance supérieure).

Certainement, les fonctions dans le dĂ©pĂŽt des fonctions Wolfram doivent respecter les principes de dĂ©veloppement du langage Wolfram Language — afin qu'elles puissent interagir pleinement avec d'autres fonctions et avec les attentes des utilisateurs concernant le bon fonctionnement des fonctions. Cependant, cela ne veut pas dire que les fonctions doivent avoir la mĂȘme complĂ©tude ou fiabilitĂ©.

Dans les fonctions intégrées du langage Wolfram, nous nous efforçons de rendre les fonctions logicielles aussi générales que possible. Cela dit, il n'y a rien de mal à ce qu'une fonction trÚs spécifique, mais utile, soit ajoutée au dépÎt des fonctions Wolfram. Par exemple, la fonction SendMailFromNotebook peut recevoir des fichiers dans un format spécifique et créer des courriels d'une certaine maniÚre. PolygonalDiagram crée des diagrammes uniquement avec certaines couleurs et étiquetages, etc.

Un autre aspect lié aux fonctions intégrées est que notre entreprise s'efforce de traiter tous les cas atypiques, de gérer correctement les entrées incorrectes, etc. Dans le référentiel de fonctions, il est tout à fait normal qu'il existe une fonction spéciale qui traite les cas principaux de la tùche à résoudre et ignore tous les autres.

Il est Ă©vident qu'il est prĂ©fĂ©rable d'avoir des fonctions qui font plus et le font mieux, mais l'optimisation pour le rĂ©fĂ©rentiel de fonctions - contrairement aux fonctions intĂ©grĂ©es du langage Wolfram - doit comporter davantage de fonctions, enchaĂźnĂ©es avec davantage de fonctionnalitĂ©s, plutĂŽt que de s'enfoncer dans les processus de mise en Ɠuvre de chaque fonction spĂ©cifique.

Examinons maintenant un exemple de test des fonctions dans le rĂ©fĂ©rentiel. Les attentes concernant la cohĂ©rence de telles fonctions sont naturellement bien infĂ©rieures Ă  celles des fonctions intĂ©grĂ©es du langage. Cela est d'autant plus vrai lorsque les fonctions dĂ©pendent de ressources externes, comme les API, il est donc crucial de rĂ©aliser constamment des tests cohĂ©rents, ce qui se produit automatiquement au sein des algorithmes de vĂ©rification. Dans le fichier nb, vous pouvez explicitement dĂ©finir les dĂ©finitions (dans la section « Informations supplĂ©mentaires ») et dĂ©finir autant de tests que vous jugez nĂ©cessaires, que ce soit par des chaĂźnes d'entrĂ©e et de sortie ou des objets symboliques complets de type VerificationTest, autant que vous le jugerez nĂ©cessaire. De plus, le systĂšme tente constamment de transformer vos exemples de documentation en un processus de vĂ©rification (ce qui peut parfois ĂȘtre trĂšs gourmand en ressources, par exemple pour une fonction dont le rĂ©sultat dĂ©pend de nombres alĂ©atoires ou de l'heure de la journĂ©e).

En fin de compte, il y aura toute une sĂ©rie de complexitĂ©s dans la mise en Ɠuvre du rĂ©fĂ©rentiel de fonctions. Certaines seront simplement une ligne de code, d'autres peuvent comporter des milliers ou des dizaines de milliers de lignes, probablement en utilisant de nombreuses fonctions auxiliaires. Dans quels cas devrait-on ajouter une fonction qui nĂ©cessite trĂšs peu de code pour sa dĂ©termination ? En principe, si la fonction a un nom mnĂ©motechnique appropriĂ©, que les utilisateurs comprendraient rapidement en voyant cela dans une partie du code, alors elle peut dĂ©jĂ  ĂȘtre ajoutĂ©e. Sinon, il est probablement prĂ©fĂ©rable de réécrire le code chaque fois que vous devez l'utiliser.

L'objectif principal du dépÎt de fonctions (comme l'indique son nom) est d'introduire de nouvelles fonctions dans les fonctionnalités du langage. Si vous souhaitez ajouter de nouvelles données ou nouvelles entités, utilisez dépÎt de données Wolfram. Mais que faire si vous souhaitez introduire de nouveaux types d'objets pour vos calculs ?

En rĂ©alitĂ©, il existe deux voies. Vous voudrez peut-ĂȘtre introduire un nouveau type d'objet qui sera utilisĂ© dans de nouvelles fonctions dans le dĂ©pĂŽt de fonctions. Dans ce cas, vous pouvez toujours simplement enregistrer sa reprĂ©sentation symbolique et l'utiliser lors de l'entrĂ©e ou de la sortie de fonctions dans le dĂ©pĂŽt de fonctions.

Mais que faire si vous souhaitez reprĂ©senter un objet, puis dĂ©finir, via les fonctions existantes du langage Wolfram Language, celles qui devraient fonctionner avec lui ? Pour cela, le Wolfram Language a toujours eu un mĂ©canisme simple appelĂ© UpValues. Avec certaines limitations (surtout pour les fonctions qui ne peuvent pas Ă©valuer leurs arguments), le dĂ©pĂŽt de fonctions vous permet simplement de reprĂ©senter une fonction et de dĂ©finir des valeurs pour celle-ci. (Pour renforcer les attentes de cohĂ©rence lors de la crĂ©ation d'une nouvelle construction importante, complĂštement intĂ©grĂ©e partout dans le langage Wolfram Language, - c'est gĂ©nĂ©ralement une procĂ©dure trĂšs importante qui ne peut ĂȘtre atteinte uniquement par une augmentation des coĂ»ts du projet et c'est ce que notre entreprise fait dans le cadre de projets de dĂ©veloppement Ă  long terme du langage, cette tĂąche n'est pas un objectif fixĂ© dans le cadre de l'Ă©volution du dĂ©pĂŽt).

Alors, que peut contenir le code des fonctions dans le dĂ©pĂŽt de fonctions ? Tout ce qui est intĂ©grĂ© dans le langage Wolfram Language, bien sĂ»r (du moins si ce n'est pas une menace pour la sĂ©curitĂ© et pour le bon fonctionnement du programme lui-mĂȘme, en tant qu'environnement de calcul), tout comme n'importe quelle fonction du dĂ©pĂŽt de fonctions. À ce sujet, il existe Ă©galement d'autres possibilitĂ©s de fonctionnement : une fonction dans le dĂ©pĂŽt de fonctions peut appeler une API, soit dans le Wolfram Cloud, ou bien d'une autre source.. Bien sĂ»r, il existe certains risques associĂ©s Ă  cela. En raison de l'absence de garanties que l'API ne changera pas, la fonction dans le dĂ©pĂŽt de fonctions pourrait cesser de fonctionner. Pour identifier de tels problĂšmes, une remarque figure sur la page de documentation (dans la section « Exigences ») pour toute fonction qui repose non seulement sur la fonctionnalitĂ© intĂ©grĂ©e du Wolfram Language. (En effet, lorsqu'il s'agit de donnĂ©es rĂ©elles, il peut y avoir des problĂšmes mĂȘme avec cette fonctionnalitĂ©, car les donnĂ©es rĂ©elles sur le monde changent constamment, et parfois mĂȘme leurs dĂ©finitions et structures sont modifiĂ©es.)

Tout le code pour le dĂ©pĂŽt de fonctions Wolfram doit-il ĂȘtre Ă©crit en Wolfram Language ? DĂ©finitivement, le code dans une API externe ne doit pas ĂȘtre Ă©crit en Wolfram Language, ce qui ne le qualifie mĂȘme pas comme code Wolfram. En rĂ©alitĂ©, si vous trouvez une fonction dans presque n'importe quel langage externe ou bibliothĂšque, vous serez en mesure de crĂ©er une interface qui permettra de l'utiliser dans le dĂ©pĂŽt de fonctions Wolfram. (GĂ©nĂ©ralement, il convient d'utiliser des fonctions intĂ©grĂ©es dans le code du Wolfram Language.) ExternalEvaluate ou ExternalFunction .

Quel est donc l'intĂ©rĂȘt de faire cela ? En gros, cela permet d'utiliser l'ensemble du systĂšme intĂ©grĂ© du Wolfram Language et son ensemble unifiĂ© de capacitĂ©s logicielles. Dans le cas oĂč vous obtenez une implĂ©mentation de base Ă  partir d'une bibliothĂšque ou d'un langage externe, vous pouvez ensuite utiliser la puissante structure symbolique du Wolfram Language pour crĂ©er une fonction de haut niveau qui permet aux utilisateurs d'exploiter facilement toute fonctionnalitĂ© dĂ©jĂ  implĂ©mentĂ©e. Du moins, cela devrait ĂȘtre rĂ©alisable dans un monde idĂ©al oĂč tous les composants des bibliothĂšques de chargement, etc., sont disponibles, et dans ce cas, ils seront automatiquement rĂ©solus avec le Wolfram Language. (Il convient de noter qu'en pratique, des problĂšmes peuvent survenir avec la configuration des langages externes dans un systĂšme informatique spĂ©cifique, et des problĂšmes supplĂ©mentaires de sĂ©curitĂ© peuvent apparaĂźtre dans le stockage cloud).

En fait, lorsque vous analysez pour la premiĂšre fois des bibliothĂšques externes standard, elles semblent souvent trop complexes pour ĂȘtre couvertes par quelques fonctions. Cependant, dans de nombreux cas, la majeure partie de cette complexitĂ© provient de l'infrastructure nĂ©cessaire Ă  la bibliothĂšque et de toutes les fonctions qui la soutiennent. Cependant, en utilisant le langage Wolfram, l'infrastructure est gĂ©nĂ©ralement dĂ©jĂ  intĂ©grĂ©e dans les paquets, ce qui signifie qu'il n'est pas nĂ©cessaire de dĂ©voiler en dĂ©tail toutes ces fonctions de soutien, mais simplement de crĂ©er des fonctions pour quelques « fonctions supĂ©rieures » orientĂ©es vers l'application dans la bibliothĂšque.

L'« ÉcosystĂšme » de la base de connaissances

Si vous avez Ă©crit des fonctions que vous utilisez constamment, envoyez-les dans le dĂ©pĂŽt de fonctions Wolfram ! MĂȘme si cela ne conduit pas Ă  quelque chose de plus grand (Ă©volution du langage), il vous sera beaucoup plus pratique d'utiliser ces fonctions pour un usage personnel. Il est logique de supposer que si vous utilisez ces fonctions en permanence, d'autres utilisateurs les trouveront Ă©galement utiles.

Il est Ă©vident que vous pouvez vous retrouver dans une situation oĂč vous ne pouvez pas — ou ne voulez pas — partager vos fonctions ou en cas d'accĂšs Ă  des ressources d'information privĂ©es. MĂȘme dans de tels cas, vous pouvez simplement dĂ©ployer vos fonctions dans votre propre compte cloud, en prĂ©cisant les droits d'accĂšs. (Si votre organisation dispose d'un cloud privĂ© Wolfram Enterprise, il pourra bientĂŽt hĂ©berger son propre dĂ©pĂŽt privĂ© de fonctions, qui pourra ĂȘtre administrĂ© depuis votre organisation et dĂ©finir si les vues doivent ĂȘtre visibles ou non pour les utilisateurs externes.)

Les fonctions que vous envoyez dans le dĂ©pĂŽt de fonctions Wolfram n'ont pas besoin d'ĂȘtre parfaites ; elles doivent simplement ĂȘtre utiles. Cela ressemble un peu Ă  la section « Erreurs » dans la documentation classique de Unix — dans la « section des dĂ©finitions », il y a une section « Remarques de l'auteur » oĂč vous pouvez dĂ©crire les limitations, les problĂšmes, etc., que vous connaissez dĂ©jĂ  sur votre fonction. De plus, lorsque vous envoyez votre fonction dans le dĂ©pĂŽt, vous pouvez ajouter des notes Ă  l'envoi, qui seront lues par une Ă©quipe de commissaires.

AprÚs la publication de la fonction, sa page a toujours deux liens en bas : «Envoyer un message sur cette fonctionnalité» et «Discuter dans la communauté Wolfram». Si vous joignez une note (par exemple pour signaler des erreurs), vous pouvez cocher une case pour indiquer que vous souhaitez que votre message et vos coordonnées soient transmis à l'auteur de la fonction.

Il arrive parfois que vous souhaitiez simplement utiliser des fonctions du rĂ©fĂ©rentiel de fonctions Wolfram, par exemple des fonctions intĂ©grĂ©es, sans plonger dans leur code. Cependant, si vous souhaitez "regarder Ă  l'intĂ©rieur", il y a toujours un bouton "Carnet" en haut. Cliquez dessus et vous obtiendrez votre propre copie du carnet d'origine qui a Ă©tĂ© envoyĂ© au rĂ©fĂ©rentiel de fonctions. Parfois, vous pouvez simplement l'utiliser comme exemple pour vos besoins. Dans ce cas, vous pouvez Ă©galement dĂ©velopper votre propre version modifiĂ©e de cette fonction. Peut-ĂȘtre que vous voudrez mettre ces fonctions que vous avez trouvĂ©es dans le rĂ©fĂ©rentiel sur votre ordinateur ou dans votre compte de stockage cloud, ou peut-ĂȘtre que vous voudrez les envoyer Ă  la base de connaissances des fonctions, possiblement en tant que version amĂ©liorĂ©e ou enrichie de la fonction d'origine.

Dans le futur, nous prévoyons de supporter le branching à la maniÚre de Git pour les référentiels de fonctions, mais pour le moment, nous essayons de simplifier cela et avons toujours une version standard de chaque fonction intégrée dans le langage. Le plus souvent (si les développeurs ne cessent pas de maintenir les fonctions qu'ils ont développées et répondent aux messages des utilisateurs), l'auteur d'origine de la fonction obtient le contrÎle des mises à jour et envoie de nouvelles versions qui sont ensuite examinées et, si elles passent le processus de vérification, publiées dans le langage.

Considérons comment fonctionne la "versionabilité" des fonctions développées. En ce moment, lorsque vous utilisez une fonction du référentiel de fonctions, sa définition sera constamment stockée sur votre ordinateur (ou dans votre compte cloud si vous utilisez le cloud). Si une nouvelle version de la fonction apparaßt, vous recevrez un message vous avertissant lors de sa prochaine utilisation. Et si vous souhaitez mettre à jour la fonction vers une nouvelle version, vous pouvez le faire avec la commande ResourceUpdate(L'objet BLOB fonctionnel contient en réalité plus d'informations sur les versions, et à l'avenir, nous prévoyons de le rendre plus accessible à nos utilisateurs.)

Une des fonctionnalitĂ©s remarquables du dĂ©pĂŽt de fonctions Wolfram est que n'importe quel programme Wolfram Language peut utiliser ses fonctions, peu importe oĂč il se trouve. Lorsque le programme apparaĂźt dans un notebook, il est souvent pratique de formater les fonctions du dĂ©pĂŽt sous forme de «blobs fonctionnels» faciles Ă  lire (Ă©ventuellement avec un ensemble de versions adĂ©quates).

Vous pouvez toujours accéder à n'importe quelle fonction du dépÎt de fonctions via le texte ResourceFunction [
]. Ce qui est trÚs pratique si vous écrivez du code ou des scripts directement pour Wolfram Engine, par exemple, avec l'aide d'un IDE ou d'un éditeur de code (il convient de préciser que le dépÎt de fonctions est entiÚrement compatible avec Free Wolfram Engine pour les développeurs).

Comment cela fonctionne ?

À l'intĂ©rieur des fonctions du dĂ©pĂŽt Wolfram, cela est possible en utilisant exactement le mĂȘme systĂšme de ressources que dans tous nos autres dĂ©pĂŽts existants (dĂ©pĂŽts de donnĂ©es, Neural Net Repository, collection de projets de dĂ©monstration etc.), tout comme tous les autres ressources systĂšme Wolfram, ResourceFunction est finalement basĂ© sur la fonction ResourceObject.

Examinons ResourceFunction:

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

À l'intĂ©rieur, vous pouvez voir certaines informations Ă  l'aide de la fonction Information:

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Comment fonctionne la configuration de la fonction de ressource ? Le cas le plus simple est purement local. Voici un exemple qui prend une fonction (dans ce cas, une fonction simple) et la définit comme une fonction de ressource pour le session en cours dans le programme :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

AprÚs avoir effectué la définition, vous pouvez utiliser la fonction de ressource :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Notez que dans cet objet BLOB de fonction, il y a une icÎne noire DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram. Cela signifie que la fonction BLOB est liée à une fonction de ressource en mémoire, définie pour la session en cours. Pour une fonction de ressource qui est stockée de maniÚre permanente sur votre ordinateur ou dans votre compte cloud, il y a une icÎne grise DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram. Et pour une fonction de ressource officielle dans le dépÎt de fonctions Wolfram, il y a une icÎne orange DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram.

Alors, que se passe-t-il lorsque vous utilisez le menu 'Déploiement' dans le notebook de définition ? D'abord, il prend toutes les définitions dans le notebook et en crée un symbole ResourceObject). (Et si vous utilisez un IDE textuel ou un programme, vous pouvez également créer explicitement ResourceObject)

Le dĂ©ploiement local de la fonction depuis le rĂ©fĂ©rentiel sur votre ordinateur se fait Ă  l'aide de la commande CacheLocal pour l'objet ressource, afin de le conserver comme ObjetLocal dans votre systĂšme de fichiers. Le dĂ©ploiement dans le compte cloud s'effectue Ă  l'aide de la commande DĂ©ploiementCloud pour l'objet ressource, et le dĂ©ploiement public dans le cloud — PublicationCloud. Dans tous les cas EnregistrementRessource est Ă©galement utilisĂ© pour enregistrer le nom de la fonction ressource, ainsi FonctionRessource[«nom»] fonctionnera.

Lorsque vous cliquez sur le bouton Soumettre pour le Référentiel de Fonction, ce qui se passe en dessous SoumissionRessource est appelé sur l'objet ressource. (Et si vous utilisez une interface de saisie textuelle, vous pouvez également appeler SoumissionRessource directement).

Par défaut, l'envoi se fait sous le nom associé à votre identifiant Wolfram ID. Mais si vous soumettez une demande au nom d'un groupe de développeurs ou d'une organisation, vous pouvez définir un identifiant éditeur distinct et l'utiliser à la place comme nom pour interagir avec vos visualisations.

Une fois que vous avez soumis l'une de vos fonctions dans la base de connaissances des fonctions, elle sera mise en file d'attente pour révision. Si vous recevez des commentaires en réponse, ils seront généralement sous la forme d'un fichier texte avec des « cellules de commentaires » supplémentaires ajoutées. Vous pouvez toujours vérifier le statut de votre demande en vous rendant sur le portail des participants au systÚme de ressources. Mais une fois que votre fonction est approuvée, vous serez prévenu (par e-mail), et votre fonction sera publiée dans le référentiel de fonctions Wolfram.

Quelques subtilités dans le fonctionnement

À premiĂšre vue, on pourrait penser qu'il suffit de prendre le carnet de dĂ©finition et de le placer littĂ©ralement dans le rĂ©fĂ©rentiel de fonctions, cependant, en rĂ©alitĂ©, il y a beaucoup de subtilitĂ©s — et pour les gĂ©rer, il faut effectuer un mĂ©ta-programmation assez complexe, en traitant symboliquement Ă  la fois le code dĂ©finissant la fonction et le carnet de dĂ©finition lui-mĂȘme. La plupart de cela se passe en interne, c'est-Ă -dire « en coulisses », mais cela peut avoir certaines consĂ©quences qu'il vaut la peine de comprendre si vous envisagez de contribuer Ă  la base de connaissances des fonctions.

La premiĂšre subtilitĂ© directe : Lorsque vous remplissez le « Bloc-notes de dĂ©finitions », vous pouvez simplement faire rĂ©fĂ©rence Ă  votre fonction partout, en utilisant un nom tel que MyFunction, qui ressemble Ă  un nom de fonction ordinaire dans le langage Wolfram, mais pour la documentation du dĂ©pĂŽt de fonctions, cela est remplacĂ© par FonctionRessource[« MyFunction »] – c'est exactement ce que les utilisateurs utiliseront effectivement lors de l'utilisation de la fonction.

La deuxiĂšme subtilitĂ© : lorsque vous crĂ©ez une fonction de ressource Ă  partir du Bloc-notes de dĂ©finitions, toutes les dĂ©pendances impliquĂ©es dans la dĂ©finition de la fonction doivent ĂȘtre fixĂ©es et explicitement incluses. Cependant, pour garantir que les dĂ©finitions restent modulaires, tout doit ĂȘtre placĂ© dans un espace de nomsunique. (Évidemment, les fonctions qui font tout cela, se trouvent dans le dĂ©pĂŽt de fonctions.)

D'habitude, vous ne verrez jamais aucune trace du code utilisĂ© pour configurer cet espace de noms. Mais si, pour une raison quelconque, vous appelez un symbole inachevĂ© Ă  l'intĂ©rieur de votre fonction, vous verrez que ce symbole se trouve dans le contexte interne de la fonction. Cependant, lors du traitement du Bloc-notes de dĂ©finitions, au moins le symbole correspondant Ă  la fonction elle-mĂȘme, est configurĂ© pour une meilleure reprĂ©sentation sous la forme d'un BLOB fonctionnel, et non d'un symbole brut dans le contexte interne.

Le dĂ©pĂŽt de fonctions est destinĂ© Ă  dĂ©finir de nouvelles fonctions. Et ces fonctions peuvent avoir des options. Souvent, ces paramĂštres (par exemple, MĂ©thode ou ImageSize) peuvent ĂȘtre utilisĂ©s pour les fonctions intĂ©grĂ©es, ainsi que pour celles pour lesquelles des symboles intĂ©grĂ©s existent dĂ©jĂ . Mais parfois, une nouvelle fonction peut nĂ©cessiter de nouvelles options. Pour prĂ©server la modularitĂ©, il est nĂ©cessaire que ces paramĂštres soient des symboles dĂ©finis dans un contexte interne unique (ou quelque chose comme des fonctions de ressource entiĂšres, c'est-Ă -dire indĂ©pendamment). Pour simplifier, le dĂ©pĂŽt de fonctions permet de dĂ©finir de nouvelles options dans les dĂ©finitions sous forme de chaĂźnes. Et pour la commoditĂ© de l'utilisateur, ces dĂ©finitions (Ă  condition qu'elles utilisent OptionValue et OptionsPattern) sont Ă©galement traitĂ©es de maniĂšre Ă  ce qu'en utilisant les fonctions, les paramĂštres puissent ĂȘtre spĂ©cifiĂ©s non seulement sous forme de chaĂźnes, mais aussi comme des symboles globaux ayant les mĂȘmes noms.

La plupart des fonctions font simplement ce qu'elles doivent faire chaque fois qu'elles sont appelĂ©es, mais certaines fonctions nĂ©cessitent une initialisation avant de pouvoir fonctionner dans une certaine session — et pour rĂ©soudre ce problĂšme, il existe une section « Initialisation » dans la partie « DĂ©finition ».

Les fonctions du dĂ©pĂŽt peuvent utiliser d'autres fonctions dĂ©jĂ  prĂ©sentes dans le dĂ©pĂŽt pour configurer des dĂ©finitions pour le dĂ©pĂŽt de fonctions, incluant deux (ou plusieurs) fonctions qui se rĂ©fĂšrent l'une Ă  l'autre nĂ©cessitant d'ĂȘtre dĂ©ployĂ©es dans votre session de travail avec le programme, afin que vous puissiez y rĂ©fĂ©rencer comme FonctionRessource[«nom»], puis vous pouvez crĂ©er les combinaisons de ces fonctions nĂ©cessaires (je n'ai pas compris) et ajouter une nouvelle fonction au dĂ©pĂŽt basĂ©e sur celles dĂ©jĂ  prĂ©sentes prĂ©cĂ©demment. (ou dĂ©jĂ  ou auparavant – les deux mots sont mal formulĂ©s)

Perspectives de développement. Que doit-il se passer lorsque le dépÎt devient vraiment volumineux ?

Aujourd'hui, nous lançons simplement le dépÎt de fonctions Wolfram, mais au fil du temps, nous prévoyons que son volume et sa fonctionnalité pourraient augmenter considérablement, et à mesure qu'il grandit, divers problÚmes émergeront que nous pressentons déjà.

Le premier problĂšme concerne les noms des fonctions et leur unicitĂ©. Le dĂ©pĂŽt de fonctions est conçu de telle maniĂšre que, comme pour les fonctions intĂ©grĂ©es du langage Wolfram, on peut rĂ©fĂ©rencer n'importe quelle fonction donnĂ©e simplement en indiquant son nom. Mais cela signifie inĂ©vitablement que les noms de fonctions doivent ĂȘtre globalement uniques dans tout le dĂ©pĂŽt, donc, par exemple, il ne peut y avoir qu'un seul FonctionRessource[«MyFavoriteFunction»].

À premiĂšre vue, cela peut sembler un gros problĂšme, mais il est important de comprendre que c'est essentiellement le mĂȘme problĂšme que pour des choses telles que les noms de domaines Internet ou les identifiants de rĂ©seaux sociaux. Et le fait est que, dans le systĂšme, il est simplement nĂ©cessaire d'avoir un registraire — et c'est l'un des rĂŽles que notre entreprise assumera pour la base de connaissances des fonctions Wolfram. (Pour les versions privĂ©es du dĂ©pĂŽt, leurs registraires peuvent ĂȘtre des administrateurs.) Bien sĂ»r, un nom de domaine Internet peut ĂȘtre enregistrĂ© sans avoir quoi que ce soit dessus, mais dans le dĂ©pĂŽt de fonctions, un nom de fonction ne peut ĂȘtre enregistrĂ© que s'il existe une dĂ©finition rĂ©elle de la fonction.

En tant que partie de notre rÎle dans la gestion de la base de connaissances des fonctions Wolfram, nous veillons à ce que le nom choisi pour une fonction ait du sens par rapport à sa définition, et qu'il respecte les conventions de nommage du langage Wolfram. Nous avons plus de 30 ans d'expérience dans le nommage des fonctions intégrées dans le langage Wolfram, et notre équipe de curateurs appliquera également cette expérience au dépÎt de fonctions. Bien sûr, il y a toujours des exceptions. Par exemple, il peut sembler préférable d'avoir un nom court pour une certaine fonction, mais il est préférable d'opter pour un nom plus long et plus spécifique, car cela réduit les risques que quelqu'un souhaite créer un nom de fonction similaire à l'avenir.

(Il convient de noter que l'ajout simple de n'importe quelle balise de participant pour éliminer l'ambiguïté des fonctions ne produira pas l'effet escompté. Car, si l'on ne s'assure pas que la balise est toujours assignée, il faudra définir une balise par défaut pour toute fonction donnée, ainsi que mettre en avant les balises des auteurs, ce qui nécessitera à nouveau une coordination globale.)

À mesure que la base de connaissances des fonctions Wolfram s'agrandit, l'une des prĂ©occupations qui se posera sans aucun doute est la dĂ©couvrabilitĂ© des fonctions. Pour cela, le systĂšme prĂ©voit une fonction de recherche (et les fichiers de dĂ©finition peuvent inclure des mots-clĂ©s, etc.). Pour les fonctions intĂ©grĂ©es dans le langage Wolfram, la documentation contient toutes sortes de renvois croisĂ©s qui aident Ă  « promouvoir » les fonctions. Les fonctions du dĂ©pĂŽt de fonctions peuvent faire rĂ©fĂ©rence aux fonctions intĂ©grĂ©es. Mais qu'en est-il dans l'autre sens ? Pour cela, nous prĂ©voyons d'expĂ©rimenter diffĂ©rentes schĂ©mas pour prĂ©senter les fonctions du dĂ©pĂŽt sur les pages de documentation des fonctions intĂ©grĂ©es.

Pour les fonctions intĂ©grĂ©es dans le langage Wolfram, il existe ce que l'on appelle un niveau de dĂ©couvrabilitĂ© fourni par un rĂ©seau de « pages d'aide », qui fournissent des listes organisĂ©es de fonctionnalitĂ©s relatives Ă  des domaines spĂ©cifiques. Il est toujours difficile d'Ă©quilibrer correctement les pages de rĂ©fĂ©rence et, Ă  mesure que le langage Wolfram Ă©volue, les pages de rĂ©fĂ©rence doivent souvent ĂȘtre complĂštement rĂ©organisĂ©es. Il est assez simple de placer des fonctions du dĂ©pĂŽt dans de larges catĂ©gories et mĂȘme de subdiviser ces catĂ©gories, mais il est beaucoup plus prĂ©cieux d'avoir des pages de rĂ©fĂ©rence du langage correctement organisĂ©es. Il n'est pas encore clair comment crĂ©er au mieux ces pages pour toute la base de connaissances des fonctions. Par exemple, CreateResourceObjectGallery dans le dĂ©pĂŽt de fonctions, tout le monde peut dĂ©poser une page Web contenant ses « sĂ©lections » du dĂ©pĂŽt :

DépÎt de fonctions Wolfram : accÚs ouvert à une plateforme pour les extensions du langage Wolfram

Le dĂ©pĂŽt de fonctions Wolfram est configurĂ© comme un stockage permanent de fonctions, oĂč chaque fonction prĂ©sente y sera toujours opĂ©rationnelle. Il peut certainement y avoir de nouvelles versions de fonctions, et nous nous attendons Ă  ce que certaines fonctions deviennent obsolĂštes au fil du temps. Les fonctions fonctionneront si elles sont utilisĂ©es dans des programmes, mais leurs pages de documentation feront rĂ©fĂ©rence Ă  de nouvelles fonctionnalitĂ©s plus avancĂ©es.

Le dĂ©pĂŽt de fonctions Wolfram est destinĂ© Ă  un accĂšs rapide aux nouvelles fonctions et Ă  l'exploration de nouvelles possibilitĂ©s d'utilisation du langage Wolfram. Avec une grande dose d'optimisme, nous espĂ©rons qu'une partie de ce qui a Ă©tĂ© explorĂ© dans le dĂ©pĂŽt de fonctions finira par ĂȘtre intĂ©grĂ© en tant que parties fondamentales du langage principal Wolfram Language. Au cours de la derniĂšre dĂ©cennie, nous avons eu un ensemble similaire de fonctions qui ont Ă©tĂ© initialement prĂ©sentĂ©es dans Wolfram | Alpha. Et l'une des leçons tirĂ©es de cette expĂ©rience est qu'il faut beaucoup de travail pour atteindre les normes de qualitĂ© et de cohĂ©rence sur lesquelles nous mettons l'accent dans tout ce qui est intĂ©grĂ© au langage Wolfram, un travail qui est souvent plus complexe que les efforts initiaux de mise en Ɠuvre de l'idĂ©e. Mais mĂȘme dans ce cas, une fonction dans la base de connaissances peut servir de preuve de concept trĂšs utile pour une future fonction qui pourrait finalement ĂȘtre intĂ©grĂ©e au langage Wolfram.

La chose la plus importante ici est que la fonction dans le dépÎt de fonctions est accessible à tous les utilisateurs dÚs maintenant. Il est possible qu'une fonction intégrée au langage soit bien meilleure et plus performante, mais le dépÎt de fonctions permet aux utilisateurs d'accéder immédiatement à toutes les nouvelles fonctionnalités. Et surtout, ce concept permet à chacun d'ajouter ses propres nouvelles fonctionnalités.

Autrefois, dans l'histoire du langage Wolfram, cette idée n'aurait pas aussi bien fonctionné qu'aujourd'hui, mais à ce stade, tant d'efforts ont été investis dans le langage, et une compréhension si profonde des principes de conception du langage permet maintenant de voir comme trÚs possible qu'une grande communauté d'utilisateurs ajoute des fonctions qui soutiendront la cohérence du projet, rendant celles-ci utiles à un large éventail d'utilisateurs.

Dans la communauté des utilisateurs de Wolfram Language, il y a un esprit de talent incroyable. (Bien sûr, cette communauté comprend de nombreux experts de premier plan dans la recherche et le développement dans divers domaines.) J'espÚre que le dépÎt de fonctions Wolfram fournira une plateforme efficace pour révéler et diffuser cet esprit de talent. Ce n'est qu'ensemble que nous pourrons créer quelque chose qui étendra considérablement le domaine d'application de la paradigme de calcul du langage Wolfram.

En plus de 30 ans, nous avons parcouru un long chemin avec le langage Wolfram. Maintenant, ensemble, allons encore plus loin. J'appelle tous les utilisateurs respectés du langage Wolfram dans le monde à utiliser ce dépÎt de fonctions comme plateforme, ainsi que ce nouveau projet logiciel, tel que le Free Wolfram Engine pour les développeurs.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster