【问题标题】:Which language sits between C++ and Java? [closed]哪种语言位于 C++ 和 Java 之间? [关闭]
【发布时间】:2011-01-18 02:20:54
【问题描述】:

我觉得这两种语言不足以快速构建复杂但高性能的原生应用程序。

我想要一种语言,其中包括:

  • 编译时间类型检查。
  • 内存指针,但没有代码指针。
  • 内部有VM 类设计,但不需要在VM(如Java)上运行。
  • 自动内存管理。
  • OOP,但不是纯粹的 OOP。
  • 泛型。
  • 反射操作。
  • 开放社区。​​li>

还有一件事:.NET 总是被无缘无故地排除在外。

在 C++ 中添加自动内存管理可能很棘手,但添加反射支持并不容易。

如果语言能做到就更好了:

  • 关闭
  • 尾递归

【问题讨论】:

  • 听起来你想要 C# 而不是 C#?
  • '还有一件事:.NET 总是无缘无故地被排除在外。' - 为什么,当它满足您的确切要求时。
  • 因为它不是开源的。微软总是创造神奇的东西,你永远不会有任何想法。出于同样的原因,我讨厌 COM/DCOM,尽管它很好。除非你拥有源代码,否则你不会永远掌握 COM,但你永远也不会拥有它。
  • .NET 的源代码可用。
  • 投票关闭,因为 C#(及其单声道实现)是 OP 正在寻找的,但他已将其降级为参数。没用的问题。

标签: java c++ programming-languages


【解决方案1】:

D,也许吧。

我还建议查看 Scala 或 C#(那里 Mono,fwiw),但他们错过了“本机目标”位。对于大多数应用程序,它们可能具有所需的“高性能”——但这取决于特定的应用程序和功能要求。 (无论如何,我会毫无疑问地使用 Java 以上的任何一种语言 :-)

【讨论】:

  • @Quaternion:等等,微软在 10 年前做了什么,在不同的情况下使用不同且不相关的产品让你害怕?而甲骨文在过去几个月使用 Java 所做的事情并不会让您担心?现在,我认为有更多的理由怀疑 Java 的未来发展方向,而不是 .NET。或者,也许您可​​以向我展示一个微软试图限制 .NET 堆栈的跨平台兼容性的案例?例如,他们试图破坏 Mono 的一个案例?你可以随心所欲地成为一个偏执狂,但你绝对需要用它来污染 SO?
  • D 没有内置的反射支持。
  • @Zach:我知道你的意思是开玩笑,但老实说,我认为这不是真的。 SO 起源于一个 .NET 繁重的社区,我认为它概括地显示。该网站是用 .NET 和 MSSQL 实现的,创始人都是 Windows 开发人员,他们博客的大多数读者也是如此,这些人几乎构成了早期的 SO 用户群。总的来说,我认为 Microsoft 和 .NET 在 SO 上的比例可能过高。 C# 在这里比“在现实世界中”更受欢迎。但是像@Quaternion 扔掉的无知的垃圾并没有帮助。
  • @Quaternion:如果你真的阅读了我所说的,我已经看过那个链接,我指出它描述了微软十年前在一个非常不同的市场情况下采取的行动,完全不同的产品。我认为这并不能告诉我们他们今天是如何对待 .NET 的。您可能还注意到,如果您没有被您的平台狂热所蒙蔽,微软在过去十年中做出了一些相当重大的政策变化,其中包括开放性和标准合规性。
  • @Quaternion:目前,Java 的未来至少被 Oracle 控制,就像 .NET 的未来被 Microsoft 控制一样。然而你愿意原谅一个,而不是另一个? Oracle 最近对 Java 平台的开放性做了相当多的限制。微软有没有做过类似的事情?
【解决方案2】:

听起来像 Scala……但是:

Scala 是一种 JVM 语言。我对此知之甚少,无法解决您的指针问题。

我不知道这项技术的现状,但我认识一些过去将 Java 交叉编译为 C++ 的开发人员。因此,这不是一个完美的解决方案,但该领域的进一步研究可能会很有趣。

【讨论】:

  • 我会给 +1,但“内部有一种 VM 类型的设计,但不需要在 VM 上运行(如 Java)。”
  • 有没有使用scalar的示例软件,可以像Notepad++一样快速启动?
  • @pst:恕我直言,这是一种 VM 类型的设计,您不会混淆 bool/BOOL、__int32/long、__fastcall/__pascal 等。
  • 我也尝试将 Java 转换为 C++,但这需要做很多工作。
【解决方案3】:

C++0x(当它出现时)

【讨论】:

  • C++0x 很有意思,我现在就去看看。
  • 这只是 C++ 的下一个版本,几乎是一种完全不同的语言。
  • 虽然不会自动进行反射。
【解决方案4】:

Google 正在大力推动 Go,这可能会达到最佳效果。

【讨论】:

    【解决方案5】:

    我建议你再看看 Java。它具有所有这些功能,并且 JIT 可以生成本地代码,就像使用指针一样高效。

    我建议你尝试使用 OpenJDK 7 调试版本并使用 -xx:+PrintAssembly 来查看生成的本机代码。

    也许您还有其他要求,但从您编写的内容来看,Java 满足了所有要求。

    顺便说一句:您可能会发现 Excelsior JET 很有趣,因为它是 Java 到本地编译器。但是我发现如果你知道如何为它编写优化代码,JVM 会做得非常好。

    【讨论】:

      【解决方案6】:

      当您编译为 P 代码时,Visual Basic 5 和 6 符合无需安装 VM 的标准(如果您编译为本机代码,它们也符合本机要求)。它还处理内部分配对象的内存管理,但如果您想要固定指针,您可能会失去自动处理,具体取决于您的使用情况。它当然可以根据您的要求处理准 OOP,并且有一个相当活跃的社区(如果与 C++ 社区相比缺乏强大的软件工程原则)。

      然而,最适合您需求的语言可能是在 13 年前发布的,这表明您的需求需要改进。

      【讨论】:

        【解决方案7】:

        C++Builder 及其已发布的关键字扩展将通过反射获得您想要的。 使用 C++ Builder 进行自动内存管理也不是不可能的(我编写了一个分代标记和清除 GC,它在我们的许多生产软件中使用)。您还可以获得原生 C++ 附带的所有其他内容。

        【讨论】:

          【解决方案8】:

          WhiteSpace 是镇上很酷的新语言 :-)

          1 编译时类型检查。
          -> 静态类型(没有运行时类型,因此根据定义必须是静态的)

          2 内存指针,但没有代码指针。
          -> 绝对没有代码指针。不需要内存指针。

          3 内部是一种虚拟机类型的设计,但不需要在虚拟机上运行(如 Java)。
          -> 空白解释器是用 Whitespace 编写的。
          -> 这表明该语言可以很容易地用 VM 方法实现。

          4 自动内存管理。
          -> 所有内存都是自动管理的。

          5 OOP,但不是纯粹的 OOP。
          -> 失败了。其程序

          6 泛型。
          -> 函数可以用于任何宽度的整数。
          -> 在某种程度上如此通用。

          7 反射操作。
          -> 不需要它们。所有类型都是整数。

          8 开放社区。
          -> 是的。他们会接受任何愿意提供帮助的人。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-04
            • 2010-09-09
            • 1970-01-01
            • 2011-03-05
            • 2010-10-07
            • 2011-03-30
            • 2011-04-24
            • 2010-09-19
            相关资源
            最近更新 更多