2

是否有任何基于 java 语法和特性的低级编程语言可用?

基本上不应该有内存管理,用户应该能够直接访问内存。

但是应该保持java的以下特性:
1)平台独立性(应该根据机器架构直接编译为本机代码以保持平台独立性,而不是编译成字节码)
2)不应该有JVM来管理内存和资源。
3)应该有异常抛出和捕获机制。
4) 应该有内置的多线程和并发支持。
5) 利用 Java-API。
6) 应该有像 C 一样的指针支持。

基本上,我正在寻找 C 和 Java 的混合体,具有语法和编码约定,如 Java、面向对象(可能不是严格面向对象),但应该与 C 一样快。

是否已经构建或正在开发任何此类语言?具有上面列出的一项或多项功能?

4

6 回答 6

7

C++ 听起来是您最接近的选择,但是您不会得到所有想要的东西。具体来说,您不会获得平台独立性、本机多线程和 Java-API。但是,您可以使用 boost 库来帮助解决这些问题。

如果您的动机纯粹是基于性能,那么您应该知道 Java 现在非常快。你绝对确定它对于你想要做的任何事情都会太慢吗?

于 2012-05-16T14:46:39.573 回答
2

您描述的功能没有语言。

类 C 语言:

  • 编译为目标代码
  • 需要手动内存管理
  • 不要使用虚拟机
  • 对异常的支持有限
  • 有指针

他们没有:

  • 内置多线程(尽管参见 pthreads)
  • 不要“利用 Java API”

Go 和 D 类似于 C,但支持多线程和并发,尽管带有垃圾收集器。其他面向系统的语言,如 ATS、Java 和 Haskell 是类似的——你要么得到原始机器,要么得到一些不错的特性和垃圾收集。所有这些都被用于系统编程。

所以,要么你使用 C 或 C++,而这带来的痛苦,要么你接受内存管理。

于 2012-05-16T14:51:30.460 回答
1

Vala编程语言可能与您的意思相近。

它不是独立于平台的(这对于任何低级系统编程语言来说都是非常困难的)。它确实有半自动内存管理,但不是通过垃圾收集。它是一种面向对象的编程语言,可以编译为纯 C,并使用 GNOME GObject 系统来实现其面向对象的特性。

它与 Java 没有任何关系,因此它没有为您提供标准的 Java API。

于 2012-05-16T14:49:37.173 回答
1

我认为唯一相关的语言是 Objective C,因为它将 C 与 SmallTalk 的想法和受启发的 Java 结合在一起。

虽然您可以像 C 一样独立于平台使用它,但现在大多数生态系统都是针对 Apple 平台的——但这不是该语言的属性。

它不能使用 Java API,但是没有非 JVM 语言可以。

于 2013-10-26T00:08:57.170 回答
0

另一种选择是“D”:

http://dlang.org/index.html

于 2012-05-16T14:59:06.320 回答
0

是否有任何基于 java 语法和特性的低级编程语言可用?

我会并且已经为此使用了Java。;)

基本上应该没有内存管理

没有什么会强迫您创建垃圾,您可以自己回收所有东西(或几乎所有东西),并且伊甸园大小很大,避免使用 GC 一天甚至一周。(或重新启动应用程序,永远不要使用它)

用户应该能够直接访问内存。

为此,我使用 ByteBuffers(支持)或 Unsafe(不支持)

但是应该保持java的以下特性: 1)平台独立性(应该根据机器架构直接编译为本机代码,以保持平台独立性,而不是编译成字节码)

JVM 执行此操作。

2)不应该有JVM来管理内存和资源。

您不必直接使用 JVM。

3)应该有异常抛出和捕获机制。

JVM 执行此操作。

4) 应该有内置的多线程和并发支持。

JVM 执行此操作。

5) 利用 Java-API。

JVM 执行此操作。

6) 应该有像 C 一样的指针支持。

您可以使用具有 Unsafe 可用的 JVM 来执行此操作。但是,您可能会发现直接 ByteBuffers 会安全地执行您想要的操作。

但应该和 C 一样快。

考虑到任何时间和资源,Java 不如 C 快。但是,如果您的时间和资源有限,与较低级别的语言相比,Java 可以帮助您在更短的时间内获得足够快、工作和可维护的程序。(同样的论点适用于高级语言,例如 Scala vs Java BTW)

于 2012-05-16T17:25:42.793 回答