Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Hallo, Habr! Ich präsentiere Ihnen eine Übersetzung des Beitrags von Stephen Wolfram „Das Wolfram Function Repository: Einführung einer offenen Plattform zur Erweiterung der Wolfram-Sprache“.

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Voraussetzungen für die Konsistenz der Wolfram-Sprache

Heute stehen wir gemeinsam mit der Programmiersprache an der Schwelle zu großen Erfolgen Wolfram Sprache. Erst vor drei Wochen sind wir gestartet kostenlose Wolfram-Engine für Entwicklerum unseren Benutzern zu helfen, die Wolfram Language in ihre großen Softwareprojekte zu integrieren. Heute starten wir Wolfram-Funktions-Repository, um eine koordinierte Plattform für Funktionen bereitzustellen, die zur Erweiterung der Wolfram-Sprache erstellt wurden, und wir öffnen außerdem ein Repository mit Funktionen für alle, die zur Entwicklung unseres Softwareprodukts beitragen können.

Das Wolfram Function Repository wird durch die Einzigartigkeit der Wolfram Language nicht nur als Programmiersprache, sondern auch als Programmiersprache ermöglicht vollständige Computersprache. In traditionellen Programmiersprachen erfordert das Hinzufügen bedeutender neuer Funktionen normalerweise die Erstellung ganzer zusätzlicher Bibliotheken, die bei gemeinsamer Verwendung möglicherweise funktionieren oder auch nicht. Allerdings in der Wolfram Language So viel ist bereits in die Sprache selbst eingebaut, dass es möglich ist, seine Funktionalität durch einfaches Hinzufügen neuer Funktionen erheblich zu erweitern, die sofort in die ganzheitliche Struktur der gesamten Sprache integriert werden.

Das Wolfram-Funktions-Repository enthält beispielsweise bereits 532 neue Funktionen gegliedert in 26 thematische Kategorien:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Ebenso mehr als 6000 StandardfunktionenJede Funktion aus dem Repository ist in die Wolfram-Sprache integriert und verfügt über eine Dokumentationsseite mit einer detaillierten Beschreibung und Arbeitsbeispielen:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Um zur Seite zu gelangen, kopieren Sie das obige 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 ab unterstützt Version 12.0:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Hierbei ist bei der Verarbeitung zu beachten LogoQRCode Sie müssen beispielsweise keine „Bildverarbeitungsbibliothek“ einrichten – da wir in der Wolfram Language bereits eine konsistente und sorgfältig algorithmische Vorgehensweise implementiert haben Bildverarbeitung, die von verschiedenen grafischen Sprachfunktionen sofort verarbeitet werden kann:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Das hoffe ich mit der Unterstützung wunderbare und talentierte Gemeinschaft, das in den letzten Jahrzehnten gewachsen und erweitert wurde (basierend auf der Wolfram Language). Das Wolfram-Funktions-Repository wird es in absehbarer Zukunft ermöglichen, das Spektrum der in der Sprache verfügbaren (möglicherweise potenziell bedeutenden, auf verschiedene Bereiche der Wissenschaft und Technologie spezialisierten) Funktionen erheblich zu erweitern. Dadurch wird es möglich, sowohl den Inhalt der Sprache (ihre integrierten Funktionen) als auch zu nutzen Entwicklungsprinzipien, die basierend auf der Sprache implementiert werden. (Hier ist zu beachten, dass die Wolfram Language bereits mehr als hat 30-jährige Entwicklungsgeschichte und stabiles Wachstum).
Funktionen aus dem Repository können kleine oder große Codeteile enthalten, die in der Wolfram Language geschrieben sind. Dies können beispielsweise Anrufe sein externe APIs und Dienste oder externe Bibliotheken in anderen Sprachen. Das Besondere an diesem Ansatz ist, dass beim Drilldown auf die Funktionalität auf Benutzerebene keine potenziellen Inkonsistenzen auftreten, da der Ansatz auf der konsistenten Struktur der Wolfram Language aufbaut – und jede Funktion automatisch korrekt funktioniert – genau so beabsichtigt. Sie sollte.
Die Shell- und Programmierstruktur des Wolfram Feature Repository ist so konzipiert, dass jeder auf die für ihn einfachste und bequemste Art und Weise einen Beitrag zur gemeinsamen Sache leisten kann – und zwar einfach durch Ausfüllen der Notepad-Textdatei (mit der Erweiterung nb) WL. Mithilfe integrierter automatischer Funktionen können Sie neue, dem Repository hinzugefügte Funktionen überprüfen, um deren Integration in die Sprache sicherzustellen. Unser Unternehmen setzt auf die große Bandbreite an Nutzern, die ihre Funktionen in die Sprache integrieren können, und nicht auf die große Komplexität neuer Funktionen – und obwohl es einen Review-Prozess gibt, bestehen wir nicht auf so etwas sorgfältige Designanalyse oder strenge Standards für die Vollständigkeit und Zuverlässigkeit neuer Benutzerfunktionen, im Gegensatz zu den strengeren Tests der in die von uns verwendeten Kernsprache integrierten Funktionen.

Bei diesem Ansatz gibt es viele Kompromisse und Details, aber unser Ziel ist es, das Wolfram-Feature-Repository sowohl für die Benutzererfahrung zu optimieren als auch sicherzustellen, dass neue Benutzerfunktionen einen sinnvollen Beitrag zur Entwicklung der Sprache leisten. Wenn wir wachsen, habe ich keinen Zweifel daran, dass wir neue Methoden für die Verarbeitung und Validierung der in das Repository integrierten Funktionen erfinden müssen, nicht zuletzt, um eine große Anzahl von Funktionen zu organisieren und diejenigen zu finden, die Benutzer benötigen. Es ist jedoch ermutigend, dass der von uns eingeschlagene Weg ein guter Anfang ist. ich persönlich mehrere Funktionen hinzugefügt zur Originaldatenbank. Viele davon basieren auf Code, den ich seit geraumer Zeit persönlich entwickelt habe. Und ich brauchte nur ein paar Minuten, um sie in das Repository zu übertragen. Jetzt, da sie im Repository sind, kann ich diese Funktionen endlich – sofort und jederzeit – bei Bedarf nutzen, ohne mich um die Suche nach Dateien, den Download von Paketen usw. kümmern zu müssen.

Effizienzsteigerung bei gleichzeitiger Kostensenkung

Schon vor dem Internet gab es Möglichkeiten, Wolfram Language-Code zu teilen (unser erstes großes zentralisiertes Projekt war MathSource, 1991 für Mathematica erstellt, basierend auf CD-ROM usw.). Natürlich ist der zur Implementierung vorgeschlagene Ansatz auf Basis des Wolfram-Funktions-Repositorys ein leistungsfähigeres und zuverlässigeres Werkzeug zur Implementierung der oben genannten Aufgaben.

Seit über 30 Jahren arbeitet unser Unternehmen fleißig daran, die Integrität der Wolfram-Sprachstruktur aufrechtzuerhalten. Dies ist entscheidend, um sicherzustellen, dass die Wolfram-Sprache nicht nur eine Programmiersprache, sondern auch eine Programmiersprache wird vollwertige Computersprache. Und so besteht der Kern des Ansatzes zur Implementierung des Wolfram-Funktions-Repositorys darin, einen einheitlichen Ansatz für die Programmierung und Entwicklung neuer Funktionen zu verwenden, die sequentiell hinzugefügt werden und in das Framework der Sprache passen, sodass sie sich entwickeln und gemeinsam weiterentwickeln kann.

In der Implementierungsstruktur jeder Funktion finden verschiedene Rechenprozesse statt. Hierbei ist zu beachten, dass es notwendig ist, dass die Funktion ein klares und einheitliches Erscheinungsbild und eine visuelle Lesbarkeit für den Benutzer aufweist. In diesem Zusammenhang werden die integrierten Funktionen der Wolfram Language mit mehr als 6000 aufeinanderfolgenden Beispielen für die ordnungsgemäße Programmierung von Funktionen vorgestellt (dies sind unsere Live-Programmiervideos, die einschließen Hunderte von Stunden Prozess zur Erstellung von Standardprogrammen). Was dieser Ansatz letztendlich dazu führt, dass das Wolfram-Feature-Repository eine gute Leistung erbringt, ist die strukturelle Natur der Wolfram Language mit ihrer großen Anzahl zusätzlicher und vielfältiger Bibliotheken, die bereits in die Sprache integriert sind. Wenn Sie beispielsweise eine Funktion haben, die Bilder verarbeitet, oder spärliche ArraysOder molekulare Strukturen, und auch geografische Daten oder einige andere – ihre konsistente symbolische Darstellung existiert bereits in der Sprache, und dadurch wird Ihre Funktion sofort mit anderen Funktionen in der Sprache kompatibel.

Ein Repository zu erstellen, das tatsächlich gut funktioniert, ist eine interessante Metaprogrammierungsaufgabe. Beispielsweise können zu viele Einschränkungen im Programm nicht die erforderliche Vereinheitlichung und Universalität des Algorithmus erreichen. Ebenso wie bei einer unzureichenden Anzahl funktionaler Einschränkungen ist es nicht möglich, eine ausreichend korrekte Reihenfolge der Algorithmusausführung umzusetzen. Mehrere frühere Beispiele für die Umsetzung eines Kompromisses dieser Ansätze, der von unserem Unternehmen umgesetzt wurde, funktionierten recht stabil – dies sind: Projekt-Wolfram-Demonstrationen, wurde 2007 eingeführt und läuft jetzt online mit über 12000 benutzerinteraktiven Demos. IN Wolfram-Datenbank Es gibt mehr als 600 vorgefertigte Datenbanken, die in der Wolfram Language verwendet werden können Wolfram-Speicher für neuronale Netzwerke wird fast wöchentlich mit neuen neuronalen Netzen aufgefüllt (derzeit sind es bereits 118) und durch die Funktion sofort miteinander verbunden NetModel in der Wolfram Language.

Alle oben genannten Beispiele weisen ein grundlegendes Merkmal auf: Die im Projekt gesammelten Objekte und Funktionen weisen einen sehr hohen Grad an Strukturierung und Verteilung der Prozesse auf. Natürlich können die Details der Struktur dessen, was eine Demo, ein neuronales Netzwerk oder etwas anderes ist, stark variieren, aber die grundlegende Struktur für jedes aktuelle Repository bleibt immer dieselbe. Was halten Sie, lieber Benutzer, von der Erstellung eines solchen Repositorys, das Erweiterungen zur Wolfram-Sprache hinzufügt? Die Wolfram Language ist äußerst flexibel konzipiert, sodass sie beliebig erweitert und geändert werden kann. Dieser Umstand ist äußerst wichtig für die Möglichkeit, schnell verschiedene große Softwareprojekte in der Wolfram Language zu erstellen. Hierbei ist zu beachten, dass mit zunehmender Flexibilität der Sprache zwangsläufig auch die Kosten für Projekte steigen, die in einer solchen Sprache umgesetzt werden. Dies liegt an der Tatsache, dass der Benutzer umso mehr dedizierte Funktionalität erhält, je mehr er eine solche Sprache verwendet. Wir sollten jedoch nicht vergessen, dass dieser Ansatz auch negative Seiten haben kann, da er nicht in der Lage ist, eine konsistente Konsistenz der Programmmodule sicherzustellen.

Bei Bibliotheken in traditionellen Programmiersprachen gibt es ein häufiges Problem: Wenn Sie beispielsweise eine Bibliothek verwenden, funktioniert der Code ordnungsgemäß. Wenn Sie jedoch versuchen, mehrere Bibliotheken zu verwenden, gibt es keine Garantie dafür, dass diese ordnungsgemäß miteinander interagieren . Außerdem gibt es in traditionellen Programmiersprachen – anders als in einer vollwertigen Computersprache – keine Möglichkeit, das Vorhandensein konsistenter integrierter Darstellungen für beliebige Funktionen oder Datentypen außer deren Grundstrukturen zu garantieren. Tatsächlich ist das Problem jedoch noch größer, als es auf den ersten Blick scheint: Wenn man eine große Funktionalitätsvertikale aufbaut, ist dies ohne die enormen Kosten der zentralisierten Projektprogrammierung, die wir in die Wolfram-Sprache stecken, unmöglich Konsistenz erreichen. Daher ist es wichtig, dass alle Softwaremodule stets korrekt zusammenarbeiten.

Die Idee hinter dem Wolfram-Feature-Repository besteht also darin, das oben beschriebene Problem zu vermeiden, indem einfach Erweiterungen der Sprache in relativ kleinen Codeteilen über einzelne Features hinzugefügt werden, die sich einfacher als kohärente Module entwickeln lassen. Allerdings gibt es Programmierfunktionen, die nicht durch einzelne Funktionen komfortabel gestaltet werden können (und unser Unternehmen plant, in naher Zukunft einen optimierten Programmieralgorithmus zu veröffentlichen, um die Implementierung umfangreicher Softwarepakete zu unterstützen). Basierend auf den bereits in der Wolfram Language integrierten Funktionen gibt es jedoch viele Programmiermöglichkeiten, die auf Basis einzelner Funktionen umgesetzt werden. Die Idee dabei ist, dass es möglich ist, mit relativ geringem Programmieraufwand eine Reihe neuer und sehr nützlicher Funktionen zu erstellen, die eine ausreichende Designkonsistenz aufweisen, gut zueinander passen und darüber hinaus auch funktionieren wird in Zukunft einfach und umfassend in der Sprache verwendet werden können.

Dieser Ansatz ist natürlich ein Kompromiss. Wenn ein größeres Paket implementiert würde, könnte man sich eine völlig neue Welt an Funktionen vorstellen, die äußerst leistungsstark und nützlich wären. Wenn Bedarf an neuen Funktionen besteht, die zu allem anderen passen, Sie aber nicht bereit sind, viel Aufwand in die Entwicklung des Projekts zu investieren, kann dies leider zu einer Verringerung des Umfangs Ihres Projekts führen. Die Idee hinter dem Wolfram-Feature-Repository besteht darin, Funktionalität für einen definierenden Teil eines Projekts bereitzustellen; dieser Ansatz fügt leistungsstarke Funktionalität hinzu und erleichtert gleichzeitig die Aufrechterhaltung einer guten Konsistenz in einem Programmierprojekt.

Helfen Sie beim Hinzufügen benutzerdefinierter Funktionen zum Funktions-Repository

Unser Team hat hart daran gearbeitet, es Benutzern zu erleichtern, zu den Funktionen des Wolfram-Repositorys beizutragen. Auf dem Desktop (bereits in Version 12.0), Sie können einfach nacheinander durch die Registerkarten des Hauptmenüs gehen: Datei > Neu > RepositoryItem > Funktion Repository Item und Sie erhalten „Definitionsnotizbuch" (programmgesteuert in der Workbench. Sie können auch die analoge Funktion verwenden - Notizbuch erstellen[„Funktionsressource“]):

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Sie müssen zwei Hauptschritte ausführen: Erstens schreiben Sie den Code für Ihre Funktion auf und zweitens schreiben Sie eine Dokumentation auf, die veranschaulicht, wie Ihre Funktion funktionieren soll.
Klicken Sie oben auf die Schaltfläche „Beispiel öffnen“, um ein Beispiel dafür zu sehen, was Sie tun müssen:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Im Wesentlichen versuchen Sie, etwas zu erstellen, das einer integrierten Funktion in der Wolfram Language ähnelt. Außer, dass es etwas viel Spezifischeres tun kann als eine integrierte Funktion. Gleichzeitig werden die Erwartungen an die Vollständigkeit und Zuverlässigkeit deutlich geringer sein.
Sie müssen Ihrer Funktion einen Namen geben, der den Funktionsbenennungsrichtlinien der Wolfram Language entspricht. Darüber hinaus müssen Sie eine Dokumentation für Ihre Funktion entwickeln, ähnlich den integrierten Funktionen der Sprache. Ich werde später ausführlicher darauf eingehen. Beachten Sie zunächst, dass sich in der Schaltflächenreihe oben in der Definitionsnotizbuchdatei eine Schaltfläche befindet „Stilrichtlinien“, die erklärt, was zu tun ist, und eine Schaltfläche „Extras“, die Tools zum Formatieren 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 „Überprüfen“. Es ist völlig normal, dass Sie noch nicht alle Details herausgefunden haben. Daher wird die Funktion „Prüfen“ automatisch ausgeführt und führt zahlreiche Stil- und Konsistenzprüfungen durch. Häufig werden Sie sofort aufgefordert, die Korrekturen zu bestätigen und zu akzeptieren (Beispiel: „Diese Zeile muss mit einem Doppelpunkt enden“ und Sie werden aufgefordert, einen Doppelpunkt einzugeben). Manchmal wird sie Sie bitten, selbst etwas hinzuzufügen oder zu ändern. Wir werden der automatischen Funktionalität der Schaltfläche „Überprüfen“ ständig neue Funktionen hinzufügen, aber im Grunde besteht ihr Zweck darin, sicherzustellen, dass alles, was Sie an das Feature-Repository senden, bereits so vielen Stilrichtlinien wie möglich entspricht

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Nachdem Sie „Prüfen“ ausgeführt haben, können Sie also „Vorschau“ verwenden. „Vorschau“ erstellt eine Vorschau der Dokumentationsseite, die Sie für Ihre Funktion definiert haben. Sie können auch eine Vorschau für eine auf Ihrem Computer erstellte Datei oder für eine im Cloud-Speicher befindliche Datei erstellen. Wenn Sie aus irgendeinem Grund mit dem, was Sie in der Vorschau sehen, nicht zufrieden sind, gehen Sie einfach zurück, nehmen Sie die erforderlichen Korrekturen vor und klicken Sie dann erneut auf die Schaltfläche „Vorschau“.
Jetzt können Sie Ihre Funktion in das Repository übertragen. Die Schaltfläche „Bereitstellen“ bietet Ihnen vier Optionen:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Das Wichtigste bei diesem Schritt ist, dass Sie Ihre Funktion an das Wolfram-Funktions-Repository senden können, damit sie für jedermann verfügbar ist. Gleichzeitig können Sie Ihre Veranstaltung auch für eine begrenzte Anzahl von Benutzern platzieren. Sie können beispielsweise eine Funktion erstellen, die lokal auf Ihrem Computer gehostet wird, sodass sie verfügbar ist, wenn Sie diesen bestimmten Computer verwenden. Oder Sie können es in Ihrem veröffentlichen Cloud-Konto, damit es Ihnen zur Verfügung steht, wenn Sie mit der Cloud verbunden sind. Sie können die Funktion auch öffentlich über Ihr Cloud-Konto hosten (bereitstellen). Es befindet sich nicht im zentralen Wolfram-Feature-Repository, aber Sie können jemandem eine URL geben, über die er Ihr Feature von Ihrem Konto abrufen kann. (Zukünftig werden wir auch unternehmensweit zentrale Repositories unterstützen.)

Nehmen wir also an, Sie möchten Ihre Funktion tatsächlich an die Wolfram-Funktionswissensdatenbank übermitteln. Klicken Sie dazu auf die Schaltfläche „Senden“ an das Repository. Was passiert also derzeit? Ihr Antrag wird sofort zur Prüfung und Genehmigung durch unser engagiertes Kuratorenteam in die Warteschlange gestellt.

Während Ihr Antrag den Genehmigungsprozess durchläuft (der normalerweise mehrere Tage dauert), erhalten Sie Mitteilungen über den Status und möglicherweise Vorschläge für die zukünftige Verwendung. Sobald Ihr Feature jedoch genehmigt ist, wird es sofort im Wolfram Feature Repository veröffentlicht und steht jedem zur Nutzung zur Verfügung. (Und dies wird in erscheinen Nachrichtenübersichten über neue Funktionen usw.)

Was soll im Lager sein?

Es ist zu beachten, dass unser Unternehmen sehr hohe Ansprüche an Vollständigkeit, Zuverlässigkeit und Gesamtqualität stellt und dass von den über 6000 Funktionen, die wir in den letzten über 30 Jahren bereits in die Wolfram-Sprache integriert haben, alle die oben genannten Anforderungen erfüllen. Das Ziel des Wolfram Function Repository besteht darin, die gesamte Struktur und Funktionalität zu nutzen, die bereits in der Wolfram Language vorhanden ist, um so viele viel leichtere Funktionen (d. h. Funktionen mit höherer Leistung) wie möglich hinzuzufügen.

Natürlich müssen Funktionen im Wolfram-Funktions-Repository den Designprinzipien der Wolfram Language entsprechen, damit sie vollständig mit anderen Funktionen und den Erwartungen der Benutzer an die ordnungsgemäße Funktionsweise der Funktion interagieren können. Die Funktionen müssen jedoch nicht von gleicher Vollständigkeit oder Zuverlässigkeit sein.

Bei den integrierten Funktionen der Wolfram-Sprache arbeiten wir hart daran, die Programmierfunktionen so allgemein wie möglich zu gestalten. Abgesehen davon ist es nichts Falsches daran, im Wolfram-Funktions-Repository eine Funktion zu haben, die einfach einen sehr spezifischen, aber nützlichen Fall behandelt. Zum Beispiel die Funktion SendMailFromNotebook kann Dateien in einem bestimmten Format empfangen und E-Mails auf eine bestimmte Weise erstellen. Polygonales Diagramm erstellt Diagramme nur mit bestimmten Farben und Beschriftungen usw.

Ein weiterer Punkt im Zusammenhang mit den integrierten Funktionen besteht darin, dass unser Unternehmen alle Anstrengungen unternimmt, um alle atypischen Fälle zu behandeln, falsche Eingaben korrekt zu behandeln usw. In einem Funktions-Repository ist es völlig normal, dass es eine spezielle Funktion gibt, die die Hauptfälle der Lösung eines Problems abwickelt und alle anderen ignoriert.

Der offensichtliche Punkt ist, dass es besser ist, Funktionen zu haben, die mehr leisten und es besser machen, aber die Optimierung für ein Funktions-Repository sollte – im Gegensatz zu den integrierten Funktionen der Wolfram-Sprache – mehr Funktionen gebündelt mit mehr Funktionen haben, anstatt sich damit zu befassen die Implementierungsprozesse jeder spezifischen Funktion.

Schauen wir uns nun ein Beispiel für das Testen von Funktionen in einem Repository an. Die Konsistenzerwartungen für solche Funktionen sind naturgemäß viel geringer als für integrierte Sprachfunktionen. Dies gilt insbesondere in Fällen, in denen Funktionen von externen Ressourcen wie APIs abhängen. Es ist wichtig, kontinuierlich konsistente Tests durchzuführen, was automatisch innerhalb der Verifizierungsalgorithmen geschieht. In der NB-Datei können Sie explizit Definitionen angeben (im Abschnitt „Zusätzliche Informationen“) und so viele Tests angeben, wie durch Eingabe- und Ausgabezeichenfolgen oder vollständige Zeichenobjekte des Typs definiert sind Verifizierungstest, so viel Sie für richtig halten. Darüber hinaus versucht das System ständig, die von Ihnen bereitgestellten Dokumentationsbeispiele in einen Verifizierungsprozess umzuwandeln (und manchmal kann dies recht ressourcenintensiv sein, beispielsweise für eine Funktion, deren Ergebnis von Zufallszahlen oder der Tageszeit abhängt).

Infolgedessen weist das Funktions-Repository eine Reihe von Implementierungskomplexitäten auf. Einige bestehen nur aus einer einzigen Codezeile, andere umfassen möglicherweise Tausende oder Zehntausende Zeilen und verwenden wahrscheinlich viele Hilfsfunktionen. Wann lohnt es sich, eine Funktion hinzuzufügen, für deren Definition nur sehr wenig Code erforderlich ist? Grundsätzlich, wenn es eine Funktion gibt guter mnemonischer Name, was Benutzer leicht verstehen würden, wenn sie es in einem Code sehen würden, dann kann es bereits hinzugefügt werden. Andernfalls ist es wahrscheinlich besser, den Code jedes Mal erneut an Ihr Programm anzuhängen, wenn Sie ihn verwenden müssen.

Der Hauptzweck eines Funktions-Repositorys besteht (wie der Name schon sagt) darin, neue Funktionen in die Sprache einzuführen. Wenn Sie neue Daten hinzufügen möchten oder neue Einheiten, verwenden Wolfram Data-Repository. Was aber, wenn Sie neue Objekttypen für Ihre Berechnungen einführen möchten?

Es gibt eigentlich zwei Möglichkeiten. Möglicherweise möchten Sie einen neuen Objekttyp einführen, der in neuen Funktionen im Funktions-Repository verwendet wird. Und in diesem Fall können Sie jederzeit einfach die symbolische Darstellung aufschreiben und sie bei der Eingabe oder Ausgabe von Funktionen in ein Funktions-Repository verwenden.

Aber was ist, wenn Sie ein Objekt darstellen und dann über vorhandene Funktionen in der Wolfram Language definieren möchten, dass Sie damit arbeiten möchten? Die Wolfram Language verfügt hierfür seit jeher über einen leichtgewichtigen Mechanismus namens UpValues. Mit einigen Einschränkungen (insbesondere für Funktionen, die können ihre Argumente nicht bewerten) ermöglicht Ihnen ein Funktions-Repository, einfach eine Funktion darzustellen und Werte dafür zu definieren. (Beim Erstellen eines neuen Hauptdesigns, das vollständig in die Wolfram Language integriert ist, die Erwartung an Konsistenz zu erhöhen, ist dies im Allgemeinen ein sehr wichtiger Vorgang, der nicht durch einfache Erhöhung der Projektkosten erreicht werden kann und den unser Unternehmen im Rahmen von Projekten durchführt Für die langfristige Entwicklung der Sprache ist diese Aufgabe kein Ziel, das im Rahmen der Entwicklung des Repositorys festgelegt wird.

Was könnte also im Funktionscode in einem Funktions-Repository enthalten sein? Alles in die Wolfram Language integriert, natürlich (zumindest wenn es nicht repräsentiert Bedrohungen für Sicherheit und die Leistung des Programms selbst als Computerumgebung) sowie jede Funktion aus dem Funktions-Repository. Es gibt jedoch noch andere Funktionalitäten: Eine Funktion in einem Funktions-Repository kann eine API aufrufen, oder in Wolfram WolkeOder aus einer anderen Quelle. Natürlich sind damit einige Risiken verbunden. Aufgrund der Tatsache, dass es keine Garantie dafür gibt, dass sich die API nicht ändert und die Funktion im Funktionsspeicher nicht mehr funktioniert. Um Probleme wie dieses zu identifizieren, gibt es auf der Dokumentationsseite (im Abschnitt „Anforderungen“) einen Hinweis für alle Funktionen, die auf mehr als nur der integrierten Wolfram Language-Funktionalität basieren. (Wenn es um reale Daten geht, kann es natürlich auch bei dieser Funktionalität zu Problemen kommen, da sich reale Daten ständig ändern und manchmal sogar ihre Definitionen und Struktur ändern.)

Sollte der gesamte Code für das Wolfram-Feature-Repository in Wolfram geschrieben werden? Natürlich sollte der Code innerhalb der externen API nicht in der Wolfram-Sprache geschrieben sein, die nicht einmal den Sprachcode erstellt. Tatsächlich können Sie, wenn Sie eine Funktion in fast jeder externen Sprache oder Bibliothek finden, einen Wrapper erstellen, der es Ihnen ermöglicht, sie im Wolfram-Funktions-Repository zu verwenden. (Normalerweise sollten Sie hierfür die integrierten Funktionen verwenden ExternalEvaluate oder ExterneFunktion im Wolfram-Sprachcode.)

Was bringt es also, das zu tun? Dies ermöglicht Ihnen im Wesentlichen die Nutzung des gesamten integrierten Wolfram Language-Systems und seiner gesamten einheitlichen Softwarefunktionen. Wenn Sie die Basisimplementierung von einer externen Bibliothek oder Sprache beziehen, können Sie dann die reichhaltige symbolische Struktur der Wolfram Language verwenden, um eine praktische Funktion der obersten Ebene zu erstellen, die es Benutzern ermöglicht, jede bereits implementierte Funktionalität problemlos zu verwenden. Zumindest sollte dies in einer idealen Welt möglich sein, in der alle Bausteine ​​zum Laden von Bibliotheken usw. vorhanden sind. In diesem Fall würden sie automatisch von der Wolfram Language verarbeitet. (Es ist zu beachten, dass es in der Praxis zu Problemen kommen kann Einrichten externer Sprachen bestimmtes Computersystem und Cloud-Speicher können zusätzliche Sicherheitsprobleme darstellen).

Wenn Sie sich typische externe Bibliotheken zum ersten Mal ansehen, scheinen sie übrigens oft zu komplex, um sie in nur wenigen Funktionen abzudecken. In vielen Fällen entsteht ein Großteil der Komplexität jedoch aus der Erstellung der Infrastruktur, die für die Bibliothek und alle Funktionen erforderlich ist unterstütze es. Bei Verwendung der Wolfram Language ist die Infrastruktur jedoch normalerweise bereits in die Pakete integriert, sodass nicht alle diese Unterstützungsfunktionen im Detail offengelegt werden müssen, sondern nur Funktionen für die „obersten“ anwendungsspezifischen Funktionen in der Bibliothek erstellt werden müssen .

„Ökosystem“ der Wissensbasis

Wenn Sie Funktionen geschrieben haben, die Sie regelmäßig verwenden, senden Sie sie an das Wolfram Function Repository! Wenn dabei nicht mehr herauskommt (Sprachentwicklung), dann wird es für Sie auch dann viel bequemer sein, die Funktionen für den persönlichen Gebrauch zu nutzen. Es ist jedoch logisch anzunehmen, dass die Funktionen bei regelmäßiger Nutzung möglicherweise auch für andere Benutzer nützlich sind.

Natürlich kann es sein, dass Sie sich in einer Situation befinden, in der Sie Ihre Funktionen nicht teilen können oder wollen oder Zugriff auf private Informationsressourcen erhalten. Auch in solchen Fällen können Sie die Funktionen einfach in Ihrem eigenen Cloud-Konto bereitstellen, Festlegung von Rechten Zugang zu ihnen. (Wenn Ihre Organisation dies hat Private Cloud von Wolfram Enterprise, dann wird es bald in der Lage sein, ein eigenes privates Feature-Repository zu hosten, das innerhalb Ihrer Organisation verwaltet werden kann und festlegen kann, ob die Anzeige von Ansichten durch Drittbenutzer erzwungen werden soll oder nicht.)

Die Funktionen, die Sie an das Wolfram-Funktions-Repository übermitteln, müssen nicht perfekt sein; Sie müssen nur nützlich sein. Dies ähnelt ein wenig dem Abschnitt „Fehler“ in der klassischen Unix-Dokumentation – im Abschnitt „Definitionen“ gibt es einen Abschnitt „Anmerkungen des Autors“, in dem Sie Einschränkungen, Probleme usw. beschreiben können, die Sie bereits über Ihre Funktion kennen. Darüber hinaus können Sie beim Einreichen Ihres Features im Repository Einreichungsnotizen hinzufügen, die von einem engagierten Kuratorenteam gelesen werden.

Sobald ein Feature veröffentlicht ist, enthält die Seite unten immer zwei Links: „Senden Sie eine Nachricht zu dieser Funktion"Und"Diskutieren Sie in der Wolfram-Community" Wenn Sie eine Notiz anhängen (z. B. „Erzählen Sie mir von Fehlern“), können Sie das Kontrollkästchen aktivieren, das besagt, dass Ihre Nachricht und Kontaktinformationen mit dem Feature-Autor geteilt werden sollen.

Manchmal möchten Sie einfach Funktionen aus dem Wolfram-Funktions-Repository verwenden, z. B. integrierte Funktionen, ohne sich deren Code anzusehen. Wenn Sie jedoch einen Blick hineinwerfen möchten, gibt es oben immer einen Notepad-Button. Klicken Sie darauf und Sie erhalten Ihre eigene Kopie des ursprünglichen Definitionsnotizbuchs, das an das Feature-Repository übermittelt wurde. Manchmal können Sie es einfach als Beispiel für Ihre Bedürfnisse verwenden. Gleichzeitig können Sie auch Ihre eigene Modifikation dieser Funktion entwickeln. Möglicherweise möchten Sie diese Funktionen, die Sie im Repository auf Ihrem Computer oder in Ihrem Aphid-Cloud-Speicherkonto gefunden haben, veröffentlichen oder sie an die Funktionswissensdatenbank übermitteln, möglicherweise als verbesserte, erweiterte Version der ursprünglichen Funktion.

In Zukunft planen wir, Git-artiges Forking für Feature-Repositories zu unterstützen, aber im Moment versuchen wir, es einfach zu halten, und wir haben immer nur eine akzeptierte Version jedes Features in die Sprache integriert. In den meisten Fällen (es sei denn, Entwickler geben die Wartung der von ihnen entwickelten Funktionen auf und reagieren auf Benutzereingaben) übernimmt der ursprüngliche Autor der Funktion die Kontrolle über Aktualisierungen und reicht neue Versionen ein, die dann überprüft werden und, sofern sie den Überprüfungsprozess bestehen, die Kontrolle darüber haben , in der Sprache veröffentlicht.

Betrachten wir die Frage, wie die „Versionierung“ entwickelter Funktionen funktioniert. Wenn Sie derzeit eine Funktion aus dem Funktions-Repository verwenden, wird deren Definition dauerhaft auf Ihrem Computer gespeichert (oder in Ihrem Cloud-Konto, wenn Sie die Cloud verwenden). Wenn eine neue Version einer Funktion verfügbar ist, erhalten Sie bei Ihrer nächsten Nutzung eine entsprechende Meldung. Und wenn Sie die Funktion auf eine neue Version aktualisieren möchten, können Sie dies mit dem Befehl tun RessourcenUpdate. (Der „Funktionsblob“ speichert tatsächlich mehr Versionsinformationen, und wir planen, diese für unsere Benutzer in Zukunft besser zugänglich zu machen.)

Eines der schönen Dinge am Wolfram Function Repository ist, dass jedes Wolfram Language-Programm überall Funktionen daraus verwenden kann. Wenn ein Programm in einem Editor erscheint, ist es oft praktisch, die Repository-Funktionen als leicht lesbare „Funktionsbinärobjekt“-Funktionen zu formatieren (vielleicht mit einem geeigneten Versionssatz).

Sie können jederzeit über Text auf jede Funktion im Funktionsrepository zugreifen Ressourcenfunktion[...]. Und das ist sehr praktisch, wenn Sie beispielsweise Code oder Skripte direkt für die Wolfram Engine schreiben mit einer IDE oder einem Textcode-Editor (Besonders zu beachten ist, dass das Funktions-Repository vollständig kompatibel ist mit Kostenlose Wolfram Engine für Entwickler).

Wie funktioniert es?

Innerhalb der Funktionen im Wolfram-Repository ist dies mit genau demselben Prinzip möglich Ressourcensysteme Basen, wie in alle unsere anderen bestehenden Repositories (Datenspeicher, Repository für neuronale Netze, Sammlung von Demoprojekten usw.), wie alle anderen Wolfram-Systemressourcen, Ressourcenfunktion Letztlich kommt es auf die Funktion an Ressourcenobjekt.

Betrachten Ressourcenfunktion:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Im Inneren können Sie mithilfe der Funktion einige Informationen anzeigen Informationen:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Wie funktioniert das Einrichten einer Ressourcenfunktion? Der einfachste Fall ist ein rein lokaler Fall. Hier ist ein Beispiel, das eine Funktion (in diesem Fall nur eine reine Funktion) nimmt und sie als Ressourcenfunktion für eine bestimmte Programmsitzung definiert:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

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

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Beachten Sie, dass in diesem Funktionsblob ein schwarzes Symbol vorhanden ist Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen. Dies bedeutet, dass sich die BLOB-Funktion auf die In-Memory-Ressourcenfunktion bezieht, die für die aktuelle Sitzung definiert ist. Eine Ressourcenfunktion, die dauerhaft auf Ihrem Computer oder Cloud-Konto gespeichert ist, hat ein graues Symbol Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen. Und es gibt ein orangefarbenes Symbol für eine offizielle Ressourcenfunktion im Wolfram Feature Repository Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen.

Was passiert also, wenn Sie das Menü „Erweitern“ im Definitionsnotizbuch verwenden? Zunächst werden alle Definitionen im Notizblock übernommen und daraus ein Symbol erstellt Ressourcenobjekt). (Und wenn Sie eine textbasierte IDE oder ein textbasiertes Programm verwenden, können Sie auch explizit erstellen Ressourcenobjekt)

Die lokale Bereitstellung einer Funktion aus einem Repository auf Ihrem Computer erfolgt mit dem Befehl Lokaler Cache für ein Ressourcenobjekt, unter dem es gespeichert werden soll LocalObject auf Ihrem Dateisystem. Die Bereitstellung auf einem Cloud-Konto erfolgt mit dem Befehl CloudDeploy für ein Ressourcenobjekt und eine öffentliche Cloud-Bereitstellung CloudPublish. Auf alle Fälle Ressourcenregister Wird auch zum Registrieren des Ressourcenfunktionsnamens verwendet Ressourcenfunktion["Name"] wird funktionieren.

Was passiert darunter, wenn Sie für ein Funktions-Repository auf die Schaltfläche „Senden“ klicken? ResourceSubmit für ein Ressourcenobjekt aufgerufen. (Und wenn Sie eine Texteingabeschnittstelle verwenden, können Sie auch anrufen ResourceSubmit direkt.)

Standardmäßig erfolgen Übermittlungen unter dem Namen, der Ihrer Wolfram-ID zugeordnet ist. Wenn Sie jedoch einen Antrag im Namen eines Entwicklungsteams oder einer Organisation einreichen, ist dies möglich Legen Sie eine separate Publisher-ID fest und verwenden Sie ihn stattdessen als Namen, um mit Ihren Ansichten zu interagieren.

Nachdem Sie eine Ihrer Funktionen an die Funktionswissensdatenbank übermittelt haben, wird sie zur Überprüfung in die Warteschlange gestellt. Wenn Sie als Antwort Kommentare erhalten, liegen diese in der Regel in Form einer Textdatei mit zusätzlichen „Kommentarzellen“ vor. Sie können den Status Ihrer Bewerbung jederzeit unter überprüfen Ressourcensystem-Mitgliederportal. Sobald Ihr Feature jedoch genehmigt wurde, werden Sie benachrichtigt (per E-Mail) und Ihr Feature wird im Wolfram-Feature-Repository veröffentlicht.

Einige Feinheiten bei der Arbeit

Auf den ersten Blick mag es so aussehen, als ob Sie einfach ein Definitionsnotizbuch nehmen und es wörtlich in ein Funktions-Repository einfügen könnten. Tatsächlich sind jedoch eine Menge Feinheiten damit verbunden – und deren Handhabung erfordert eine ziemlich komplexe Metaprogrammierung und symbolische Verarbeitung als Code, der die Funktion definiert, und der Notepad selbst wird definiert. Das meiste davon geschieht intern, hinter den Kulissen, aber es kann einige Auswirkungen haben, die es wert sind, verstanden zu werden, wenn Sie zur Feature-Wissensdatenbank beitragen.

Erste unmittelbare Feinheit: Wenn Sie das Definitionsnotizbuch ausfüllen, können Sie einfach überall auf Ihre Funktion verweisen, indem Sie einen Namen wie verwenden MeineFunktion, der wie ein normaler Name für eine Funktion in der Wolfram Language aussieht, aber für die Dokumentation des Funktions-Repositorys ersetzt wird Ressourcenfunktion[„MeineFunktion“] ist das, was Benutzer tatsächlich verwenden werden, wenn sie mit der Funktion arbeiten.

Die zweite Feinheit: Wenn Sie eine Ressourcenfunktion aus dem Definitionsnotizbuch erstellen, müssen alle an der Funktionsdefinition beteiligten Abhängigkeiten erfasst und explizit einbezogen werden. Um jedoch sicherzustellen, dass die Definitionen modular bleiben, müssen Sie alles in eine eindeutige Form bringen Namensraum. (Natürlich, Funktionen, die alles können, befinden sich im Funktions-Repository.)

Normalerweise werden Sie nie eine Spur des Codes sehen, der zum Konfigurieren dieses Namespace verwendet wurde. Wenn Sie jedoch aus irgendeinem Grund ein nicht ausreichend ausgeführtes Symbol innerhalb Ihrer Funktion aufrufen, werden Sie feststellen, dass sich dieses Symbol im internen Kontext der Funktion befindet. Bei der Verarbeitung des Definitionsnotizblocks wird jedoch zumindest das Symbol angezeigt, das der Funktion selbst entspricht Einstellbar für beste Anzeige als funktionales BLOB und nicht als reines Zeichen im internen Kontext.

Das Funktions-Repository dient zum Definieren neuer Funktionen. Und diese Funktionen können Optionen haben. Oftmals sind diese Parameter (zum Beispiel Versandart oder Bildgröße) kann sowohl für integrierte Funktionen als auch für solche verwendet werden, für die bereits integrierte Symbole vorhanden sind. Aber manchmal erfordert eine neue Funktion möglicherweise neue Optionen. Um die Modularität aufrechtzuerhalten, müssen diese Parameter Symbole sein, die in einem eindeutigen internen Kontext definiert sind (oder so etwas wie ganze Ressourcenfunktionen, also sich selbst). Der Einfachheit halber können Sie im Funktions-Repository neue Optionen in String-Definitionen definieren. Und zur Vereinfachung für den Benutzer sind diese Definitionen (vorausgesetzt, sie wurden verwendet). Optionswert и OptionsPattern) werden ebenfalls verarbeitet, so dass bei der Verwendung von Funktionen Parameter nicht nur als Strings, sondern auch als globale Symbole mit gleichen Namen angegeben werden können.

Die meisten Funktionen tun bei jedem Aufruf einfach das, was sie tun sollen. Einige Funktionen müssen jedoch initialisiert werden, bevor sie in einer bestimmten Sitzung ausgeführt werden können. Um dieses Problem zu lösen, gibt es im Abschnitt „Definition“ einen Abschnitt „Initialisierung“.

Funktionen aus einem Repository können andere Funktionen verwenden, die sich bereits im Repository befinden. Um Definitionen für ein Funktions-Repository einzurichten, die zwei (oder mehr) Funktionen enthalten, die aufeinander verweisen, müssen Sie diese in Ihrer Programmsitzung bereitstellen, damit Sie dies können Referenz wie auf ihnen Ressourcenfunktion["Name"], dann können Sie die Kombinationen dieser Funktionen erstellen, die Sie benötigen, Beispiele (ich habe es nicht verstanden) und eine neue Funktion zum Repository hinzufügen, die auf den bereits zuvor geposteten Funktionen basiert. (oder bereits oder früher – beide Wörter sind ungeschickt)

Entwicklungsperspektiven. Was soll passieren, wenn das Repository wirklich groß wird?

Heute starten wir gerade das Wolfram Feature Repository, aber wir gehen davon aus, dass seine Größe und Funktionalität im Laufe der Zeit dramatisch zunehmen wird und mit zunehmender Entwicklung verschiedene Probleme auftreten werden, von denen wir bereits vorhersehen, dass sie auftreten können.

Das erste Problem betrifft Funktionsnamen und ihre Eindeutigkeit. Das Funktions-Repository ist so konzipiert, dass Sie, wie die integrierten Funktionen in der Wolfram Language, auf jede bestimmte Funktion verweisen können, indem Sie einfach ihren Namen angeben. Dies bedeutet aber zwangsläufig, dass Funktionsnamen im gesamten Repository global eindeutig sein müssen, sodass es beispielsweise nur einen geben kann Ressourcenfunktion[„MyFavoriteFunction“].

Dies mag auf den ersten Blick wie ein großes Problem erscheinen, aber es lohnt sich zu bedenken, dass es sich im Grunde um dasselbe Problem handelt wie bei Dingen wie Internetdomänen oder Social-Media-Handles. Tatsache ist, dass das System lediglich über einen Registrar verfügen muss – und dies ist eine der Rollen, die unser Unternehmen für die Wissensdatenbank der Wolfram-Funktionen übernehmen wird. (Bei privaten Versionen eines Repositorys können ihre Registrare Administratoren sein.) Natürlich kann eine Internetdomäne registriert werden, ohne dass sich etwas darauf befindet, aber in einem Funktions-Repository kann ein Funktionsname nur registriert werden, wenn es eine tatsächliche Definition von gibt die Funktion.

Ein Teil unserer Rolle bei der Verwaltung der Wolfram-Funktionswissensdatenbank besteht darin, sicherzustellen, dass der für eine Funktion gewählte Name angesichts der Definition der Funktion logisch ist und den Namenskonventionen der Wolfram Language folgt. Wir verfügen über mehr als 30 Jahre Erfahrung in der Benennung integrierter Funktionen in der Wolfram Language, und unser Kuratorenteam wird diese Erfahrung auch in das Funktions-Repository einbringen. Natürlich gibt es immer Ausnahmen. Beispielsweise scheint es vorzuziehen, für eine Funktion einen kurzen Namen zu haben, aber es ist besser, sich mit einem längeren, spezifischeren Namen zu „verteidigen“, da die Wahrscheinlichkeit geringer ist, dass Sie in Zukunft auf jemanden stoßen, der einen ähnlichen Funktionsnamen erstellen möchte .

(An dieser Stelle ist zu beachten, dass das einfache Hinzufügen eines Member-Tags zur Unterscheidung von Funktionen nicht den beabsichtigten Effekt hat. Denn wenn Sie nicht darauf bestehen, immer ein Tag zuzuweisen, müssen Sie für jede bestimmte Funktion ein Standard-Tag definieren und auch Autoren-Tags zuweisen , was wiederum eine globale Koordination erfordern würde.)

Da die Wissensbasis der Wolfram-Funktionen wächst, wird eines der Probleme, die wahrscheinlich auftreten werden, die Auffindbarkeit der Funktionen sein, die das System bereitstellt Suchfunktion (und Definitionsdateien können Schlüsselwörter usw. enthalten). Für integrierte Funktionen in der Wolfram Language gibt es in der Dokumentation alle möglichen Querverweise, die dabei helfen, die Funktionen zu „bewerben“. Funktionen in einem Funktions-Repository können auf integrierte Funktionen verweisen. Aber wie sieht es umgekehrt aus? Zu diesem Zweck werden wir mit verschiedenen Designs experimentieren, um Repository-Funktionen auf Dokumentationsseiten für integrierte Funktionen verfügbar zu machen.

Für integrierte Funktionen in der Wolfram Language gibt es eine sogenannte Erkennungsschicht, die von bereitgestellt wird Netzwerk von „Hilfeseiten“, die organisierte Listen mit Funktionen zu bestimmten Bereichen bereitstellen. Es ist immer schwierig, Manpages richtig auszubalancieren, und wenn die Wolfram-Sprache wächst, müssen Manpages oft komplett neu organisiert werden. Es ist ziemlich einfach, Funktionen aus einem Repository in große Kategorien einzuteilen und diese Kategorien sogar konsistent aufzuschlüsseln, aber es ist viel wertvoller, ordnungsgemäß organisierte Sprachreferenzseiten zu haben. Es ist noch nicht klar, wie man sie am besten für die gesamte Funktionswissensbasis erstellt. Zum Beispiel, CreateResourceObjectGallery Im Feature-Repository kann jeder eine Webseite veröffentlichen, die seine „Auswahl“ aus dem Repository enthält:

Wolfram Function Repository: Open-Access-Plattform für Wolfram-Spracherweiterungen

Das Wolfram-Funktions-Repository ist als persistentes Funktions-Repository konfiguriert, in dem jede darin enthaltene Funktion immer funktioniert. Natürlich können neue Versionen von Funktionen verfügbar werden, und wir gehen davon aus, dass einige Funktionen mit der Zeit natürlich veraltet sein werden. Die Funktionen funktionieren, wenn sie in Programmen verwendet werden, ihre Dokumentationsseiten enthalten jedoch Links zu neuen, erweiterten Funktionen.

Das Wolfram Feature Repository soll Ihnen dabei helfen, schnell neue Funktionen zu entdecken und neue Möglichkeiten zur Verwendung der Wolfram-Sprache zu erlernen. Wir sind sehr optimistisch, dass einiges von dem, was im Feature-Repository erforscht wurde, irgendwann sinnvoll sein wird, um integrierte Teile der Kernsprache von Wolfram zu werden. Im letzten Jahrzehnt hatten wir ein ähnliches Set Funktionen, die ursprünglich in Wolfram | eingeführt wurden Alpha. Und eine der Lehren aus dieser Erfahrung ist, dass das Erreichen der Qualitäts- und Konsistenzstandards, auf die wir uns bei allem konzentrieren, was in die Wolfram-Sprache integriert ist, viel Arbeit erfordert, die oft schwieriger ist als der anfängliche Aufwand zur Umsetzung der Idee. Dennoch kann eine Funktion in der Funktionswissensdatenbank als sehr nützlicher Konzeptnachweis für eine zukünftige Funktion dienen, die eventuell in die Wolfram-Sprache integriert wird.

Das Wichtigste dabei ist, dass eine Funktion in einem Funktions-Repository für jeden Benutzer sofort verfügbar ist. Es ist möglich, dass eine native Sprachfunktion viel besser und leistungsfähiger ist, aber ein Feature-Repository würde es Benutzern ermöglichen, sofort auf alle neuen Funktionen zuzugreifen. Und was am wichtigsten ist: Dieses Konzept ermöglicht es jedem, beliebige neue Funktionen hinzuzufügen.

Früher in der Geschichte der Wolfram-Sprache hätte diese Idee nicht so gut funktioniert wie sie, aber in diesem Stadium werden so viele Anstrengungen in die Sprache gesteckt und ein so tiefes Verständnis der Prinzipien des Sprachdesigns, dass es jetzt sehr scheint Einer großen Benutzergemeinschaft ist es möglich, Funktionen hinzuzufügen, die die Designkonsistenz wahren und sie für ein breites Spektrum von Benutzern nützlich machen.

In der Wolfram Language-Benutzergemeinschaft herrscht ein unglaublicher Talentgeist. (Natürlich gehören zu dieser Community viele führende Forscher und Entwickler aus den unterschiedlichsten Bereichen.) Ich hoffe, dass das Wolfram Feature Repository eine effektive Plattform zur Erschließung und Verbreitung dieses Talentgeistes bietet. Nur gemeinsam können wir etwas schaffen, das den Anwendungsbereich des Wolfram-Sprachcomputerparadigmas erheblich erweitert.

In mehr als 30 Jahren haben wir mit der Wolfram-Sprache einen langen Weg zurückgelegt. Lassen Sie uns nun gemeinsam noch weiter gehen. Ich ermutige alle angesehenen Benutzer der Wolfram-Sprache auf der ganzen Welt nachdrücklich, dafür das funktionale Repository sowie das neue Softwareprojekt wie die Free Wolfram Engine for Developers als Plattform zu nutzen.

Source: habr.com

Kommentar hinzufügen