首頁 >web前端 >js教程 >回顧性的

回顧性的

Susan Sarandon
Susan Sarandon原創
2025-01-05 15:11:40937瀏覽

回顧性的

回顧2024年,展望未來。

2024 年對 stdlib 來說是具有里程碑意義的一年,充滿了進步、創新和社區成長。回顧過去,stdlib 社群成員花費了大量的時間和精力來完善現有 API、開發新功能以及為令人興奮的未來道路奠定基礎,這讓我印象深刻。我非常幸運能夠成為積極塑造網路科學計算未來的社群的一員,並且我對我們在未來幾個月繼續取得成功充滿信心。

在這篇文章中,我將回顧一些關鍵亮點,並預示 2025 年將會發生的事情。雖然我將對個人貢獻者進行各種讚揚,但如果沒有整個團隊的努力,我們今年所取得的一切成就都不會發生標準庫社群。社群在使 stdlib 成功所需的艱苦工作中發揮了重要作用,從查找和修補錯誤到審查拉取請求和分類問題,再到深入研究數值演算法和軟體設計的雜草。如果我沒有提到您的名字,請務必知道您的努力得到了認可和高度讚賞。非常感謝所有參與者以及一路上大大小小的幫助過的人。 ❤️

長話短說

過去的一年對 stdlib 來說是變革性的一年,其特點是顯著的成長、創新和社區貢獻。一些關鍵亮點包括:

  • 社群發展:84 位新貢獻者加入了stdlib,使我們的開發者社群規模擴大了兩倍,推動了超過4,000 次提交、2,200 個拉取請求以及500 個新軟體包的發布。
  • Google 程式碼之夏:四位傑出貢獻者幫助推進了關鍵項目,包括增強的 REPL 功能、擴展的 BLAS 支援和新的數學 API。
  • 增強的開發人員工具:自動化方面的重大進步包括自動產生變更日誌、改進的 CI 工作流程和更好的測試覆蓋率追蹤。
  • 技術里程碑:在線性代數(BLAS 和 LAPACK)、花式索引、WebAssembly 整合和數學函數的 C 實現方面取得了重大進展,所有這些都旨在使 JavaScript 成為科學計算的一流語言。
  • 未來願景:展望 2025 年,我們的目標是擴展我們的數學庫,提高 REPL 交互性,探索 WebGPU,並繼續構建工具,使網絡上的科學計算更加強大和易於訪問。

隨著 stdlib 的快速發展和我們全球社區的集體努力,我們正在塑造網路科學計算的未來。加入我們,讓我們在這個令人興奮的旅程中邁出下一步!

統計數據

首先,我們來看一些高水準的年終統計。今年,

  • 來自世界各地的 84 新貢獻者加入了 stdlib,使我們的開發者社區規模增加了三倍,並為項目帶來了新的活力和新的視角。
  • 我們一起向主開發分支做出了超過 4000 次提交
  • 我們開啟了近2200 個拉取請求,其中合併了超過 1600 個拉取請求。
  • 我們在專案中交付了500 多個新軟體包,範圍從新的線性代數例程到專門的數學函數,到多維數組的基礎設施,再到支援WebAssembly 和其他加速環境的API。

這些成就反映了我們社區的辛勤工作和奉獻精神。這是忙碌的一年,我們被迫批判性地思考如何在專案和社區不斷發展的同時有效地擴展專案和社區的規模。這意味著投資於工具和自動化,改善我們的審核和發布流程,並找出快速識別和提高新貢獻者技能的方法。

谷歌代碼之夏

2024 年真正推動 stdlib 發展的一個事件是我們接受 Google Summer of Code (GSoC)。我們之前在2023年申請過,但被拒絕了。所以當我們在2024年申請時,我們認為機會不大。令我們驚訝和高興的是,stdlib 被接受了,這引發了我們瘋狂地整合我們的事務,以便我們能夠應對即將到來的貢獻者的湧入。

GSoC 最終為 stdlib 帶來了變革性的體驗,引入了才華橫溢的貢獻者並推動了關鍵專案。正如我們在 GSoC 反思中所詳述的那樣,道路是坎坷的,但我們學到了很多東西,並走出了困境。不用說,我們非常幸運地擁有四位真正優秀的 GSoC 貢獻者:Aman Bhansali、Gunj Joshi、Jaysukh Makvana 和 Snehil Shah。我將在下面的部分中更多地介紹他們的工作。

REPL

Node.js 讀取-評估-列印循環 (REPL) 在 JavaScript 世界中通常是事後才想到的,既沒有充分利用,也沒有被充分重視。從 stdlib 誕生之初,我們就希望創造更好的 REPL 體驗,並整合對 stdlib 的科學計算和資料處理功能的支援。 stdlib REPL 的開發斷斷續續,但總是有一個目標,即匹配 Python 的 IPython 的功能和功能集,以便促進 JavaScript 中的互動式探索性資料分析。因此,當 Snehil Shah 表示有興趣將 stdlib REPL 作為 GSoC 的一部分進行開發時,我們感到非常興奮。

Snehil 已經在之前的一篇部落格文章「歡迎顏色加入 REPL!」中介紹了他的一些工作,但他和其他人的工作涵蓋了更多內容。一些亮點:

  • 預覽補全:當在 REPL 中鍵入與已知符號匹配的字元時,現在會顯示補全預覽,有助於促進自動補全併節省開發人員寶貴的擊鍵次數。特別感謝 Tudor Pagu 添加了這個!
  • 多行編輯:在新增多行編輯支援之前,REPL 支援多行輸入,但不支援編輯先前輸入的行,這往往會導致令人沮喪的使用者體驗。現在,REPL 支援在終端機內進行多行編輯,類似於專用編輯器應用程式。
  • 長輸出的分頁:一個長期存在的功能請求是向 stdlib REPL 新增對 less/more 之類的支援。以前,如果命令產生長輸出,使用者可能會遇到一堵文字牆。現在這個問題已經解決,希望在未來幾個月內添加更先進的不太相似的搜尋功能。
  • Bracketed-paste:將多行輸入貼到用於逐行執行輸入的 REPL 中,而不是將其貼上為單一提示。雖然在某些情況下很有用,但這通常不是所需的意圖,特別是當使用者希望在執行之前貼上和編輯多行輸入時。
  • 自訂語法突出顯示主題:習慣在 IDE 中進行開發的開發人員在遷移到缺乏他們喜愛的編輯器的一些優點的終端時常常會感到茫然。這些細節之一是語法突出顯示。因此,我們努力添加對自訂主題的支持,如 Snehil 的部落格文章中詳細介紹的。
  • 自動配對:另一個常見的 IDE 優點是自動關閉括號和引號,有助於節省擊鍵次數並減少可怕的括號缺失問題。 Snehil 從不迴避艱鉅的任務,他實現了對自動配對的支持,這是他在 GSoC 之前的第一個 Pull 請求之一。

很大程度上要感謝 Snehil 的工作,我們在 2024 年離 IPython 平價更近了一步,從而改變了科學計算的 JavaScript 體驗。我們還沒完成。我們仍然有拉取請求在隊列中工作,我特別興奮的一件事是我們最近開始探索添加對 Jupyter 協議的支援。請繼續關注 2025 年的更多 REPL 新聞!

BLAS

另一個重點領域是stdlib 的BLAS(Basic Linear Algebra S子程式)支援的持續開發子程式)支援的持續開發,它為常見的線性代數運算提供了基礎API,例如向量加法、標量乘法、點乘法乘積、線性組合和矩陣乘法。進入 2024 年,stdlib 中的 BLAS 支援相當不完整,特別是在對複值浮點資料類型的支援方面。隨著 Jaysukh Makvana 努力實現 stdlib 的 Complex64Array 和 Complex128Array 資料結構與內建 JavaScript 類型陣列的功能對等,潮流開始改變。

這些努力隨後為添加對複值類型數組資料類型的 1 級 BLAS 支援以及 Aman Bhansali 的工作鋪平了道路,他著手在 stdlib 中進一步提供 2 級和 3 級 BLAS 支援。在最初專注於較低層級的BLAS 跨步數組介面之後,Aman 透過添加WebAssembly 實作以及透過更高層級的多維數組(又稱ndarray)API 增加對將BLAS 操作應用於矩陣和向量堆疊的支援來擴展其範圍。

除了傳統的 BLAS 例程之外,stdlib 還包含類似 BLAS 的例程,但它們不屬於參考 BLAS 的一部分。這些例程包括用於替代標量和累積求和演算法的API、對跨步數組進行排序、填充和操作跨步數組元素、NaN 值的顯式處理以及其他不完全屬於線性代數旗幟但在工作時很常見的操作有數據。

在 Aman 的 BLAS 工作期間,我們清理並重建了 BLAS 實現,Muhammad Haris 自願將這些工作擴展到我們擴展的 BLAS 例程。他的努力包括將 Node.js 本機插件遷移到純 C,以減少樣板檔案並利用我們廣泛的 C 巨集集合來編寫本機插件,並進一步需要添加專用 C API 來促進與 stdlib 的 ndarray 的介面。

這些發展確保 stdlib 在為 JavaScript 開發人員提供線性代數支援方面繼續處於領先地位,為數值計算提供強大的工具。雖然已經完成了很多工作,但仍有更多工作要做,BLAS 將繼續成為 2025 年的焦點。

拉帕克

作為 Quansight Labs 實習的一部分,Pranav Goswami 在 BLAS 工作的基礎上,致力於為 LAPACK 奠定基礎(Linear Algebra Pack年齡)在stdlib中的支持,以便提供高階線性代數例程來求解線性方程組,特徵值問題、矩陣分解和奇異值分解。 Pranav 在他的實習後部落格文章中進行了更詳細的詳細介紹,他試圖建立一種方法來測試和記錄附加實現,並利用BLIS 的思想來創建LAPACK 接口,該接口有助於與stdlib 的ndarray 進行接口,從而最大限度地減少資料移動和儲存要求。雖然花了大量時間來解決問題並迭代 API 設計,但 Pranav 在添加各種實作實用程式和近 30 個常用的 LAPACK 例程方面取得了重大進展。鑑於 LAPACK 的規模(約 1700 個例程),這項工作將在可預見的未來繼續進行,因此請在未來幾個月中關注更多更新!

順便說一句,如果您有興趣了解有關stdlib 如何與Fortran 庫(其中許多庫仍然構成現代數值計算的基石)接口的更多信息,請務必查看Pranav 的關於從以下位置調用Fortran 例程的部落格文章使用Node.js 的JavaScript。

特殊數學函數的 C 實現

stdlib 的長期優先事項之一是繼續開發用於常見數學和統計運算的向量化程式。雖然所有標量數學內核(例如超越函數,如sin、cos、erf、gamma 等,以及統計分佈密度函數)都有JavaScript 實現,但許多內核缺乏相應的C 實現,而這些實現是解鎖更快性能所必需的。 Node.js 和其他支援本機綁定的伺服器端 JavaScript 執行階段。

Gunj Joshi 和其他人試圖填補這一空白,並提出了超過 160 個拉取請求,添加了專用的 C 實現。此時,只剩下一些最常用的雙精確度超越函數(看看你的 betainc!)。現在的工作已轉向完成單精度支援並添加統計分佈函數的 C 實現。我們預計這項工作將在 2025 年上半年繼續進行,然後將注意力轉向更高層級的 strided array 和 ndarray API,以及 WebAssembly 和 Node.js 本機附加元件的實作。

花式索引

我們取得重大進展的另一個領域是改進切片和陣列操作人體工學。數值程式語言(例如 MATLAB 和 Julia)以及專用數值計算庫(例如 NumPy)的使用者長期以來一直享受著簡潔語法的好處,用於表達僅影響數組元素子集的操作。例如,以下程式碼片段示範了使用 NumPy 將陣列中的所有其他元素設為零。

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 物件確實會產生一些效能開銷,但您現在只需要安裝並匯入單一套件即可獲得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 ndarrays,我們將在以後的部落格文章中詳細討論這個主題。

不用說,我們對這些發展感到特別興奮,因為我們相信它們將顯著改善 JavaScript 中互動式計算和探索性資料分析的使用者體驗。

測試和建構

最後,2024 年是自動化的一年,如果我不提及 Philipp Burckhardt 的努力,那就是我的失職。 Philipp 在改善我們的 CI 建置和測試基礎設施以及提高專案的整體可擴展性方面發揮了重要作用。他的作品非常多產,但我想強調一些關鍵的亮點。

  • 自動變更日誌產生:Philipp 引導專案轉向使用傳統提交,這是一種為提交訊息添加人類和機器可讀含義的標準化方法,隨後建立了一套強大的工具來執行自動發布、產生全面的內容變更日誌,並協調stdlib 不斷增長的生態系統的發布,該生態系統包含超過4000 個獨立包。曾經的手動發布流程現在可以透過執行單一 GitHub 工作流程來完成。
  • stdlib 機器人:Philipp 創建了一個 GitHub 拉取請求機器人,用於自動執行拉取請求審查任務、發布有用的消息並改善整體維護人員開發體驗。在接下來的幾個月中,我們特別熱衷於擴展機器人的功能,以幫助新貢獻者入職並標記常見的貢獻問題。
  • 測試覆蓋率自動化:對於 stdlib 大小的項目,在每次提交和每個拉取請求上運行整個測試套件是根本不可能的。因此,將各個套件測試覆蓋率報告拼接在一起以獲得整體測試覆蓋率的全局視圖可能具有挑戰性。 Philipp 致力於解決這個問題,方法是創建一個自動化管道,用於將各個測試覆蓋率報告上傳到專用儲存庫,並支援隨著時間的推移追蹤覆蓋率指標並為每個提交的拉取請求創建預期的測試覆蓋率更改。不用說,這極大地提高了我們對測試覆蓋率指標的可見性,並有助於提高我們對提交的拉取請求所伴隨的測試的信心。

雖然我們在專案自動化工具方面取得了長足的進步,但我們似乎從不缺乏進一步自動化和工具改進的想法。期待 2025 年會有更多精彩! ?

展望

那麼 2025 年會發生什麼事? !很高興你問了!

我們已經在上面的章節中提到了各種舉措,但是,從總體上看,我們計劃在未來一年重點關注以下內容:

  • GSoC 2025:假設 Google 舉辦年度 Google Summer of Code 計劃,並且我們有幸再次被接受,我們很樂意繼續支持下一代開源貢獻者。
  • 數學和統計 C 實現:擴展我們的標量數學和統計內核庫並確保雙精度和單精度奇偶校驗。
  • BLAS:完成我們的 WebAssembly 分發和更高層級的 API,用於在矩陣和向量堆疊上進行操作。
  • LAPACK:繼續完善約 1700 個 LAPACK 例程(!)。
  • FFT:向 stdlib 添加初始快速傅立葉變換 (FFT) 支持,以幫助解鎖訊號處理演算法。
  • 向量化操作:透過標量數學和統計內核自動建立向量化操作包。
  • ndarray API 奇偶校驗:透過內建 JavaScript 陣列和型別陣列實作 API 奇偶校驗,擴充 ndarray 的可用性和熟悉度。
  • REPL:新增 Jupyter 協定支援和各種使用者人體工學改進。
  • WebGPU:雖然我們還沒有正式承諾任何具體方法,但我們熱衷於至少探索對WebGPU 的支持,這是一種新興的Web 標準,使網頁能夠有效地使用設備的圖形處理單元( GPU) ,包含通用GPU 運算,以便為網路上的加速科學運算提供API。
  • 專案資金:探索並希望獲得專案資金,以加速開發工作並支持 stdlib 社群的持續發展。

這絕對是一個很大的數字,而且需要一個村莊——一個致力於將網路打造成一流的數值和科學計算平台這一使命的人們的社區。如果您準備好加入我們,共同建立網路科學運算的未來,我們歡迎您加入我們。請參閱我們的貢獻指南,了解如何參與。

個人筆記

展望未來,我想分享一下對今年對我意味著什麼的個人反思。鑑於我們今年的成長,我常常感覺自己就像在從消防水帶喝水。而且,老實說,當您日復一日醒來看到超過100 個來自人們想要指導、問題答案和拉取請求審核的新通知和訊息時,很難不感到精疲力盡。但是,當回顧過去的一年時,我對我們所取得的成就感到非常自豪,當我看到開源貢獻者不斷成長和蓬勃發展時,我尤其感到振奮,有時他們會利用他們學到的經驗教訓作為跳板,為開源做出貢獻。夢想的工作和機會。有幸看到這一點是更大的開源世界中的一種驅動動力和一種特權,我竭盡全力不認為這是理所當然的。

2024 年回顧展到此結束。回顧我們共同達成的成就,網路科學計算的未來從未如此光明!再次感謝一路上提供協助的所有相關人員。前方的道路充滿了令人興奮的機遇,我們迫不及待想看看 2025 年我們將共同取得什麼成就。繼續前進! ?


stdlib 是一個開源軟體項目,致力於提供一整套強大、高效能的函式庫來加速您的專案開發,並讓您安心,因為您知道您依賴的是精心製作的高品質軟體。

如果您喜歡這篇文章,請給我們一顆星? GitHub 上並考慮為該專案提供經濟支持。您的貢獻和持續的支持有助於確保專案的長期成功,我們深表感謝!

以上是回顧性的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn