Laden...

C#/WPF oder C++/Qt für neues Projekt: objektorientierte Bibliotheken

Erstellt von MasterOfCoding vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.671 Views
M
MasterOfCoding Themenstarter:in
131 Beiträge seit 2004
vor 14 Jahren
C#/WPF oder C++/Qt für neues Projekt: objektorientierte Bibliotheken

Hallo!

Ich möchte ein neues Projekt im Bereich "Scientific Computing"/Visualisierung starten und bin am überlegen, welche Programmiersprache am besten dafür geeignet ist.

Zur Wahl stehen C# mit WPF oder aber C++ mit Qt. Es würde mir natürlich sehr gefallen, C++/Qt zu verwenden, da ich dadurch Plattformunabhängigkeit erreichen würde. Gleichzeitig ist das komplizierter und C#/WPF hat sehr viele Vorteile.

Konkret interessiert mich:
Kann ich unter C++/Qt objektorientierte Bibliotheken plattformunabhängig verwenden? Unter C# ist es ja leicht, meine Klassen für mehrere Programme zugänglich zu machen. Sollte dafür mit C++ COM(+) oder so etwas notwendig sein, wird das unter Mac/Linux sowieso ein Problem...

In diesem Fall würden die Vorteile mit C#/WPF übrwiegen: Super Klassenbibliothek, WPF an sich...

Man beachte, dass Plattformunabhängigkeit keine zwingende Erfordernis ist, sollte es aber mit vertretbarem Mehraufwand erreicht werden können (diese Bibliotheken sind sehr wichtig, da ich viele Statistik-Funktionen und eine Graphenbibliothek komfortabel in den einzelnen Teilprogrammen verwenden möchte), wird es wohl C++/Qt werden.

Für allgemeinen Input bin ich auch dankbar!

Vielen Dank,
Andreas

Gelöschter Account
vor 14 Jahren

also wenn du WPF einsetzt ist platformunabhängigkeit nciht mit vertretbarem mehraufwand zu erreichen. du solltest dich also entscheiden ob du plattformunabhängig sein willst oder nciht und erst dann deine frage stellen.

M
MasterOfCoding Themenstarter:in
131 Beiträge seit 2004
vor 14 Jahren

Vielen Dank für die Antwort!

Ich werde meiner Anforderungen ein bisschen detaillierter schreiben, damit mir besser geholfen werden kann.

Es handelt sich um ein Programm zur Datenbearbeitung (naturwissenschaftliche Messdaten, Stichwort "Scientific Computing"), sodass teilweise rechenintensivere Rechenalgorithmen vorhanden sein werden. Statistik, Kurvenanpassungen, Bearbeitung größerer Datenmengen etc.

Ich hoffe allerdings, dass man für so etwas nicht zwingend C++ verwenden muss, sondern auch C# schnell genug ist. Bitte korrigiert mich, sollte man für solche Dinge unbedingt performantere Sprachen verwenden.

Darüber hinaus benötige ich zwingend 2D Grafik (Diagramme, Visualisierungen, Graphen), wahrscheinlich auch 3D. Dafür scheint WPF wie geschaffen...

Gute Datenbankanbindung ist auf jeden Fall auch vorteilhaft, auch hier scheint mir LINQ, NHibernate, etc. sehr brauchbar...

In C# bin ich schon sehr erfahren, es gibt viele komfortable Funktionen (insbesondere im Vergleich zu C++). Sollte jedoch C++/Qt signifikante Vorteile bieten, was insbesondere Performance und Plattformunabhängigkeit wäre, würde ich einen Umstieg auf C++/Qt überlegen.

Besonders wichtig ist, dass die verwendete Technologie zukunftssicher ist. Ich möchte nicht alles wieder auf eine völlig neue Bibliothek/Sprache portieren müssen. Dies scheint mir aber sowohl bei C#/WPF, als auch bei C++/Qt gegeben.

Performance ist durchaus ein wichtiger Punkt - ich bitte um Rückmeldung diesbezüglich, Plattformunabhängigkeit wäre nur ein Bonuspunkt. Insbesondere interessiert mich, ob Qt denn wirklich so plattformunabhängig ist, oder ob ich da eben schon beim einbinden selbst geschriebener OOP-Bibliotheken Probleme zu erwarten habe (Stichwort COM auf Linux 😄 )- in C# ist ja die Einbindung einer selbstgeschriebenen Assembly ein Kinderspiel...

Bitte direkt um Input, Vorschläge, Ratschläge!

Vielen Dank,
Andreas

S
156 Beiträge seit 2007
vor 14 Jahren

Es handelt sich um ein Programm zur Datenbearbeitung (naturwissenschaftliche Messdaten, Stichwort "Scientific Computing"), sodass teilweise rechenintensivere Rechenalgorithmen vorhanden sein werden. Statistik, Kurvenanpassungen, Bearbeitung größerer Datenmengen etc.

Ich hoffe allerdings, dass man für so etwas nicht zwingend C++ verwenden muss, sondern auch C# schnell genug ist. Bitte korrigiert mich, sollte man für solche Dinge unbedingt performantere Sprachen verwenden.

Hallo,

für rechenintensivere Berechnung würde sich F# anbieten. Ist aber .Net 4.0 fester Bestandteil des Framework. Weitere Infos zu F# findest du hier MSDN: Einführung in F#

gruß
Henning

Gelöschter Account
vor 14 Jahren

sollen die rechenintensiven sachen auch auf mainframes laufen können?

C
401 Beiträge seit 2007
vor 14 Jahren

Hi,

also Qt ist ziemlich einfach. Es hat im Prinzip alles was man braucht schon im Framework (ähnlich wie bei .Net) und ist auch ansonsten sehr gut handzuhaben. Natürlich sollte man etwas Erfahrung oder zumindest verständnis für C++ mitbringen. Für Graphiken hat Qt auch einiges. Unter anderem kannst du OpenGL in den Forms verwenden.

Ansonsten kannst du natürlich für Plattformunabhängigkeit auch auf Java oder andere Sprachen auf der JVM zurückgreifen. Mein Favorit ist hier z.B. Scala, welches die Vorteile funktionaler Sprachen mitbringt. Der Code wird kürzer und man kann Multicore Systeme effektiver nutzen. Und es ist weniger fehleranfällig!

M
MasterOfCoding Themenstarter:in
131 Beiträge seit 2004
vor 14 Jahren

Hallo!

Nein, es muss nicht auf Mainframes laufen, aber ich möchte doch auf Performance achten.

3D Grafik-Programmierung (Visualisierung von Kristallen und Molekülen) scheint entgegen vorheriger Annahmen doch wichtiger zu sein!

Verständnis für C++ wäre grundsätzlich vorhanden, auch wenn das mein erstes größeres Projekt in C++ wäre. Das .net-Framework ist doch um einiges umfangreicher als Qt und ich habe vor allem bezüglich der Modularität und echten Plattforumunabhängigkeit Zweifel.

Ich will zum Beispiel mein Programm in mehrere ausführbare Dateien splitten, die dann die gleichen Bibliotheken nutzen. Das ist in C# sehr leicht, die einzelnen Assemblies können sogar in einer anderen .net-Sprache geschrieben werden. Letzeres werde ich in C++ natürlich nicht erreichen, es würde mir reichen, wenn Bibliotheken und Klassen in den Bibliotheken leicht verwendbar wären, ohne irgendwelche COM-Konstrukte, die dann wieder unter Mac/Linux nicht laufen.

Im Moment erscheint mir C#/WPF die klügere Wahl zu sein, als einzigen groben Nachteil sehe ich die Plattformabhängigkeit, die mir ein bisschen weh tut, aber eigentlich kein grobes Problem ist.

Darf ich fragen, was funktionale Sprachen für einen Vorteil bieten? Das scheint der große Renner zu sein, ich habe bisher aber nur in OOP Erfahrung. Scheint auch so, als müsste ich das mischen...Berechnungen in F#, den Rest in C#?

Danke,
Andreas

M
153 Beiträge seit 2010
vor 14 Jahren

Ein wesentlicher Punkt scheint mir auch die Verfügbarkeit von Bibliotheken zu sein. Wenn du nicht vorhast alle Algorithmen selbst zu implementieren, dann gibt es für C++ einfach deutlich mehr ausgereifte Bibliotheken, sowohl was Stabilität anbelangt als auch Performance.

S
401 Beiträge seit 2008
vor 14 Jahren

Servus,

kannst du das Wort "Plattformunabhängig" etwas genau beschreiben?
.NET läuft nur auf Windows und ob das Mono-Project WPF komplett unterstützt entzieht sich meiner Kentniss. Solltest du wirklich auf Linux, Mac & Co abzielen, empfehle ich dir Java. Dort kannst du zwischen mehreren Sprachen Java, Groovy, Scala, ... frei wählen und sogar mischen. JavaFX oder Swing sind hervoragende Bibliotheken zur Darstellung von GUI und 2D. Jogl liefert die nötige OpenGL anbindung. Ansonsten gäbe es da noch die High-End Anbindung "Java3D".

Sollte sich herausstellen, dass gewisse Code-Segmente zu viel Zeit benötigen, können diese bequem ausgelagert werden. Entweder über das native-Schlüsselwort für C/C++ oder über OpenCL. Bei letzteres kann man sogar von der CPU auf z.B. die Grafikkarte ausweichen.
Gefällt dir Qt sehr gut, so bietet Java eine direkte Anbindung an diese Bibliothek.

Corpsegrinder hat es bereits angesprochen und ich würde es gerne wiederhollen. Scala ist eine neue Sprache für die Java-Plattform (und auch für .NET vorhanden) und räumt entlich auf. Mir persönlich gefällt diese Sprache sehr gut und sie verspricht sehr viel für die Zukunft. Sie ist auf jedenfall einen Blick wert.

Gruß,
Thomas

Gelöschter Account
vor 14 Jahren

und ob das Mono-Project WPF komplett unterstützt entzieht sich meiner Kentniss.

mono unterstützt kein wpf.

was mit platform unabhängigkeit gemeint ist, wird in den beiträgen weiter oben bereits konkret beantwortet...