【问题标题】:Why Android used Java concept instead of D language or C or C++? But Chromium web browser is in C++, its very complicated match [closed]为什么 Android 使用 Java 概念而不是 D 语言或 C 或 C++?但是 Chromium 网络浏览器是 C++ 的,它的匹配非常复杂 [关闭]
【发布时间】:2011-04-09 14:21:10
【问题描述】:

Android 是 32 位 ARM。 wiki

说明:

1) 那么,32/64 或 8/12/16 位编译器可用于 D 语言,如果不是它可以由编译器构建,如果我没记错的话?

2) Linux 标准内核:用 C 和其他语言编写的库我相信可以用 D 语言编译成 ARM,不仅 D 语言也可以用 C/C++ 编译。

根据 Android wiki 信息开始我的困惑:

  • wiki:Linux 内核的修改版本(不是 linux,而是修改后的 linux,因为硬件兼容性?所以我不能使用 RPM 打包?因为它不再是标准的 linux?)

  • wiki:虽然大多数 Android 应用程序都是用 Java 编写的,但平台中没有 Java 虚拟机,并且不执行 Java 字节码。 Java 类被编译成 Dalvik 可执行文件并在 Dalvik 虚拟机上运行。 Dalvik 是专为 Android 设计的专用虚拟机,并针对内存和 CPU 有限的电池供电移动设备进行了优化。可以通过第三方应用程序提供 J2ME 支持。

问题:为什么只有 Android 不是用 D 或 C/C++ 语言编写的? 这是唯一一家证明他们需要 Bigtable 的公司,而不是处理所有这些混乱(世界还无法解决该问题),而且移动平台也需要改变,比如 Android?那么 iPhone/Nokia 的实现有什么问题呢?

问题:为什么 Android 不运行 JVM,但他们构建了一个 Java 概念来替代 JVM 处理,而不是像 MeeGo 或其他那样做同样的事情。 这是营销术语还是技术术语?难道不能只用整个Android用C/C++或D语言编写吗?而不是涉及Java概念或Mess概念?

如果是,那么 Chromium-web 浏览器为什么他们再次使用 C++?为什么不把 Java 也用于 Chromium-web?

这一切都是为了了解它是如何在实际生活中得到应用的,对我来说,只是想知道他们为什么要为 Android 做这样的烂摊子?那么我们是不是在大学里学习编程语言的方式错了(后来才知道,哦,Big Google 只是在 Android 上使用 Java)?

提前感谢您对此提出宝贵建议。

【问题讨论】:

  • 这对我来说像是在咆哮。
  • 这个问题有太多误导的陈述,我不知道从哪里开始。
  • 还需要注意的是,Android 可以在 ARM、MIPS 和 x86 上运行。 Java/Dalvik 意味着一个应用程序可以在所有这些处理器上运行,而不必为每个处理器编译一次。此外,您可以使用 NDK 为 Android 编写 C/C++(不确定 D)。 (其中一些可能是新问题,因为您发布了问题)

标签: java android c compiler-construction d


【解决方案1】:

为什么只有 Android 不是用 D 或 C/C++ 语言编写的?

因为它们都不是完全托管的语言。 D 垃圾收集,但您也可以进行手动内存管理......但会带来所有风险。

另外,因为从 Java 基础开始(以 Apache Harmony 等形式)意味着:

  • Java 开发人员将能够过渡到 Android,并且
  • Android 开发团队要实现的东西会更少。

但是,正如@Marchy 指出的那样,最初的决定并不是由 Google 做出的:

"...Google 没有构建 Android。[Android Inc] 是他们收购的一家初创公司,作为一家初创公司,您可以使用现有的任何东西并进行优化以快速获得动力,并且资源非常有限。.. .

虽然很明显谷歌确实有帮助,因为(根据Wikipedia)谷歌在收购之前帮助资助了 Android 公司。

为什么 Android 不运行 JVM,但他们构建了一个 Java 概念来替代 JVM 处理。

归根结底,因为 Sun / Oracle 对 Java 语言和平台施加的限制将导致无法像 Google 对 Android 所做的那样进行创新。具体来说,Sun / Oracle 不会授权供应商在移动平台上实施 Java SE。

那么我们在大学里学习编程语言的方式是否错误。

也许做到了!

但是当我在大学学习编程时,我完全知道我从未使用过我所学的某些语言。例如,从那以后我再也没有使用过 Algol-60、Simula-67、SNOBOL 或 CDC 汇编语言。但这并没有使教授它们的原因或我在学习它们中获得的宝贵经验无效。

【讨论】:

  • 没错,当您说托管语言时。最好的是 www.purebasic.com 可惜它们不是母语。 :)
  • 是的......但真正的问题是,编程语言决策(一般而言)是基于更重要的标准而不是各自语言的纯技术优点。
  • 大家不要忘记 Google 没有构建 Android。这是他们购买的一家初创公司,作为一家初创公司,您可以使用现有的任何东西并进行优化以快速获得动力,并且资源非常有限。从架构的角度来看,Android 有许多重大的核心错误,例如一个业余的演示框架,它通过缺乏 MVC(以及它的单一运行活动假设)严重限制了 UI 复杂性。没有经验丰富的演示框架架构师会允许这样的限制 - 结果是应用程序无法实现与 iOS 等平台相媲美的用户体验。
  • @Marchy - 另一方面,这些错误可能对 Android 的成功没有任何影响。底层软件的技术优点/缺陷很少会影响市场的成功……前提是最终用户的可用性问题得到了很好的处理。
  • 他们选择 Java 的一大原因是工具。 Java 拥有大量已被证明可以工作的工具,其中 Eclipse 对 Android 团队来说是最重要的。还有一点是,Android 团队所做的是构建了一个字节码转换器(JVM 字节码到 Dalvik 字节码),所以 Android 团队也使用传统的 Java 编译器,只获取它们的输出并进行翻译。
【解决方案2】:

我猜这是因为很多程序员都熟悉 Java 和 Java,尽管它作为一门语言的所有缺点,但它具有出色的库和工具支持。此外,VM 间接层可防止应用程序与硬件的耦合过于紧密。

【讨论】:

    【解决方案3】:

    有很多 Java 程序员,需要构建一个完整的生态系统。远不止 D :p 在虚拟机上运行大部分程序的操作系统在安全性方面具有很好的优势 (http://en.wikipedia.org/wiki/Language-based_system)。但是从用户的角度来看,为一个非常重要的应用程序做一些例外可以提高性能。特定 JVM 的选择,似乎很明确,就是要适应典型的嵌入式资源。我认为在这方面谷歌的选择是相当务实的。

    对于(咆哮?)大学的语言教学,我不认为这是关于学习最新的流行语言。它是关于学习学习计算机相关技术的,例如编程语言。自 1960 年、1970 年以来,这些概念并没有太大变化,尽管没关系,但它们的实现方式有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2022-06-11
      • 2017-09-17
      • 1970-01-01
      相关资源
      最近更新 更多