Frage

In diesem Zeitalter der vielen Sprachen, scheint es für fast jede Aufgabe eine großartige Sprache zu sein, und ich finde mich gegen ein Mantra professionell kämpfen von „ nichts anderes als C ist schnell “, wobei schnell wirklich beabsichtigt „schnell genug“ zu bedeuten. Ich arbeite mit sehr rational aufgeschlossenen Menschen, die Zahlen vergleichen mögen, und alles, was ich sind Gedanken und Meinungen. Können Sie mir helfen, meine Art und Weise Vergangenheit subjektive Meinungen und in der „realen Welt“?

finden

Würden Sie mir helfen Forschung zu finden, was, wenn irgendwelche anderen Sprachen verwendet für eingebettet werden könnten und (Linux) Systemprogrammierung? Ich könnte sehr wohl eine falsche Hypothese drängen und würde Forschung sehr schätzen zu zeigen, mir dies. Link oder schließen Könnten Sie bitte gute Zahlen, um zu helfen, die „das ist nur seine / ihre Meinung“ Kommentare auf ein Minimum.


Das sind also meine besonderen Anforderungen

  • Speicher ist keine ernsthafte Einschränkung
  • Portabilität ist nicht ein ernstes Problem
  • das ist keine Echtzeit-System
War es hilfreich?

Lösung

„Nichts als C ist schnell [genug]“ ist eine frühe Optimierung und falsch aus all den Gründen, die früh Optimierungen sind falsch. Wenn Ihr System genügend Komplexität hat, dass etwas anderes als C wünschenswert ist, dann wird es Teile des Systems sein, das „schnell genug“ und Teile mit leichten Einschränkungen sein muß. Wenn Ihr Code zu schreiben, zum Beispiel in Python wird das Projekt abgeschlossen schneller, mit weniger Fehlern bekommen, dann können Sie mit einigem C oder Assembler-Code folgen, um die zeitkritischen Teile zu beschleunigen.

Auch wenn es sich herausstellt, dass der gesamte Code muss in C oder Assembler geschrieben werden, um die Leistungsanforderungen, Prototyping in einer Sprache wie Python erfüllen können echte Vorteile. Sie können Ihre Arbeit Python Prototyp nehmen und nach und nach Teilen mit C-Code ersetzen, bis Sie die erforderliche Leistung erreichen.

So verwenden Sie die Tools, die Sie die Entwicklungsarbeit am richtigsten zu erledigen lassen und am schnellsten, dann realen Daten verwenden, um festzustellen, wo Sie optimieren müssen. Es könnte sein, dass C das am besten geeignete Werkzeug zu beginnen manchmal ist, aber sicherlich nicht immer, auch in Embedded-Systemen.

Andere Tipps

Nach meiner Erfahrung mit C für die Programmierung von Embedded-Systemen und ist nicht unbedingt ein Leistungsproblem - es ist oft ein Portabilität Thema. C neigt dazu, jede Plattform auf nur um die meisten tragbare, gut unterstützte Sprache zu sein, vor allem auf Embedded-Systemen Plattformen.

Wenn Sie etwas anderes in einem eingebetteten System nutzen wollen, ist es oft eine Frage, herauszufinden, welche Optionen zur Verfügung stehen, dann bestimmt wird, ob die Leistung, Speicherverbrauch, Bibliotheksunterstützung, usw., sind „gut genug“ für Ihre Situation.

Mit C für Embedded Systeme hat einige sehr gute Gründe hat, von denen „Performance“ nur eine der kleineren ist. Eingebettet ist sehr nahe an der Hardware, Sie Notwendigkeit manuelle Speicher Adressieren mit Hardware zu kommunizieren. Alle APIs und SDKs sind für C meist zur Verfügung.

Es gibt nur wenige Plattformen, die eine VM für Java oder Mono ausführen können, die teilweise durch die Auswirkungen auf der Leistung ist, sondern auch aufgrund von teuer Implementierungskosten.

Neben Leistung gibt es eine andere Überlegung: Sie werden höchstwahrscheinlich mit Low-Level-APIs zu tun, die in C oder C ++ entwickelt wurden verwendet werden .

Wenn Sie nicht etwas SDK verwenden können, müssen Sie nur sich selbst in Schwierigkeiten geraten, statt Zeit zu sparen mit der Entwicklung einer höheren Sprache verwendet wird. Zumindest werden Sie eine Reihe von Funktionsdeklarationen und konstanten Definitionen am Ende redoing.

Für C:

  • C ist oft die einzige Sprache, die von Compilern für einen Prozessor unterstützt wird.
  • Die meisten der Bibliotheken und Beispielcode ist wahrscheinlich auch in C.
  • Die meisten Embedded-Entwickler verfügen über langjährige Erfahrung C aber sehr wenig Erfahrung in irgendetwas anderes.
  • Ermöglicht direkte Hardware-Schnittstelle und manuelle Speicherverwaltung.
  • Einfache Integration in Assemblersprache.

C geht um zu sein für viele Jahre zu kommen. In Embedded-Entwicklung sein ein Monopol, das jeden Versuch einer Veränderung erstickt. Eine Sprache, die ein VM wie Java oder Lua brauchen wird nie Mainstream in der Embedded-Umgebung zu gehen. Eine kompilierte Sprache könnte eine Chance, wenn es überzeugende neue Funktionen über C liefern.

Es gibt mehr Benchmarks auf dem Netz zwischen verschiedenen Sprachen. Die meisten von ihnen werden Sie eine C oder C ++ Implementierung an der Spitze zu finden, da sie geben Ihnen mehr Kontrolle, um wirklich Dinge zu optimieren.

. Beispiel: The Computer Language Benchmarks Spiel

Es ist schwer, gegen C (oder eine andere Prozedur Sprachen wie Pascal, Modula-2, Ada) und die Montage argumentieren für Embedded. Es gibt eine große Erfolgsgeschichte mit diesen Sprachen. Im Allgemeinen wollen Sie das Risiko des Unbekannten entfernen. Der Versuch, etwas anderes als C oder Assembler zu verwenden, meiner Meinung nach, ist ein unbekannte. Having said that, es ist nichts falsch mit einem gemischten Modell, in dem Sie eine der Schema verwenden, die C gehen, oder Python oder Lua oder JavaScript als Skriptsprache.

Was Sie wollen, ist die Fähigkeit, schnell und leicht zu C gehen, wenn Sie zu haben.

Wenn Sie das Team überzeugen mit etwas zu gehen, die nicht bewiesen zu ihnen ist, ist das Projekt Ihre Cookie. Wenn es bröckelt, wird es wahrscheinlich als Fehler angesehen werden.

diesem Artikel (von Michael Barr) spricht über die Verwendung von C, C ++, Assembler und anderen Sprachen in Embedded-Systemen und enthält eine Grafik, die die relative Verwendung von jedem zeigt.

Und hier ist ein weiterer Artikel, passend berechtigt, Schlechte Gründe für die Ablehnung C ++ .

Es gibt Situationen, in denen Sie Echtzeit-Leistung benötigen, vor allem in Embedded-Systemen. Sie haben auch schwere Speicherbeschränkungen. Eine Sprache wie C gibt Ihnen eine größere Kontrolle über die Ausführungszeit und Ausführungsraum.

Also, je nachdem, was Sie tun, C kann sehr gut sein, „besser“ oder besser geeignet.

In den folgenden Artikeln Check out

Ada ist ein High-Level-Programmiersprache, die für Embedded-Systeme und unternehmenskritische Systeme entwickelt wurde.

Es ist eine schnelle sichere Sprache, die Daten in überall gebaut hat zu überprüfen. Es ist, was die Auto-Piloten in Flugzeugen sind so programmiert, in.

diesem Link haben ein Vergleich zwischen Ada und C.

Sie können an der D Programmiersprache zu suchen. Es könnte einige Performance-Tuning verwenden, da gibt es einige Bereiche Python kann es zu übertreffen. Ich kann nicht wirklich zeigen Ihnen Vergleiche Benchmarking, da habe eine Liste nicht halten, aber wie auf dem von Peter Olsson, Benchmarks & Sprache Implementations hat D Digital Mars.

Sie werden wahrscheinlich auch in diesen schönen Fragen aussehen wollen:

C ist allgegenwärtig, für fast jede Architektur, in der Regel von Tag einen der Verfügbarkeit einer Prozessor. C ++ ist eine enge Sekunde. Wenn Ihr System C ++ unterstützen kann und Sie haben das notwendige Know-how, verwenden Sie es in den Vorzug. C - es ist alles, was C und mehr, so gibt es nur wenige Gründe für die Verwendung nicht

C ++ ist eine größere Sprache, und es gibt Konstrukte und Techniken unterstützt, die Ressourcen verbrauchen oder zu nicht akzeptablen Weise in einem eingebetteten System verhalten, aber das ist kein Grund, nicht die Sprache zu verwenden, sondern wie man es benutzt angemessen.

Java und C # (auf Micro.Net oder WinCE) kann tragfähige Alternativen für Nicht-Echtzeit sein.

Ich bin nicht wirklich ein System / Embedded-Programmierer, aber es scheint mir, dass Embedded-Programme in der Regel deterministische Leistung benötigen - die sofort viele Müll gesammelt Sprachen ausgeschlossen ist, weil sie nicht deterministisch im Allgemeinen . Allerdings gab es Arbeit auf deterministische Garbage Collection (zB Metronome für Java: http://www.ibm.com/developerworks/java/library/j-rtj4/index.html )

Das Problem ist einer von Einschränkungen - tun die Sprachen / Runtimes die deterministische, Speichernutzung, etc Anforderungen erfüllen

.

C ist wirklich die beste Wahl.

Es gibt einen Unterschied für tragbare C-Code zu schreiben und zu tief in die Ghee sausen Merkmale eines bestimmten Compiler oder Eckfällen der Sprache bekommen (von denen alle vermieden werden sollte). Aber Portabilität über Compiler und Compiler-Versionen. Die Zahl der Mitarbeiter, die für die Entwicklung der Lage sein, oder den Code beibehalten wird. Die Compiler werden leichter mit ihm haben und produzieren besser, saubere und zuverlässigen Code.

C ist nicht überall, mit allen neuen Sprachen ausgelegt sind, die Mängel in allen Sprachen vor zu beheben. C, mit allen Fehlern diese neuen Sprachen zu beheben versuchen, steht noch stark.

Hier sind ein paar Artikel, die C # C ++ vergleichen:

http://systematicgaming.wordpress.com/ 2009/01/03 / Performance-c-vs-c /

http: //journal.stuffwithstuff. com / 2009/01/03 / Entlarvung-c-vs-c-Performance /

Nicht genau das, was Sie gefragt, wie es keinen Fokus auf Embedded C-Programmierung hat. Aber es ist dennoch interessant. Die erste zeigt die Leistungsfähigkeit von C ++ und die Vorteile der „unsicheren“ Code für rechenintensive Aufgaben verwenden. Die zweite entlarvt etwas das erste und zeigt, dass, wenn Sie den C # -Code ein wenig anders dann die Schreibleistung ist fast das gleiche.

Also ich, dass C oder C ++ sagen kann der klare Sieger in Bezug auf die Leistung in vielen Fällen sein. Aber oft die Marge ist schlank. Ob C zu verwenden oder nicht, ist ein anderes Thema ganz. Meiner Meinung nach sollte wirklich auf die Aufgabe in der Hand ab. Aber in eingebetteten Systemen oft Sie nicht viel von einer Wahl haben.

Ein paar Leute haben Lua erwähnt. Leute, die ich kenne, die mit Embedded-Systemen gearbeitet haben, haben gesagt, Lua nützlich, aber es ist nicht wirklich seine eigene Sprache an sich, sondern eher eine Bibliothek, die in C eingebettet werden kann, ist es in Embedded-Systemen zu verwenden abgezielt, und Sie werden im Allgemeinen wollen Lua-Code von C zu nennen, aber reine C sorgt für einfachere (wenn auch nicht unbedingt einfacher) Wartung, da jeder weiß es.

Je nach Embedded-Plattform, wenn Speicherbeschränkungen ein Problem sind, werden Sie höchstwahrscheinlich eine nicht Müll gesammelt Programmiersprache verwenden müssen.

C ist in dieser Hinsicht wahrscheinlich die bekannteste durch das Team und die am häufigsten mit den verfügbaren Bibliotheken und Tools unterstützt.

Die Wahrheit ist - nicht immer.

Es scheint, .NET-Laufzeit (aber auch jede andere Laufzeit kann als Beispiel genommen werden) erlegt mehrere MBs von Laufzeit-Overhead. Wenn das alles ist, dass Sie (im RAM) haben, dann sind Sie kein Glück. JavaME scheint kompakter zu sein, aber es immer noch hängt alles von Ressourcen, die Sie zur Verfügung haben.

C-Compiler sind viel schneller auch auf Desktop-Systemen, weil, wie wenige langage verfügt dort C verglichen ++, so dass ich mich vorstellen, der Unterschied ist nicht trivial auf Embedded-Systemen. Dies führt zu schneller Iterationszeiten, obwohl OTOH Sie haben nicht die Annehmlichkeiten von C ++ (wie Sammlungen), die Sie unten auf lange Sicht verlangsamen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top