Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Hallo, Habr! Ich präsentiere Ihnen die Übersetzung des Beitrags von Steven Wolfram „Das Wolfram-Funktions-Repository: Start einer offenen Plattform zur Erweiterung der Wolfram-Sprache“.

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Die Voraussetzungen für die Leistungsfähigkeit der Wolfram-Sprache

Heute stehen wir an der Schwelle zu großartigen Fortschritten mit der Programmiersprache Wolfram Language. Vor nur drei Wochen haben wir eine kostenlose Wolfram-Engine für Entwickler, um unseren Nutzern zu helfen, die Wolfram Language in ihre umfangreichen Softwareprojekte zu integrieren. Heute starten wir das Wolfram-Funktionsrepository, um eine koordinierte Plattform für Funktionen bereitzustellen, die zur Erweiterung der Wolfram-Sprache geschaffen wurden, zugleich öffnen wir das Funktionsrepository für alle, die zur Weiterentwicklung unseres Softwareprodukts beitragen möchten.

Das Wolfram-Funktionsrepository (Function Repository) ist das, was dank der einzigartigen Merkmale der Wolfram-Sprache möglich geworden ist, nicht nur als Programmiersprache, sondern auch als vollwertige Computational Language. In traditionellen Programmiersprachen erfordert das Hinzufügen bedeutender neuer Funktionen normalerweise die Erstellung ganzer zusätzlicher Bibliotheken, die möglicherweise nicht optimal zusammenarbeiten. Doch in der Wolfram-Sprache ist bereits so viel im Kern des Codes integriert, dass es möglich ist, ihre Funktionalität erheblich zu erweitern, indem einfach neue Funktionen hinzugefügt werden, die sofort in die Gesamtstruktur der Sprache integriert werden.

Derzeit enthält das Wolfram-Funktionsrepository bereits 532 neue Funktionen , die in 26 thematischen Kategorien strukturiert sind:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Ähnlich wie über 6000 Standardfunktionen, die in die Wolfram-Sprache integriert sind, verfügt jede Funktion im Repository über eine Dokumentationsseite mit detaillierten Beschreibungen und Beispielen:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Um zur Seite zu gelangen, kopieren Sie das oben genannte Objekt (Funktions-BLOB), fügen Sie es in die Eingabezeile ein und führen Sie dann die Funktion aus – sie ist bereits in die Wolfram-Sprache integriert und wird standardmäßig unterstützt, beginnend mit Version 12.0:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Hier sei erwähnt, dass bei der Verarbeitung LogoQRCode Sie beispielsweise keine „Bildverarbeitungsbibliothek“ einrichten müssen – da in der Wolfram-Sprache bereits ein konsistenter und gut durchdachter Algorithmus zur Bildverarbeitung implementiert wurde, die umgehend von verschiedenen grafischen Funktionen der Sprache verarbeitet werden können:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Ich hoffe, dass mit Unterstützung einer großartigen und talentierten Gemeinschaft, die auf der Grundlage der Wolfram Language seit mehreren Jahrzehnten wächst und sich erweitert. Das Wolfram Funktionsrepository wird in naher Zukunft erheblich die Bandbreite der Funktionen erweitern, die in der Sprache verfügbar sind, möglicherweise von großem Nutzen und spezialisiert auf unterschiedliche Wissensbereiche in Wissenschaft und Technik. Damit besteht die Möglichkeit, sowohl den Inhalt der Sprache (ihre eingebauten Funktionen) als auch Entwicklungsprinzipien, die auf der Grundlage der Sprache implementiert werden. (Hier sei erwähnt, dass die Wolfram Language bereits seit mehr als 30 Jahren in Entwicklung und stabilen Wachstum ist.).
Innerhalb der Funktionen aus dem Repository können kleine oder recht umfangreiche Codefragmente existieren, die in der Sprache Wolfram Language geschrieben sind. Beispielsweise können dies Aufrufe von externen APIs und Diensten oder externen Bibliotheken in anderen Sprachen sein.. Ein einzigartiges Merkmal dieses Ansatzes ist, dass, wenn Sie zur Benutzerfunktionalität übergehen, mögliche Inkonsistenzen aufgrund der Tatsache, dass dieser Ansatz auf der konsistenten Struktur der Wolfram Language basiert, nicht auftreten werden – und jede Funktion wird automatisch korrekt arbeiten – genau so, wie es vorgesehen ist.
Die Shell und die Softwarestruktur des Wolfram Funktionsrepositorys sind so eingestellt, dass jeder seinen Beitrag zur gemeinsamen Sache auf die einfachste und bequemste Weise leisten kann – im Grunde genommen einfach eine Textdatei im Notizbuchformat (mit der Endung nb) WL auszufüllen.Die integrierten automatischen Funktionen ermöglichen die Überprüfung neuer, dem Repository hinzugefügter Funktionen, um deren garantierte Integration in die Sprache sicherzustellen. Unser Unternehmen setzt auf einen breiten Benutzerkreis, der in der Lage ist, seine Funktionen in die Sprache zu integrieren, und nicht auf große Komplexitäten neuer Funktionen – obwohl hier ein Prüfprozess umgesetzt ist, bestehen wir nicht auf so etwas wie aufwendiger Analyse der Struktur oder strenger Standards für die Vollständigkeit und Zuverlässigkeit neuer Benutzerfunktionen, im Gegensatz zu den gründlicheren Prüfungen der Funktionen, die im Kern der Sprache eingebaut sind, die wir anwenden.

In diesem Ansatz gibt es viele Kompromisse und Details, aber unser Ziel ist es, das Funktionsrepository von Wolfram sowohl für die Benutzerfreundlichkeit zu optimieren als auch sicherzustellen, dass die neuen Benutzerfunktionen einen spürbaren Beitrag zur Entwicklung der Sprache leisten. Mit wachsendem Umfang bin ich mir sicher, dass wir neue Methoden zur Verarbeitung und Überprüfung der in das Repository integrierten Funktionen erfinden müssen, nicht zuletzt, um die große Anzahl von Funktionen zu organisieren und die benötigten Funktionen für die Benutzer zu finden. Dennoch kann es nicht entmutigen, dass unser gewählter Weg ein guter Anfang ist. Ich habe persönlich einige Funktionen hinzugefügt zur ursprünglichen Basis. Viele von ihnen basieren auf Code, den ich persönlich über einen längeren Zeitraum entwickelt habe. Und ich habe nur wenige Minuten gebraucht, um sie ins Repository zu übermitteln. Jetzt, wo sie im Repository sind, kann ich die Funktionen endlich – sofort und jederzeit – nach Bedarf nutzen, ohne mir Gedanken über das Suchen von Dateien, das Herunterladen von Paketen usw. machen zu müssen.

Effizienzsteigerung bei gleichzeitiger Kostensenkung

Bereits vor dem Internet gab es Möglichkeiten, Code in der Wolfram Language auszutauschen (unser erstes großes zentralisiertes Projekt war MathSource, das 1991 für Mathematica auf CD-ROM und ähnlichem erstellt wurde). Sicherlich stellt der vorgeschlagene Ansatz zur Implementierung des Wolfram Funktionsrepositories ein leistungsfähigeres und zuverlässigeres Mittel dar, um die oben genannten Aufgaben zu erfüllen.

Seit über 30 Jahren arbeitet unser Unternehmen hart daran, die Integrität der Wolfram-Sprache zu bewahren, und das ist sehr wichtig, damit die Wolfram-Sprache nicht nur eine Programmiersprache ist, sondern auch eine vollwertige Berechnungssprache. Somit besteht der Kernansatz zur Implementierung des Wolfram Funktionsrepositories darin, einen einheitlichen Ansatz für die Programmierung und die Entwicklung neuer Funktionen zu nutzen, die schrittweise hinzugefügt und in den Rahmen der Sprache integriert werden, um ihre Weiterentwicklung und gemeinsame Evolution zu ermöglichen.

In der Struktur der Implementierung jeder Funktion finden verschiedene Berechnungsprozesse statt. Dabei ist es wichtig, dass die Funktion für den Benutzer klar und einheitlich aussieht und eine gute Lesbarkeit aufweist. In diesem Zusammenhang werden die eingebauten Funktionen der Wolfram Language durch mehr als 6000 aufeinanderfolgende Beispiele dargestellt, wie man Funktionen richtig programmiert (das sind unsere Live-Videotutorials zum Programmieren, die umfassen Hunderte von Stunden des Prozesses zur Erstellung typischer Programme). Dieser Ansatz ermöglicht es letztendlich, das Wolfram-Funktionsrepository gut funktionsfähig zu machen. Die strukturelle Beschaffenheit der Wolfram Language mit ihrer großen Anzahl an zusätzlichen und vielfältigen Bibliotheken, die bereits in die Sprache integriert sind, spielt dabei eine entscheidende Rolle. Zum Beispiel, wenn Sie eine Funktion haben, die Bilder verarbeitet, oder dünne Arrays, oder molekulare Strukturen, sowie geographische Daten oder andere – in der Sprache gibt es bereits eine kohärente symbolische Darstellung dafür, und dadurch wird Ihre Funktion sofort mit anderen Funktionen in der Sprache kompatibel.

Die Erstellung eines Repositories, das tatsächlich gut funktioniert, ist eine interessante Herausforderung des Metaprogrammierens. Beispielsweise wird ein Übermaß an Einschränkungen im Programm die erforderliche Vereinheitlichung und Universalität des Algorithmus nicht ermöglichen. Ebenso wird es bei unzureichenden funktionalen Einschränkungen nicht möglich sein, eine ausreichend korrekte Ausführungsreihenfolge des Algorithmus zu realisieren. Einige frühere Beispiele für die Umsetzung eines Kompromisses dieser Ansätze, die von unserem Unternehmen umgesetzt wurden, funktionierten ziemlich stabil – darunter: Das Wolfram Demonstrationen-Projekt, das 2007 gestartet wurde und jetzt interaktiv im Internet arbeitet und mehr als 12000 interaktive Benutzer-Demonstrationen enthält. In der Wolfram-Datenbank gibt es mehr als 600 fertige Datenbanken, die in der Wolfram Language verwendet werden können, und das Wolfram-Neuronennetzwerk wird praktisch wöchentlich mit neuen neuronalen Netzen aktualisiert (derzeit sind es bereits 118), und sie werden sofort über die Funktion NetModel in der Wolfram Language integriert.

Alle oben genannten Beispiele haben ein grundlegendes Merkmal – die im Projekt gesammelten Objekte und Funktionen sind sehr stark strukturiert und verteilen die Prozesse. Unbestreitbar können die Details der Struktur dessen, was eine Demonstration oder ein neuronales Netzwerk oder etwas anderes ist, stark variieren, aber die fundamentale Struktur für jedes aktuelle Repository bleibt stets unverändert. Was denken Sie also, geschätzter Nutzer, über die Schaffung eines solchen Repositories, das Erweiterungen für die Wolfram-Sprache hinzufügt? Die Wolfram-Sprache ist so konzipiert, dass sie äußerst flexibel ist, sodass sie auf beliebige Weise erweitert und verändert werden kann. Diese Tatsache ist von wesentlicher Bedeutung für die Möglichkeit, schnell verschiedene großangelegte Softwareprojekte in der Wolfram-Sprache zu erstellen. Hier ist zu beachten, dass mit der zunehmenden Flexibilität der Sprache auch die Kosten für Projekte, die in dieser Sprache realisiert werden, unvermeidlich steigen werden. Dies geschieht, weil je mehr ein Nutzer eine solche Sprache anwendet, desto mehr erhält er spezielle Funktionalität, aber man sollte nicht vergessen, dass dieser Ansatz auch negative Aspekte hinsichtlich der Unmöglichkeit, die konsistente Kohärenz von Softwaremodulen zu gewährleisten, haben kann.

In traditionellen Programmiersprachen gibt es ein weit verbreitetes Problem mit Bibliotheken – wenn Sie beispielsweise eine Bibliothek verwenden, funktioniert der Code korrekt, aber wenn Sie versuchen, mehrere Bibliotheken zu verwenden, gibt es keine Garantie, dass sie korrekt miteinander interagieren. Darüber hinaus fehlen in traditionellen Programmiersprachen – im Gegensatz zu einer vollwertigen Berechnungssprache – die Möglichkeiten, garantierte Kohärenz integrierter Darstellungen für beliebige Funktionen oder Datentypen, abgesehen von ihren grundlegenden Strukturen, sicherzustellen. Aber im Grunde genommen ist das Problem noch größer, als es auf den ersten Blick erscheint: Wenn jemand eine großangelegte vertikale Funktionalität aufbaut, ist es ohne enorme Kosten für die zentralisierte Programmierung des Projekts, die wir in die Wolfram-Sprache investiert haben, unmöglich, Kohärenz zu erreichen. Daher ist es wichtig, dass alle Softwaremodule stets korrekt zusammenarbeiten.

Die Idee des Wolfram-Funktionsrepositories besteht darin, das oben angesprochene Problem zu vermeiden – indem einfach Erweiterungen zur Sprache in Form von vergleichsweise kleinen Programmcodeelementen durch separate Funktionen hinzugefügt werden, deren Entwicklung als konsolidierte Module eine einfachere Aufgabe darstellt. Dabei gibt es Programmierbesonderheiten, die mit einzelnen Funktionen nicht bequem gelöst werden können (und unser Unternehmen plant, in naher Zukunft einen optimierten Softwarealgorithmus zur Unterstützung bei der Implementierung umfangreicher Softwarepakete zu veröffentlichen). Allerdings gibt es auf der Basis der bereits in die Wolfram Language integrierten Funktionen viele Programmiermöglichkeiten, die auf einzelnen Funktionen basieren. Der Gedanke hierbei ist, dass mit vergleichsweise geringem Programmieraufwand eine Reihe neuer und sehr nützlicher Funktionen geschaffen werden kann, die ausreichende Konsistenz des Projekts gewährleisten, wobei sie gut aufeinander abgestimmt sein werden und zusätzlich leicht und breit in der Sprache für zukünftige Anwendungen genutzt werden können.

Dieser Ansatz ist zweifellos ein Kompromiss. Bei der Umsetzung eines umfassenderen Pakets kann man sich eine völlig neue Welt der Funktionalität vorstellen, die äußerst leistungsstark und nützlich sein wird. Falls die Notwendigkeit besteht, neue funktionale Möglichkeiten zu schaffen, die sich nahtlos in alles andere einfügen, aber Sie nicht bereit sind, enorme Anstrengungen in die Projektentwicklung zu investieren, kann dies leider dazu führen, dass der Umfang Ihres Projekts verringert wird. Die Idee des Wolfram-Funktionsrepositories besteht darin, die funktionale Grundlage eines Projekts bereitzustellen; dieser Ansatz ermöglicht die Hinzufügung leistungsstarker Funktionen, während gleichzeitig die Aufrechterhaltung einer guten Konsistenz des Softwareprojekts vereinfacht wird.

Hilfe beim Hinzufügen benutzerdefinierter Funktionen zum Funktionsrepository

Die Spezialisten unseres Unternehmens haben hart daran gearbeitet, ihren Beitrag zu den Funktionen des Wolfram-Repositories für die Nutzer so einfach wie möglich zu gestalten. Auf dem Desktop (bereits in Version 12.0), Sie können einfach der Reihenfolge nach durch die Registerkarten des Hauptmenüs gehen: Datei > Neu > RepositoryItem > Funktions-Repository-Element und Sie erhalten „Definitions-Notizbuch» (programmgesteuert innerhalb der Arbeitsumgebung. Sie können auch die Funktion ähnlich verwenden — CreateNotebook[„FunctionResource“]):

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Es gibt zwei Hauptaktionen, die Sie durchführen müssen: Erstens den Code Ihrer Funktion tatsächlich aufzuschreiben und zweitens die Dokumentation zu erstellen, die verdeutlicht, wie Ihre Funktion funktionieren sollte.
Klicken Sie auf die Schaltfläche „Beispiel öffnen“ oben, um ein Beispiel dafür zu sehen, was Sie tun müssen:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Tatsächlich versuchen Sie, etwas zu erstellen, das der eingebauten Funktion in der Wolfram-Sprache ähnelt. Außer dass sie etwas viel spezifischeres tun kann als eine eingebaute Funktion. Die Erwartungen an ihre Vollständigkeit und Zuverlässigkeit werden dabei viel geringer sein.
Sie müssen Ihrer Funktion einen Namen geben, der den Namenskonventionen der Wolfram-Sprache entspricht. Darüber hinaus müssen Sie Dokumentation für Ihre Funktion entwickeln, ähnlich den eingebauten Funktionen der Sprache. Ich werde später näher darauf eingehen. Beachten Sie jetzt einfach, dass es in der Reihe der Schaltflächen oben im Definitionsnotizbuch eine Schaltfläche gibt „Stilrichtlinien“, die erklärt, was zu tun ist, und eine Schaltfläche „Werkzeuge“, die Werkzeugkasten für die Formatierung der Dokumentation Ihrer Funktion bereitstellt.
Wenn Sie sicher sind, dass alles richtig ausgefüllt ist und Sie bereit sind, klicken Sie auf die Schaltfläche „Check“ („Überprüfen“). Es ist völlig normal, dass Sie noch nicht mit allen Details vertraut sind. Daher wird die Funktion „Check“ automatisch ausgeführt und viele Stil- und Konsistenzprüfungen durchführen. Oft wird sie Ihnen sofort vorschlagen, die Korrekturen zu bestätigen und zu akzeptieren (z. B.: „Diese Zeile muss mit einem Doppelpunkt enden“ und sie wird vorschlagen, einen Doppelpunkt einzugeben). Manchmal wird sie Sie bitten, etwas selbst hinzuzufügen oder zu ändern. Wir werden ständig neue Funktionen in die automatische Funktionalität der Schaltfläche „Check“ einfügen, aber insgesamt besteht ihr Ziel darin, sicherzustellen — alles, was Sie in das Funktionsrepository einreichen, entspricht so genau wie möglich den Stilrichtlinien.

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Nachdem Sie also die Schaltfläche „Check“ gedrückt haben, können Sie „Preview“ verwenden. „Preview“ erstellt eine Vorschau der Dokumentationsseite, die Sie für Ihre Funktion festgelegt haben. Sie können auch eine Vorschau für eine Datei erstellen, die auf Ihrem Computer oder in einem Cloud-Speicher gespeichert ist. Wenn Sie aus irgendeinem Grund mit dem, was Sie in der Vorschau sehen, unzufrieden sind, gehen Sie einfach zurück, nehmen Sie die notwendigen Änderungen vor und drücken Sie die Schaltfläche „Preview“ erneut.
Jetzt sind Sie bereit, Ihre Funktion im Repository zu platzieren. Die Schaltfläche „Deploy“ bietet Ihnen vier Aktionsmöglichkeiten:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

An diesem Punkt ist wichtig, dass Sie Ihre Funktion im Wolfram-Funktionsrepository einreichen können, damit sie für jeden Benutzer verfügbar ist. Gleichzeitig können Sie Ihre Funktion jedoch auch für eine begrenzte Anzahl von Benutzern bereitstellen. Zum Beispiel können Sie eine Funktion lokal auf Ihrem Computer bereitstellen, sodass sie verfügbar ist, wenn Sie diesen speziellen Computer verwenden. Oder Sie können sie in Ihrem Cloud-Konto, damit sie für Sie verfügbar ist, wenn Sie mit der Cloud verbunden sind. Sie können Ihre Funktion auch öffentlich über Ihr Cloud-Konto bereitstellen. Dabei wird sie nicht im zentralen Funktionsrepository von Wolfram angezeigt, aber Sie können jemandem eine URL geben, die es ihnen ermöglicht, Ihre Funktion aus Ihrem Konto zu beziehen. (In Zukunft werden wir auch zentrale Repositories auf Unternehmensebene unterstützen).

Angenommen, Sie möchten Ihre Funktion tatsächlich an die Wissensdatenbank der Wolfram-Funktionen übermitteln. Dazu klicken Sie auf die Schaltfläche „Senden“ ins Repository. Was passiert in diesem Moment? Ihre Anfrage wird sofort in die Warteschlange zur Prüfung und Genehmigung durch unser spezielles Kuratorenteam aufgenommen.

Während Ihre Anfrage den Genehmigungsprozess durchläuft (der normalerweise einige Tage in Anspruch nimmt), erhalten Sie Statusupdates zu ihrer Prüfung sowie möglicherweise Vorschläge zur weiteren Verwendung. Sobald Ihre Funktion genehmigt ist, wird sie umgehend im Wolfram-Funktionen-Repository veröffentlicht und für jede Nutzung verfügbar sein. (Und dies wird angezeigt in den Nachrichten-Updates über neue Funktionen usw.)

Was sollte im Repository sein?

Es ist wichtig zu beachten, dass unser Unternehmen sehr hohe Standards in Bezug auf Vollständigkeit, Zuverlässigkeit und allgemeine Qualität hat; von über 6000 Funktionen, die wir in den letzten 30 Jahren in die Wolfram-Sprache integriert haben, entsprechen alle diesen Anforderungen. Das Ziel des Wolfram-Funktionen-Repositories ist es, die gesamte Struktur und die Funktionalitäten, die bereits in der Wolfram-Sprache existieren, zu nutzen, um so viele einfachere Funktionen (d. h. Funktionen mit besserer Leistung) wie möglich hinzuzufügen.

Sicherlich müssen die Funktionen im Wolfram-Funktionen-Repository den Entwicklungsprinzipien der Wolfram-Sprache entsprechen, damit sie vollständig mit anderen Funktionen interagieren und den Erwartungen der Benutzer an das richtige Verhalten von Funktionen gerecht werden können. Allerdings ist es nicht erforderlich, dass die Funktionen in Bezug auf Vollständigkeit oder Zuverlässigkeit gleich sind.

In den eingebauten Funktionen der Wolfram-Sprache arbeiten wir hart daran, Softwarefunktionen so allgemein wie möglich zu gestalten. Daher ist es im Wolfram-Funktionen-Repository nicht falsch, eine Funktion zu haben, die einen sehr spezifischen, aber nützlichen Fall behandelt. Zum Beispiel kann die Funktion SendMailFromNotebook Dateien in einem bestimmten Format empfangen und eine E-Mail auf eine spezifische Weise erstellen. PolygonalDiagram erstellt Diagramme nur mit bestimmten Farben und Beschriftungen usw.

Ein weiterer Punkt im Zusammenhang mit den eingebetteten Funktionen ist, dass unser Unternehmen alle Anstrengungen unternimmt, um alle atypischen Fälle zu bearbeiten, um fehlerhafte Eingaben und so weiter korrekt zu behandeln. Im Repository der Funktionen ist es völlig normal, dass es eine spezielle Funktion gibt, die die grundlegenden Fälle zur Lösung eines Problems behandelt und alle anderen ignoriert.

Offensichtlich ist es besser, Funktionen zu haben, die mehr leisten und dies besser tun, aber die Optimierung für das Repository von Funktionen – im Gegensatz zu den eingebetteten Funktionen der Wolfram-Sprache – sollte mehr Funktionen haben, die mit einer größeren Anzahl von Funktionen verknüpft sind, als sich in die Implementierungsprozesse jeder speziellen Funktion zu vertiefen.

Nun wollen wir ein Beispiel für das Testen von Funktionen im Repository betrachten. Die Erwartungen an die Konsistenz solcher Funktionen sind natürlich viel geringer als die an die eingebetteten Funktionen der Sprache. Dies ist umso relevanter, wenn die Funktionen von externen Ressourcen wie APIs abhängen; es ist wichtig, ständig konsistente Tests durchzuführen, was automatisch innerhalb der Prüfalgorithmen geschieht. In der Datei nb können Sie explizit Definitionen (im Abschnitt „Zusätzliche Informationen“) angeben und so viele Tests definieren, die entweder durch Eingabe- und Ausgabewerte oder durch vollständige symbolische Objekte definiert sind, wie Sie für notwendig erachten. VerificationTest, so viele, wie Sie für notwendig erachten. Darüber hinaus versucht das System ständig, die von Ihnen angegebenen Beispiele aus der Dokumentation in einen Prüfprozess umzuwandeln (was manchmal recht ressourcenintensiv sein kann, zum Beispiel für Funktionen, deren Ergebnis von Zufallszahlen oder Tageszeiten abhängt).

Letztendlich wird es im Repository der Funktionen eine Reihe von Implementierungsherausforderungen geben. Einige werden einfach eine einzige Codezeile sein, andere können Tausende oder Zehntausende von Zeilen umfassen, wahrscheinlich unter Verwendung zahlreicher Hilfsfunktionen. In welchen Fällen sollte eine Funktion hinzugefügt werden, für die nur sehr wenig Code benötigt wird? Grundsätzlich, wenn für die Funktion ein guter einprägsamer Name existiert, das Benutzer bereitwillig verstehen würden, wenn sie es im Code sehen, kann bereits hinzugefügt werden. Andernfalls ist es wahrscheinlich besser, den Code jedes Mal erneut zu Ihrer Anwendung hinzuzufügen, wenn Sie ihn verwenden müssen.

Das Hauptziel des Funktionsrepositories (wie es der Name bereits sagt) besteht darin, neue Funktionen in die Funktionalität der Sprache einzuführen. Wenn Sie neue Daten oder neue Entitäten, verwenden Sie das Wolfram Data Repository. Aber was ist zu tun, wenn Sie neue Objekttypen für Ihre Berechnungen einführen möchten?

Es gibt tatsächlich zwei Wege. Möglicherweise möchten Sie einen neuen Objekttyp einführen, der in neuen Funktionen im Funktionsrepository verwendet wird. In diesem Fall können Sie einfach seine symbolische Darstellung aufzeichnen und sie beim Ein- oder Ausgeben von Funktionen im Funktionsrepository verwenden.

Aber was ist, wenn Sie ein Objekt darstellen und dann definieren möchten, welche bestehenden Funktionen in der Wolfram Language mit ihm arbeiten sollen? Dafür hat die Wolfram Language immer einen einfachen Mechanismus gehabt, der als UpValuesbekannt ist. Mit einigen Einschränkungen (insbesondere für Funktionen, die ihre Argumente nicht auswerten können), erlaubt das Funktionsrepository Ihnen einfach, eine Funktion darzustellen und Werte für sie zu definieren. (Um die Erwartung an Konsistenz beim Erstellen einer neuen wichtigen Konstruktion, die vollständig in der Wolfram Language integriert ist, zu erhöhen — das ist in der Regel ein sehr wichtiger Prozess, der nicht nur durch die Erhöhung der Projektkosten erreicht werden kann und das ist es, was unser Unternehmen im Rahmen von Projekten zur langfristigen Entwicklung der Sprache tut; diese Aufgabe ist kein Ziel, das im Rahmen der Entwicklung des Repositories gesetzt wird).

Was könnte also im Funktionscode des Funktionsrepositories enthalten sein? Alles, was in die Wolfram Language integriert ist,, natürlich (zumindest, wenn es keine Bedrohungen für für die Sicherheit und Funktionsfähigkeit des Programms selbst, wie der Berechnungsumgebung, darstellt) sowie jede Funktion aus dem Funktionsrepository. Gleichzeitig gibt es auch andere Funktionsmöglichkeiten: Eine Funktion im Funktionsrepository kann API aufrufen, entweder aus der Wolfram Cloud oder aus einer anderen Quelle., oder aus einer anderen Quelle. Natürlich gibt es einige Risiken, die damit verbunden sind. Aufgrund der fehlenden Garantien, dass sich die API nicht ändert und die Funktion im Funktionsspeicher dadurch nicht mehr funktioniert. Um solche Probleme zu identifizieren, gibt es einen Hinweis auf der Dokumentationsseite (im Abschnitt „Anforderungen“) für jede Funktion, die sich nicht nur auf die integrierte Funktionalität der Wolfram-Sprache stützt. (Natürlich kann es in der Praxis selbst bei solcher Funktionalität Probleme geben – denn reale Daten über die Welt ändern sich ständig, und manchmal ändern sogar die Definitionen und Strukturen.)

Muss der gesamte Code für das Wolfram-Funktionen-Repository in der Wolfram-Sprache geschrieben werden? Definiitv sollte der Code innerhalb einer externen API nicht in der Wolfram-Sprache geschrieben sein, was es eigentlich nicht zu Wolfram-Code macht. Tatsächlich, wenn Sie eine Funktion in fast jeder externen Sprache oder Bibliothek finden, können Sie eine Hülle erstellen, die es ermöglicht, sie im Wolfram-Funktionen-Repository zu verwenden. (In der Regel sollten dafür eingebaute Funktionen verwendet werden ExternalEvaluate oder ExternalFunction in Wolfram-Sprache.)

Was ist also der Sinn, das zu tun? Im Grunde ermöglicht es die Nutzung des gesamten integrierten Systems der Wolfram-Sprache und ihrer einheitlichen Softwaremöglichkeiten. Falls Sie eine grundlegende Implementierung aus einer externen Bibliothek oder Sprache erhalten, können Sie die reiche symbolische Struktur der Wolfram-Sprache nutzen, um eine benutzerfreundliche Oberflächenfunktion zu erstellen, die es Nutzern ermöglicht, jede bereits implementierte Funktionalität relativ einfach zu nutzen. Zumindest sollte dies in einer idealen Welt, in der alle Elemente des Bibliotheksladens usw. existieren, und in diesem Fall automatisch durch die Wolfram-Sprache gelöst werden, möglich sein. (Es ist anzumerken, dass in der Praxis Probleme mit den Einstellungen von externen Sprachen in einem bestimmten Computersystem auftreten können, und in der Cloud können zusätzliche Sicherheitsprobleme auftreten.)

Übrigens, wenn Sie zum ersten Mal typische externe Bibliotheken analysieren, erscheinen sie oft zu komplex, um sie lediglich mit einigen Funktionen zu erfassen. In vielen Fällen entsteht ein Großteil der Komplexität jedoch durch die Schaffung der Infrastruktur, die für die Bibliothek erforderlich ist, sowie durch all die Funktionen, die sie unterstützen. Bei der Verwendung der Wolfram Language ist die Infrastruktur jedoch in der Regel bereits in die Pakete integriert, sodass es nicht notwendig ist, all diese Unterstützungsfunktionen im Detail zu erläutern; es reicht aus, Funktionen für einige der 'obersten' anwendungsorientierten Funktionen in der Bibliothek zu erstellen.

„Ökosystem“ der Wissensdatenbank

Wenn Sie Funktionen geschrieben haben, die Sie ständig verwenden, senden Sie sie in das Funktionsrepository von Wolfram! Selbst wenn daraus letztlich nichts Größeres (die Entwicklung der Sprache) hervorgeht, wird es für Sie viel praktischer sein, die Funktionen für den persönlichen Gebrauch zu nutzen. Es ist jedoch logisch anzunehmen, dass, wenn Sie Funktionen ständig verwenden, auch andere Benutzer sie als nützlich empfinden könnten.

Es ist selbstverständlich, dass Sie sich in einer Situation befinden könnten, in der Sie nicht die Möglichkeit haben — oder nicht möchten — Ihre Funktionen zu teilen oder in Fällen, in denen Sie auf private Informationsressourcen zugreifen. Selbst in solchen Fällen können Sie die Funktionen einfach in Ihrem eigenen Cloud-Konto bereitstellen, indem Sie die Rechte für den Zugriff darauf angeben. (Wenn Ihre Organisation über eine private Wolfram Enterprise-Cloud, wird sie bald in der Lage sein, ein eigenes privates Funktionen-Repository bereitzustellen, das aus Ihrer Organisation verwaltet werden kann und den Zwischenschritt für die Ansicht durch externe Benutzer erzwungen oder nicht erzwungen werden kann.)

Die Funktionen, die Sie in das Funktionsrepository von Wolfram einreichen, müssen nicht perfekt sein; sie sollten einfach nützlich sein. Es ist ein wenig vergleichbar mit dem Abschnitt „Fehler“ in der klassischen Unix-Dokumentation — im „Definitionsbereich“ gibt es einen Abschnitt „Hinweise des Autors“, in dem Sie Einschränkungen, Probleme usw. beschreiben können, von denen Sie bereits wissen, dass sie Ihre Funktion betreffen. Außerdem können Sie beim Einreichen Ihrer Funktion im Repository Anmerkungen hinzufügen, die von einem speziellen Team von Kuratoren gelesen werden.

Nach der Veröffentlichung hat die Seite ihrer Funktion immer zwei Links am Ende: „Nachricht über diese Funktion senden» und „Im Wolfram-Community diskutieren». Wenn Sie einen Vermerk anfügen (z. B. mir Fehler melden), können Sie ein Kontrollkästchen aktivieren, in dem steht, dass Sie möchten, dass Ihre Nachricht und Ihre Kontaktdaten dem Autor der Funktion übermittelt werden.

Manchmal ist es notwendig, einfach Funktionen aus dem Wolfram Funktionsrepository zu verwenden, wie z. B. eingebaute Funktionen, ohne ihren Code einsehen zu müssen. Wenn Sie jedoch 'hineinschauen' möchten, gibt es stets eine Schaltfläche 'Notizbuch' oben. Klicken Sie darauf, und Sie erhalten eine eigene Kopie des ursprünglichen Notizbuchs der Definition, das an das Funktionsrepository gesendet wurde. Manchmal können Sie es einfach als Beispiel für Ihre eigenen Bedürfnisse verwenden. Dabei können Sie auch Ihre eigene Modifikation dieser Funktion entwickeln. Möglicherweise möchten Sie diese gefundenen Funktionen aus dem Repository auf Ihrem Computer oder in Ihrem Cloud-Speicher ablegen, oder eventuell möchten Sie sie in die Wissensdatenbank der Funktionen einfügen, vielleicht in einer verbesserten, erweiterten Version der ursprünglichen Funktion.

In Zukunft planen wir, eine Gilt-Stil-Verzweigung für Funktionsrepositories zu unterstützen, aber derzeit versuchen wir es einfacher zu gestalten, und es gibt immer nur eine allgemein akzeptierte Version jeder Funktion, die in die Sprache eingebaut ist. Häufig (sofern die Entwickler nicht auf die Unterstützung ihrer entwickelten Funktionen verzichten und auf Benutzeranfragen antworten) behält der ursprüngliche Autor der Funktion die Kontrolle über die Aktualisierungen und sendet neue Versionen, die dann geprüft werden und, wenn sie den Prüfprozess bestehen, in der Sprache veröffentlicht werden.

Betrachten wir die Frage, wie 'Versionierung' bei entwickelten Funktionen funktioniert. Im Moment, wenn Sie eine Funktion aus dem Funktionsrepository verwenden, wird ihre Definition ständig auf Ihrem Computer (oder in Ihrem Cloud-Konto, wenn Sie die Cloud nutzen) gespeichert. Wenn eine neue Version der Funktion herauskommt, erhalten Sie bei der nächsten Verwendung eine Nachricht, die Sie darüber informiert. Und wenn Sie die Funktion auf die neue Version aktualisieren möchten, können Sie dies mit dem Befehl ResourceUpdate(„Funktioneller BLOB-Objekt“ speichert tatsächlich mehr Informationen über Versionen, und wir planen, dies in Zukunft unseren Benutzern zugänglicher zu machen.)

Eine der großartigen Eigenschaften des Wolfram-Funktionsrepositories ist, dass jede Wolfram Language-Programm an jedem Ort Funktionen aus ihm verwenden kann. Wenn ein Programm in einem Notizbuch auftaucht, ist es oft praktisch, die Funktionen des Repositories als leicht lesbare „funktionale Binärobjekte“ (möglicherweise mit dem entsprechenden Versionsset) zu formatieren.

Sie können jederzeit auf jede Funktion im Funktionsrepository zugreifen, indem Sie den Text ResourceFunction []verwenden. Und das ist sehr praktisch, wenn Sie Code oder Skripte direkt für die Wolfram Engine schreiben, zum Beispiel mit einem IDE oder Texteditor (es ist besonders zu erwähnen, dass das Funktionsrepository vollständig kompatibel mit Free Wolfram Engine für Entwickler ist.).

Wie funktioniert das?

Innerhalb der Funktionen im Wolfram-Repository ist dies mit dem genau gleichen Ressourcensystem möglich wie in allen anderen bestehenden Repositories (Datenspeicher, Neural Net Repository,, Sammlung von Demoprojekten usw.), genau wie alle anderen Systemressourcen von Wolfram, ResourceFunction basiert letztendlich auf der Funktion ResourceObject..

Betrachten wir ResourceFunction:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Darüber hinaus können Sie einige Informationen sehen, indem Sie die Funktion Information:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

verwenden. Wie funktioniert die Einrichtung einer Ressourcenfunktion? Der einfachste Fall ist ein rein lokales Beispiel. Hier ist ein Beispiel, das eine Funktion (in diesem Fall eine einfache Funktion) aufnimmt und sie als Ressourcenfunktion für die gegebene Programmsitzung definiert:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Nachdem Sie die Definition vorgenommen haben, können Sie die Ressourcenfunktion verwenden:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Beachten Sie, dass in diesem BLOB-Objekt der Funktion ein schwarzes Symbol vorhanden ist Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache. Das bedeutet, dass die BLOB-Funktion auf die in für die aktuelle Sitzung definierte Speicherfunktion verweist. Für eine Ressourcenfunktion, die dauerhaft auf Ihrem Computer oder in Ihrem Cloud-Konto gespeichert ist, gibt es ein graues Symbol Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache. Und für die offizielle Ressourcenfunktion im Wolfram-Funktionsrepository gibt es ein oranges Symbol Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache.

Was passiert also, wenn Sie im Notizbuch das Menü „Bereitstellung“ verwenden? Zunächst einmal nimmt es alle Definitionen im Notizbuch und erstellt daraus ein symbolisches ResourceObject.). (Und wenn Sie eine textbasierte IDE oder ein Programm verwenden, können Sie auch explizit erstellen ResourceObject.)

Das lokale Bereitstellen von Funktionen aus dem Repository auf Ihrem Computer erfolgt mit dem Befehl LocalCache für das Ressourcenobjekt, um es als LocalObject in Ihrem Dateisystem zu speichern. Die Bereitstellung in einem Cloud-Konto erfolgt mit dem Befehl CloudDeploy für das Ressourcenobjekt, und die öffentliche Bereitstellung in der Cloud — CloudPublish. In allen Fällen ResourceRegister wird ebenfalls verwendet, um den Namen der Ressourcenfunktion zu registrieren, sodass ResourceFunction[„name“] funktionieren wird.

Wenn Sie auf die Schaltfläche Einreichen für das Funktionsrepository klicken, wird das, was darunter geschieht, ResourceSubmit auf dem Ressourcenobjekt aufgerufen. (Und wenn Sie die textbasierte Eingabeoberfläche verwenden, können Sie auch ResourceSubmit es direkt aufrufen.)

Standardmäßig erfolgt die Einreichung unter dem Namen, der mit Ihrer Wolfram ID verknüpft ist. Wenn Sie die Einreichung im Namen einer Entwicklergruppe oder Organisation machen, können Sie eine separate Verleger-ID festlegen und diese stattdessen als Namen verwenden, um mit Ihren Ansichten zu interagieren.

Nachdem Sie eine Ihrer Funktionen in die Wissensdatenbank der Funktionen eingereicht haben, wird sie zur Überprüfung in die Warteschlange gestellt. Wenn Sie Rückmeldungen erhalten, sind diese normalerweise in Form einer Textdatei mit hinzugefügten zusätzlichen „Kommentarzellen“. Sie können den Status Ihrer Anfrage jederzeit überprüfen, indem Sie auf das Teilnehmerportal der Ressourcenysteme. Aber sobald Ihre Funktion genehmigt ist, werden Sie benachrichtigt (per E-Mail), und Ihre Funktion wird im Wolfram-Funktionsrepository veröffentlicht.

Einige Feinheiten der Arbeit

Auf den ersten Blick könnte der Eindruck entstehen, dass man einfach das Definitionsnotizbuch nehmen und es wörtlich ins Funktionsrepository einfügen kann. Tatsächlich gibt es jedoch viele Feinheiten — und um damit umzugehen, erfordert es ziemlich komplexe Meta-Programmierung, während sowohl der Code, der die Funktion definiert, als auch das eigentliche Definitionsnotizbuch symbolisch verarbeitet werden. Der Großteil davon passiert intern, also „hinter den Kulissen“, aber es kann einige Konsequenzen haben, die es wert sind, verstanden zu werden, wenn Sie beabsichtigen, zur Wissensdatenbank der Funktionen beizutragen.

Die erste unmittelbare Feinheit: Wenn Sie das „Notizbuch der Definitionen“ ausfüllen, können Sie einfach überall auf Ihre Funktion verweisen, indem Sie einen Namen wie MyFunction, der wie ein gewöhnlicher Funktionsname in der Wolfram Language aussieht, aber für die Dokumentation des Funktionsrepositories ersetzt wird durch ResourceFunction[„MyFunction“] – das ist genau das, was Benutzer tatsächlich verwenden werden, wenn sie mit der Funktion arbeiten.

Die zweite Feinheit: Wenn Sie eine Ressourcenfunktion aus dem Notizbuch der Definitionen erstellen, müssen alle Abhängigkeiten, die an der Definition der Funktion beteiligt sind, festgelegt und ausdrücklich enthalten sein. Um sicherzustellen, dass die Definitionen modular bleiben, müssen alle in einem einzigartigen Namensraumuntergebracht werden. (Offensichtlich sind die Funktionen, die all dies tun, im Funktionsrepository vorhanden.)

Normalerweise werden Sie niemals Spuren des Codes sehen, der verwendet wird, um diesen Namensraum einzurichten. Aber wenn Sie aus irgendeinem Grund ein unerfülltes Symbol innerhalb Ihrer Funktion aufrufen, werden Sie sehen, dass sich dieses Symbol im internen Kontext der Funktion befindet. Bei der Bearbeitung des Notizbuchs der Definitionen wird jedoch zumindest das Symbol, das der eigentlichen Funktion entspricht, so konfiguriert, dass es optimal dargestellt wird in Form eines funktionalen BLOBs und nicht als rohes Symbol im internen Kontext.

Das Funktionsrepository dient der Definition neuer Funktionen. Und diese Funktionen können Optionen haben. Häufig haben diese Parameter (z. B. Method oder ImageSize) die Möglichkeit, für eingebaute Funktionen sowie für solche verwendet zu werden, für die bereits eingebaute Symbole existieren. Aber manchmal benötigt eine neue Funktion auch neue Optionen. Um die Modularität zu bewahren, müssen diese Parameter Symbole sein, die in einem einzigartigen internen Kontext definiert sind (oder etwas wie vollständige Ressourcenfunktionen, das heißt, sie existieren für sich selbst). Zur Vereinfachung ermöglicht das Funktionsrepository die Angabe neuer Optionen in Definitionen in Form von Zeichenfolgen. Und zur Benutzerfreundlichkeit werden diese Definitionen (vorausgesetzt, sie haben verwendet OptionValue und OptionsPattern) ebenfalls so verarbeitet, dass bei der Verwendung von Funktionen die Parameter nicht nur als Zeichenfolgen, sondern auch als globale Symbole mit denselben Namen angegeben werden können.

Die meisten Funktionen machen einfach das, was sie jedes Mal tun sollen, wenn sie aufgerufen werden, aber einige Funktionen benötigen eine Initialisierung, bevor sie in einer bestimmten Sitzung funktionieren können – und um dieses Problem zu lösen, gibt es im Abschnitt „Definition“ den Abschnitt „Initialisierung“.

Funktionen aus dem Repository können andere Funktionen nutzen, die bereits im Repository vorhanden sind, um Definitionen für das Funktionsrepository einzurichten, die zwei (oder mehr) Funktionen umfassen, die sich gegenseitig beziehen; sie müssen in Ihrer Sitzung mit dem Programm entwickelt werden, damit Sie auf sie verweisen können wie ResourceFunction[„name“], dann können Sie die benötigten Kombinationen dieser Funktionen erstellen (Beispiele nicht verstanden) und eine neue Funktion basierend auf bereits veröffentlichten hinzufügen.

Entwicklungsperspektiven. Was sollte geschehen, wenn das Repository wirklich groß wird?

Heute starten wir nur das Wolfram-Funktionsrepository, aber im Laufe der Zeit erwarten wir, dass sein Volumen und seine Funktionalität stark zunehmen können, und während seiner Wachstumsperspektiven werden verschiedene Probleme auftreten, die wir bereits vorausahnen können.

Das erste Problem betrifft die Funktionsnamen und deren Einzigartigkeit. Das Funktionsrepository ist so konzipiert, dass man, wie bei den integrierten Funktionen der Wolfram Language, auf jede gegebene Funktion einfach zugreifen kann, indem man ihren Namen angibt. Das bedeutet jedoch zwangsläufig, dass die Funktionsnamen im gesamten Repository global einzigartig sein müssen, sodass es beispielsweise im Repository nur einen geben kann ResourceFunction[„MyFavoriteFunction“].

Auf den ersten Blick mag dies ein großes Problem erscheinen, aber es ist wichtig zu verstehen, dass es im Wesentlichen dasselbe Problem ist wie für Dinge wie Internet-Domains oder soziale Medien-Tags. Und der Punkt ist, dass das System einfach einen Registrar erforderlich macht – und das ist eine der Rollen, die unser Unternehmen für das Wolfram-Funktions-Wissen ausfüllen wird. (Für private Versionen des Repositories können deren Registrar Administratoren sein.) Natürlich kann eine Internet-Domain registriert werden, ohne dass etwas darauf ist, aber im Funktionsrepository kann der Name einer Funktion nur registriert werden, wenn es tatsächlich eine Definition der Funktion gibt.

Ein Teil unserer Rolle im Management der Wissensdatenbank für Wolfram-Funktionen besteht darin, sicherzustellen, dass der Name, der für eine Funktion ausgewählt wird, logisch im Hinblick auf die Definition der Funktion ist und den Namenskonventionen der Wolfram-Sprache entspricht. Wir haben über 30 Jahre Erfahrung in der Benennung von eingebauten Funktionen in der Wolfram-Sprache und unser Kuratorenteam wird diese Erfahrung auch in das Funktionsrepository einbringen. Es gibt immer Ausnahmen. Zum Beispiel kann es bevorzugt erscheinen, einen kurzen Namen für eine Funktion zu haben, aber es ist besser, sich mit einem längeren, spezifischeren Namen „abzusichern“, da so die Chancen geringer sind, dass jemand in der Zukunft einen ähnlichen Funktionsnamen erstellen möchte.

(Es ist zu beachten, dass das bloße Hinzufügen eines Teilnehmer-Tags zur Beseitigung von Mehrdeutigkeiten bei Funktionen nicht den erwarteten Effekt haben wird. Denn, wenn man nicht darauf besteht, dass immer ein Tag zugewiesen wird, muss ein Standard-Tag für jede gegebene Funktion festgelegt werden, und es müssen Autor-Tags hervorgehoben werden, was erneut globale Koordination erfordert.)

Mit dem Wachstum der Wissensdatenbank für Wolfram-Funktionen wird eine der Herausforderungen, die sicherlich auftreten wird, die Auffindbarkeit von Funktionen sein; hierfür ist im System vorgesehen, eine Suchfunktion (und die Definitionsdateien können Schlüsselwörter usw. enthalten). Für eingebaute Funktionen in der Wolfram-Sprache gibt es in der Dokumentation eine Vielzahl von Querverweisen, die dazu beitragen, die Funktionen „zu bewerben“. Funktionen im Funktionsrepository können auf eingebaute Funktionen verweisen. Aber umgekehrt? Dafür werden wir mit verschiedenen Strategien experimentieren, um Funktionen des Repositories auf den Dokumentationsseiten für eingebaute Funktionen darzustellen.

Für eingebaute Funktionen in der Wolfram-Sprache gibt es das so genannte Entdeckungsniveau, das sichergestellt wird durch ein Netzwerk von „Hilfeseiten“, die organisierte Listen von Funktionen anbieten, die spezifischen Bereichen zugeordnet sind. Es ist immer schwierig, die Seiten des Nachschlagewerks angemessen auszubalancieren, und mit dem Wachstum der Wolfram-Sprache müssen die Seiten des Nachschlagewerks oft vollständig neu organisiert werden. Es ist relativ einfach, Funktionen aus dem Repository in breite Kategorien zu platzieren und diese Kategorien sogar systematisch weiter aufzuteilen, aber viel wertvoller ist es, richtig organisierte Seiten im Nachschlagewerk der Sprache zu haben. Es ist nicht klar, wie man sie am besten für die gesamte Wissensdatenbank der Funktionen erstellt. Zum Beispiel, CreateResourceObjectGallery kann jeder im Funktionen-Repository eine Webseite erstellen, die seine „Auswahlen“ aus dem Repository enthält:

Wolfram Function Repository: Öffentlicher Zugang zur Plattform für Erweiterungen der Wolfram-Sprache

Das Wolfram-Funktionen-Repository ist als permanenter Speicher für Funktionen eingerichtet, in dem jede Funktion immer funktionieren wird. Sicherlich können auch neue Versionen von Funktionen erscheinen, und wir erwarten, dass einige Funktionen im Laufe der Zeit veralten. Funktionen werden funktionieren, wenn sie in Programmen verwendet werden, aber ihre Dokumentationsseiten werden auf neue, fortschrittlichere Funktionen verweisen.

Das Wolfram-Funktionen-Repository ist darauf ausgelegt, neue Funktionen schnell zu erhalten und neue Anwendungsmöglichkeiten der Wolfram-Sprache zu erkunden. Mit einer großen Portion Optimismus hoffen wir, dass ein Teil dessen, was im Funktionen-Repository erforscht wurde, letztendlich sinnvoll wird, in die Hauptsprache der Wolfram Language integriert zu werden. In den letzten zehn Jahren hatten wir eine ähnliche Sammlung von Funktionen, die ursprünglich in Wolfram | Alpha vorgestellt wurden. Eine der Lektionen, die aus dieser Erfahrung gelernt wurde, ist, dass es viel Arbeit erfordert, um die Qualitäts- und Konsistenzstandards zu erreichen, auf die wir in allem Wert legen, was in die Wolfram-Sprache integriert ist, und dass dies oft komplizierter ist als die anfänglichen Bemühungen, eine Idee umzusetzen. Aber selbst in diesem Fall kann eine Funktion in der Wissensdatenbank der Funktionen als sehr nützliches Konzeptnachweis einer zukünftigen Funktion dienen, die schließlich in die Wolfram-Sprache integriert werden kann.

Hier ist das Wichtigste: Die Funktion im Funktionsrepository ist das, was jedem Benutzer jetzt sofort zur Verfügung steht. Vielleicht könnte eine eingebaute Sprache viel besser und leistungsfähiger sein, aber das Funktionsrepository ermöglicht es Benutzern, sofort auf alle neuen Funktionen zuzugreifen. Und was besonders wichtig ist, dieses Konzept erlaubt es jedem, seine eigenen neuen Funktionen hinzuzufügen.

Früher hätte diese Idee in der Geschichte der Wolfram-Sprache nicht so gut funktioniert wie heute. Aber mittlerweile sind so viele Anstrengungen und ein so tiefes Verständnis der Entwurfsprinzipien der Sprache eingebracht worden, dass es nun sehr möglich erscheint, dass eine große Gemeinschaft von Benutzern Funktionen hinzufügt, die die Konsistenz des Projekts unterstützen, um sie für ein breites Publikum nützlich zu machen.

In der Gemeinschaft der Benutzer der Wolfram-Sprache gibt es einen unglaublichen Geist des Talents. (Natürlich gehören viele führende Fachleute aus Forschungs- und Entwicklungseinrichtungen aus verschiedenen Bereichen zu dieser Gemeinschaft.) Ich hoffe, dass das Wolfram-Funktionsrepository eine effektive Plattform bietet, um diesen Geist des Talents zu entfalten und zu verbreiten. Nur gemeinsam können wir etwas schaffen, das den Anwendungsbereich der Rechenparadigmen der Wolfram-Sprache erheblich erweitert.

In über 30 Jahren haben wir einen langen Weg in der Wolfram-Sprache zurückgelegt. Lassen Sie uns gemeinsam noch weiter gehen. Ich fordere alle geschätzten Benutzer der Wolfram-Sprache weltweit auf, dieses Funktionsrepository als Plattform sowie ein neues Softwareprojekt wie den Free Wolfram Engine für Entwickler zu nutzen.

Quelle: habr.com

60GB SSD 8Gb DDR4