Maison >interface Web >js tutoriel >étrospective
Retour sur 2024 et aperçu de l'année à venir.
2024 a été une année historique pour stdlib, pleine de progrès, d'innovation et de croissance de la communauté. Avec le recul, je suis frappé par le temps et les efforts que les membres de la communauté stdlib ont consacrés à affiner les API existantes, à créer de nouvelles fonctionnalités et à préparer le terrain pour un chemin passionnant à venir. Je me sens incroyablement chanceux de faire partie d'une communauté qui façonne activement l'avenir du calcul scientifique sur le Web, et je suis optimiste quant à notre succès continu dans les mois à venir.
Dans cet article, je vais récapituler quelques faits saillants et préfigurer ce qui nous attend pour 2025. Même si je ferai divers remerciements aux contributeurs individuels, rien de ce que nous avons accompli cette année n'aurait pu se produire sans l'ensemble de communauté stdlib. La communauté a joué un rôle déterminant dans le travail acharné nécessaire au succès de stdlib, de la recherche et de la correction des bogues à l'examen des demandes d'extraction et au tri des problèmes, en passant par la plongée en profondeur dans les mauvaises herbes des algorithmes numériques et de la conception de logiciels. Si je ne vous cite pas nommément, sachez que vos efforts sont reconnus et grandement appréciés. Un grand merci à toutes les personnes impliquées et à tous ceux qui ont aidé tout au long du chemin, de manière petite ou grande. ❤️
L'année écoulée a été transformatrice pour stdlib, marquée par une croissance, une innovation et des contributions communautaires importantes. Voici quelques points saillants :
Grâce à la croissance rapide de stdlib et aux efforts collectifs de notre communauté mondiale, nous façonnons l'avenir du calcul scientifique sur le Web. Rejoignez-nous alors que nous franchissons les prochaines étapes de ce voyage passionnant !
Pour commencer, quelques statistiques de fin d'année de haut niveau. Cette année,
Ces réalisations reflètent le travail acharné et le dévouement de notre communauté. Ce fut une année chargée et nous avons été obligés de réfléchir de manière critique à la manière dont nous pouvons faire évoluer efficacement le projet et notre communauté à mesure que les deux continuent de croître. Cela signifiait investir dans les outils et l'automatisation, améliorer nos processus de révision et de publication, et trouver des moyens d'identifier et de perfectionner rapidement les nouveaux contributeurs.
Le seul événement qui a vraiment déclenché les choses pour stdlib en 2024 a été notre acceptation au Google Summer of Code (GSoC). Nous avions déjà postulé en 2023, mais avons été rejetés. Ainsi, lorsque nous avons postulé en 2024, nous ne pensions pas avoir beaucoup de chances. À notre grande surprise et pour notre plus grand plaisir, stdlib a été accepté, déclenchant ainsi une course folle pour mettre nos affaires en ordre afin de pouvoir gérer l'afflux de contributeurs à venir.
GSoC a fini par être une expérience transformatrice pour stdlib, attirant des contributeurs talentueux et faisant avancer des projets critiques. Comme nous l’avons détaillé dans notre réflexion sur le GSoC, le chemin a été semé d’embûches, mais nous avons beaucoup appris et sommes sortis de l’autre côté. Inutile de dire que nous avons eu la chance d'avoir quatre excellents contributeurs du GSoC : Aman Bhansali, Gunj Joshi, Jaysukh Makvana et Snehil Shah. J'aurai un peu plus à dire sur leur travail dans les sections ci-dessous.
La boucle de lecture-évaluation-impression (REPL) de Node.js est souvent une réflexion secondaire dans le monde JavaScript, à la fois sous-utilisée et sous-estimée. Dès les premiers jours de stdlib, nous voulions créer une meilleure expérience REPL, avec une prise en charge intégrée des fonctionnalités de calcul scientifique et de traitement des données de stdlib. Le développement de stdlib REPL s'est fait par à-coups, mais l'objectif a toujours été de faire correspondre la puissance et l'ensemble des fonctionnalités de l'IPython de Python afin de faciliter l'analyse exploratoire interactive des données en JavaScript. Nous étions donc très enthousiastes lorsque Snehil Shah a exprimé son intérêt à travailler sur stdlib REPL dans le cadre de GSoC.
Snehil a déjà couvert une partie de son travail dans un article de blog précédent sur "Accueillir les couleurs au REPL !", mais son travail et celui d'autres couvrent bien plus encore. Quelques points forts :
En grande partie grâce au travail de Snehil, nous nous sommes rapprochés beaucoup plus de la parité IPython en 2024, transformant ainsi l'expérience JavaScript pour le calcul scientifique. Et nous n’avons pas encore fini. Nous avons encore des demandes d'extraction qui parcourent la file d'attente, et une chose qui me passionne particulièrement est que nous avons récemment commencé à explorer l'ajout de la prise en charge du protocole Jupyter. Restez à l'écoute pour des nouvelles supplémentaires sur REPL en 2025 !
Un autre domaine d'intérêt a été le développement continu du support BLAS (Basic Linear Algebra Subprograms) de stdlib , qui fournit des API fondamentales pour les opérations courantes d'algèbre linéaire, telles que l'addition de vecteurs, la multiplication scalaire, les produits scalaires, combinaisons linéaires et multiplication matricielle. À partir de 2024, la prise en charge de BLAS dans stdlib était plutôt incomplète, notamment en termes de prise en charge des types de données à virgule flottante à valeurs complexes. La marée a commencé à changer avec les efforts de Jaysukh Makvana pour atteindre la parité des fonctionnalités des structures de données Complex64Array et Complex128Array de stdlib avec des tableaux typés JavaScript intégrés.
Ces efforts ont ensuite ouvert la voie à l'ajout de la prise en charge BLAS de niveau 1 pour les types de données de tableaux typés à valeurs complexes et au travail d'Aman Bhansali, qui a entrepris d'approfondir la prise en charge BLAS de niveau 2 et de niveau 3 dans stdlib. Après s'être initialement concentré sur les interfaces de tableaux striés BLAS de niveau inférieur, Aman a élargi son champ d'action en ajoutant des implémentations WebAssembly et en ajoutant la prise en charge de l'application des opérations BLAS aux piles de matrices et de vecteurs via des API de tableaux multidimensionnels de niveau supérieur (alias ndarray). 🎜>
En plus des routines BLAS conventionnelles, stdlib inclut des routines de type BLAS qui ne font pas partie du BLAS de référence. Ces routines incluent des API pour des algorithmes de sommation scalaires et cumulatifs alternatifs, le tri des tableaux striés, le remplissage et la manipulation des éléments de tableaux striés, la gestion explicite des valeurs NaN et d'autres opérations qui ne relèvent pas clairement de l'algèbre linéaire, mais qui sont courantes lorsque l'on travaille. avec des données.Pendant le travail d'Aman sur BLAS, nous avons nettoyé et refactorisé les implémentations de BLAS, et Muhammad Haris s'est porté volontaire pour étendre ces efforts à nos routines BLAS étendues. Ses efforts ont consisté à migrer les modules complémentaires natifs de Node.js vers du C pur afin de réduire le passe-partout et d'exploiter notre vaste collection de macros C pour la création de modules complémentaires natifs, ainsi qu'à ajouter des API C dédiées pour faciliter l'interfaçage avec les ndarrays de stdlib.
Ces développements garantissent que stdlib continue de montrer la voie en matière de prise en charge de l'algèbre linéaire pour les développeurs JavaScript, offrant des outils puissants pour le calcul numérique. Bien que beaucoup de choses aient été accomplies, il reste encore du travail à accomplir, et BLAS continuera d'être un point central en 2025.
S'appuyant sur les travaux de BLAS dans le cadre d'un stage chez Quansight Labs, Pranav Goswami a travaillé à poser les bases de LAPACK (Linéaire Algebra Pack age) prise en charge dans stdlib afin de fournir des routines d'algèbre linéaire d'ordre supérieur pour résoudre des systèmes d'équations linéaires, problèmes de valeurs propres, factorisation matricielle et décomposition en valeurs singulières. Détaillé plus en détail dans son article de blog post-stage, Pranav a cherché à établir une approche de test et de documentation des implémentations ajoutées et à exploiter les idées de BLIS pour créer des interfaces LAPACK qui facilitaient l'interfaçage avec les ndarrays de stdlib et minimisaient ainsi les besoins en matière de déplacement et de stockage des données. Alors qu'une bonne partie du temps a été consacrée à résoudre les problèmes et à itérer sur la conception de l'API, Pranav a réalisé des progrès significatifs en ajoutant divers utilitaires d'implémentation et près de 30 routines LAPACK couramment utilisées. Compte tenu de l'énormité de LAPACK (~ 1 700 routines), ce travail se poursuivra dans un avenir prévisible, alors soyez à l'affût d'autres mises à jour dans les mois à venir !
En passant, si vous souhaitez en savoir plus sur la façon dont stdlib aborde l'interface avec les bibliothèques Fortran, dont beaucoup constituent encore le fondement de l'informatique numérique moderne, assurez-vous de consulter le billet de blog de Pranav sur l'appel de routines Fortran depuis JavaScript utilisant Node.js.
L'une des priorités de longue date de stdlib est le développement continu de ses routines vectorisées pour les opérations mathématiques et statistiques courantes. Alors que tous les noyaux mathématiques scalaires (par exemple, les fonctions transcendantales, telles que sin, cos, erf, gamma, etc., et les fonctions de densité de distribution statistique) ont des implémentations JavaScript, de nombreux noyaux manquaient d'implémentations C correspondantes, qui sont nécessaires pour débloquer des performances plus rapides dans Node.js et autres environnements d'exécution JavaScript côté serveur prenant en charge les liaisons natives.
Gunj Joshi et d'autres ont cherché à combler cette lacune et ont ouvert plus de 160 demandes d'extraction ajoutant des implémentations C dédiées. À ce stade, il ne reste que quelques-unes des fonctions transcendantales à double précision les plus utilisées (je vous regarde, betainc !). Les efforts se sont maintenant tournés vers la prise en charge de la simple précision et l'ajout d'implémentations C pour les fonctions de distribution statistique. Nous prévoyons que ce travail se poursuivra au cours du premier semestre 2025 avant de porter notre attention sur les API streded array et ndarray de niveau supérieur, avec des implémentations pour les modules complémentaires natifs WebAssembly et Node.js.
Un autre domaine dans lequel nous avons réalisé des progrès significatifs est l’amélioration de l’ergonomie du découpage et de la manipulation des tableaux. Les utilisateurs de langages de programmation numérique, tels que MATLAB et Julia, et de bibliothèques de calcul numérique dédiées, telles que NumPy, bénéficient depuis longtemps d'une syntaxe concise pour exprimer des opérations affectant uniquement un sous-ensemble d'éléments de tableau. Par exemple, l'extrait suivant montre la définition de tous les autres éléments d'un tableau à zéro avec NumPy.
import numpy as np # Create an array of ones: x = np.ones(10) # Set every other element to zero: x[::2] = 0.0
En tant que langage, JavaScript ne fournit pas une syntaxe aussi pratique, obligeant les utilisateurs à utiliser soit des méthodes d'objet plus verbeuses, soit des boucles manuelles. Nous avons donc cherché à combler cette lacune en exploitant les objets Proxy pour prendre en charge une « indexation sophistiquée ». Bien que l'utilisation d'objets proxy entraîne une certaine surcharge de performances en raison de l'indirection des propriétés, il vous suffit désormais d'installer et d'importer un seul package pour bénéficier de tous les avantages du découpage de style Python en JavaScript, évitant ainsi le besoin de boucles for détaillées et de création de tableaux. manipulation nettement plus ergonomique.
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 ]
En plus de la sémantique des tranches, Jaysukh a ajouté la prise en charge de stdlib pour les tableaux booléens, jetant ainsi les bases du masquage des tableaux booléens.
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 ]
Nous avons ensuite appliqué nos apprentissages lors de l'ajout de la prise en charge du masquage de tableau booléen pour ajouter la prise en charge de l'indexation de tableau d'entiers.
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 ]
Bien que ce qui précède démontre une indexation sophistiquée avec des objets tableaux JavaScript intégrés, nous avons récemment étendu le concept d'indexation sophistiquée aux ndarrays stdlib, un sujet sur lequel nous aurons plus à dire dans un prochain article de blog.
Il va sans dire que nous sommes particulièrement enthousiasmés par ces développements car nous pensons qu'ils amélioreront considérablement l'expérience utilisateur de l'informatique interactive et de l'analyse exploratoire des données en JavaScript.
Enfin, 2024 a été une année d'automatisation, et je m'en voudrais de ne pas mentionner les efforts de Philipp Burckhardt. Philipp a joué un rôle déterminant dans l'amélioration de notre infrastructure de construction et de test CI et dans l'amélioration de l'évolutivité globale du projet. Son travail a été prolifique, mais il y a quelques points forts que je souhaite mettre en avant.
Bien que nous ayons fait des progrès considérables dans nos outils d'automatisation de projet, nous ne semblons jamais à court d'idées pour améliorer davantage l'automatisation et les outils. Attendez-vous à plus à venir en 2025 ! ?
Alors, que nous réserve 2025 ?! Heureux que vous ayez posé la question !
Nous avons déjà fait allusion à diverses initiatives dans les sections ci-dessus, mais, à un niveau général, voici sur quoi nous prévoyons de concentrer nos efforts au cours de l'année à venir :
C'est certainement beaucoup, et il faudra tout un village, une communauté de personnes dédiées à notre mission : faire du Web une plateforme de premier ordre pour le calcul numérique et scientifique. Si vous êtes prêt à nous rejoindre pour construire l'avenir du calcul scientifique sur le Web, nous serions ravis que vous nous rejoigniez. Consultez notre guide de contribution pour voir comment vous pouvez vous impliquer.
Alors que nous regardons vers l'avenir, j'aimerais partager une réflexion personnelle sur ce que cette année a signifié pour moi. Compte tenu de notre croissance cette année, j’avais souvent l’impression de boire dans une lance à incendie. Et, honnêtement, il peut être difficile de ne pas s'épuiser lorsque vous vous réveillez jour après jour avec plus de 100 nouvelles notifications et messages de personnes souhaitant des conseils, des réponses à des questions et des demandes d'extraction examinées. Mais, en réfléchissant à l'année écoulée, je suis terriblement fier de ce que nous avons accompli, et je suis particulièrement réconforté lorsque je vois de nouveaux contributeurs à l'open source grandir et s'épanouir, utilisant parfois les leçons qu'ils ont apprises comme tremplin vers des emplois et des opportunités de rêve. Avoir la chance de voir cela est une motivation motrice et un privilège dans le monde plus large de l'open source que je fais de mon mieux pour ne pas tenir pour acquis.
Et avec cela, ceci conclut la rétrospective 2024. En regardant tout ce que nous avons accompli ensemble, l'avenir du calcul scientifique sur le Web n'a jamais été aussi prometteur ! Merci encore à toutes les personnes impliquées qui ont aidé tout au long du chemin. Le chemin à parcourir est rempli d’opportunités passionnantes, et nous avons hâte de voir ce que nous réaliserons ensemble en 2025. En avant et vers le haut ! ?
stdlib est un projet logiciel open source dédié à fournir une suite complète de bibliothèques robustes et hautes performances pour accélérer le développement de votre projet et vous offrir une tranquillité d'esprit en sachant que vous dépendez d'un logiciel de haute qualité conçu par des experts.
Si vous avez apprécié ce post, donnez-nous une étoile ? sur GitHub et envisagez de soutenir financièrement le projet. Vos contributions et votre soutien continu contribuent à assurer le succès à long terme du projet et sont grandement appréciés !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!