Ocaml 适用于处理多维数组的高效类型推断语言有哪些示例

Ocaml 适用于处理多维数组的高效类型推断语言有哪些示例,ocaml,d,type-inference,Ocaml,D,Type Inference,我不太关心垃圾收集,如果有,它应该是可选的。语言D符合要求,但我正在探索其他选择。令我惊讶的是,在各种语言中,这里似乎人烟稀少。如果可能的话,我想要一个能以C语言80%的速度运行的东西 我还希望该语言能够很好地支持多核。不一定通过线程,但任何不涉及大量复制的内容。例如,GNU对libstdc++的并行模式对我来说是一个相当好的抽象,但在提供预烘焙数组原语方面有点弱(这不是抱怨,它的工作不是提供数组原语) 我怀疑我所说的是一种类似于OCaMl的语言: 对多维数组的良好支持 无(或可选)垃圾收集 阵

我不太关心垃圾收集,如果有,它应该是可选的。语言
D
符合要求,但我正在探索其他选择。令我惊讶的是,在各种语言中,这里似乎人烟稀少。如果可能的话,我想要一个能以C语言80%的速度运行的东西

我还希望该语言能够很好地支持多核。不一定通过线程,但任何不涉及大量复制的内容。例如,GNU对
libstdc++
的并行模式对我来说是一个相当好的抽象,但在提供预烘焙数组原语方面有点弱(这不是抱怨,它的工作不是提供数组原语)

我怀疑我所说的是一种类似于OCaMl的语言:

  • 对多维数组的良好支持
  • 无(或可选)垃圾收集
  • 阵列密集型代码的并行编程原语
  • 方便的外国金融机构
  • 并且有合理的机会以80%的C速度运行

  • 我不确定使用什么标签,所以欢迎提出建议我也想把它变成一个维基,但不知道怎么做。我听说过Felix,但不知道这在这里是否合适。

    你基本上是在描述D,特别是如果你有很长的时间视野,并且愿意等待一些正在进行的工作完全完成的话

  • 对多维数组的良好支持:我正在指导。它还没有抛光,还没有准备好进入黄金时段,但如果你生活在最前沿,它已经可以使用了。它还包括到BLAS和LAPACK的绑定、表达式模板和求值器,以便为这些库提供良好的包装

  • D的默认内存管理方法是垃圾收集,但有足够的底层设施,在性能或空间效率是一个高优先级的情况下,您不必使用它。您可以完全访问C标准库,并且可以直接使用C的
    malloc
    free
    。使用非类型化内存块的能力还允许实现自定义分配器。我和我指导的GSoC学生都在使用一个区域分配器,该分配器将很快被审查并纳入Phobos(D标准库)

  • 并行编程:参见标准库的模块。它不是专门针对数组密集型代码的,但它确实可以用于此目的

  • D完全支持C ABI。您所要做的就是转换C对象文件中的头文件和链接。甚至有一个叫做的工具可以自动处理简单的案例

  • 目前,D的速度比C慢一些,因为它还没有经过多年的优化工作,因为它的重点是特性和错误修复。然而,它并不落后,几乎所有的性能差异都可以用一个有点幼稚的垃圾收集器和缺乏积极的内联来解释。如果您避免在代码中性能最关键的部分使用垃圾收集器,并在这里或那里手动内联一些函数,那么垃圾收集器的速度应该与C一样快

  • 我建议用F

    • 熟悉的Ocaml语法
    • std库对F的支持#
    • TPLPLINQAsync对并行编程的支持
    • 基于CLR的垃圾收集(在Microsoft.NET和开源Mono上运行)
    • PInvoke用于调用本机C库
    • 好成绩

    虽然我是OCAML和D的巨大粉丝,但在现有的图书馆里,我发现C++是这里的胜利者。表达式模板工作打破了c++对多维数组的操作,并被用于创建极为高效的库,其性能远远优于裸c。临时变量可以从计算中删除,但不能从c代码中删除,因为c代码的通用性足以构成操作。循环可以在translationtime期间自动展开。您还可以使用开箱即用的自动并行功能,进一步推动多核机箱的使用达到新的高度。有了c++11的类型推断功能,您可以在一个成熟的实现中实现所有请求的行为,它的性能几乎超过任何其他语言

    现在,我并不是说你不能在D中做同样的事情。你只是不会有像,或那样的库的成熟度。而且,您将无法获得使用的编译器支持。显然,在这条路上,我毫无疑问的支持这种支持,但是C++是我今天使用的唯一的语言。 我的意思是,你不能用OCaml,至少是标准的编译器和库,仅仅因为缺乏真正的对称多处理。类似于JoCaml、OC4MC等可能提供必要的并行化,但您仍然缺乏对常用矩阵库中临时缩减的深入使用


    这只是我的经验。由于缺乏对临时变量的确定性破坏,从C#、F#和该家族获得此类优化要困难得多,这使得表达式模板技术更加笨拙。由于缺少模板的编译时类型推断,许多技术无法实现。在多年来我所从事的所有语言中,构建张量和旋量库、图形库、抽象代数(矩阵中的元素表示等),C++仍然是效率的最佳支持,现在在一个更好的类型推导环境中。

    < P >杰伊的鱼提供了你想要的,除了C FFI。鱼类是多倍体,而不仅仅是多态性。它推断数组的维数。您可以编写代码并在1或2维上进行测试,但计算