首页 > web前端 > js教程 > 回顾性的

回顾性的

Susan Sarandon
发布: 2025-01-05 15:11:40
原创
921 人浏览过

回顾性的

回顾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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板