javascript - Javascript 将未声明的函数用作对象的能力如何帮助在计算机之间划分任务?

标签 javascript arrays computer-science

我最近读了this article试图解释如何利用 JavaScript 操纵函数的能力让世界上的每台计算机都在处理互联网上的所有信息方面做一小部分。我的理解是这样的:

function map(fn, a)
{
    for (i = 0; i < a.length; i++)
    {
        a[i] = fn(a[i]);
    }
}

函数 map 允许您快速调用数组中每个元素的函数

map( function(x){return x*2;}, a );

而JS允许你在不声明的情况下调用一个函数。前提是,如果 Internet 上的所有数据都存储为一个数组,您可以(以某种方式使用 map)拆分任务,在多个 CPU 或所有计算机之间对数组中的每个项目进行一些特定更改世界的。

这是我不明白的部分 - 为什么你需要 map 或 JS 的数组操作来做到这一点?难道你不能只向每台计算机发送数组的一部分,向它们发送函数以在数组中的每个元素上运行,然后让它们转换数组不需要执行map 或任意数量的古怪函数用法?

当然,将函数用作对象似乎很方便,但为什么这对于在 CPU 之间拆分任务的任务来说是不可或缺的?

最佳答案

不,您在这里得出了错误的结论。 Joel 并不是在提倡使用 JavaScript 来“让世界上的每台计算机都在处理互联网上的所有信息中做一小部分”。他使用 JavaScript 作为一种选择的语言来演示 mapreduce 函数的功能(顺便说一句,可以定义比仅针对数组更通用的函数)。然后他确实完全离开了 JavaScript 领域,认为编程语言需要一定程度的抽象 (first-class functions) 才能有所帮助:

Programming languages with first-class functions let you find more opportunities for abstraction, which means your code is smaller, tighter, more reusable, and more scalable.

那个map and reduce作为一个概念(没有任何特定的语言实现)如此有用是因为它们是绝对通用的,能够通过传递不同的函数来表达任何类型的数据聚合。只要那些是pure ,它们可简单地并行化,并且可以在多核机器甚至互联网规模的集群上实现,而无需更改算法或结果。

关于javascript - Javascript 将未声明的函数用作对象的能力如何帮助在计算机之间划分任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39263128/

相关文章:

javascript - 使用 Stripe API,如何检查用户是否为特定产品付费?

Javascript:没有 anchor (哈希)部分的 document.url

php - 检测多维数组中的新排列

x86 - 现代 x86 CPU 使用什么缓存一致性解决方案?

javascript - 某些方法如何知道提前进行论证?

javascript - 将字符数组转换为字符串

javascript - 在 JavaScript/jquery 中调用 bean 方法?

基于另一个数组的 Java 打印数组

python - 如何在 PyOpenCL 中覆盖数组元素

python - 找到数字列表的 'shape'(直线/凹/凸,有多少个驼峰)