4

我对用于性能计算的类 C 语言产生了兴趣。您能否推荐一些具有以下属性的替代编程语言:

  • 必须靠近硬件(位摆弄、指针或一些替代的安全方法,如引用)
  • 没有托管代码(没有 jvm/.net 语言)
  • 必须非常快(如C)
  • 必须高于 ASM 级别(是的,我对 ASM 之上的宏语言感兴趣)
  • 可能晦涩难懂,不是很普遍

我主要对鲜为人知的语言感兴趣。

4

12 回答 12

12

汇编语言D 编程语言怎么样?

于 2009-03-17T13:31:08.290 回答
9

如果您对此一无所知并且只是对拓宽视野感兴趣,请查看Forth。阅读 Forth 总是让我觉得 C 是高级别的。

于 2009-03-17T13:32:14.043 回答
6

你没有在你的问题中明确声明它不能是 C,所以我会继续推荐 C。它满足你的三个项目符号的愿望,你不必担心语言的不同版本(比如每种不同类型的汇编器)。

于 2009-03-17T13:35:08.310 回答
6

好吧,我一直更喜欢 C 和/或 C++,因为有多种风格(MSVC、glibc 等),它可以在许多不同的平台(例如移动设备、Windows、linux)和设备上运行,并且可以跨平台编写(不同的处理器架构),甚至用于高端图形(例如 DirectX)。

您可以获得对平台资源的“体面”访问(条件各不相同),它可以像您选择磨练它一样快,而且它比 ASM 更容易(恕我直言)编写。还有相当多的支持工具和代码分析工具可以让事情变得更容易一些。

C 和 C++ 也已经存在了很长一段时间,所以它(即使在今天)也有一个优秀而热情的社区!

于 2009-03-17T13:35:10.387 回答
3

向前!

在某些架构上,Forth 可以比机器语言更快。编译后的代码非常密集,因此可以优化使用代码缓存。

于 2009-03-17T13:48:03.007 回答
1

组装将是最接近硬件的,因此是最快的

于 2009-03-17T13:31:14.093 回答
1

Ada最初是为嵌入式系统设计的(除其他外)。

于 2009-03-17T13:47:35.003 回答
1

OpenCL可能很有趣。它有点像 OpenGL 着色器语言(带有扩展的 C 的子集),但用于通用并行数组计算。

于 2009-03-17T13:56:54.827 回答
1

您可以开始使用 VHDL、Verilog、System C 对 FPGA 进行编程......

于 2009-03-17T15:35:13.467 回答
1

主题变奏曲

FORTRAN比 C 更老,并且仍然是数值计算的主要参与者之一。直到 1990 年(当该语言大幅现代化时),该语言没有任何形式的指针(检查与否)。这种缺乏意味着无法动态管理内存。它还使编译器的别名分析变得容易,这是使 Fortran 代码快速运行的原因之一。

ALGOL是第一个结构化编程语言。尽管它在程序员方面的成功有限,但它对语言设计师的影响很大。

Ada是一种命令式语言,具有强大的类型系统和良好的模块化,这使得它非常适合具有强保证要求的低级编程(它是由美国政府赞助的,考虑到军事和航空电子应用)。它受到Pascal的启发,如Modula-2Modula-3

远离低级命令式编程的主流,还有FORTH。FORTH 可以在内存很少的设备上编译,甚至解释;它在低端嵌入式系统(包括微控制器)上有很多用途。该语言基于反向波兰表示法,因 HP 计算器而闻名(事实上,HP 计算器的语言深受 FORTH 的影响)。许多实现没有变量:所有数据都保存在一个或多个堆栈上。

只是为了好玩,我会提到深奥语言的鼻祖 INTERCAL

会让你大吃一惊的东西

深奥的语言可能具有指导意义,并且有很多工作接近机器(通常是虚拟机,但原则上,如果您足够疯狂,您可以在实际计算机上实现它们)。你可以看看brainfuck(图灵机和C之间的一种中间阶段),或者许多单指令语言,或者befunge(如果内存是一个二维数组呢?)。

Cyclone看起来很像 C。语法相同,Cyclone 有指针、未标记的结构和联合、goto 语句和手动内存管理。然而它是一种安全的语言:你不能有一个悬空指针或缓冲区溢出。您可以访问高级功能,例如模式匹配、异常、多态、抽象类型和可选的自动内存管理(不仅是垃圾收集,还有区域)。旋风既有用又有指导意义;对于 C 的死忠,它可能是发现什么是安全语言的好方法。Cyclone 可以编译为 C,因此您可以在任何有 C 编译器的地方运行程序。

换个方向,如果你想接近硬件,但还没有真正设计硬件,看看同步语言,比如LustreEsterel。这些语言用于对高可靠性实时系统进行编程,例如核电站、飞机和铁路信号。这些语言放弃了图灵完备性,并确保程序员可以准确地知道他们的程序将运行多快以及它将需要多少内存。如果您认为 C 语言接近机器,那么找出真正接近机器的语言可能会令人震惊。

于 2010-07-09T21:11:39.800 回答
0

你不可能比汇编语言更接近,除非你在芯片制造商那里找到一份工作并开始编写微代码!!!

如果您使用的是 Windows,我认为您可以使用 Microsoft MASM(宏汇编器),它可以让您快速启动并运行。我很久以前使用它,它不是一个糟糕的产品。

于 2009-03-17T13:39:47.723 回答
0

回答我的问题似乎有点尴尬,但我找到了两种语言:

  • 耐热玻璃
  • 瓦拉

它们可能无法满足所有约束条件,但它们非常适合性能计算,并且都可以转换为 C。

于 2009-03-17T13:43:57.027 回答