Ein Rückblick auf 2024 und eine Vorschau auf das kommende Jahr.
2024 war ein bahnbrechendes Jahr für stdlib, voller Fortschritt, Innovation und Community-Wachstum. Rückblickend bin ich beeindruckt, wie viel Zeit und Mühe die Mitglieder der stdlib-Community damit verbracht haben, bestehende APIs zu verfeinern, neue Funktionen zu entwickeln und den Grundstein für einen spannenden Weg zu legen, der vor ihnen liegt. Ich fühle mich unglaublich glücklich, Teil einer Community zu sein, die die Zukunft des wissenschaftlichen Rechnens im Web aktiv mitgestaltet, und ich bin optimistisch, dass wir in den kommenden Monaten weiterhin erfolgreich sein werden.
In diesem Beitrag werde ich einige wichtige Highlights zusammenfassen und einen Ausblick darauf geben, was uns für 2025 erwartet. Ich werde zwar verschiedene Grüße an einzelne Mitwirkende richten, aber nichts von dem, was wir dieses Jahr erreicht haben, wäre ohne das Ganze möglich gewesen stdlib-Community. Die Community war maßgeblich an der harten Arbeit beteiligt, die erforderlich war, um stdlib zum Erfolg zu führen, von der Suche und dem Patchen von Fehlern über die Überprüfung von Pull-Requests und die Triage von Problemen bis hin zum tiefen Eintauchen in die Grundlagen numerischer Algorithmen und des Software-Designs. Wenn ich Sie nicht namentlich erwähne, seien Sie sich bitte darüber im Klaren, dass Ihre Bemühungen anerkannt und sehr geschätzt werden. Ein großes Dankeschön an alle Beteiligten und an alle, die auf dem Weg dorthin geholfen haben, im Großen und Kleinen. ❤️
Das vergangene Jahr war für stdlib ein transformatives Jahr, das von erheblichem Wachstum, Innovation und Community-Beiträgen geprägt war. Zu den wichtigsten Highlights gehören:
Mit dem schnellen Wachstum von stdlib und den gemeinsamen Anstrengungen unserer globalen Gemeinschaft gestalten wir die Zukunft des wissenschaftlichen Rechnens im Web. Begleiten Sie uns auf den nächsten Schritten dieser aufregenden Reise!
Zum Auftakt einige hochkarätige Jahresendstatistiken. Dieses Jahr
Diese Erfolge spiegeln die harte Arbeit und das Engagement unserer Gemeinschaft wider. Es war ein arbeitsreiches Jahr und wir mussten kritisch darüber nachdenken, wie wir das Projekt und unsere Community effektiv skalieren können, während beide weiter wachsen. Dies bedeutete, in Tools und Automatisierung zu investieren, unsere Überprüfungs- und Freigabeprozesse zu verbessern und Wege zu finden, um neue Mitwirkende schnell zu identifizieren und weiterzubilden.
Das einzige Ereignis, das stdlib im Jahr 2024 wirklich in Schwung gebracht hat, war unsere Aufnahme in den Google Summer of Code (GSoC). Wir hatten uns bereits 2023 beworben, wurden aber abgelehnt. Als wir uns im Jahr 2024 beworben haben, dachten wir also nicht, dass wir große Chancen hätten. Zu unserer großen Überraschung und Freude wurde stdlib akzeptiert, was uns zu einer wahnsinnigen Anstrengung veranlasste, unsere Angelegenheiten in den Griff zu bekommen, damit wir den Zustrom an kommenden Mitwirkenden bewältigen konnten.
GSoC war letztendlich eine transformative Erfahrung für stdlib, die talentierte Mitwirkende anlockte und wichtige Projekte voranbrachte. Wie wir in unserer GSoC-Reflexion ausführlich dargelegt haben, war der Weg holprig, aber wir haben viel gelernt und kamen auf der anderen Seite wieder heraus. Unnötig zu erwähnen, dass wir großes Glück hatten, vier wirklich hervorragende GSoC-Mitwirkende zu haben: Aman Bhansali, Gunj Joshi, Jaysukh Makvana und Snehil Shah. Ich werde in den folgenden Abschnitten noch etwas mehr über ihre Arbeit sagen.
Die Read-Eval-Print-Schleife (REPL) von Node.js ist in der JavaScript-Welt oft so etwas wie ein nachträglicher Einfall, der sowohl zu wenig genutzt als auch unterschätzt wird. Schon in den Anfängen von stdlib wollten wir ein besseres REPL-Erlebnis mit integrierter Unterstützung für die wissenschaftlichen Rechen- und Datenverarbeitungsfunktionen von stdlib schaffen. Die Entwicklung der stdlib REPL verlief in Etappen, aber es bestand immer das Ziel, die Leistung und den Funktionsumfang von Pythons IPython zu erreichen, um eine interaktive explorative Datenanalyse in JavaScript zu ermöglichen. Wir waren daher ziemlich aufgeregt, als Snehil Shah Interesse an der Arbeit an der stdlib REPL als Teil von GSoC bekundete.
Snehil hat einige seiner Arbeiten bereits in einem früheren Blogbeitrag zum Thema „Welcome Colors to the REPL!“ behandelt, aber die Arbeit von ihm und anderen deckte noch viel mehr ab. Ein paar Highlights:
Vor allem dank Snehils Arbeit sind wir im Jahr 2024 der IPython-Parität viel näher gekommen und haben so die JavaScript-Erfahrung für das wissenschaftliche Rechnen verändert. Und wir sind noch nicht fertig. Wir haben immer noch Pull-Anfragen, die sich durch die Warteschlange arbeiten, und eine Sache, die mich besonders begeistert, ist, dass wir vor Kurzem damit begonnen haben, die Möglichkeit zu prüfen, Unterstützung für das Jupyter-Protokoll hinzuzufügen. Seien Sie gespannt auf weitere REPL-Neuigkeiten im Jahr 2025!
Ein weiterer Schwerpunkt war die Weiterentwicklung der BLAS-Unterstützung (Basic Linear Algebra Subprograms) von stdlib , das grundlegende APIs für gängige Operationen der linearen Algebra bereitstellt, wie z. B. Vektoraddition, Skalarmultiplikation, Punktmultiplikation Produkte, Linearkombinationen und Matrizenmultiplikation. Zu Beginn des Jahres 2024 war die BLAS-Unterstützung in stdlib eher unvollständig, insbesondere im Hinblick auf die Unterstützung komplexwertiger Gleitkomma-Datentypen. Das Blatt begann sich zu ändern, als Jaysukh Makvana sich bemühte, Funktionsparität der Datenstrukturen Complex64Array und Complex128Array von stdlib mit integrierten JavaScript-typisierten Arrays zu erreichen.
Diese Bemühungen ebneten anschließend den Weg für die Hinzufügung von BLAS-Unterstützung der Stufe 1 für komplexwertige typisierte Array-Datentypen und die Arbeit von Aman Bhansali, der sich für die weitere BLAS-Unterstützung der Stufen 2 und 3 in stdlib einsetzte. Nachdem er sich zunächst auf BLAS-Strided-Array-Schnittstellen auf niedrigerer Ebene konzentriert hatte, erweiterte Aman seinen Anwendungsbereich durch das Hinzufügen von WebAssembly-Implementierungen und durch die Unterstützung für die Anwendung von BLAS-Operationen auf Stapel von Matrizen und Vektoren über mehrdimensionale Array-APIs (auch bekannt als ndarray) höherer Ebenen.
Zusätzlich zu herkömmlichen BLAS-Routinen enthält stdlib BLAS-ähnliche Routinen, die nicht Teil des Referenz-BLAS sind. Zu diesen Routinen gehören APIs für alternative skalare und kumulative Summationsalgorithmen, das Sortieren von Strided-Arrays, das Füllen und Manipulieren von Strided-Array-Elementen, die explizite Handhabung von NaN-Werten und andere Operationen, die nicht direkt unter das Banner der linearen Algebra fallen, aber bei der Arbeit üblich sind mit Daten.
Während Amans BLAS-Arbeit haben wir BLAS-Implementierungen bereinigt und umgestaltet, und Muhammad Haris hat sich freiwillig gemeldet, diese Bemühungen auf unsere erweiterten BLAS-Routinen auszuweiten. Seine Bemühungen umfassten die Migration der nativen Add-ons von Node.js auf reines C, um den Boilerplate zu reduzieren und unsere umfangreiche Sammlung von C-Makros für die Erstellung nativer Add-ons zu nutzen, und umfassten außerdem das Hinzufügen dedizierter C-APIs, um die Schnittstelle mit den ndarrays von stdlib zu erleichtern.
Diese Entwicklungen stellen sicher, dass stdlib weiterhin führend in der linearen Algebra-Unterstützung für JavaScript-Entwickler ist und leistungsstarke Tools für numerische Berechnungen bietet. Obwohl bereits viel erledigt wurde, bleibt noch viel zu tun, und BLAS wird auch im Jahr 2025 ein Schwerpunkt sein.
Aufbauend auf der BLAS-Arbeit im Rahmen eines Praktikums bei Quansight Labs arbeitete Pranav Goswami daran, den Grundstein für LAPACK (Linear Algebra Pack) zu legen age)-Unterstützung in stdlib, um lineare Algebra-Routinen höherer Ordnung zum Lösen linearer Gleichungssysteme bereitzustellen, Eigenwertprobleme, Matrixfaktorisierung und Singulärwertzerlegung. In seinem Blogbeitrag nach dem Praktikum ging Pranav ausführlicher darauf ein, einen Ansatz zum Testen und Dokumentieren hinzugefügter Implementierungen zu etablieren und die Ideen von BLIS zu nutzen, um LAPACK-Schnittstellen zu erstellen, die die Schnittstelle zu den ndarrays von stdlib erleichterten und so Datenbewegungen und Speicheranforderungen minimierten. Während viel Zeit damit verbracht wurde, die Probleme zu lösen und das API-Design zu iterieren, machte Pranav erhebliche Fortschritte beim Hinzufügen verschiedener Implementierungsdienstprogramme und fast 30 häufig verwendeter LAPACK-Routinen. Angesichts der enormen Größe von LAPACK (~1700 Routinen) wird diese Arbeit in absehbarer Zukunft weitergehen, also halten Sie in den kommenden Monaten Ausschau nach weiteren Updates!
Als Kurzbemerkung: Wenn Sie mehr darüber erfahren möchten, wie stdlib die Schnittstelle zu Fortran-Bibliotheken angeht, von denen viele immer noch das Fundament des modernen numerischen Rechnens bilden, schauen Sie sich unbedingt Pranavs Blog-Beitrag zum Aufrufen von Fortran-Routinen an JavaScript mit Node.js.
Eine der langjährigen Prioritäten von stdlib ist die Weiterentwicklung seiner vektorisierten Routinen für gängige mathematische und statistische Operationen. Während alle skalaren mathematischen Kernel (z. B. transzendente Funktionen wie Sin, Cos, Erf, Gamma usw. und statistische Verteilungsdichtefunktionen) über JavaScript-Implementierungen verfügen, fehlten vielen Kerneln entsprechende C-Implementierungen, die für eine schnellere Leistung erforderlich sind Node.js und andere serverseitige JavaScript-Laufzeiten, die native Bindungen unterstützen.
Gunj Joshi und andere versuchten, diese Lücke zu schließen und öffneten über 160 Pull-Requests und fügten dedizierte C-Implementierungen hinzu. Zu diesem Zeitpunkt sind nur noch einige der am häufigsten verwendeten transzendentalen Funktionen mit doppelter Genauigkeit übrig (schauen Sie sich Betainc an!). Die Bemühungen haben sich nun darauf konzentriert, die Unterstützung für einfache Genauigkeit zu vervollständigen und C-Implementierungen für statistische Verteilungsfunktionen hinzuzufügen. Wir gehen davon aus, dass diese Arbeit in der ersten Hälfte des Jahres 2025 fortgesetzt wird, bevor wir unsere Aufmerksamkeit auf höherstufige Strided-Array- und Ndarray-APIs mit Implementierungen sowohl für WebAssembly als auch für die nativen Node.js-Add-ons richten.
Ein weiterer Bereich, in dem wir erhebliche Fortschritte erzielt haben, ist die Verbesserung der Ergonomie beim Slicing und der Array-Manipulation. Benutzer numerischer Programmiersprachen wie MATLAB und Julia sowie spezieller numerischer Rechenbibliotheken wie NumPy genießen seit langem die Vorteile einer präzisen Syntax zum Ausdruck von Operationen, die nur eine Teilmenge von Array-Elementen betreffen. Das folgende Snippet zeigt beispielsweise, wie jedes andere Element in einem Array mit NumPy auf Null gesetzt wird.
import numpy as np # Create an array of ones: x = np.ones(10) # Set every other element to zero: x[::2] = 0.0
Als Sprache bietet JavaScript keine so praktische Syntax, was Benutzer dazu zwingt, entweder ausführlichere Objektmethoden oder manuelle For-Schleifen zu verwenden. Wir haben daher versucht, diese Lücke zu schließen, indem wir Proxy-Objekte genutzt haben, um „ausgefallene Indizierung“ zu unterstützen. Während die Verwendung von Proxy-Objekten aufgrund der Eigenschaftsumleitung einen gewissen Leistungsaufwand mit sich bringt, müssen Sie jetzt nur noch ein einziges Paket installieren und importieren, um alle Vorteile des Slicings im Python-Stil in JavaScript zu nutzen, wodurch die Notwendigkeit ausführlicher for-Schleifen und der Erstellung von Arrays entfällt Handhabung deutlich ergonomischer.
import array2fancy from '@stdlib/array-to-fancy'; // Create a plain array: const x = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; // Turn the plain array into a "fancy" array: const y = array2fancy( x ); // Select the first three elements: const v = y[ ':3' ]; // returns [ 1, 2, 3 ] // Select every other element, starting from the second element: v = y[ '1::2' ]; // returns [ 2, 4, 6, 8 ] // Select every other element, in reverse order, starting with the last element: v = y[ '::-2' ]; // returns [ 8, 6, 4, 2 ] // Set all elements to the same value: y[ ':' ] = 9; // Create a shallow copy by selecting all elements: v = y[ ':' ]; // returns [ 9, 9, 9, 9, 9, 9, 9, 9 ]
Zusätzlich zur Slice-Semantik fügte Jaysukh der stdlib Unterstützung für boolesche Arrays hinzu und legte damit den Grundstein für die Boolesche Array-Maskierung.
import BooleanArray from '@stdlib/array-bool'; import array2fancy from '@stdlib/array-to-fancy'; // Create a plain array: const x = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; // Turn the plain array into a "fancy" array: const y = array2fancy( x ); // Create a shorthand alias for creating an array "index" object: const idx = array2fancy.idx; // Create a boolean mask array: const mask = new BooleanArray( [ true, false, false, true, true, true, false, false ] ); // Retrieve elements according to the mask: const z = x[ idx( mask ) ]; // returns [ 1, 4, 5, 6 ]
Anschließend haben wir unsere Erkenntnisse angewendet, als wir die Unterstützung für die Boolesche Array-Maskierung hinzugefügt haben, um Unterstützung für die Indizierung von Ganzzahl-Arrays hinzuzufügen.
import Int32Array from '@stdlib/array-int32'; import array2fancy from '@stdlib/array-to-fancy'; // Create a plain array: const x = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; // Turn the plain array into a "fancy" array: const y = array2fancy( x ); // Create a shorthand alias for creating an array "index" object: const idx = array2fancy.idx; // Create an integer array: const indices = new Int32Array( [ 0, 3, 4, 5 ] ); // Retrieve selected elements: const z = x[ idx( indices ) ]; // returns [ 1, 4, 5, 6 ]
Während das Obige die ausgefallene Indizierung mit integrierten JavaScript-Array-Objekten demonstriert, haben wir das Konzept der ausgefallenen Indizierung kürzlich auf stdlib ndarrays ausgeweitet, ein Thema, über das wir in einem zukünftigen Blogbeitrag mehr zu sagen haben.
Natürlich freuen wir uns besonders über diese Entwicklungen, da wir davon überzeugt sind, dass sie das Benutzererlebnis des interaktiven Computings und der explorativen Datenanalyse in JavaScript erheblich verbessern werden.
Schließlich war 2024 ein Jahr der Automatisierung, und ich wäre nachlässig, wenn ich die Bemühungen von Philipp Burckhardt nicht erwähnen würde. Philipp war maßgeblich an der Verbesserung unserer CI-Build- und Testinfrastruktur und der Verbesserung der Gesamtskalierbarkeit des Projekts beteiligt. Seine Arbeit war produktiv, aber es gibt ein paar wichtige Highlights, die ich hervorheben möchte.
Obwohl wir bei unseren Projektautomatisierungstools erhebliche Fortschritte gemacht haben, scheint es uns nie an Ideen für weitere Automatisierungs- und Toolverbesserungen zu mangeln. Erwarten Sie im Jahr 2025 mehr! ?
Was erwartet uns also im Jahr 2025?! Freut mich, dass du gefragt hast!
Wir haben in den obigen Abschnitten bereits auf verschiedene Initiativen hingewiesen, aber im Großen und Ganzen planen wir, unsere Bemühungen im kommenden Jahr hier zu konzentrieren:
Das ist auf jeden Fall eine Menge, und es wird ein Dorf brauchen – eine Gemeinschaft von Menschen, die sich unserer Mission verschrieben haben, das Web zu einer erstklassigen Plattform für numerisches und wissenschaftliches Rechnen zu machen. Wenn Sie bereit sind, gemeinsam mit uns die Zukunft des wissenschaftlichen Rechnens im Internet zu gestalten, würden wir uns über Ihre Teilnahme freuen. Sehen Sie sich unseren Beitragsleitfaden an, um zu erfahren, wie Sie sich engagieren können.
Mit Blick auf die Zukunft möchte ich eine persönliche Reflexion darüber teilen, was dieses Jahr für mich bedeutet hat. Angesichts unseres Wachstums in diesem Jahr hatte ich oft das Gefühl, aus einem Feuerwehrschlauch zu trinken. Und ehrlich gesagt kann es schwer sein, nicht auszubrennen, wenn man Tag für Tag mit über 100 neuen Benachrichtigungen und Nachrichten von Leuten aufwacht, die Rat, Antworten auf Fragen und geprüfte Pull-Requests wünschen. Aber wenn ich an das vergangene Jahr zurückdenke, bin ich unheimlich stolz auf das, was wir erreicht haben, und es macht mir besonders Mut, wenn ich sehe, wie Mitwirkende, die neu bei Open Source sind, wachsen und gedeihen, wobei sie manchmal die Lektionen, die sie gelernt haben, als Sprungbrett dafür nutzen Traumjobs und Möglichkeiten. Das Glück zu haben, dies zu sehen, ist eine treibende Motivation und ein Privileg in der größeren Welt von Open Source, das ich nach besten Kräften nicht als selbstverständlich ansehe.
Und damit ist die Retrospektive 2024 abgeschlossen. Wenn wir auf alles zurückblicken, was wir gemeinsam erreicht haben, war die Zukunft des wissenschaftlichen Rechnens im Web noch nie so rosig! Nochmals vielen Dank an alle Beteiligten, die auf diesem Weg mitgeholfen haben. Der vor uns liegende Weg ist voller spannender Möglichkeiten und wir können es kaum erwarten zu sehen, was wir im Jahr 2025 gemeinsam erreichen werden. Vorwärts und aufwärts! ?
stdlib ist ein Open-Source-Softwareprojekt, das sich der Bereitstellung einer umfassenden Suite robuster, leistungsstarker Bibliotheken widmet, um die Entwicklung Ihres Projekts zu beschleunigen und Ihnen die Gewissheit zu geben, dass Sie auf fachmännisch erstellte, qualitativ hochwertige Software angewiesen sind.
Wenn Ihnen dieser Beitrag gefallen hat, geben Sie uns einen Stern? auf GitHub und überlegen Sie, das Projekt finanziell zu unterstützen. Ihre Beiträge und Ihre kontinuierliche Unterstützung tragen dazu bei, den langfristigen Erfolg des Projekts sicherzustellen und werden sehr geschätzt!
Das obige ist der detaillierte Inhalt vonEtrospektive. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!