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

Hallo habr Ich präsentiere Ihnen die Übersetzung von Steven Wolframs Beitrag "The Wolfram Function Repository: Start einer offenen Plattform zur Erweiterung der Wolfram-Sprache" .



Wolfram Sprachvoraussetzungen


Heute stehen wir mit der Wolfram-Sprache kurz vor großen Erfolgen. Erst vor drei Wochen haben wir die kostenlose Wolfram-Engine für Entwickler gestartet, um unseren Benutzern zu helfen, die Wolfram-Sprache in ihre umfangreichen Softwareprojekte zu integrieren. Heute starten wir das Wolfram-Funktionsrepository , um eine koordinierte Plattform für die Funktionen bereitzustellen, die zur Erweiterung der Wolfram-Sprache erstellt wurden, und wir öffnen das Funktionsrepository für alle, die zur Entwicklung unseres Softwareprodukts beitragen können.


Das Wolfram Function Repository wurde dank der einzigartigen Besonderheiten der Wolfram-Sprache nicht nur als Programmiersprache, sondern auch als vollständige Computersprache möglich . In traditionellen Programmiersprachen umfasst das Hinzufügen wichtiger neuer Funktionen normalerweise die Erstellung ganzer zusätzlicher Bibliotheken, die bei gemeinsamer Nutzung möglicherweise funktionieren oder nicht. In Wolfram Language ist jedoch bereits so viel in die Sprache selbst integriert, dass es möglich ist, ihre Funktionalität erheblich zu erweitern, indem einfach neue Funktionen hinzugefügt werden, die sich sofort in die gesamte Struktur der gesamten Sprache integrieren.


Zum Beispiel enthält das Wolfram-Funktionsrepository jetzt 532 neue Funktionen , die in 26 thematische Kategorien unterteilt sind:



Ähnlich wie bei mehr als 6000 in die Wolfram-Sprache integrierten Standardfunktionen verfügt jede Funktion aus dem Repository über eine Dokumentationsseite mit einer detaillierten Beschreibung und Arbeitsbeispielen:



Um zur Seite zu gelangen, kopieren Sie das obige Objekt (funktionales BLOB), fügen Sie es in die Eingabezeile ein und führen Sie die Funktion aus. Es ist bereits in die Wolfram-Sprache integriert und wird ab Version 12.0 standardmäßig unterstützt:



Hierbei ist zu beachten, dass Sie bei der Verarbeitung von LogoQRCode beispielsweise keine „Bibliothek zur Bildverarbeitung“ einrichten müssen - wie in Wolfram Language haben wir bereits eine konsistente und sorgfältig algorithmisierte Art der Bildverarbeitung implementiert, die sofort mit verschiedenen grafischen Funktionen der Sprache verarbeitet werden kann:



Ich hoffe, dass mit der Unterstützung einer wunderbaren und talentierten Community , die in den letzten Jahrzehnten wächst und wächst (basierend auf der Wolfram-Sprache). In absehbarer Zeit wird das Wolfram-Funktionsrepository das Spektrum der in der Sprache verfügbaren (möglicherweise potenziell bedeutenden, auf verschiedene Bereiche der Wissenschaft und Technologie spezialisierten) Funktionen erheblich erweitern. Somit wird es möglich, sowohl den Sprachinhalt (seine eingebauten Funktionen) als auch die Entwicklungsprinzipien zu verwenden , die auf der Basis der Sprache implementiert werden. (Hierbei ist zu beachten, dass Wolfram Language bereits mehr als 30 Jahre Entwicklungsgeschichte und stabiles Wachstum aufweist. )
Innerhalb von Funktionen aus dem Repository befinden sich möglicherweise kleine oder ziemlich umfangreiche Codefragmente, die in der Wolfram-Sprache geschrieben sind. Dies können beispielsweise Aufrufe externer APIs und Dienste oder externer Bibliotheken in anderen Sprachen sein . Ein einzigartiges Merkmal dieses Ansatzes ist, dass beim Wechsel zur Funktionalität auf Benutzerebene keine möglichen Inkonsistenzen auftreten, da dieser Ansatz auf der vereinbarten Wolfram-Sprachstruktur basiert und jede Funktion automatisch korrekt funktioniert und es sollte sein.
Die Shell- und Programmstruktur des Wolfram-Funktionsrepositorys sind so konfiguriert, dass jeder auf einfachste und bequemste Weise zur gemeinsamen Sache beitragen kann - indem er einfach die Textdatei des Notizblocks (mit der Erweiterung nb) WL ausfüllt . Mit den integrierten automatischen Funktionen können Sie neue Funktionen überprüfen, die dem Repository hinzugefügt wurden, um deren Integration in die Sprache zu gewährleisten. Unser Unternehmen stützt sich auf eine breite Palette von Benutzern, die ihre Funktionen in die Sprache integrieren können, und nicht auf die großen Schwierigkeiten der neuen Funktionen - und obwohl der Verifizierungsprozess hier implementiert ist, bestehen wir nicht auf einer sorgfältigen Analyse des Designs oder strengen Standards für die Vollständigkeit und Zuverlässigkeit neuer Funktionen Benutzerfunktionen im Gegensatz zu gründlicheren Überprüfungen von Funktionen, die in den Kern der von uns verwendeten Sprache integriert sind.


Dieser Ansatz enthält viele Kompromisse und Details. Unser Ziel ist es jedoch, das Wolfram-Funktionsrepository sowohl für Benutzer als auch für neue Benutzerfunktionen zu optimieren, um einen konkreten Beitrag zur Entwicklung der Sprache zu leisten. Während ich wachse, habe ich keinen Zweifel daran, dass wir neue Methoden zur Verarbeitung und Überprüfung von Funktionen erfinden müssen, die in das Repository eingebettet sind, und dies nicht zuletzt, um eine große Anzahl von Funktionen zu organisieren und nach den Funktionen zu suchen, die Benutzer benötigen. Es kann jedoch nur beruhigen, dass der von uns gewählte Weg ein guter Anfang ist. Ich persönlich habe der ursprünglichen Basis mehrere Funktionen hinzugefügt . Viele von ihnen basieren auf Code, den ich seit einiger Zeit persönlich entwickelt habe. Und ich habe nur ein paar Minuten damit verbracht, sie an das Repository weiterzuleiten. Jetzt, da sie sich im Repository befinden, kann ich diese Funktionen endlich sofort und jederzeit nach Bedarf verwenden, ohne mir Gedanken über das Auffinden von Dateien, das Herunterladen von Paketen usw. machen zu müssen.


Steigern Sie die Effizienz und senken Sie gleichzeitig die Kosten.


Schon vor dem Aufkommen des Internets gab es Möglichkeiten, Wolfram-Sprachcode auszutauschen (unser erstes großes zentrales Projekt war MathSource , das 1991 auf Basis von CD-ROM usw. für Mathematica erstellt wurde). Natürlich ist der vorgeschlagene Ansatz, der auf dem Wolfram-Funktionsrepository basiert, ein leistungsfähigeres und zuverlässigeres Werkzeug für die Implementierung der oben genannten Aufgaben.


Seit mehr als 30 Jahren arbeitet unser Unternehmen hart daran, die Integrität der Wolfram-Sprachstruktur aufrechtzuerhalten. Dies ist sehr wichtig, damit die Wolfram-Sprache nicht nur eine Programmiersprache, sondern auch eine vollwertige Computersprache wird . Das Wesentliche des Ansatzes zur Implementierung des Wolfram-Funktionsrepositorys ist daher die Verwendung eines einzigen Ansatzes für die Programmierung und die Entwicklung neuer Funktionen, die nacheinander hinzugefügt werden und in den Sprachrahmen passen, um die Möglichkeit seiner Entwicklung und gemeinsamen Entwicklung zu ermöglichen.


In der Struktur der Implementierung jeder Funktion treten verschiedene Rechenprozesse auf. Hierbei ist zu beachten, dass der Benutzer ein klares und einheitliches Erscheinungsbild und eine klare Lesbarkeit haben muss. In diesem Zusammenhang bieten die integrierten Funktionen von Wolfram Language mehr als 6.000 aufeinanderfolgende Beispiele für die ordnungsgemäße Programmierung von Funktionen (dies sind unsere Live-Videoprogrammberichte , die Hunderte von Stunden für die Erstellung typischer Programmierprozesse umfassen ). Dieser Ansatz ermöglicht es Ihnen letztendlich, das Wolfram-Funktions-Repository für eine gute Arbeit geeignet zu machen, nämlich die strukturelle Natur der Wolfram-Sprachsprache 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 oder spärliche Arrays oder molekulare Strukturen sowie geografische Daten oder andere verarbeitet, verfügt die Sprache bereits über eine konsistente symbolische Darstellung, und dank dieser Funktion wird Ihre Funktion sofort mit anderen Funktionen kompatibel in der Sprache.


Das Erstellen eines Repositorys, das wirklich gut funktioniert, ist eine interessante Meta-Programmieraufgabe. Zum Beispiel kann ein Übermaß an Einschränkungen im Programm nicht die erforderliche Vereinheitlichung und Universalität des Algorithmus erreichen. Genau wie bei einer unzureichenden Anzahl von Funktionseinschränkungen können Sie keine ausreichend korrekte Reihenfolge der Algorithmusausführung implementieren. Einige frühere Beispiele für den Kompromiss zwischen diesen von unserem Unternehmen implementierten Ansätzen haben recht stabil funktioniert - dies sind: Das 2007 gestartete Wolfram-Demonstrationsprojekt , das jetzt interaktiv im Internet arbeitet und mehr als 12.000 interaktive Benutzerdemos enthält. Die Wolfram-Datenbank verfügt über mehr als 600 vorgefertigte Datenbanken, die in der Sprache Wolfram Language verwendet werden können. Der Speicher des neuronalen Wolfram-Netzwerks wird fast jede Woche mit neuen neuronalen Netzwerken aktualisiert ( derzeit sind es 118) und sie werden sofort über die NetModel- Funktion in der Sprache Wolfram Language verbunden.


Alle oben genannten Beispiele haben ein grundlegendes Merkmal: Die im Projekt gesammelten Objekte und Funktionen weisen einen sehr hohen Grad an Strukturierung und Verteilung von Prozessen auf. Natürlich kann die Granularität der Struktur einer Demonstration oder eines neuronalen Netzwerks oder etwas anderem stark variieren, aber die grundlegende Struktur für jedes aktuelle Repository bleibt immer unverändert. Wie beurteilen Sie, lieber Benutzer, ein solches Repository, das die Wolfram-Sprache um Erweiterungen erweitert? Wolfram Language ist äußerst flexibel und kann daher auf beliebige Weise erweitert und geändert werden. Dieser Umstand ist äußerst wichtig für die Fähigkeit, schnell verschiedene große Softwareprojekte in der Wolfram-Sprache zu erstellen. Es ist zu beachten, dass mit zunehmender Flexibilität der Sprache die Kosten für Projekte, die in einer solchen Sprache durchgeführt werden, zwangsläufig steigen werden. Dies liegt an der Tatsache, dass je mehr der Benutzer eine solche Sprache verwendet, desto mehr er die zugewiesene Funktionalität erhält. Wir sollten jedoch nicht vergessen, dass dieser Ansatz negative Seiten in Bezug auf die Unfähigkeit haben kann, eine konsistente Konsistenz der Programmmodule sicherzustellen.


In herkömmlichen Programmiersprachen gibt es ein häufiges Problem mit Bibliotheken. 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 andere Funktionen oder Datentypen als ihre Grundstrukturen zu garantieren. Tatsächlich ist das Problem jedoch noch größer, als es auf den ersten Blick scheint: Wenn jemand eine große vertikale Funktionalität aufbaut, ist es ohne die enormen Kosten einer zentralisierten Programmierung des Projekts, das wir in die Wolfram-Sprache investiert haben, unmöglich, Konsistenz zu erreichen. Daher ist es wichtig, dass alle Programmmodule immer korrekt zusammenarbeiten.


Die Idee des Wolfram-Funktionsrepositorys besteht daher darin, das oben erwähnte Problem zu vermeiden - einfach Erweiterungen der Sprache in Form relativ kleiner Elemente des Programmcodes durch separate Funktionen hinzuzufügen, deren Entwicklung in Form koordinierter Module eine einfachere Aufgabe ist. Gleichzeitig gibt es Programmierfunktionen, die mit Hilfe einzelner Funktionen nicht bequem gemacht werden können (und unser Unternehmen wird in naher Zukunft einen optimierten Softwarealgorithmus veröffentlichen, um die Implementierung umfangreicher Softwarepakete zu unterstützen). Basierend auf den bereits in die Wolfram-Sprache integrierten Funktionen gibt es jedoch viele Programmieroptionen, die basierend auf einzelnen Funktionen implementiert werden. Die Idee dabei ist, dass es mit relativ geringem Programmaufwand möglich wäre, eine Reihe neuer und sehr nützlicher Funktionen zu schaffen, die eine ausreichende Projektkohärenz gewährleisten, während sie gut aufeinander abgestimmt sind und darüber hinaus leicht und in der Lage sind später in der Sprache weit verbreitet.


Dieser Ansatz ist natürlich ein Kompromiss. Mit der Implementierung eines größeren Pakets können Sie sich eine völlig neue Funktionswelt vorstellen, die äußerst leistungsfähig und nützlich wird. Wenn neue Funktionen benötigt werden, die in alles andere passen, Sie aber gleichzeitig nicht bereit sind, große Anstrengungen für die Entwicklung des Projekts zu unternehmen, kann dies leider zu einer Verringerung des Umfangs Ihres Projekts führen. Die Idee des Wolfram-Funktionsrepositorys besteht darin, dem definierenden Teil des Projekts Funktionalität bereitzustellen. Dieser Ansatz wird leistungsstarke Funktionen hinzufügen und gleichzeitig die Aufrechterhaltung einer guten Konsistenz des Programmierprojekts vereinfachen.


Hilfe beim Hinzufügen benutzerdefinierter Funktionen zum Funktionsrepository


Die Spezialisten unseres Unternehmens haben hart gearbeitet, um den Benutzern ihren Beitrag zu den Funktionen des Wolfram-Repositorys zu erleichtern. Auf dem Desktop (bereits in Version 12.0 ) können Sie einfach nacheinander die Registerkarten des Hauptmenüs durchgehen: Datei> Neu> RepositoryItem> Funktions-Repository-Element. Sie erhalten ein " Definitionsnotizbuch " (programmgesteuert in der Arbeitsumgebung. Sie können auch die analoge Funktion " CreateNotebook" verwenden [ "FunctionResource" ] ):



Es gibt zwei Hauptaktionen, die Sie ausführen müssen: Erstens, um den Code Ihrer Funktion tatsächlich aufzuschreiben, und zweitens, um eine Dokumentation zu schreiben, die veranschaulicht, wie Ihre Funktion funktionieren sollte.
Klicken Sie oben auf die Schaltfläche „Beispiel öffnen“, um ein Beispiel für die erforderlichen Schritte anzuzeigen:



Tatsächlich versuchen Sie, eine ähnliche Funktion wie in der Wolfram-Sprache zu erstellen. Abgesehen davon, dass es etwas viel Spezifischeres als eine Inline-Funktion ausführen kann. Darüber hinaus werden die Erwartungen hinsichtlich seiner Vollständigkeit und Zuverlässigkeit viel geringer sein.
Sie müssen einen Namen für Ihre Funktion angeben, der den Benennungsrichtlinien für Wolfram Language-Funktionen entspricht. Darüber hinaus müssen Sie eine Dokumentation für Ihre Funktion entwickeln, ähnlich wie bei den integrierten Sprachfunktionen. Ich werde dies später genauer besprechen. Beachten Sie jetzt nur die Tatsache, dass sich in der Schaltflächenreihe oben in der Definitionsnotizdatei eine Schaltfläche „Style Guide “ befindet , die erklärt, was zu tun ist, und eine Schaltfläche „Tools“, 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 „Prüfen“. Es ist völlig normal, dass Sie noch nicht alle Details herausgefunden haben. Daher wird die Überprüfungsfunktion automatisch ausgeführt und führt zahlreiche Stil- und Konsistenzprüfungen durch. Oft fordert sie Sie sofort auf, Korrekturen zu bestätigen und zu akzeptieren (Beispiel: „Diese Zeile sollte mit einem Doppelpunkt enden“, und sie bietet an, einen Doppelpunkt einzugeben). Manchmal bittet sie dich, selbst etwas hinzuzufügen oder zu ändern. Wir werden die automatische Funktionalität der Schaltfläche "Prüfen" ständig um neue Funktionen erweitern. Das Hauptziel besteht jedoch darin, sicherzustellen, dass alles, was Sie an das Funktionsrepository senden, bereits genau so vielen Stilempfehlungen wie möglich entspricht



Nachdem Sie "Check" ausgeführt haben, können Sie "Preview" 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 Datei im Cloud-Speicher erstellen. Wenn Sie aus irgendeinem Grund mit dem, was Sie in der Vorschau sehen, nicht zufrieden sind, gehen Sie einfach zurück und nehmen Sie die erforderlichen Korrekturen vor. Klicken Sie dann erneut auf die Schaltfläche Vorschau.
Jetzt können Sie Ihre Funktion im Repository ablegen. Die Schaltfläche Bereitstellen bietet Ihnen vier Optionen:



In diesem Schritt ist es wichtig, dass Sie Ihre Funktion an das Wolfram-Funktionsrepository senden können, damit sie jedem Benutzer zur Verfügung steht. Gleichzeitig können Sie Ihre Funktion auch für eine begrenzte Anzahl von Benutzern platzieren. Sie können beispielsweise eine Funktion erstellen, die sich lokal auf Ihrem Computer befindet, damit sie verfügbar ist, wenn Sie diesen bestimmten Computer verwenden. Oder Sie können es in Ihrem Cloud-Konto ablegen, damit es Ihnen zur Verfügung steht, wenn Sie mit der Cloud verbunden sind. Sie können eine Funktion auch öffentlich über Ihr Cloud-Konto platzieren (bereitstellen). Es befindet sich jedoch nicht im zentralen Wolfram-Funktionsrepository. Sie können jedoch jemandem eine URL geben, über die er Ihre Funktion von Ihrem Konto abrufen kann. (In Zukunft werden wir auch zentrale Repositories in unserem gesamten Unternehmen unterstützen.)


Angenommen, Sie möchten Ihre Funktion tatsächlich auf die Wolfram-Funktionswissensbasis übertragen. Klicken Sie dazu auf die Schaltfläche "Senden" an das Repository. Was passiert gerade? Ihre Bewerbung wird sofort in die Warteschlange gestellt, damit sie von unserem speziellen Kuratorenteam geprüft und genehmigt werden kann.


Während Ihr Antrag den Genehmigungsprozess durchläuft (der normalerweise mehrere Tage dauert), erhalten Sie Nachrichten über den Status seiner Prüfung sowie möglicherweise Vorschläge für seine weitere Verwendung. , Wolfram . ( . .)


?


, , , 6000+ , Wolfram 30 . Wolfram , , Wolfram Language, ( ).


, Wolfram Wolfram Language — , . .


Wolfram, , . Wolfram , , - , . , SendMailFromNotebook . PolygonalDiagram . .


, , , , . , , .


, , , , — Wolfram — , , .


. , . , , API, , . nb ( « ») , , VerificationTest , . , ( , , , ).


. , , . , ? , , , , . , , , , .


( ) , . , Wolfram Data . , ?


. , , . .


, , , Wolfram Language, ? Wolfram Language , UpValues . ( , ), . ( , Wolfram Language, — , , , , , , ).


, ? , Wolfram Language , ( , , ) . : API, Wolfram Cloud , . , , . , , API , . ( «») , Wolfram Language. (, , — , .)


Wolfram Wolfram? , API Wolfram, . , , , Wolfram. ( ExternalEvaluate ExternalFunction Wolfram.)


? , Wolfram Language . , Wolfram Language , . , , . ., Wolfram Language. ( , , ).


, , , , - , , . Wolfram Language, , , , , « » , .


«»


, , Wolfram! - ( ), . , , , .


, , — — . , . ( Wolfram Enterprise , , .)


, Wolfram, ; . «» Unix — « » « », , . ., . , , , .


: « » « Wolfram ». (, ), , , , .


Wolfram, , . « », «». , , . . . , , , , , , .


Git , , , . ( ), , , , .


, «» . , , ( , ). , , . , ResourceUpdate . (« BLOB-» , .)


Wolfram , Wolfram Language . , « » (, ).


, ResourceFunction [ ... ] . , Wolfram Engine, , IDE (c , Free Wolfram Engine ).


Wie funktioniert es


Wolfram , ( , Neural Net Repository , ..), Wolfram, ResourceFunction ResourceObject .


ResourceFunction :



, Information :



Wie funktioniert das Festlegen einer Ressourcenfunktion? Der einfachste ist ein rein lokaler Fall. Hier ist ein Beispiel, das eine Funktion (in diesem Fall nur eine reine Funktion) als Ressourcenfunktion für eine bestimmte Sitzung im Programm definiert:



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



Beachten Sie, dass sich in diesem Funktions-Blob ein schwarzes Symbol befindet. . Dies bedeutet, dass sich eine BLOB-Funktion auf eine Ressourcenfunktion im Speicher bezieht, die für die aktuelle Sitzung definiert wurde. Für die Ressourcenfunktion, die ständig auf Ihrem Computer oder in einem Cloud-Konto gespeichert ist, gibt es ein graues Symbol . Für die offizielle Ressourcenfunktion im Wolfram-Funktionsrepository gibt es ein orangefarbenes Symbol .


Was passiert also, wenn Sie das Menü Bereitstellen im Definitionsnotizbuch verwenden? Zunächst werden alle Definitionen im Editor übernommen und daraus ein symbolisches ResourceObject erstellt . (Und wenn Sie eine Text-IDE oder ein Textprogramm verwenden, können Sie auch explizit ein ResourceObject erstellen.)


Die lokale Bereitstellung der Funktion aus dem Repository auf Ihrem Computer wird mit dem Befehl LocalCache für das Ressourcenobjekt ausgeführt, um es als LocalObject in Ihrem Dateisystem zu speichern. Die Bereitstellung im Cloud-Konto erfolgt mit dem Befehl CloudDeploy für das Ressourcenobjekt, und die öffentliche Bereitstellung in der Cloud erfolgt mit CloudPublish . In allen Fällen wird das ResourceRegister auch verwendet, um den Namen der Ressourcenfunktion zu registrieren, damit die ResourceFunction [ "name" ] funktioniert.


Wenn Sie für das Funktions-Repository auf die Schaltfläche Senden klicken, wird das, was unter ResourceSubmit geschieht, für das Ressourcenobjekt aufgerufen. (Wenn Sie eine Texteingabeschnittstelle verwenden, können Sie ResourceSubmit auch direkt aufrufen.)


Standardmäßig erfolgt das Senden unter dem Namen, der Ihrer Wolfram-ID zugeordnet ist. Wenn Sie jedoch einen Antrag im Namen einer Entwicklungsgruppe oder Organisation einreichen, können Sie eine separate Herausgeberkennung festlegen und diese stattdessen als Namen für die Interaktion mit Ihren Einsendungen verwenden.


Nachdem Sie eine Ihrer Funktionen an die Wissensdatenbank der Funktionen gesendet haben, wird sie zur Überprüfung in die Warteschlange gestellt. Wenn Sie als Antwort Kommentare erhalten, werden diese normalerweise in Form einer Textdatei mit zusätzlichen „Kommentarzellen“ hinzugefügt. Sie können den Status Ihrer Anwendung jederzeit überprüfen, indem Sie zum Portal des Teilnehmers des Ressourcensystems gehen . Sobald Ihre Funktion genehmigt wurde, werden Sie (per E-Mail) benachrichtigt und Ihre Funktion wird in das Wolfram-Funktionsrepository gestellt.


Einige Feinheiten in Arbeit


Auf den ersten Blick könnte der Eindruck entstehen, dass Sie das Definitionsnotizbuch einfach wörtlich in das Funktionsrepository stellen können. Tatsächlich gibt es jedoch einige Feinheiten - und um sie zu verarbeiten, müssen Sie eine recht komplexe Metaprogrammierung und Zeichenverarbeitung als Code durchführen, der die Funktion definiert und Notepad-Definition selbst. Das meiste geschieht intern, dh „hinter den Kulissen“. Dies kann jedoch einige Konsequenzen haben, die es wert sind, verstanden zu werden, wenn Sie zur Wissensbasis von Funktionen beitragen möchten.


Erste sofortige Subtilität: Wenn Sie den Definitionsnotizblock ausfüllen, können Sie einfach überall auf Ihre Funktion verweisen, indem Sie einen Namen wie MyFunction verwenden , der wie ein regulärer Name für eine Funktion in der Wolfram-Sprache aussieht. Zur Dokumentation des Funktionsrepositorys wird dieser jedoch durch ResourceFunction [ "MyFunction" ersetzt " ] - Dies ist genau das, was Benutzer tatsächlich verwenden, wenn sie mit der Funktion arbeiten.


Die zweite Feinheit: Wenn Sie eine Ressourcenfunktion aus dem Definitionsnotizblock erstellen, müssen alle Abhängigkeiten, die an der Definition der Funktion beteiligt sind, festgelegt und explizit einbezogen werden. Um jedoch sicherzustellen, dass die Definitionen modular bleiben, müssen Sie alles in einen eindeutigen Namespace einfügen . (Natürlich befinden sich die Funktionen, die all dies ausführen, im Funktionsrepository.)


Normalerweise werden Sie keine Spuren des Codes sehen, der zum Konfigurieren dieses Namespace verwendet wird. Wenn Sie jedoch aus irgendeinem Grund ein nicht ausgeführtes Symbol in Ihrer Funktion aufrufen, werden Sie feststellen, dass sich dieses Symbol im internen Kontext der Funktion befindet. Bei der Verarbeitung von Notepad-Definitionen wird jedoch mindestens das der Funktion selbst entsprechende Zeichen so konfiguriert, dass es im internen Kontext am besten als funktionales BLOB und nicht als Rohzeichen angezeigt wird .


Das Funktionsrepository soll neue Funktionen definieren. Und diese Funktionen können Optionen haben. Oft können diese Parameter (z. B. Method oder ImageSize ) sowohl für integrierte Funktionen als auch für solche verwendet werden, für die bereits integrierte Zeichen vorhanden sind. Manchmal erfordern neue Funktionen jedoch neue Optionen. Um die Modularität zu erhalten, müssen diese Parameter Symbole sein, die in einem eindeutigen internen Kontext definiert sind (oder so etwas wie ganze Ressourcenfunktionen, dh für sich). Der Einfachheit halber können Sie im Funktionsrepository neue Optionen in den Definitionen als Zeichenfolgen festlegen. Zur Vereinfachung des Benutzers werden diese Definitionen (vorausgesetzt, sie haben OptionValue und OptionsPattern verwendet ) auch verarbeitet, sodass bei Verwendung von Funktionen Parameter nicht nur als Zeichenfolgen, sondern auch als globale Zeichen mit demselben Namen festgelegt 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 namens Initialisierung.


Funktionen aus dem Repository können andere Funktionen verwenden, die sich bereits im Repository befinden. Um die Definitionen für das Repository von Funktionen zu konfigurieren, die zwei (oder mehr) Funktionen enthalten, die aufeinander verweisen, müssen Sie sie in Ihrer Sitzung mit dem Programm erweitern, damit Sie darauf verweisen können Wenn Sie sie als ResourceFunction [ "Name" ] verwenden , können Sie die Kombinationen dieser Funktionen erstellen, die Sie als Beispiele benötigen (ich habe es nicht verstanden), und dem Repository eine neue Funktion hinzufügen, die auf den bereits platzierten basiert. (oder schon oder früher - beide Wörter sind ungeschickt)


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


Heute starten wir gerade das Wolfram-Funktionsrepository, aber im Laufe der Zeit erwarten wir, dass es sein Volumen und seine Funktionalität dramatisch erhöhen (löschen) kann, und wenn es wächst, werden verschiedene Probleme auftreten, die, wie wir bereits vermuten, auftreten können.


Das erste Problem betrifft Funktionsnamen und deren Eindeutigkeit. Das Funktionsrepository ist so konzipiert, dass Sie wie bei den in der Wolfram-Sprache integrierten Funktionen auf eine bestimmte Funktion verweisen können, indem Sie einfach ihren Namen angeben. Dies bedeutet jedoch zwangsläufig, dass die Funktionsnamen im gesamten Repository global eindeutig sein müssen, damit beispielsweise nur eine ResourceFunction [ "MyFavoriteFunction" ] im Repository vorhanden sein kann.


Auf den ersten Blick mag dies wie ein großes Problem erscheinen, aber Sie sollten verstehen, dass dies im Grunde das gleiche Problem ist wie bei Dingen wie Internetdomänen oder Markern für soziale Netzwerke. Tatsache ist, dass im System lediglich ein Registrar erforderlich ist - und dies ist eine der Rollen, die unser Unternehmen für die Wissensdatenbank der Wolfram-Funktionen übernehmen wird. (Bei privaten Versionen des Repositorys können Administratoren ihre Registrare sein.) Natürlich kann die Internetdomäne registriert werden, ohne dass etwas darauf steht, aber im Funktionsrepository kann der Name der Funktion nur registriert werden, wenn eine tatsächliche Definition der Funktion vorliegt.


Ein Teil unserer Rolle bei der Verwaltung der Wolfram Functions Knowledge Base besteht darin, sicherzustellen, dass der Name, den Sie für die Funktion auswählen, mit der Definition der Funktion übereinstimmt und den Namenskonventionen der Wolfram-Sprache entspricht. Wir haben mehr als 30 Jahre Erfahrung in der Benennung integrierter Funktionen in der Wolfram-Sprache, und unser Kurationsteam (Kuratoren?) Wird diese Erfahrung auch in das Funktionsrepository übertragen. Natürlich gibt es immer Ausnahmen. Zum Beispiel mag es vorzuziehen sein, einen Kurznamen für eine Funktion zu haben, aber es ist besser, mit einem längeren, spezifischeren Namen zu „verteidigen“, da es weniger wahrscheinlich ist, dass jemand in Zukunft einen ähnlichen Funktionsnamen erstellen möchte.


(Hierbei ist zu beachten, dass das Hinzufügen eines Teilnehmer-Tags zur Beseitigung der Mehrdeutigkeit von Funktionen nicht den erwarteten Effekt bringt. Wenn Sie nicht darauf bestehen, immer ein Tag zuzuweisen, müssen Sie ein Standard-Tag für eine bestimmte Funktion definieren und hervorheben Autoren-Tags, die wiederum eine globale Koordination erfordern.)


Wenn die Wissensbasis für Wolfram-Funktionen wächst, ist eines der Probleme, die wahrscheinlich auftreten, die Erkennbarkeit von Funktionen. Hierzu wird die Suchfunktion im System bereitgestellt (und Definitionsdateien können Schlüsselwörter usw. enthalten). Für integrierte Funktionen in der Wolfram-Sprache enthält die Dokumentation alle Arten von Querverweisen, mit denen Funktionen angekündigt werden können. Funktionen in einem Funktionsrepository können auf integrierte Funktionen verweisen. Aber was ist umgekehrt? Zu diesem Zweck werden wir mit verschiedenen Schemata experimentieren, um Repository-Funktionen auf den Dokumentationsseiten für integrierte Funktionen darzustellen.


Für integrierte Funktionen in der Wolfram-Sprache gibt es eine sogenannte Erkennungsstufe, die von einem Netzwerk von "Hilfeseiten" bereitgestellt wird, die organisierte Listen von Funktionen bereitstellen, die sich auf bestimmte Bereiche beziehen. Es ist immer schwierig, die Manpages richtig auszugleichen, und wenn Wolfram wächst, müssen Manpages oft komplett neu organisiert werden. Es ist recht einfach, Funktionen aus dem Repository in breite Kategorien einzuteilen und diese Kategorien sogar nacheinander aufzuteilen, aber es ist viel wertvoller, ordnungsgemäß organisierte Sprachhandbuchseiten zu haben. Es ist noch nicht klar, wie sie am besten für die gesamte Wissensbasis von Funktionen erstellt werden können. Beispiel: CreateResourceObjectGallery im Funktionsrepository. Jeder kann eine Webseite mit seinen "Auswahlmöglichkeiten" aus dem Repository platzieren:



Das Wolfram-Funktionsrepository ist als permanentes Funktionsrepository konfiguriert, in dem alle darin enthaltenen Funktionen immer funktionieren. Natürlich können neue Versionen von Funktionen erscheinen, und wir erwarten, dass einige Funktionen mit der Zeit sicherlich veraltet sein werden. Funktionen funktionieren, wenn sie in Programmen verwendet werden, aber ihre Dokumentationsseiten verweisen auf neue, erweiterte Funktionen.


Das Wolfram Feature Repository wurde entwickelt, um schnell neue Funktionen zu erhalten und neue Verwendungsmöglichkeiten für die Wolfram-Sprache zu erkunden. Mit viel Optimismus hoffen wir, dass ein Teil dessen, was im Funktionsrepository untersucht wurde, letztendlich Sinn macht, eingebettete Teile der Hauptsprache der Wolfram-Sprache zu werden. In den letzten zehn Jahren hatten wir ähnliche Funktionen, die ursprünglich in Wolfram | eingeführt wurden Alpha Eine der Lehren aus dieser Erfahrung ist, dass es viel Arbeit erfordert, um Qualitäts- und Konsistenzstandards zu erreichen, auf die wir uns bei allem konzentrieren, was in Wolfram eingebaut ist. Dies ist meistens die anfängliche Anstrengung Ideen einführen. Aber auch in diesem Fall kann eine Funktion in der Wissensbasis von Funktionen als sehr nützlicher Beweis für das Konzept einer zukünftigen Funktion dienen, die letztendlich in die Wolfram-Sprache eingebaut werden kann.


Das Wichtigste dabei ist, dass die Funktion im Funktionsrepository jedem Benutzer zur Verfügung steht. Die integrierte Sprachfunktion ist möglicherweise viel besser und produktiver, aber das Funktionsrepository ermöglicht Benutzern den sofortigen Zugriff auf alle neuen Funktionen. Und vor allem ermöglicht dieses Konzept jedem, neue Funktionen hinzuzufügen.


Früher, in der Geschichte der Wolfram-Sprache, hätte diese Idee nicht so gut funktioniert wie jetzt, aber zu diesem Zeitpunkt wurden bereits so viele Anstrengungen in die Sprache gesteckt und ein so tiefes Verständnis für die Prinzipien des Sprachdesigns entwickelt, dass es einer großen Benutzergemeinschaft nun sehr gut möglich erscheint, Funktionen hinzuzufügen, die dies ermöglichen Behalten Sie die Projektkohärenz bei, um sie für eine breite Palette von Benutzern nützlich zu machen.


Die Benutzergemeinschaft von Wolfram Language hat einen unglaublichen Talentgeist (?). (Zu dieser Community gehören natürlich viele führende F & E-Experten in einer Vielzahl von Bereichen.) Ich hoffe, dass das Wolfram Feature Repository eine effektive Plattform bietet, um diesen Talentgeist freizusetzen und zu verbreiten. Nur gemeinsam können wir etwas schaffen, das den Bereich, auf den das Wolfram-Rechenparadigma angewendet werden kann, erheblich erweitert.


Seit mehr als 30 Jahren haben wir in der Wolfram-Sprache einen langen Weg zurückgelegt. Gehen wir jetzt gemeinsam noch weiter. Ich fordere alle angesehenen Wolfram-Benutzer auf der ganzen Welt auf, ein funktionierendes Repository sowie ein neues Softwareprojekt wie die Free Wolfram Engine für Entwickler als Plattform dafür zu verwenden.

Source: https://habr.com/ru/post/de472914/


All Articles