Bonjour Habr! Je présente à votre attention une traduction du post de Stephen Wolfram
Conditions préalables à la cohérence du langage Wolfram
Aujourd'hui, nous sommes sur le point de réaliser de grandes réalisations avec le langage de programmation
Le référentiel de fonctions Wolfram est quelque chose rendu possible par la nature unique de Wolfram Language, non seulement en tant que langage de programmation, mais également en tant que langage de programmation.
Par exemple, le référentiel de fonctions Wolfram contient déjà
De même, plus de
Pour accéder à la page, copiez l'objet ci-dessus (fonction BLOB), collez-le dans la ligne de saisie, puis exécutez la fonction - il est déjà intégré au langage Wolfram et pris en charge par défaut en commençant par
Il convient de noter ici que lors du traitement
J'espère qu'avec le soutien
Les fonctions du référentiel peuvent contenir des morceaux de code petits ou grands écrits en Wolfram Language. Par exemple, il peut s'agir d'appels
Le shell et la structure de programmation du Wolfram Feature Repository sont conçus pour que chacun puisse contribuer à la cause commune de la manière la plus simple et la plus pratique pour lui - en fait, simplement
Cette approche comporte de nombreux compromis et détails, mais notre objectif est d'optimiser le référentiel de fonctionnalités Wolfram à la fois pour l'expérience utilisateur et de garantir que les nouvelles fonctionnalités utilisateur contribuent de manière significative au développement du langage. À mesure que nous grandissons, je suis convaincu que nous devrons inventer de nouvelles méthodes de traitement et de validation des fonctions intégrées au référentiel, notamment pour organiser un grand nombre de fonctions et trouver celles dont les utilisateurs ont besoin. Il est toutefois encourageant de constater que la voie que nous avons choisie constitue un bon début. Personnellement, je
Augmenter l’efficacité tout en réduisant les coûts
Même avant Internet, il existait des moyens de partager le code Wolfram Language (notre premier grand projet centralisé était
Depuis plus de 30 ans, notre société a travaillé avec diligence pour maintenir l'intégrité de la structure du langage Wolfram, ce qui est essentiel pour garantir que le langage Wolfram devienne non seulement un langage de programmation, mais également un langage de programmation.
Divers processus de calcul se produisent dans la structure de mise en œuvre de chaque fonction. Il convient de noter ici qu'il est nécessaire que la fonction présente une apparence claire et uniforme et une lisibilité visuelle pour l'utilisateur. Dans ce contexte, les fonctions intégrées de Wolfram Language sont présentées avec plus de 6000 XNUMX exemples séquentiels sur la façon de programmer correctement les fonctions (ce sont nos
Créer un référentiel qui fonctionne réellement bien est une tâche de méta-programmation intéressante. Par exemple, un excès de restrictions dans le programme ne permettra pas d'obtenir l'unification et l'universalité requises de l'algorithme. Tout comme avec un nombre insuffisant de restrictions fonctionnelles, vous ne pourrez pas implémenter une séquence d'exécution d'algorithme suffisamment correcte. Plusieurs exemples précédents de mise en œuvre d'un compromis de ces approches, mis en œuvre par notre entreprise, ont fonctionné de manière assez stable - ce sont :
Tous les exemples ci-dessus ont une caractéristique fondamentale : les objets et fonctions collectés dans le projet ont un très haut degré de structuration et de répartition des processus. Bien sûr, les détails de la structure de ce qu'est une démo, un réseau de neurones ou autre chose peuvent varier considérablement, mais la structure fondamentale de tout référentiel actuel reste toujours la même. Alors, quelle est votre opinion, cher utilisateur, sur la création d'un tel référentiel qui ajoute des extensions au langage Wolfram ? Wolfram Language est conçu pour être extrêmement flexible, il peut donc être étendu et modifié de quelque manière que ce soit. Cette circonstance est extrêmement importante pour la possibilité de créer rapidement divers projets logiciels à grande échelle dans Wolfram Language. Il convient de noter ici qu'à mesure que la flexibilité de la langue augmente, le coût des projets mis en œuvre dans une telle langue augmentera inévitablement. Cela est dû au fait que plus l'utilisateur utilise un tel langage, plus il bénéficie de fonctionnalités dédiées, mais il ne faut pas oublier que cette approche peut également avoir des côtés négatifs en termes d'incapacité à assurer une cohérence cohérente des modules du programme.
Il existe un problème courant avec les bibliothèques dans les langages de programmation traditionnels : si vous utilisez une bibliothèque, par exemple, le code fonctionnera correctement, mais si vous essayez d'utiliser plusieurs bibliothèques, rien ne garantit qu'elles interagiront correctement les unes avec les autres. . De plus, dans les langages de programmation traditionnels - contrairement à un langage informatique à part entière - il n'existe aucun moyen de garantir la présence de représentations intégrées cohérentes pour les fonctions ou types de données autres que leurs structures de base. Mais, en fait, le problème est encore plus important qu'il n'y paraît à première vue : si l'on construit une verticale de fonctionnalités à grande échelle, alors sans les coûts énormes de programmation de projet centralisée que nous mettons dans le langage Wolfram, il est impossible de parvenir à une cohérence. Il est donc important que tous les modules logiciels fonctionnent toujours correctement ensemble.
L'idée derrière le référentiel de fonctionnalités Wolfram est donc d'éviter le problème décrit ci-dessus en ajoutant simplement des extensions au langage dans des morceaux de code relativement petits via des fonctionnalités individuelles plus faciles à développer en tant que modules cohérents. Cela étant dit, certaines fonctionnalités de programmation ne peuvent pas être rendues pratiques à l'aide de fonctions individuelles (et notre société prévoit de publier prochainement un algorithme de programmation optimisé pour faciliter la mise en œuvre de progiciels à grande échelle). Cependant, sur la base des fonctions déjà intégrées à Wolfram Language, il existe de nombreuses possibilités de programmation implémentées en fonction de fonctions individuelles. L'idée ici est qu'avec relativement peu d'effort de programmation, il est possible de créer un certain nombre de fonctions nouvelles et très utiles qui apporteront suffisamment de cohérence à la conception, elles seront bien coordonnées les unes avec les autres et, en plus, elles pourra être facilement et largement utilisé dans la langue à l'avenir.
Cette approche est bien entendu un compromis. Si un package plus vaste était implémenté, un tout nouveau monde de fonctionnalités pourrait être imaginé, extrêmement puissant et utile. S'il est nécessaire d'acquérir de nouvelles fonctionnalités qui s'intégreront à tout le reste, mais que vous n'êtes pas prêt à consacrer beaucoup d'efforts au développement du projet, cela peut malheureusement conduire à une réduction de la portée de votre projet. L'idée derrière le référentiel de fonctionnalités Wolfram est de fournir des fonctionnalités à une partie déterminante d'un projet ; cette approche ajoutera des fonctionnalités puissantes tout en facilitant le maintien d'une bonne cohérence dans un projet de programmation.
Aide à l'ajout de fonctions personnalisées au référentiel de fonctions
Notre équipe a travaillé dur pour permettre aux utilisateurs de contribuer facilement aux fonctionnalités du référentiel Wolfram. Sur le bureau (déjà dans
Vous devrez effectuer deux étapes principales : premièrement, écrire le code de votre fonction et, deuxièmement, rédiger la documentation illustrant le fonctionnement de votre fonction.
Cliquez sur le bouton « Ouvrir l'échantillon » en haut pour voir un exemple de ce que vous devez faire :
Essentiellement, vous essayez de créer quelque chose de similaire à une fonction intégrée dans Wolfram Language. Sauf qu’il peut faire quelque chose de bien plus spécifique qu’une fonction intégrée. Dans le même temps, les attentes concernant son exhaustivité et sa fiabilité seront bien moindres.
Vous devez donner à votre fonction un nom qui suit les directives de dénomination des fonctions de Wolfram Language. De plus, vous devrez développer une documentation pour votre fonction, similaire aux fonctions intégrées du langage. J'en parlerai plus en détail plus tard. Pour l'instant, notez simplement que dans la rangée de boutons en haut du fichier du carnet de définitions, il y a un bouton
Lorsque vous êtes sûr que tout est correctement rempli et que vous êtes prêt, cliquez sur le bouton « Vérifier ». Il est tout à fait normal que vous n'ayez pas encore compris tous les détails. Ainsi, la fonction "Vérifier" s'exécutera automatiquement et effectuera de nombreux contrôles de style et de cohérence. Souvent, il vous demandera immédiatement de confirmer et d'accepter les corrections (par exemple : « Cette ligne doit se terminer par deux points » et il vous demandera de saisir 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éférentiel de fonctionnalités suit déjà de près autant de directives de style que possible.
Ainsi, après avoir exécuté "Check", vous pouvez utiliser "Aperçu". "Aperçu" 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 créé sur votre ordinateur ou pour un fichier situé dans le stockage cloud. Si, pour une raison quelconque, vous n'êtes pas satisfait de ce que vous voyez dans l'aperçu, revenez simplement en arrière et apportez les corrections nécessaires, puis cliquez à nouveau sur le bouton Aperçu.
Vous êtes maintenant prêt à transférer votre fonction dans le référentiel. Le bouton Déployer vous propose quatre options :
L'important à cette étape est que vous puissiez soumettre votre fonction au référentiel de fonctions Wolfram afin qu'elle soit accessible à tous. Dans le même temps, vous pouvez également proposer votre fonction à un nombre limité d’utilisateurs. Par exemple, vous pouvez créer une fonction hébergée localement sur votre ordinateur afin qu'elle soit disponible lorsque vous utilisez cet ordinateur particulier. Ou vous pouvez le publier dans votre
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 » au référentiel. Alors que se passe-t-il en ce moment ? Votre candidature est immédiatement mise en file d'attente pour examen et approbation par notre équipe dédiée de conservateurs.
Au fur et à mesure que votre candidature progresse dans le processus d'approbation (qui prend généralement plusieurs jours), vous recevrez des communications concernant son statut et éventuellement des suggestions pour une utilisation future. Mais une fois votre fonctionnalité approuvée, elle sera immédiatement publiée dans le Wolfram Feature Repository et sera disponible pour tout le monde. (Et cela apparaîtra dans
Que doit contenir le stockage ?
Il convient de noter que notre société a des normes très élevées en matière d'exhaustivité, de fiabilité et de qualité globale, et que parmi les plus de 6000 30 fonctions que nous avons déjà intégrées dans le langage Wolfram au cours des XNUMX dernières années, toutes répondent aux exigences ci-dessus. L'objectif du Wolfram Function Repository est d'utiliser toute la structure et les fonctionnalités qui existent déjà dans Wolfram Language afin d'ajouter autant de fonctions beaucoup plus légères (c'est-à-dire des fonctions plus performantes) que possible.
Bien entendu, les fonctions du référentiel de fonctions Wolfram doivent être conformes aux principes de conception de Wolfram Language - afin qu'elles puissent interagir pleinement avec d'autres fonctions et avec les attentes des utilisateurs quant à la manière dont la fonction doit fonctionner correctement. Cependant, les fonctions ne doivent pas nécessairement être aussi complètes ou fiables.
Dans les fonctions intégrées du langage Wolfram, nous travaillons dur pour rendre les fonctions de programmation aussi générales que possible. Cela étant dit, dans le référentiel de fonctions Wolfram, il n'y a rien de mal à avoir une fonction qui gère simplement un cas très spécifique mais utile. Par exemple, la fonction
Un autre point lié aux fonctions intégrées est que notre société s'efforce de traiter tous les cas atypiques, de gérer correctement les saisies incorrectes, etc. Dans un référentiel de fonctions, il est tout à fait normal qu'il y ait une fonction spéciale qui gère les principaux cas de résolution d'un problème et ignore tous les autres.
Le point évident est qu'il est préférable d'avoir des fonctions qui font plus et mieux, mais l'optimisation d'un référentiel de fonctions - par opposition aux fonctions intégrées du langage Wolfram - devrait avoir plus de fonctions regroupées avec plus de fonctions plutôt que de se plonger dans les processus de mise en œuvre de chaque fonction spécifique.
Regardons maintenant un exemple de tests de fonctions dans un référentiel. Les attentes en matière de cohérence pour de telles fonctions sont naturellement bien inférieures à celles pour les fonctions de langage intégrées. Cela est particulièrement vrai dans les cas où les fonctions dépendent de ressources externes telles que les API. Il est important d'effectuer en permanence des tests cohérents, ce qui se produit automatiquement au sein des algorithmes de vérification. Dans le fichier nb, vous pouvez spécifier explicitement des définitions (dans la section Informations supplémentaires) et spécifier autant de tests définis soit par des chaînes d'entrée et de sortie, soit par des objets de caractères complets de type
En conséquence, le référentiel de fonctions présentera un certain nombre de complexités de mise en œuvre. Certains ne consisteront qu'en une seule ligne de code, d'autres peuvent impliquer des milliers ou des dizaines de milliers de lignes, utilisant probablement de nombreuses fonctions d'assistance. Quand vaut-il la peine d’ajouter une fonction qui nécessite très peu de code à définir ? En gros, si pour une fonction il y a
L'objectif principal d'un référentiel de fonctions (comme son nom l'indique) est d'introduire de nouvelles fonctionnalités dans le langage. Si vous souhaitez ajouter de nouvelles données ou
Il existe en fait deux manières. Vous souhaiterez peut-être introduire un nouveau type d'objet qui sera utilisé dans les nouvelles fonctions du référentiel de fonctions. Et dans ce cas, vous pouvez toujours simplement écrire sa représentation symbolique et l'utiliser lors de la saisie ou de la sortie de fonctions dans un référentiel de fonctions.
Mais que se passe-t-il si vous souhaitez représenter un objet puis définir, via des fonctions existantes dans Wolfram Language, que vous souhaitez travailler avec lui ? Wolfram Language a toujours eu un mécanisme léger pour cela, appelé
Alors, que peut contenir le code de fonction dans un référentiel de fonctions ?
Tout le code du référentiel de fonctionnalités Wolfram doit-il être écrit en Wolfram ? Certes, le code à l'intérieur de l'API externe ne doit pas être écrit dans le langage Wolfram, qui ne crée même pas le code du langage. En fait, si vous trouvez une fonction dans presque n'importe quel langage ou bibliothèque externe, vous pouvez créer un wrapper qui vous permet de l'utiliser dans le référentiel de fonctions Wolfram. (Habituellement, vous devez utiliser les fonctions intégrées pour cela
Alors, quel est l'intérêt de faire ça ? Essentiellement, cela vous permet d'utiliser l'intégralité du système Wolfram Language intégré et l'ensemble de son ensemble unifié de fonctionnalités logicielles. Si vous obtenez l'implémentation de base à partir d'une bibliothèque ou d'un langage externe, vous pouvez ensuite utiliser la riche structure symbolique de Wolfram Language pour créer une fonction de niveau supérieur pratique qui permet aux utilisateurs d'utiliser facilement n'importe quelle fonctionnalité déjà implémentée. À tout le moins, cela devrait être réalisable dans un monde idéal où tous les éléments de base du chargement des bibliothèques, etc. existent, auquel cas ils seraient gérés automatiquement par Wolfram Language. (Il convient de noter qu'en pratique, il peut y avoir des problèmes avec
À propos, lorsque vous examinez pour la première fois les bibliothèques externes typiques, elles semblent souvent trop complexes pour être couvertes par quelques fonctions seulement, mais dans de nombreux cas, une grande partie de la complexité vient de la création de l'infrastructure nécessaire à la bibliothèque et à toutes les fonctions. soutenez-le. Cependant, lors de l'utilisation de Wolfram Language, l'infrastructure est généralement déjà intégrée aux packages, et il n'est donc pas nécessaire d'exposer toutes ces fonctions de support en détail, mais uniquement de créer des fonctions pour les fonctions spécifiques à l'application « les plus élevées » dans la bibliothèque. .
"Ecosystème" de la base de connaissances
Si vous avez écrit des fonctions que vous utilisez régulièrement, soumettez-les au Wolfram Function Repository ! Si quelque chose de plus n'en ressort pas (développement du langage), il vous sera même alors beaucoup plus pratique d'utiliser les fonctions pour un usage personnel. Cependant, il est logique de supposer que si vous utilisez les fonctions régulièrement, d'autres utilisateurs les trouveront peut-être également utiles.
Bien entendu, vous pouvez vous retrouver dans une situation dans laquelle vous ne pouvez pas - ou ne souhaitez 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 les fonctions dans votre propre compte cloud,
Les fonctions que vous soumettez au référentiel de fonctions Wolfram n'ont pas besoin d'être parfaites ; ils doivent juste être utiles. C'est un peu comme la section "Erreurs" de la documentation Unix classique - dans la "Section Définitions", il y a une section "Notes 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 soumettez votre fonctionnalité au référentiel, vous pouvez ajouter des notes de soumission qui seront lues par une équipe dédiée de conservateurs.
Une fois qu'une fonctionnalité est publiée, sa page comporte toujours deux liens en bas : "
Parfois, vous souhaitez simplement utiliser les fonctions du référentiel de fonctions Wolfram, telles que les fonctions intégrées, sans regarder leur code. Cependant, si vous souhaitez jeter un œil à l’intérieur, il y a toujours un bouton Bloc-notes en haut. Cliquez dessus et vous obtiendrez votre propre copie du cahier de définition original qui a été soumis au référentiel de fonctionnalités. Parfois, vous pouvez simplement l'utiliser comme exemple pour vos besoins. En même temps, vous pouvez également développer votre propre modification de cette fonction. Vous souhaiterez peut-être publier ces fonctions que vous avez trouvées dans le référentiel sur votre ordinateur ou dans votre compte de stockage cloud sur les pucerons, peut-être souhaiterez-vous les soumettre à la base de connaissances des fonctions, peut-être en tant que version améliorée et étendue de la fonction d'origine.
À l'avenir, nous prévoyons de prendre en charge le forking de style Git pour les référentiels de fonctionnalités, mais pour l'instant, nous essayons de rester simples et nous n'avons toujours qu'une seule version acceptée de chaque fonctionnalité intégrée au langage. Le plus souvent (à moins que les développeurs ne renoncent à maintenir les fonctionnalités qu'ils ont développées et répondent aux soumissions des utilisateurs), l'auteur original de la fonctionnalité prend le contrôle des mises à jour et soumet de nouvelles versions, qui sont ensuite révisées et, si elles réussissent le processus de révision. , publié dans la langue.
Considérons la question de savoir comment fonctionne le « versioning » des fonctions développées. Actuellement, lorsque vous utilisez une fonction du référentiel de fonctions, sa définition sera stockée en permanence sur votre ordinateur (ou dans votre compte cloud si vous utilisez le cloud). Si une nouvelle version d'une fonctionnalité est disponible, la prochaine fois que vous l'utiliserez, vous recevrez un message vous en informant. Et si vous souhaitez mettre à jour la fonction vers une nouvelle version, vous pouvez le faire en utilisant la commande
L'un des avantages du Wolfram Function Repository est que n'importe quel programme Wolfram Language, où qu'il soit, peut en utiliser les fonctions. Si un programme apparaît dans un bloc-notes, il est souvent pratique de formater les fonctions du référentiel sous forme de fonctions « objet binaire de fonction » faciles à lire (peut-être avec un jeu de versions approprié).
Vous pouvez toujours accéder à n'importe quelle fonction du référentiel de fonctions en utilisant du texte
Comment ça marche?
Dans les fonctions du référentiel Wolfram, cela est possible en utilisant exactement la même chose
Considérer
À l'intérieur, vous pouvez voir certaines informations en utilisant la fonction
Comment fonctionne la mise en place d’une fonction ressource ? Le plus simple est un cas purement local. Voici un exemple qui prend une fonction (dans ce cas, juste une fonction pure) et la définit comme une fonction de ressource pour une session de programme donnée :
Une fois la définition faite, vous pouvez utiliser la fonction ressource :
Notez qu'il y a une icône noire dans ce blob de fonction . Cela signifie que la fonction BLOB fait référence à la fonction de ressource en mémoire définie pour la session en cours. Une fonctionnalité de ressource stockée en permanence sur votre ordinateur ou votre compte cloud comporte une icône grise. . Et il y a une icône orange pour une fonctionnalité de ressource officielle dans le référentiel de fonctionnalités Wolfram. .
Alors, que se passe-t-il lorsque vous utilisez le menu Développer dans le cahier de définition ? Premièrement, il prend toutes les définitions du bloc-notes et crée à partir d'elles un fichier symbolique.
Le déploiement local d'une fonction depuis un référentiel sur votre ordinateur s'effectue à l'aide de la commande
Si vous cliquez sur le bouton Soumettre pour un référentiel de fonctions, que se passe-t-il en dessous ?
Par défaut, les soumissions sont effectuées sous le nom associé à votre identifiant Wolfram. Mais si vous soumettez une candidature au nom d'une équipe ou d'une organisation de développement, vous pouvez
Une fois que vous avez soumis l'une de vos fonctions à la base de connaissances des fonctions, elle sera mise en file d'attente pour examen. Si vous recevez des commentaires en réponse, ils se présenteront 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 candidature en visitant
Quelques subtilités au travail
À première vue, il peut sembler que vous pouvez simplement prendre un cahier de définitions et le mettre textuellement dans un référentiel de fonctions. Cependant, de nombreuses subtilités sont en réalité impliquées - et leur gestion nécessite une méta-programmation assez complexe, ainsi qu'un traitement symbolique. comme le code qui définit la fonction, et le Bloc-notes lui-même est défini. La plupart de cela se produit en interne, dans les coulisses, mais cela peut avoir certaines implications qui méritent d'être comprises si vous souhaitez contribuer à la base de connaissances sur les fonctionnalités.
Première subtilité immédiate : Lorsque vous remplissez le Carnet de Définition, vous pouvez simplement faire référence à votre fonction partout en utilisant un nom comme MaFonction, qui ressemble à un nom normal pour une fonction dans Wolfram Language, mais pour la documentation du référentiel de fonctions, il est remplacé
Deuxième subtilité : lorsque vous créez une fonction ressource à partir du Definition Notebook, toutes les dépendances impliquées dans la définition de la fonction doivent être capturées et explicitement incluses. Cependant, pour garantir que les définitions restent modulaires, vous devez tout mettre dans un format unique.
En règle générale, 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 sous-exécuté à l'intérieur de votre fonction, alors vous verrez que ce symbole se trouve dans le contexte interne de la fonction. Cependant, lors du traitement du Bloc-notes de définition, au moins le symbole correspondant à la fonction elle-même est
Le référentiel de fonctions sert à définir de nouvelles fonctions. Et ces fonctions peuvent avoir des options. Souvent, ces paramètres (par exemple,
La plupart des fonctions font simplement ce qu'elles sont censées faire à chaque fois qu'elles sont appelées, mais certaines fonctions doivent être initialisées avant de pouvoir s'exécuter dans une session particulière - et pour résoudre ce problème, il existe une section "Initialisation" dans la section Définition.
Les fonctions d'un référentiel peuvent utiliser d'autres fonctions déjà présentes dans le référentiel ; afin de configurer des définitions pour un référentiel de fonctions qui incluent deux (ou plus) fonctions qui se référencent mutuellement, vous devez les déployer dans votre session de programme afin de pouvoir référence comme sur eux
Perspectives de développement. Que devrait-il se passer lorsque le référentiel devient vraiment volumineux ?
Aujourd'hui, nous lançons tout juste le Wolfram Feature Repository, mais avec le temps, nous nous attendons à ce que sa taille et ses fonctionnalités augmentent considérablement, et à mesure que son développement progresse, divers problèmes que nous prévoyons déjà pourraient survenir.
Le premier problème concerne les noms de fonctions et leur unicité. Le référentiel de fonctions est conçu de telle manière que, comme les fonctions intégrées dans Wolfram Language, vous pouvez référencer n'importe quelle fonction donnée simplement en spécifiant son nom. Mais cela signifie inévitablement que les noms de fonctions doivent être globalement uniques dans le référentiel, de sorte que, par exemple, il ne peut y en avoir qu'un seul.
Cela peut sembler un gros problème au début, mais il convient de réaliser qu'il s'agit fondamentalement du même problème que pour des choses comme les domaines Internet ou les identifiants de réseaux sociaux. Et le fait est que le système a simplement besoin d'un registraire - et c'est l'un des rôles que notre société jouera pour la base de connaissances des fonctions Wolfram. (Pour les versions privées d'un référentiel, leurs registraires peuvent être des administrateurs.) Bien entendu, un domaine Internet peut être enregistré sans rien contenir, mais dans un référentiel de fonctions, un nom de fonction ne peut être enregistré que s'il existe une véritable définition de la fonction.
Une partie de notre rôle dans la gestion de la base de connaissances des fonctions Wolfram consiste à garantir que le nom choisi pour une fonction est logique compte tenu de la définition de la fonction et qu'il respecte les conventions de dénomination de Wolfram Language. Nous avons plus de 30 ans d'expérience dans la dénomination de fonctions intégrées dans Wolfram Language, et notre équipe de conservateurs apportera également cette expérience au référentiel 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 certaines fonctions, mais il est préférable de « défendre » avec un nom plus long et plus précis, car vous risquez moins de rencontrer quelqu'un qui voudrait donner un nom de fonction similaire à l'avenir. .
(Il convient de noter ici que le simple fait d'ajouter une balise membre pour lever l'ambiguïté des fonctions n'aura pas l'effet escompté. Parce qu'à moins que vous n'insistiez pour toujours attribuer une balise, vous devrez définir une balise par défaut pour une fonction donnée, et également attribuer des balises d'auteur. , ce qui nécessiterait encore une fois une coordination mondiale.)
À mesure que la base de connaissances des fonctions Wolfram s'agrandit, l'un des problèmes qui se posera probablement est la possibilité de découvrir les fonctions pour lesquelles le système fournit
Pour les fonctions intégrées dans Wolfram Language, il existe une couche de détection fournie par
Le référentiel de fonctions Wolfram est configuré comme un référentiel de fonctions persistant, dans lequel toutes les fonctions qu'il contient fonctionneront toujours. Bien entendu, de nouvelles versions de fonctionnalités peuvent être disponibles, et nous nous attendons bien sûr à ce que certaines fonctionnalités deviennent obsolètes avec le temps. Les fonctions fonctionneront si elles sont utilisées dans des programmes, mais leurs pages de documentation seront liées à de nouvelles fonctions plus avancées.
Le référentiel de fonctionnalités Wolfram est conçu pour vous aider à découvrir rapidement de nouvelles fonctionnalités et à apprendre de nouvelles façons d'utiliser le langage Wolfram. Nous sommes très optimistes sur le fait qu'une partie de ce qui a été exploré dans le référentiel de fonctionnalités aura finalement du sens et deviendra une partie intégrée du noyau de Wolfram Language. Au cours de la dernière décennie, nous avons eu un ensemble similaire
La chose la plus importante ici est qu'une fonction dans un référentiel de fonctions est quelque chose qui est disponible pour chaque utilisateur dès maintenant. Il est possible qu'une fonctionnalité en langage natif soit bien meilleure et plus performante, mais un référentiel de fonctionnalités permettrait aux utilisateurs d'avoir immédiatement accès à toutes les nouvelles fonctionnalités. Et surtout, ce concept permet à chacun d’ajouter les nouvelles fonctionnalités qu’il souhaite.
Plus tôt dans l'histoire du langage Wolfram, cette idée n'aurait pas fonctionné aussi bien qu'elle l'a fait, mais à ce stade, il y a tellement d'efforts investis dans le langage, et une compréhension si profonde des principes de conception du langage, qu'il semble maintenant très Il est possible pour une large communauté d'utilisateurs d'ajouter des fonctionnalités qui maintiendront la cohérence de la conception afin de les rendre utiles à un large éventail d'utilisateurs.
Il existe un incroyable esprit de talent (?) dans la communauté des utilisateurs de Wolfram Language. (Bien sûr, cette communauté comprend de nombreuses personnes de premier plan en R&D dans divers domaines.) J'espère que le Wolfram Feature Repository fournira une plate-forme efficace pour libérer et diffuser cet esprit de talent. Ce n'est qu'ensemble que nous pourrons créer quelque chose qui élargira considérablement le domaine dans lequel le paradigme informatique du langage Wolfram peut être appliqué.
En plus de 30 ans, nous avons parcouru un long chemin avec le langage Wolfram. Désormais, ensemble, allons encore plus loin. J'encourage fortement tous les utilisateurs respectés du langage Wolfram dans le monde à utiliser le référentiel fonctionnel comme plate-forme pour cela, ainsi que le nouveau projet logiciel tel que Free Wolfram Engine for Developers.
Source: habr.com