回想的な

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 15:11:40986ブラウズ

回想的な

2024 年の振り返りと今後の展望。

2024 年は、stdlib にとって、進歩、革新、コミュニティの成長が詰まった 画期的な年でした。振り返ってみると、stdlib コミュニティのメンバーが既存の API を改良し、新しい機能を作成し、今後のエキサイティングな道への基礎を築くのに費やした時間と労力の多さに驚かされます。私は、ウェブ上の科学技術コンピューティングの未来を積極的に形成しているコミュニティの一員になれることを信じられないほど幸運に感じており、今後数か月間も継続的な成功を収めることに強気です。

この投稿では、いくつかの重要なハイライトを要約し、2025 年に何が起こるかを予見します。私は個々の貢献者にさまざまなエールを送りますが、今年達成したことはすべて、全体の貢献なしには実現できなかったでしょう。 stdlib コミュニティ。コミュニティは、バグの発見とパッチ適用からプル リクエストのレビューと問題の優先順位付け、数値アルゴリズムとソフトウェア設計の雑草の詳細への調査まで、stdlib を成功させるために必要な大変な作業を行うのに役立ちました。私があなたの名前を言及しない場合でも、あなたの努力が認められ、大いに評価されていることを必ず知っておいてください。関係者の皆様、そして大なり小なり協力してくださった皆様に心より感謝申し上げます。 ❤️

TL;DR

この 1 年は、stdlib にとって大きな変革をもたらし、大幅な成長、イノベーション、コミュニティへの貢献が特徴でした。主なハイライトは次のとおりです:

  • コミュニティの成長: 84 人の新しいコントリビューターが stdlib に参加し、開発者コミュニティの規模が 3 倍になり、4,000 を超えるコミット、2,200 のプル リクエスト、500 の新しいパッケージのリリースが推進されました。
  • Google Summer of Code: 4 人の優れた貢献者が、REPL 機能の強化、BLAS サポートの拡張、新しい数学 API などの重要なプロジェクトの推進に貢献しました。
  • 開発者ツールの強化: 自動化における大きな進歩には、自動変更ログ生成、改善された CI ワークフロー、改善されたテスト カバレッジ追跡が含まれます。
  • 技術的なマイルストーン: 線形代数 (BLAS および LAPACK)、派手なインデックス付け、WebAssembly の統合、および数学関数の C 実装で大きな進歩が見られました。これらはすべて、JavaScript を科学技術コンピューティングの第一級の言語にすることを目的としています。
  • 将来のビジョン: 2025 年を見据えて、数学ライブラリを拡張し、REPL の対話性を改善し、WebGPU を探索し、Web 上の科学技術コンピューティングをより強力でアクセスしやすいものにするツールの構築を継続することを目指しています。

stdlib の急速な成長とグローバル コミュニティの共同の努力により、私たちは Web 上の科学技術コンピューティングの未来を形作っています。このエキサイティングな旅の次のステップにぜひご参加ください!

統計

まずは年末のハイレベルな統計から始めましょう。今年は

  • 世界中から84の新しいコントリビュータがstdlibに参加し、開発者コミュニティの規模を3倍にし、プロジェクトに新しい命と新鮮な視点をもたらしました。
  • 私たちは協力して、メイン開発ブランチに対して 4,000 件以上のコミットを行いました。
  • 私たちは 2,200 件近くのプル リクエストをオープンし、そのうち 1,600 件を超えるプル リクエストがマージされました。
  • また、プロジェクトでは 500 を超える新しいパッケージを出荷しました。その範囲は、新しい線形代数ルーチンから特殊な数学関数、多次元配列の基礎インフラストラクチャ、WebAssembly やその他の高速環境をサポートする API まで多岐にわたります。

これらの成果は、コミュニティの熱心な努力と献身を反映しています。今年は忙しい年で、私たちはプロジェクトとコミュニティが成長し続ける中で、どのように効果的に規模を拡大できるかについて批判的に考える必要がありました。これは、ツールと自動化に投資し、レビューとリリースのプロセスを改善し、新しい貢献者を迅速に特定してスキルを向上させる方法を見つけることを意味しました。

Google サマー オブ コード

2024 年の stdlib の動きを本格的に動かしたのは、Google Summer of Code (GSoC) への参加でした。以前は2023年に申請していましたが、拒否されました。そのため、2024 年に申請したときは、チャンスはあまりないと考えていました。私たちの驚きと喜びに、stdlib が受け入れられたことにより、今後の貢献者の流入に対処できるように、私たちの業務をまとめるために猛ダッシュが始まりました。

GSoC は、才能ある貢献者を呼び込み、重要なプロジェクトを推進することで、stdlib にとって変革的なエクスペリエンスとなりました。 GSoC の振り返りで詳しく説明したように、道はでこぼこしていましたが、私たちは多くのことを学び、反対側から抜け出すことができました。言うまでもなく、Aman Bhansali、Gunj Joshi、Jaysukh Makvana、Snehil Shah という 4 人の真に優れた GSoC 貢献者がいたことは非常に幸運でした。彼らの仕事については、以下のセクションでもう少し詳しく説明します。

REPL

Node.js の read-eval-print ループ (REPL) は、JavaScript の世界では後付けのようなものであることが多く、十分に活用されておらず、十分に評価されていません。 stdlib の初期の頃から、私たちは stdlib の科学計算およびデータ処理機能の統合サポートにより、より優れた REPL エクスペリエンスを作成したいと考えていました。 stdlib REPL の開発は順調に進んでいますが、JavaScript でのインタラクティブな探索的データ分析を容易にするために、Python の IPython の能力と機能セットに匹敵するという目標が常にありました。したがって、Snehil Shah が GSoC の一部として stdlib REPL に取り組むことに興味を示したとき、私たちは非常に興奮しました。

Snehil は、以前のブログ投稿「REPL に色彩を歓迎!」ですでに彼の作品の一部を取り上げていますが、彼や他の人の作品はさらに多くのことを取り上げています。いくつかのハイライト:

  • 補完のプレビュー: REPL の既知の記号に一致する文字を入力すると、補完プレビューが表示されるようになりました。これにより、自動補完が容易になり、開発者の貴重なキーストロークが節約されます。特にこれを追加してくれた Tudor Pagu に感謝します!
  • 複数行編集: 複数行編集のサポートを追加する前、REPL は複数行入力をサポートしていましたが、以前に入力された行の編集はサポートしていなかったため、ユーザー エクスペリエンスがイライラすることがよくありました。 REPL は、専用エディタ アプリケーションと同様に、端末内での複数行編集をサポートします。
  • 長い出力のページネーション: 長年の機能リクエストは、less/more などのサポートを stdlib REPL に追加することでした。以前は、コマンドが長い出力を生成した場合、ユーザーはテキストの壁に直面する可能性がありました。この問題は現在解決されており、今後数か月以内に、より高度な類似検索機能を追加する予定です。
  • 括弧で囲まれた貼り付け: 単一のプロンプトとして貼り付けるのではなく、入力を 1 行ずつ実行するために使用される REPL に複数行の入力を貼り付けます。場合によっては便利ですが、特にユーザーが実行前に複数行の入力を貼り付けて編集したい場合、これは望ましい意図ではないことがよくあります。
  • カスタム構文強調表示テーマ: IDE での開発に慣れている開発者は、お気に入りのエディターの優れた機能の一部が欠けているターミナルに移行すると、戸惑うことがよくあります。それらの便利な機能の 1 つは構文の強調表示です。したがって、Snehil のブログ投稿で詳しく説明されているように、カスタム テーマのサポートの追加に取り組みました。
  • 自動ペアリング: もう 1 つの一般的な IDE の優れた点は、括弧と引用符が自動的に閉じられることで、キーストロークを節約し、恐ろしい括弧の欠落を軽減するのに役立ちます。難しいタスクを決して敬遠しない Snehil は、GSoC につながる最初のプル リクエストの 1 つとして自動ペアリングのサポートを実装しました。

Snehil の取り組みのおかげで、私たちは 2024 年に IPython 同等に大幅に近づき、科学計算用の JavaScript エクスペリエンスを変革しました。そしてまだ終わっていません。プル リクエストはまだキュー内で処理されていますが、私が特に興奮していることの 1 つは、最近 Jupyter プロトコルのサポートの追加を検討し始めたことです。 2025 年の REPL に関する追加ニュースにご期待ください!

BLAS

もう 1 つの重点領域は、stdlib の BLAS (Basic Linear Algebra Subprograms) サポートの継続的な開発です。 、ベクトル加算、スカラー乗算などの一般的な線形代数演算の基本的な API を提供します。ドット積、線形結合、行列の乗算。 2024 年になると、stdlib での BLAS サポートは、特に複素数値の浮動小数点データ型のサポートの点でかなり不完全でした。 Jaysukh Makvana が組み込み JavaScript 型配列を使用して stdlib の Complex64Array および Complex128Array データ構造の機能同等性を達成しようとしたことで、流れが変わり始めました。

これらの取り組みは、その後、複素数値の型付き配列データ型に対するレベル 1 BLAS サポートの追加と、stdlib でのレベル 2 およびレベル 3 BLAS サポートの強化を目指した Aman Bhansali の取り組みへの道を切り開きました。最初は低レベルの BLAS ストライド配列インターフェイスに焦点を当てた後、Aman は、WebAssembly 実装を追加し、高レベルの多次元配列 (別名 ndarray) API を介して行列とベクトルのスタックに BLAS 操作を適用するためのサポートを追加することで、範囲を拡大しました。

従来の BLAS ルーチンに加えて、stdlib には、参照 BLAS の一部ではない BLAS のようなルーチンが含まれています。これらのルーチンには、代替スカラーおよび累積加算アルゴリズム、ストライド配列のソート、ストライド配列要素の充填と操作、NaN 値の明示的な処理、および線形代数の範疇には収まりきらないが、作業中に一般的なその他の操作用の API が含まれています。データ付き。

Aman の BLAS 作業中に、BLAS 実装のクリーンアップとリファクタリングを行い、Muhammad Haris がその取り組みを拡張 BLAS ルーチンに拡張することを志願しました。彼の取り組みには、ボイラープレートを削減し、ネイティブ アドオンの作成に C マクロの広範なコレクションを活用するために、Node.js ネイティブ アドオンを純粋な C に移行することが含まれ、さらに、stdlib の ndarray とのインターフェイスを容易にするために専用の C API を追加することも含まれていました。

これらの開発により、stdlib は JavaScript 開発者向けの線形代数サポートにおいて引き続き先頭に立ち、数値計算用の強力なツールを提供します。多くのことが完了しましたが、まだ作業が残っており、BLAS は 2025 年も引き続き焦点となるでしょう。

ラパック

Quansight Labs でのインターンシップの一環として BLAS の研究を基礎にして、Pranav Goswami は LAPACK (L線形 A代数 パック) の基礎を築くために取り組みました。 age) 線形系を解くための高次線形代数ルーチンを提供するための stdlib でのサポート方程式、固有値問題、行列因数分解、特異値分解。インターンシップ後のブログ投稿で詳しく説明されていますが、Pranav 氏は、追加実装のテストと文書化のアプローチを確立し、BLIS のアイデアを活用して、stdlib の ndarray とのインターフェイスを容易にする LAPACK インターフェイスを作成して、データの移動とストレージ要件を最小限に抑えることを目指しました。問題点の解決と API 設計の反復にかなりの時間を費やしましたが、Pranav はさまざまな実装ユーティリティと一般的に使用される 30 近くの LAPACK ルーチンの追加で大幅に前進しました。 LAPACK の巨大さ (約 1700 ルーチン) を考慮すると、この作業は近い将来まで続くことになるため、今後数か月以内のさらなるアップデートに注目してください!

ちょっとした余談ですが、Fortran ライブラリとのインターフェースに stdlib がどのようにアプローチするかについて詳しく知りたい場合は、その多くが依然として現代の数値計算の基盤を形成しているため、Fortran ルーチンの呼び出しに関する Pranav のブログ投稿を必ずチェックしてください。 Node.js を使用した JavaScript。

特殊な数学関数の C 実装

stdlib の長年の優先事項の 1 つは、一般的な数学的および統計的演算のためのベクトル化されたルーチンの継続的な開発です。すべてのスカラー数学カーネル (sin、cos、erf、gamma などの超越関数や統計分布密度関数など) には JavaScript 実装がありますが、カーネルの多くには、より高速なパフォーマンスを実現するために必要な、対応する C 実装がありませんでした。ネイティブ バインディングをサポートする Node.js およびその他のサーバーサイド JavaScript ランタイム。

Gunj Joshi らはこのギャップを埋めようと、専用の C 実装を追加して 160 を超えるプル リクエストをオープンしました。この時点で、最も頻繁に使用される倍精度超越関数はいくつかだけ残っています (見てください!)。現在は、単精度のサポートを完了し、統計分布関数用の C 実装を追加することに取り組んでいます。この作業は 2025 年前半まで継続し、その後、WebAssembly と Node.js の両方のネイティブ アドオンの実装を伴う、より高レベルの strded 配列 API と ndarray API に注目する予定です。

派手なインデックス作成

私たちが大きな進歩を遂げたもう 1 つの分野は、スライシングと配列操作の人間工学の改善です。 MATLAB や Julia などの数値プログラミング言語、および NumPy などの専用数値計算ライブラリのユーザーは、配列要素のサブセットのみに影響を与える演算を表現するための簡潔な構文の利点を長年享受してきました。たとえば、次のスニペットは、NumPy.
を使用して配列内の 1 つおきの要素をゼロに設定する方法を示しています。

import numpy as np

# Create an array of ones:
x = np.ones(10)

# Set every other element to zero:
x[::2] = 0.0

JavaScript は言語としてそのような便利な構文を提供していないため、ユーザーはより冗長なオブジェクト メソッドを使用するか、手動の for ループを使用する必要があります。そこで私たちは、Proxy オブジェクトを活用して「派手なインデックス作成」をサポートすることで、このギャップに対処しようとしました。 Proxy オブジェクトを使用すると、プロパティの間接化によりパフォーマンスのオーバーヘッドが発生しますが、単一のパッケージをインストールしてインポートするだけで、JavaScript での Python スタイルのスライスのメリットをすべて享受できるため、冗長な for ループや配列の作成が不要になります。操作は大幅に人間工学に基づいたものになりました。

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 ]

スライス セマンティクスに加えて、Jaysukh はブール配列のサポートを stdlib に追加し、ブール配列マスキングの基礎を築きました。

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 ]

その後、ブール配列マスキングのサポートを追加する際に学習内容を適用し、整数配列インデックスのサポートを追加しました。

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 ]

上記では、組み込み JavaScript 配列オブジェクトを使用した派手なインデックス付けを示していますが、最近、派手なインデックス付けの概念を stdlib ndarray に拡張しました。このトピックについては、今後のブログ投稿で詳しく説明する予定です。

言うまでもなく、JavaScript でのインタラクティブ コンピューティングと探索的データ分析のユーザー エクスペリエンスが大幅に向上すると信じているため、私たちはこれらの開発に特に興奮しています。

テストとビルド

最後に、2024 年は自動化の年でした。フィリップ ブルクハルトの取り組みについて触れないのは不注意です。フィリップは、CI のビルドとテストのインフラストラクチャを改善し、プロジェクト全体のスケーラビリティを向上させるのに尽力してくれました。彼の作品は多作でしたが、注目したい重要なハイライトがいくつかあります。

  • 自動変更ログ生成: フィリップは、コミット メッセージに人間と機械が読み取れる意味を追加する標準化された方法である従来のコミットの使用に向けてプロジェクトを先導し、その後、自動リリースを実行するための強力なツール セットを構築し、包括的な変更ログを生成しました。変更ログ、および 4000 を超えるスタンドアロン パッケージからなる stdlib の成長を続けるエコシステムの公開を調整します。かつては手動でリリース プロセスを行っていたものが、単一の GitHub ワークフローを実行するだけで実行できるようになりました。
  • stdlib ボット: Philipp は、プル リクエストのレビュー タスクを自動化し、役立つメッセージを投稿し、全体的なメンテナーの開発エクスペリエンスを向上させるために、GitHub プル リクエスト ボットを作成しました。今後数か月間で、新しい寄稿者のオンボーディングや、寄稿に関する一般的な問題へのフラグ付けを支援するために、ボットの機能を拡張することに特に熱心に取り組んでいます。
  • テスト カバレッジの自動化: stdlib のサイズのプロジェクトでは、各コミットおよび各プル リクエストでテスト スイート全体を実行することはまったく不可能です。したがって、テスト カバレッジ全体の全体像を把握するために、個々のパッケージのテスト カバレッジ レポートをつなぎ合わせるのは困難な場合があります。 Philipp は、個別のテスト カバレッジ レポートを専用リポジトリにアップロードするための自動化パイプラインを作成することで、この問題に対処しました。この自動パイプラインは、カバレッジ メトリクスの経時的な追跡と、送信されたプル リクエストごとに予想されるテスト カバレッジの変更の作成をサポートします。言うまでもなく、これによりテスト カバレッジ メトリクスの可視性が大幅に向上し、送信されたプル リクエストに伴うテストの信頼性が向上しました。

私たちはプロジェクト自動化ツールにおいて大幅な進歩を遂げてきましたが、さらなる自動化とツールの改善のためのアイデアには事欠かないようです。 2025 年にはさらに多くのことが起こると予想されます。 ?

先を見据えて

それでは、2025 年には何が待っているのでしょうか?!質問してよかったです!

上記のセクションでさまざまな取り組みについてすでに言及しましたが、大まかに言うと、今後 1 年間に私たちが重点的に取り組む予定の場所は次のとおりです。

  • GSoC 2025: Google が毎年恒例の Google Summer of Code プログラムを実施し、幸運にも再び受け入れられたと仮定すると、私たちは次世代のオープンソース貢献者を引き続きサポートしたいと考えています。
  • 数学および統計 C 実装: スカラー数学および統計カーネルのライブラリを拡張し、倍精度および単精度パリティを保証します。
  • BLAS: WebAssembly ディストリビューションと、行列とベクトルのスタックを操作するための高レベル API を完成させます。
  • LAPACK: 約 1700 の LAPACK ルーチン (!) を徐々に減らし続けています。
  • FFT: 初期の高速フーリエ変換 (FFT) サポートを stdlib に追加して、信号処理のアルゴリズムのロックを解除します。
  • ベクトル化された操作: スカラー数学および統計カーネルに対するベクトル化された操作のためのパッケージ作成を自動化します。
  • ndarray API パリティ: 組み込み JavaScript 配列および型付き配列との API パリティを実現することで、ndarray の使いやすさと親しみやすさを拡大します。
  • REPL: Jupyter プロトコルのサポートとさまざまなユーザー人間工学の改善を追加します。
  • WebGPU: 私たちは特定のアプローチに正式に取り組んでいませんが、少なくとも、Web ページがデバイスのグラフィックス プロセッシング ユニット (GPU) を効率的に使用できるようにする新しい Web 標準である WebGPU のサポートを検討することに熱心です。 、Web 上で科学計算を高速化するための API を提供するために、汎用 GPU 計算を含みます。
  • プロジェクト資金: 開発作業を加速し、stdlib コミュニティの継続的な成長をサポートするために、プロジェクト資金を探索し、できれば確保します。

これは間違いなく多大な量であり、それには村、つまりウェブを数値計算および科学計算のための一流のプラットフォームにするという私たちの使命に専念する人々のコミュニティが必要になるでしょう。 Web 上で科学コンピューティングの未来を構築することに参加する準備ができている場合は、ぜひご参加ください。参加方法については、貢献ガイドをご覧ください。

個人的なメモ

今後を見据えて、今年が私にとって何を意味したかについて個人的な振り返りをしたいと思います。今年の成長を考えると、消防ホースから水を飲んでいるような気分になることがよくありました。そして、正直なところ、毎日朝起きると、ガイダンス、質問への回答、プル リクエストのレビューを求める人たちからの 100 件を超える新しい通知やメッセージを目にすると、燃え尽き症候群に陥るのを避けるのは難しいかもしれません。しかし、この 1 年を振り返ると、私たちが達成したことを非常に誇りに思います。また、オープンソースに初めて携わったコントリビューターが、時には学んだ教訓を出発点として成長し、活躍しているのを見ると、特に心強くなります。夢のような仕事とチャンス。それを見ることができた幸運は、オープンソースというより大きな世界における原動力であり特権であり、私はそれを当たり前のことだと思わないよう最善を尽くしています。

これで、2024 年の回顧展は終わります。私たちが一緒に達成してきたすべてのことを振り返ると、Web 上の科学コンピューティングの未来はかつてないほど明るくなりました。途中でお世話になった関係者の皆様に改めて感謝申し上げます。これからの道はエキサイティングな機会に満ちており、2025 年に一緒に何を達成できるか楽しみです。前へ、そして上へ! ?


stdlib は、プロジェクトの開発を加速し、専門的に作成された高品質のソフトウェアに依存しているという安心感を与える、堅牢で高性能のライブラリの包括的なスイートを提供することに特化したオープン ソース ソフトウェア プロジェクトです。

この投稿が気に入ったら、スターを付けてください。 GitHub でプロジェクトを財政的に支援することを検討してください。あなたの貢献と継続的なサポートは、プロジェクトの長期的な成功を確実にするのに役立ち、非常に感謝しています!

以上が回想的なの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。