Arrays 现代语言与数组符号约定

Arrays 现代语言与数组符号约定,arrays,programming-languages,implementation,specifications,Arrays,Programming Languages,Implementation,Specifications,你知道有哪种现代语言将数组标记为列/行而不是C++/Java/C行/列吗?行和列只是解释问题。它们与语言中的任何基本要素都不对应 注:有少数例外情况;典型的专用数学语言,如Matlab。这些语言都没有与数组关联的行或列的概念。只有程序员才能将这些概念与数组的一个维度或另一个维度相关联。您可以自由交换它们,并在数组的任何部分存储行或列。正如其他人所回答的,将索引解释为行或列取决于程序员如何解释具有五维的数组?除了少数语言或语言版本指定多维数组在内存中的布局,知道这一点可能有助于提高阵列密集型计算的

你知道有哪种现代语言将数组标记为列/行而不是C++/Java/C行/列吗?

行和列只是解释问题。它们与语言中的任何基本要素都不对应


注:有少数例外情况;典型的专用数学语言,如Matlab。

这些语言都没有与数组关联的行或列的概念。只有程序员才能将这些概念与数组的一个维度或另一个维度相关联。您可以自由交换它们,并在数组的任何部分存储行或列。

正如其他人所回答的,将索引解释为行或列取决于程序员如何解释具有五维的数组?除了少数语言或语言版本指定多维数组在内存中的布局,知道这一点可能有助于提高阵列密集型计算的性能,避免分页并增加CPU缓存的命中率

也就是说,现代优化编译器应该能够找出访问数组的最有效方法,这样程序员就不必担心内存布局

如果还确定循环可以展开,并且一次迭代中的表达式不依赖于前一次迭代中的表达式,则表达式可以重新排序,例如通过反转索引


这与确定循环是否可自动并行化所做的分析是相同的。在函数式语言中,这一点更为常见,因为值的不变性使分析更为容易。在过程语言中,副作用可能隐藏在任何地方,因此优化只针对涉及简单表达式的循环进行。

如果您询问行与列的主要顺序,则存在细微的低级差异。它归结为多维数据如何存储在内存中


有关更多信息,请查看此链接。

是吗?我想当你定义一个二维数组时,你就可以定义行和列了。我想知道为什么会有向下的投票?我不能回答一个我不知道答案的问题吗?看在上帝的份上,当你投反对票时,至少要有勇气承认。说真的…+1来反驳反对票——这是一个基于误解的有效问题,但这不是犯罪。那是我的反对票,这是偶然的。很抱歉我试图回复,但我不小心在5分钟前投了票。如果您编辑问题,那么我可以删除下一票。我对您的问题下一票是因为它不清楚或没有用处,下箭头上的确切文本。这些语言中没有一个把数组记为行/列,所以他们为什么要做的问题还不清楚,并且作为问题的前提是不正确的,询问为什么对其他人不是很有用。最后一段是不正确的,至少在C或C++中是这样。如果有一种语言的编译器可以预测缓存访问模式并切换快速维度,我很想听听它!即使是.NET语言中的抖动也不能做到这一点。您仍然需要理解所编写的代码的实际含义,并首先以最合乎逻辑的方式实现它。特定程序指定的执行顺序并不是唯一会产生相同结果的顺序。依赖性分析是计算的一个分支。指令的重新排序通常是通过优化编译器来完成的。在嵌套循环中对语句重新排序只需要稍微多做一点分析。@There's nothing See:@Apalala:Parallelization不是这里的问题。如果以随机顺序执行转置操作,将获得可怕的缓存性能。