2010-11-19 6 views
2

Ich weiß, dass Embedded C für Mikrocontroller zusammen mit anderen Sprachen verwendet wird. Aber was, wenn die Steuerung von einem PC kam, hatte ich zwei mögliche Kandidaten (Java und C++)C++ oder Java für Robotik

Java ist einfach und einfach auch Developer freundlich, wenn es Threading oder GUI kommt, aber natürlich ist C++ so viel bessere Leistung (Ich weiß, dass Computer schneller werden, und die Leistung hängt von guten Algorithmen ab), aber die Kompilierung von Makefiles, Shared-Libraries und Cross-Compiling verschwendet viel Zeit, sich um technische Details zu kümmern, wenn ich an anderen wichtigen Problemen arbeiten sollte.

Aber noch habe ich so etwas wie Konst Referenzen konfrontiert, die Java nicht und Sie unterstützen zwingen clone() oder Kopieren zu verwenden und wenn das auf Arrays kam es ein Riesendurcheinander war,

HINWEIS: Ich werde Reverse Kinematik und vielleicht neuronales Netzwerk für die Mustererkennung zu verwenden. Das erfordert Tonnen von Berechnungen. Aber wie gesagt, ich interessiere mich auch für den gesamten Lebenszyklus des Projekts (Geschwindigkeit der Entwicklung, Leistung, Benutzerfreundlichkeit und schnelle Bereitstellung)

Ich schwinge zwischen den Sprachen und ich plane für einen langfristigen Lernprozess, so dass ich Ich möchte das nicht in der falschen Sprache verschwenden oder sagen (ohne zu fragen) also bitte helfen und ich hoffe, dass diese Frage nicht als subjektiv, sondern als eine Referenz betrachtet wird.

cheers

+7

Echte Roboter sind im Maschinencode programmiert. –

+3

Es kommt darauf an, ob Ihre Roboter Häuser putzen oder die Invasion aller großen Städte anführen werden. Ich weiß, wenn ich Code schreiben würde, um meine Staffel von Roboter-Ninjas anzutreiben, würde ich C++ benutzen. –

+0

@ Moo-Juice ja du hast einen guten Standpunkt. –

Antwort

2

Persönlich würde ich in Richtung C++ neigen. Java verfügt über einen Garbage Collector, der Ihre App in den Ruhezustand versetzen kann. In C++ muss ich meinen eigenen Müll sammeln, was mir einen Anreiz gibt, weniger davon zu erzeugen. Auch C++ erlaubt Makros, von denen ich weiß, dass sie von Java-Nistas als schlechtes Ding deklariert wurden, aber ich benutze es als eine Möglichkeit, den Code zu kürzen und ihn mehr wie ein DSL zu machen. Den Code eher wie eine DSL zu gestalten, ist der Hauptweg, den Entwicklungsaufwand zu verkürzen und die Einführung von Fehlern zu minimieren.

Ich würde nicht annehmen, dass Java inhärent langsamer ist als entweder C++ oder C. IME Langsamkeit (und Größe) kommt nicht von wie gut sie Zyklen, sondern von den Design-Praktiken, die Sie ermutigen zu folgen. Die netten Dinge, die sie dir geben, wie zum Beispiel Sammelklassen, sind normalerweise gut gebaut, aber das hindert dich nicht daran, sie zu benutzen, weil sie so praktisch sind.

IME, das Geheimnis der guten Leistung ist es, so wenig Datenstruktur wie möglich zu haben (d. H. Minimaler Müll), und so normal wie möglich zu halten. Auf diese Weise minimieren Sie die Notwendigkeit, es über Nachrichtenwellen konsistent zu halten. In dem Ausmaß, in dem die Daten nicht normalisiert werden müssen, ist es besser, vorübergehende Inkonsistenzen tolerieren zu können, die Sie in regelmäßigen Abständen beheben, als zu versuchen, sie durch Meldungen immer konsistent zu halten (zu denen Sie OO-Sprachen ermutigen). Wenn sie nicht sorgfältig überwacht werden, können sie sehr leicht zu Performance-Fehlern führen.

Here's an example of some of these points.

3

Warum Sie C eliminiert?

Warum glauben Sie, dass Java schlechtere Leistungen als C++ hat? Einige Dinge sind so gut wie C++, und es ist einfach, Java-Programm auf verschiedenen Plattformen ohne viel Aufwand zu verwenden.

Wählen Sie einfach die Sprache, mit der Sie sich am wohlsten fühlen, und Sie haben die meiste Erfahrung mit und gehen damit.

3

Ich würde mir zu Beginn nicht allzu viele Gedanken über die Leistung machen - schreibe den Code in die Sprache, in der du dich wohl fühlst, und refactoriere sie dann wie nötig.

Sie können immer so etwas wie JNI verwenden, um c zu rufen/C++, wenn nötig, auch wenn die Performance-Lücke zwischen Java und C/C++ ist bei weitem nicht, was es war ...

+0

Was Sie sagen, ich würde hinzufügen, dass die Portierung einer Codebasis zu einer anderen Sprache wird _extremely_ zeitaufwendig, nachdem der Code eine bestimmte Größe erreicht.Die Auswahl der besten Sprache für die Spezifikationen ist sehr wichtig, aber ich sehe nichts in den sehr wenigen Spezifikationen, die darauf hindeuten, dass die Sprachwahl einen Unterschied machen würde. –

2

auf Ihrem Umstand Je, Java ist nicht schneller zu implementieren als C++. Das läuft hauptsächlich darauf hinaus: Haben Sie in Ihrem Testbed die gleiche Umgebung, in der Sie produzieren? Mit all den modernen Ergänzungen zu C++ gibt es wenig Grund zu der Annahme, dass Java für den Entwickler einfacher ist, wenn Sie noch nicht neu in der C++ - Sprache sind.

Abgesehen davon haben Sie Leistungsbedenken. Wenn es sich nicht um ein Echtzeitsystem handelt, gibt es keinen Grund, eine Sprache noch zu eliminieren. Wenn Sie Ihr Java intelligent codieren (z. B. versuchen Sie möglichst, Objekte zu kopieren und in den meistbenutzten Abschnitten Unrat zu erzeugen), werden die Leistungsunterschiede für einen rechenintensiven Prozess nicht spürbar.

Alles in allem, glaube ich, konzentrieren Sie sich zu sehr auf Lehrbuchdefinitionen dieser beiden Sprachen und nicht auf die tatsächliche Verwendung. Sie haben wirklich keinen zwingenden Grund gegeben, sich für eines zu entscheiden.

+0

das ist leuchtend danke mann –

0

Java ist ein bisschen portabler, aber so weit ich weiß, ist der einzige wirkliche Faktor für so etwas die persönliche Präferenz.

0

Es würde wirklich helfen, wenn Sie Ihr Problem im Detail beschrieben haben.

Sie sind bereit, IK zu verwenden, die eine Roboterarmmanipulation vorschlagen könnte. Was es nicht sagt, sind Ihre Echtzeitanforderungen. Wenn es in einer Produktionslinie der Klasse A läuft, wird es schwer sein, mit der Sprache, in der Müll gesammelt wird, wegzukommen.

Java ist großartig. Es gibt einige sehr reife NN-Bibliotheken (Neuroph, Encog), die Ihnen eine Menge Programmierzeit ersparen könnten. Ich kenne keine IK-Bibliothek, aber ich bin mir sicher, dass es auch mindestens gute Matrix-Manipulationsbibliotheken gibt, die helfen können.

Die Garbage Collection in Java wird immer besser. Die neueste (G1) ist viel besser als alles andere, aber sogar mit ihr das beste, das Sie erhalten können, ist soft Echtzeit. Sie können also keinen pausenfreien Lauf erwarten.

Auf der anderen Seite möchten Sie vielleicht auch einige dedizierte Umgebungen betrachten - Matlab Toolboxes für Robotik und künstliche Intelligenz. Ich denke, das würde die schnellsten Prototypen liefern.

Wenn es auf Produktion geht als Sie sind ziemlich fest mit C oder C++.

+0

Wenn Sie eine Pause frei Lauf benötigen, erstellen Sie weniger Objekte. Sie können ein Programm schreiben, das für Tag (e) ohne GC läuft, wenn Sie genug (sehr selten) interessieren –