2

以下是关于 K 编程语言的 Wikipedia 条目的摘录:

解释器的小尺寸和语言的紧凑语法使得 K 应用程序可以完全适应处理器的 1 级缓存。

是什么让 K 程序如此之小?当一个人'在 K 中使用运算符时,map在像 Haskell 这样的编译函数语言中,或者在像 C 这样的编译命令式语言中使用等效for循环时,我无法想象编译器会生成完全不同的汇编代码,或者解释器内部发生的事情与for循环有很大不同. K 中是否有什么特别之处使其运行时和程序如此之小?

SO上有一个类似的问题,但那里的答案基本上没有任何澄清。

4

2 回答 2

1

有一些方法可以生成非常紧凑的代码。例如,Forth 等的http://en.wikipedia.org/wiki/Threaded_code。K很可能被编译成它的某种形式。

于 2011-02-12T13:33:46.777 回答
1

我不是上述维基百科声明的作者,只是广泛使用 K 的人。

至于代码,K 不会展开循环或对程序结构进行其他更改,以使其大小超出您的预期。可执行解释器本身很小。而且这些程序往往很小(尽管不一定如此)。不是执行任何特定的映射指令等,这使得代码本身更有可能在缓存中执行。

K 程序往往很小,因为它们是存储中的小而紧凑的字节码,并且它们的语法往往会为给定的操作产生非常少量的代码。

比较这个 Java 程序:

int r=0;
for(int i=0; i<100; i++) {
  r+=i;
}

针对这个 K 程序产生相同的结果:

+/!100

正在执行的代码量是相似的,但程序所需的存储空间(少得多键入!)要少得多。K 非常适合那些有重复性压力伤害的人。

至于数据,鼓励使用单个指令处理多个数据项倾向于以对缓存友好的方式进行顺序访问,而不是随机访问。所有这一切只会使程序更有可能对缓存友好。

但这只是语言中结合 K 可执行文件本身的趋势和最佳实践。如果您在访问数据之前链接大量附加代码、特殊情况下的大量函数并随机化您的索引,那么您的程序将对缓存不友好,正如您所期望的那样。

于 2011-02-11T22:02:22.753 回答