Ich denke darüber nach, ein neues Softwareprodukt zu schreiben. Die Leistung ist von entscheidender Bedeutung, daher bin ich vorsichtig, wenn ich eine interpretierte oder eine Sprache oder eine Emulationsebene (Java lesen) verwende.
Was mich dazu bringt, über C (oder C ++) nachzudenken, obwohl beide ziemlich lang sind. Ich habe auch lange nicht mehr benutzt. Ich dachte, in den letzten 20 Jahren hat wahrscheinlich jemand etwas erstellt, das ziemlich populär ist, das sich gut einprogrammieren und kompilieren lässt.
Welche moderneren Alternativen zu C gibt es, um hochperformanten kompilierten Code zu schreiben?
Wenn C ++ ein anderes Biest ist als vor 15 Jahren, würde ich es in Betracht ziehen, ich glaube, ich hatte die Annahme, dass es einige inhärente Probleme hatte.
Parallelisierung wäre wichtig, aber wahrscheinlich nicht maschinenübergreifend.
quelle
Antworten:
In der Entwicklung befindet sich eine Sprache namens The Rust Programming Language, die ähnliche Ziele wie C ++ verfolgt, insbesondere kostengünstige Abstraktionen und eine genaue Kontrolle über die Speicherverwaltung. Das heißt, es ist vielleicht der bemerkenswerteste aufstrebende Kandidat, obwohl er noch sehr jung ist.
Abgesehen von Rust gibt es wirklich keine anderen beliebten Alternativen, die sich zu nativem Code kompilieren lassen. Es gibt natürlich auch Delphi und D, aber sie sind nicht so schnell, populär oder gebraucht. Googles Sprache Go könnte ein Kandidat sein, aber sie ist noch sehr jung und zielt auf eine etwas andere Domain ab.
Beachten Sie jedoch, dass C # (Microsoft-Plattform vorausgesetzt) und Java möglicherweise nicht so langsam sind, obwohl sie auf einer virtuellen Maschine ausgeführt werden. Die Just-in-Time-Kompilierung von Code kann einige Optimierungen bewirken, die herkömmliche Frühkompilierer aufgrund fehlender Informationen zu Programmstatus und -umgebung nicht anwenden können.
Ehrlich gesagt würde ich C persönlich nicht als Kandidaten betrachten, wenn C ++ eine Option ist, hauptsächlich aufgrund der Tatsache, dass modernes C ++ sicherer ist, auf einer höheren Abstraktionsebene arbeitet, aussagekräftiger ist und praktisch keinen Leistungsverlust gegenüber C aufweist (in einigen Fällen) C ++ ist deutlich schneller. Einfach ausgedrückt bietet C ++ alles, was C bietet, und mehr. Die meisten C-Funktionen gelten als "veraltet", und die C ++ - Standardbibliothek bietet bessere, sicherere, schnellere und intuitivere Alternativen.
quelle
Es gibt auch Ada , das sich zu nativem Code kompilieren lässt und innerhalb der Grenzen seiner Standardbibliothek über verschiedene Plattformen portierbar ist. Die Sprache ist am Leben und gut, mit dem aktuellsten Sprachstandard-Update (bekannt als Ada 2012).
Kurze Zusammenfassung für diejenigen, die mit Ada nicht vertraut sind:
quelle
Vor 15 Jahren gab es keinen C ++ - Standard. Der zweite wurde letztes Jahr veröffentlicht. C ++ - Best Practices haben sich in den fünf Jahren nach der Veröffentlichung des 98-Standards stark verändert, und sie ändern sich mit der Veröffentlichung des 11-Standards erneut.
quelle
Warum besteht man immer darauf, nach neuen Sprachen zu suchen?
C ++:
Der einzige Nachteil von C ++ ist, dass Sie ein bisschen lernen müssen. Das ist es.
Vergleichen Sie dies mit anderen Sprachen, bei denen es sich um eine oder mehrere der folgenden Sprachen handelt:
IMHO, je weniger Sprachen wir verwenden und unterstützen, desto besser wird die Situation sein.
Dies führt zu automatischen Verbesserungen der Frameworks für Sprache, Support, Dokumentation, Arbeit der Standardisierungskomitees, besseren Büchern, mehr Wissen, einfacher zu unterstützender Software, besseren Mustern, längeren Sprachunterstützungszyklen und besser in der Sprache geschriebenem Code.
Ich weiß, dass die Leute dies ablehnen werden, aber denken Sie wirklich darüber nach.
quelle
const
Korrektheitsprobleme und ähnliches verursacht werden. Jeder, der Effective C ++ gelesen hat (wie Coder behauptet) und behauptet, dass C ++ einfach ist, hat eine mentale Trennung.C / C ++ ist ziemlich lang im Gange ... das ist eine gute Sache . Dies impliziert, dass sie gut genug entworfen wurden (ähm), dass sie immer noch sehr brauchbar sind, dass viele Leute sie für alltägliche Aufgaben verwenden und dass Sie eine große Anzahl von Entwicklern finden, die Experten in ihnen sind. Reife ist etwas, das man schätzen sollte.
Wenn Sie Ihre ganze Zeit auf der Suche nach etwas Neuem verbringen, nur weil es neu ist und denken, dass es irgendwie besser sein muss, werden Sie sehr enttäuscht sein. Dies gilt für Software-Sprachen, GUI-Systeme (zur Kenntnis nehmen, Microsoft und Gnome) und Liebhaber (zur Kenntnis nehmen, junge Damen :))
Nun, wenn Ihre Erfahrung mit C ++ 20 Jahre alt ist, und wenn C ++ - Code im Allgemeinen wie C codiert wurde, dann ist es vielleicht an der Zeit, die Sprache neu zu bewerten, werden alle Funktionen verwendet, die es an diesem Tag gab und die nie wirklich verwendet wurden Heutzutage noch viel mehr, und einige Standardisierungsbemühungen haben die Sprache ein wenig erweitert, damit sie sich deutlich von den alten Entwicklungen im C-Stil unterscheidet. Nicht, dass C auch schlecht ist - es ist eine perfekte Sprache für viele Arten von Codierungsaufgaben!
quelle
Der aktuelle Standard von C ++ ist C ++ 11 , der 2011 veröffentlicht wurde. Es handelt sich also nicht um einen 20 Jahre alten Standard. Und dazwischen gab es zahlreiche Standards. Jeder von ihnen führt zahlreiche Leistungsverbesserungen ein.
Auch die Compiler haben sich ständig verbessert. Sie können viel besser optimieren als früher.
Auch die ausführbaren Formate haben sich verbessert. Vor 20 Jahren hatten Sie ein Out , jetzt haben Sie ELF .
Insgesamt kann der Vorschlag, dass sich C ++ in 20 Jahren nicht geändert hat, nicht weiter von der Wahrheit abweichen.
Denken Sie auch daran, dass C und C ++ sehr unterschiedliche Sprachen sind.
quelle
Ich bin kein großer Experte für diese Sprache, aber ich denke, OCaml könnte eine interessante Option sein.
OCaml ist eine kompilierte, funktionale / objektorientierte Sprache. Für einen Leistungsvergleich mit C ++ siehe C ++ vs OCaml: Ray-Tracer-Vergleich . Natürlich ist dies ein sehr spezifisches Beispiel und man sollte ausführlichere Tests durchführen, um ein besseres Gefühl für die Leistung von OCaml zu bekommen.
quelle
Hängt davon ab, was Ihr Produkt tun wird. Wenn die Leistung wirklich kritisch ist, ist FORTRAN nach wie vor die bevorzugte Sprache . Ich würde Java auch nicht ausschließen - es wird in vielen umfangreichen Finanzhandelsanwendungen verwendet. Erlang ist einen Blick wert, wenn Ihre Problemdomäne eine hohe Nebenläufigkeit erfordert. Objective-C ist nett, obwohl ich nicht weiß, wie gut es außerhalb des Apple-Ökosystems unterstützt wird (jenseits von Compilern und Basislaufzeiten). Ich habe auch gute Dinge über Haskells Leistung gehört, bin mir aber nicht sicher, ob dies absolute Leistung oder nur Leistung im Vergleich zu anderen funktionalen Sprachen ist.
quelle
Wenn Sie sagen, dass Ihr Projekt leistungsabhängig ist, meinen Sie damit jede Codezeile? Oder gibt es, wie üblich, einen kleineren Prozentsatz, der für die Leistung entscheidend ist, während der Rest Ihr gewöhnlicher Geschäftsbetrieb ist?
Was ist das größere Risiko für Ihr Projekt, nachdem Sie darauf geantwortet haben: dass das Endergebnis zu langsam ist oder dass Sie es nie zu Ende bringen?
Angenommen, Sie beantworten die zweite Frage für beide, sollten Sie in einer höheren Sprache entwickeln, die native Interop unterstützt (Python, Ruby, die .Net-Familie haben dies alle). Beenden Sie zuerst das Projekt. Dann profilieren, optimieren, spülen, wiederholen. Erst danach sollten Sie erwägen, das Auswahlsegment Ihrer Anwendung in systemeigenen Code umzuwandeln und diesen systemeigenen Code in Ihr fertiges Produkt zu integrieren.
quelle
Vala ähnelt Java und C #, kompiliert in nativen Code (oder C-Quellcode, wenn Sie es vorziehen) und ist sehr schnell . Für die objektorientierten Elemente ist GLib erforderlich, und es wurde von Linux-Hackern für Linux-Hacker geschrieben. Wenn Ihre Domain also Windows ist, ist sie möglicherweise nicht sehr gut.
quelle
Objective-C ist eine moderne, kompilierte Alternative zu C und C ++. Es verfügt sowohl über ein Garbage-Collected- als auch ein deterministisches Speichermanagement, und die Message-Passing-OO-Laufzeit wurde für die Leistung optimiert.
Es ist über GCC und CLang verfügbar und es gibt Anwendungsbibliotheken wie GNUStep und Cocotron, die auf verschiedenen Plattformen funktionieren.
Wenn Sie Hochleistungsarbeiten ausführen, gehe ich davon aus, dass dies eine Art Zahlenverarbeitung oder eine andere Divide-and-Conquer-Arbeit anstelle der Benutzeroberfläche ist. zB HTML über einen Mini-HTTP-Server.
quelle
Ich habe es nie benutzt, aber ein Freund von mir schwört auf Cython, mit dem Sie Primitive im C-Stil in leistungskritischen Teilen Ihres Codes verwenden können, während Sie die allgemeine Python-Syntax beibehalten und Python-Konstrukte höherer Ebenen in vollem Umfang nutzen können, um die Entwicklung zu reduzieren Zeit überall sonst.
quelle