2

我知道嵌入式 C 与其他语言一起用于微控制器。但是如果控件来自 PC 怎么办,我有两个可能的候选者(java 和 c++)

在线程或 GUI 方面,Java 简单易用,对开发人员也很友好,但当然 C++ 性能要好得多(我知道计算机越来越快,性能取决于好的算法),但编译 makefile、共享库和交叉编译当我应该处理其他重要问题时,浪费了大量时间关心技术细节。

但是我仍然遇到了类似常量引用之类的东西,Java 不支持并强迫你使用clone()或复制,当涉及到数组时,它是一团糟,

注意:我将使用反向运动学和神经网络进行模式识别。这需要大量的计算。但正如我所说,我也关心项目的整个生命周期(开发速度、性能、用户友好性和快速部署)

我在语言之间摇摆不定,我正在计划长期的学习过程,所以我不想用错误的语言浪费它,或者说(不问)所以请帮忙,我希望这个问题不会被认为是主观的而是一个参考。

干杯

4

6 回答 6

4

为什么要淘汰C?

为什么你认为 java 的性能比 c++ 差?有些东西和c++一样好,在不同平台上使用java程序很容易,没有太多麻烦。

只需选择您觉得舒服并且您最有经验的语言,然后继续使用它。

于 2010-11-19T13:48:21.617 回答
3

我个人倾向于 C++。Java 有一个垃圾收集器,它可以让你的应用随机进入睡眠状态。在 C++ 中,我必须收集自己的垃圾,这给了我产生更少垃圾的动力。C++ 也允许宏,我知道 Java-nistas 已将其声明为坏事,但我将其用作缩短代码并使其更像 DSL 的一种方式。使代码更像 DSL 是我缩短开发工作量并尽量减少引入错误的主要方式。

我不会假设 Java 天生就比 C++ 或 C 慢。IME 的缓慢(和大)不是来自它们旋转周期的好坏,而是来自它们鼓励您遵循的设计实践。他们给你的好东西,比如集合类,通常是精心构建的,但这并不能阻止你过度使用它们,因为它们非常方便。

IME,良好性能的秘诀是尽可能少的数据结构(即最少的垃圾),并尽可能保持其规范化。这样,您就可以最大限度地减少通过消息波保持一致的需要。在必须对数据进行非规范化的情况下,最好能够容忍暂时的不一致性,定期修补,而不是尝试通过通知保持它始终一致(OO 语言鼓励你这样做)。除非仔细监控,否则很容易引入性能错误。

以下是其中一些要点的示例。

于 2010-11-19T15:43:00.343 回答
3

一开始我不会太担心性能——用你觉得舒服的任何语言编写代码,然后根据需要进行重构。

如果需要,您总是可以使用 JNI 之类的东西来调用 c/c++,尽管 Java 和 c/c++ 之间的性能差距远不及它原来的水平......

于 2010-11-19T13:48:30.173 回答
2

根据您的情况,Java 的部署速度并不比 C++ 快。这主要归结为:您是否保证您的测试平台中的环境与您在生产中的环境相同?随着 C++ 的所有现代添加,没有理由表明 Java 对开发人员来说更容易,除非您还是 C++ 语言的新手。

除此之外,您还有性能问题。除非它是一个实时系统,否则目前还没有理由消除任何语言。如果您智能地编写 Java 代码(例如,尽最大努力避免在最常用的部分复制对象和创建垃圾),那么对于计算密集型进程而言,性能差异不会很明显。

总而言之,我认为您过于关注这两种语言的教科书定义,而不是实际使用。你还没有真正给出任何压倒一切的理由来选择一个而不是另一个。

于 2010-11-19T13:55:28.913 回答
0

Java 的可移植性更高一些,但据我所知,此类事情的唯一真正因素是个人喜好。

于 2010-11-19T13:57:24.590 回答
0

如果您更详细地描述您的问题,那将真的很有帮助。

您愿意使用 IK,这可能意味着一些机械臂操作。它没有说的是您的实时要求。如果它在 A 级生产线上进行,那么垃圾收集语言将很难逃脱。

Java很棒。有一些非常成熟的 NN 库(Neuroph、Encog)可以为您节省大量编码时间。我不知道任何 IK 库,但我确信至少还有很好的矩阵操作库可以提供帮助。

Java 中的垃圾收集越来越好。最新的(G1)比其他任何东西都要好得多,但即使有了它,你能得到的最好的还是实时的。所以你不能指望无暂停运行。

另一方面,您可能还想查看一些专用环境 - 用于机器人和人工智能的 Matlab 工具箱。我认为这将产生最快的原型。

如果它正在进行生产,那么您几乎会被 C 或 C++ 所困。

于 2010-11-19T13:58:49.943 回答