Hallo.
Habe damals viel Basic und weniger Delphi programmiert.
Zuhause bin ich eher in C womit ich meine Mikrocontroller Projekte auch
schreibe.
Ab und an nutze ich AutoIT für kleinere Scripte.
Nun bräuchte ich aber ab und an eine GUI am PC für meine Platinen.
Möchte auf jeden Fall Crossplatform sein und habe mich daher von QT und
Lazarus hin und her reissen lassen.
Leider kenne ich mich aber in C++ nicht aus.
Es sollen keine riesen Programme werden, sondern nur
Auswertungs-Software und Hardware-Konfiguations-Programme.
Zumeist nutze ich den FTDI-Chip für die PC-Ankopplung, daher habe ich in
Verbindung mit QT einmal danach gesucht.
Leider war ich etwas über die Ergebnisse geschockt.
Selbst Leute, die mit der Umgebung schon so einiges Angestellt haben,
kamen da an ihre Grenzen.
Ich habe leider nicht die Zeit mich so extrem in eine Programmiersprache
einzuarbeiten da andere Projekte Prio haben.
Könnt Ihr hier irgendwie mir einen Tip geben wie ich mich am besten
endscheiden sollte?
Grüße Tim
kopfkratz
Ja also was soll's denn werden ?
In C++ einsteigen dürfte die sinnvollste Entscheidung sein.
JAVA ist wegen dem ORACLE disaster ja nicht mehr uneingeschränkt
empfehlenswert m(
Und JAVA ist rein objektorientiert :-P
Was Du brauchst ist einfach ein QT widget um Deine einkommenden Daten zu
visualisieren, da einfach mal in die Doku schaun:
http://qt-project.org/doc/qt-5.0/qtwidgets/qtwidgets-index.html
Ist es eigentlich immer soooo schwierig eine Metasuchmaschine zu nehmen
und nach den konkreten Anforderungen zu suchen ?
Du brauchst also zwei Klassen, eine die Dir die Daten am PC abnimmt und
eine die Dir selbige Daten visualisiert.
Und es gibt gute online C++ Tutorials ...
@Dr. Sommer & Team: Java finde ich wegen der Hardwarenahen Geschichten
nicht so passend. Hatte mir einmal NetBeans angeschaut und war nicht so
von überzeugt...
@Kopf-Kratzer: Doch doch, Suchen kann ich schon bedienen, nur finden die
wie gesagt bei QT viele Probleme wenn es um USB-Anbindungen geht.
Ich lasse mich aber gerne eines besseren belehren ;)
Wie ich das mit den Klassen an sich händeln würde habe ich ja im Kopf.
Die Frage war darauf abgezielt, ob es denn Sinn macht ohne nun fünf
Wochen Einarbeitungsphase auch schon im Vorhinein was brauchbares hin zu
bekommen.
...oder ob da Lazarus doch evtl. die bessere Entscheidung wäre.
Bin aber ja eigentlich ohnehin eher zu C gerissen; Pascal Dialekte mag
ich nicht so sehr.
Tim schrieb:> @Dr. Sommer & Team: Java finde ich wegen der Hardwarenahen> Geschichten
Hä? Wo ist denn die GUI-Entwicklung am PC hardwarenah?
> @Kopf-Kratzer: Doch doch, Suchen kann ich schon bedienen, nur finden die> wie gesagt bei QT viele Probleme wenn es um USB-Anbindungen geht.
Was hat Qt mit USB zu tun? libusb oder direkt Serialport-Zugriff geht
davon völlig unabhängig; genau wie in Java...
> Ich lasse mich aber gerne eines besseren belehren ;)> Wie ich das mit den Klassen an sich händeln würde habe ich ja im Kopf.> Die Frage war darauf abgezielt, ob es denn Sinn macht ohne nun fünf> Wochen Einarbeitungsphase auch schon im Vorhinein was brauchbares hin zu> bekommen.
Fünf Wochen in C++ könnte vielleicht hinkommen. Wenns schneller gehen
darf würde ich zu was einfacherem wie eben Java raten.
> Bin aber ja eigentlich ohnehin eher zu C gerissen; Pascal Dialekte mag> ich nicht so sehr.
Kannst ja Gtk+ verwenden, aber GUI's ohne OOP zu programmieren ist
irgendwie doof.
kopfkratzer schrieb:> In C++ einsteigen dürfte die sinnvollste Entscheidung sein.
C++ lernen ist auf jeden Fall sinnvoll, aber eben auch nicht so ganz
einfach...
> JAVA ist wegen dem ORACLE disaster ja nicht mehr uneingeschränkt> empfehlenswert m(
Java hat 1000 Gründe es nicht zu verwenden (auch ohne Oracle), aber um
mal eben schnell eine GUI zu bastlen ist es durchaus zu gebrauchen.
Dr. Sommer schrieb:>> JAVA ist wegen dem ORACLE disaster ja nicht mehr uneingeschränkt>> empfehlenswert m(> Java hat 1000 Gründe es nicht zu verwenden (auch ohne Oracle), aber um> mal eben schnell eine GUI zu bastlen ist es durchaus zu gebrauchen.
ftp://ftp.heanet.ie/disk1/trolltech/pub/qt/pdf/qt-vs-java-whitepaper.pdf
Die Schlussfolgerung stimmt auch heute noch, selbst wenn Swing durch SWT
ersetzt wird
"Java/Swing may be appropriate for certain projects, especially those
without GUIs or with limited GUI functionality. C++/Qt is an overall
superior solution, particularly for GUI applications."
Arc Net schrieb:> Dr. Sommer schrieb:>>> JAVA ist wegen dem ORACLE disaster ja nicht mehr uneingeschränkt>>> empfehlenswert m(>> Java hat 1000 Gründe es nicht zu verwenden (auch ohne Oracle), aber um>> mal eben schnell eine GUI zu bastlen ist es durchaus zu gebrauchen.>> ftp://ftp.heanet.ie/disk1/trolltech/pub/qt/pdf/qt-vs-java-whitepaper.pdf> Die Schlussfolgerung stimmt auch heute noch, selbst wenn Swing durch SWT> ersetzt wird> "Java/Swing may be appropriate for certain projects, especially those> without GUIs or with limited GUI functionality. C++/Qt is an overall> superior solution, particularly for GUI applications."
Bitte lies noch einmal das komplette Dokument. Besonders im ersten
Abschnitt wird hervor gehoben, dass Java erst bei Profis weniger
effizient ist. Die Frage ist immer noch, dass ein Anfaenger versucht
leicht eine GUI zu bauen, ohne sich im Detail mit OO zu beschaeftigen!
Zwar zweifel ich Dr. Sommers Aussage an, dass es 1000 Gruende gibt nicht
Java zu verwenden (ich wuerde fast sagen, dass es 1500 Gruende sind),
jedoch ist die Aussage mit der schnellen GUI einfach nur richtig. Wenn
man einfach nur schnell eine funktionierende GUI haben moechte, die
keinen besonderen Elemente enthaelt, dann erreicht man mit Java einfach
am schnellsten sein Ziel (oder natuerlich C#).
Wenn es nur um Oberflächenprogrammierung ginge, könnte man durchaus Java
verwenden. Da lässt sich schon vieles schickes recht schnell
zusammenbauen.
Schwierig bis sehr schwierig wird es aber, wenn mit
betriebssystemspezifischen Dingen zusammengearbeitet werden soll, sei es
der Aufruf einer Win32-API-Funktion, das Verwenden von DLLs, von (D)COM
oder gar die Integration von in C bzw. C++ geschriebenem Code.
Wenn mit so etwas wie libusb oder Microsofts WinUSB gearbeitet werden
soll, wenn die FTDI-eigenen DLLs genutzt werden soll, wird das mit Java
aufwendiger als in C bzw. C++.
Natürlich ist dann die eingangs gewünschte Portabilität auch nicht mehr
gegeben - die FTDI-DLLs sind halt windows-spezifisch, und damit unter
Linux so nicht nutzbar.
Andererseits lassen sich die betriebssystemabhängigen Dinge auch so
kapseln, daß die GUI unverändert übernommen werden kann, und nur die
gekapselten Dinge angepasst werden müssen. Hier ist Qt als GUI-Toolkit
keine schlechte Wahl; wxWidgets wäre ein alternativer Kandidat.
Ich könnte noch C# mit WinForms ins Rennen werfen.
Das ist recht komfortabel in der Entwicklung, und wirklich
cross-platform. D.h. das Programm läuft ohne Recompile auf Windows, Mac,
Linux und sogar ARM (Rasperry Pi etc.).
Boris B. schrieb:> Ich könnte noch C# mit WinForms ins Rennen werfen.>> Das ist recht komfortabel in der Entwicklung, und wirklich> cross-platform. D.h. das Programm läuft ohne Recompile auf Windows, Mac,> Linux und sogar ARM (Rasperry Pi etc.).
Echt jetzt? Ich dachte C# ist nur Windows? Kannst Du mehr schreiben?
Gibt es eine kostenlose Entwicklungsumgebung um Erfahrungen zu machen?
Interessant schrieb:> Boris B. schrieb:>> Ich könnte noch C# mit WinForms ins Rennen werfen.>>>> Das ist recht komfortabel in der Entwicklung, und wirklich>> cross-platform. D.h. das Programm läuft ohne Recompile auf Windows, Mac,>> Linux und sogar ARM (Rasperry Pi etc.).>> Echt jetzt? Ich dachte C# ist nur Windows? Kannst Du mehr schreiben?> Gibt es eine kostenlose Entwicklungsumgebung um Erfahrungen zu machen?
Die Sprache an sich ist ja erst mal nicht Platform-spezifisch.
Spannender wird es dann beim Framework:
Unter Windows gibt es das .NET Framework, unter Linux/Mac/Android gibt
es Mono. Die beiden sind aber so weit kompatibel, dass ein für .NET
geschriebenes Programm genauso auf Mono läuft und umgekehrt.
Du kannst also die .exe Datei einfach von einem System auf's andere
kopieren und dort sofort starten.
Als Entwicklungsumgebungen gibt es z.B. Visual Studio Express (Windows),
Xamarin Studio (Mac) oder MonoDevelop (Linux).
Interessant schrieb:> Kann ich auch XCode auf Mac verwenden?
Nicht dass ich wüsste. XCode beherrscht nur C++ und objC.
Ich verwende auf dem Mac Xamarin Studio, das ist ganz brauchbar ;-)
Schau mal auf der Mono-Homepage vorbei, da findest du alles was du
brauchst (Runtime, IDEs, Sourcen, usw.)
finde schade das python noch nicht ins rennen geschickt wurde :)
für einfache GUI sachen ist es auch sehr praktisch
ansonsten würde ich mir wohl auch die mühe machen und C# + Mono mal
genauer anschauen.
C# + .NET ist dem Java Framework schon lange weit davon gelaufen und
lässt sich kaum noch vergleichen
Mit Mono hab ich leider keine Erfahrungen habe aber bisher fast nur
gutes gehört.
Einfach. Hardwarenah + GUI + gute Verbreitung und Lernmöglichkeiten =
C++. Für die GUI z.B. Qt (unterstützt die drei relevanten
Desktop-Systeme). C# ist etwas "narrensicherer" und ich mag es auch,
aber hier wäre es nicht meine erste Wahl.
Python + QT funktioniert einwandfrei plattformübergreifend. Habe da noch
nie etwas editieren müssen.
Die Sprache ist übersichtlich und es gibt einen Haufen praktischer
Module.
Bevor ich mir Java antun würde, würde ich lieber versuchen C++
plattformübergreifend zu schreiben.
C++/Qt oder Python/PyQt
Letzeres ist vermutlich leichter zu lernen und viele Dinge, die in C++
relativ kompliziert sind, sind mit Python schnell hingehackt.
Soo schlimm ist das mit der FTDI API unter C++ übrigens auch nicht...
Tim schrieb:> Habe damals viel Basic und weniger Delphi programmiert.> Zuhause bin ich eher in C womit ich meine Mikrocontroller Projekte auch> schreibe.> Ab und an nutze ich AutoIT für kleinere Scripte.>> Nun bräuchte ich aber ab und an eine GUI am PC für meine Platinen.
Habe es zwar noch nie benutzt, nur etwas herumgeschnuppert: PureBasic
könnte was für Dich sein.
http://www.purebasic.com
Mein Tipp:
Lern C++. So schwierig ist es nun auch wieder nicht, vor allem weil du
nicht alles können musst um damit produktiv zu arbeiten.
Kauf dir ein gutes Buch zu dem Thema (z.B. "Der C++ Programmierer" sowie
"Effektiv C++ programmieren") und dann wird das schon!
Als Entwicklungsumgebung für reines C++ kann ich dir Codeblocks
empfehlen.
Dort ist bereits das GUI Toolkit wxWidgets dabei, mit dem man
plattformunabhängige GUIs basteln kann.
Wenn du mit Qt arbeitest, dann nimm eben Qt Creator.
Von C# kann ich nur abraten: es ist im Prinzip nur für Windows
verfügbar.
Klar gibt es auch unter Linux die Mono VM, aber erwarte dir davon nicht
zuviel. Diese ist Jahre hinter der Windows .NET VM hinterher, somit bist
du damit nicht plattformunabhängig.
Mal abgesehen davon sind hardwarespezifische Details immer
betriebssystemabhängig.
Nicht zuletzt ist Microsoft unter Linux Freaks nicht sehr beliebt,
dementsprechend wenig Hilfe wirst du im Internet finden, ganz einfach
weil damit eben nicht besonders viele Leute Erfahrung haben.
Hingegen kannst du davon ausgehen, dass du mit C oder C++ garantiert
Hilfe finden wirst im Internet.
dsdasdasd (Gast) schrieb:
> Von C# kann ich nur abraten ..> .. Nicht zuletzt ist Microsoft unter Linux Freaks nicht sehr beliebt,
Na das ist ja mal ein Grund der "Gewicht" hat. Nur weil der
Mainstream-Foren-Mob das pöse C# nicht mag (weil von MS) soll man die
Finger davon lassen?
Was für ein ideologischer Hirnkrampf!
> dementsprechend wenig Hilfe wirst du im Internet finden,
Eine glatte Lüge. Es gibt genügend Foren, die sich mit C# beschäftigen,
ganz ähnlich wie denen, die sich mit Delphi beschäftigen, was ja auch
nicht sonderlich gepuscht wird auf Linux Plattformen.
dsdasdasd schrieb:> on C# kann ich nur abraten: es ist im Prinzip nur für Windows> verfügbar.> Klar gibt es auch unter Linux die Mono VM, aber erwarte dir davon nicht> zuviel. Diese ist Jahre hinter der Windows .NET VM hinterher
Stimmt garnicht. Mono ist momentan auf dem Stand von .NET 4.5. Das
nennst du "Jahre hinter"???
dsdasdasd schrieb:> es ist im Prinzip nur für Windows verfügbar.
Kann es sein dass du überhaupt keinen Plan hast und hier nur rumstänkern
willst?
Oh mann wenn hier jetzt C# und Delphi als Alternativen auftauchen...
Plattforumübergreifend und dann zu C# greifen ist so richtig dämlich,
davon abgesehen ist C# überflüssig wie ein Kropf.
Müll für den ganzen Programmiersprachen-Müllberg.
baham schrieb:> Müll für den ganzen Programmiersprachen-Müllberg.
Richtig, alles was man braucht ist Maschinencode, damit kann man
schließlich alles machen. Mehr Programmiersprachen sind überflüssig.
baham (Gast) schrieb:
> Oh mann wenn hier jetzt C# und Delphi als Alternativen auftauchen...> Plattforumübergreifend und dann zu C# greifen ist so richtig dämlich,
Dämlich ist dein Einlass hier. Delphi ist 100% plattforumübergreifend.
C# hat seine Stärken im enormen Ausbau des Frameworks wird künftig auch
für Systemprogrammierung eine Rolle spielen.
http://www.heise.de/newsticker/meldung/C-fuer-Systemprogrammierung-2073618.html
Könnt ihr MS-Fans nicht einfach mal ruhig sein? In JEDEM Thread in dem
es um Programmierung geht, kommt einer daher und will mit irgendeiner
.NET-"Programmiersprache" nerven.
C# ist eine Windowssprache, man weiß nie wann MS vielleicht gegen Mono
vor geht (Patente). Wenn MS .NET einstellt, dann wars das mit den
Programmen die darauf aufbauen. Wird nie passieren? Ich sage nur
Silverlight, DAS Plugin was Flash in Wochen vom Markt verdrängt... Oder
für die Entwicklungsumgebung werden Gebühren verlangt, ach Halt das
passiert ja jetzt auch schon. Wird eben die kostenlose Version
eingestellt. :)
Man sollte sich bei der Programmierung niemals auf einen einzigen
Hersteller fixieren. Gerade in Zeiten von Android und Co. ist das
wichtiger denn je.
Ein Gast schrieb:> Könnt ihr MS-Fans nicht einfach mal ruhig sein?
Wieso MS-Fan? Ich hab mit dem Verein garnix am Hut (benutze
ausschließlich Linux, OSX und Android).
Ein Gast schrieb:> Man sollte sich bei der Programmierung niemals auf einen einzigen> Hersteller fixieren. Gerade in Zeiten von Android und Co. ist das> wichtiger denn je.
C# läuft mit Xamarin ganz hervorragend auf Android :-)
Tim schrieb:> Habe damals viel Basic und weniger Delphi programmiert.> Zuhause bin ich eher in C womit ich meine Mikrocontroller Projekte auch> schreibe.> Ab und an nutze ich AutoIT für kleinere Scripte.> Nun bräuchte ich aber ab und an eine GUI am PC für meine Platinen.> Möchte auf jeden Fall Crossplatform sein und habe mich daher von QT und> Lazarus hin und her reissen lassen.
BASIC:
RealBasic
PureBASIC
Beides Platformübergreifend, allerdings kommerziell.
Oder halt Lazarus wenn du schon Delphi kannst.
> Leider kenne ich mich aber in C++ nicht aus.
Für ein bischen GUI-Geklöppel würde ich eine Scriptsprache verwenden,
Bindings für die üblichen GUIs haben die alle an Bord. Tk reicht
vermutlich schon, dazu Python oder Perl, mittlerweile sieht es auch
nicht mehr so altbacken aus sondern wie native Widgets und ist wirklich
sehr einfach zu scripten, einfacher als die nativen GUIs die angebunden
sind.
> Es sollen keine riesen Programme werden, sondern nur> Auswertungs-Software und Hardware-Konfiguations-Programme.
Dafür reicht obiges dicke.
Ein Gast schrieb:
> C# ist eine Windowssprache,
C# ist bei ECMA und ISO als Standard registriert.
Java ist übrigens auch keine Orakelsprache.
> man weiß nie wann MS vielleicht gegen Mono> vor geht (Patente).
Oh, mal wieder ein Verschwörungs-Fanboy.
> Wenn MS .NET einstellt, dann wars das
Und wenn du morgen an der Ampel überrollt wirst, brauchst du auch keine
Programmiersprach mehr ..
> Oder> für die Entwicklungsumgebung werden Gebühren verlangt,
Kommerzielle Lizenzen sind Usus in der Softwarewelt (gestern wie heute).
Auch Qt bietet kommerzielle Lizenzmodelle an oder beispielsweise
Embarcadero. Viele Softwarefirmen leben davon. Borland hat früher sein
Turbo C und und Turbo Pascal auch nicht verschenkt.
> Man sollte sich bei der Programmierung niemals auf einen einzigen> Hersteller fixieren.
Quark. Wenn mich Linux nur peripher tangiert interessiert mich das ewige
Genöle der Linuxfanboys nicht, die immer Angst haben zu kurz zu kommen,
aber bei jeder Gelegenheit damit prahlen, jede WindowsApp unter Wine
starten zu können.
Neues aus der Anstalt schrieb:>> Von C# kann ich nur abraten ..>>> .. Nicht zuletzt ist Microsoft unter Linux Freaks nicht sehr beliebt,>> Na das ist ja mal ein Grund der "Gewicht" hat. Nur weil der> Mainstream-Foren-Mob das pöse C# nicht mag (weil von MS) soll man die> Finger davon lassen?>> Was für ein ideologischer Hirnkrampf!
doch, das hat gewicht.
wenn ich mit einem bash script, einem c oder c++ programm unter linux
probleme habe, so bekomme ich garantiert hilfe.
bei c# unter linux sieht das nun mal anders aus.
ich habe c# bereits in der arbeit verwendet, für windows ist das echt
eine tolle programmiersprache. aber auf embedded plattformen oder
generell auf linux mache ich einen großen bogen herum.
mal abgesehen davon wird c# nie die performance von c oder c++
erreichen.
in zeiten, wo es für c++ wirklich tolle frameworks wie Qt gibt, sehe ich
für c# nicht viel grund.
gerade wo mobile plattformen immer häufiger eingesetzt werden, ist
"going native" wieder gefragt, und da ist c# nun mal suboptimal.
c# ist für mich die typische sprache, um irgendwelche business software
zu erstellen. wer technisch anspruchsvolle software erstellen möchte und
nur c# kennt tut sich wohl etwas schwer am arbeitsmarkt.
also kurz zusammengefasst: c++ ist beim lernen etwas schwieriger, aber
längerfristig hast du damit weit mehr möglichkeiten.
ich kann jedem nur c++ ans herz legen, damit habt ihr ein schweizer
taschenmesser in der hand!
c# ist eher wie ein kreuzschraubenzieher, damit kann man gewisse
aufgaben gut erledigen, aber bei anderen aufgaben hat man damit keine
chance.
oder schon mal ein OS, einen treiber, o.ä. in c# gesehen?
dsadasdad schrieb:> gerade wo mobile plattformen immer häufiger eingesetzt werden, ist> "going native" wieder gefragt, und da ist c# nun mal suboptimal.
Wie kommst du darauf das C# nicht "nativ" wäre?
Von der Performance her tun sich C++ und C# übrigens nicht besonders
viel...
Boris B. schrieb:> dsadasdad schrieb:>> gerade wo mobile plattformen immer häufiger eingesetzt werden, ist>> "going native" wieder gefragt, und da ist c# nun mal suboptimal.>> Wie kommst du darauf das C# nicht "nativ" wäre?> Von der Performance her tun sich C++ und C# übrigens nicht besonders> viel...
ich würde sagen, das kommt drauf an.
wenn du SW schreibst, die "IO bound" (z.B. GUI Anwendung) ist, dann ist
C# schon ok.
Aber sobald du "CPU bound" SW erstellst, hat C++ die Nase vorn. Und zwar
teilweise deutlich.
Ich hab mir einige C++ vs. C# Vergleiche im Internet angesehen.
Dabei musste ich aber feststellen, das meist Leute geschrieben haben,
die wenig Plan von C++ hatten. Wenn man Objekte per value und nicht per
reference übergibt, und Konzepte wie RAII nicht kennt, bringt es nicht
viel, einen Performancevergleich anzustellen.
Und mit native meine ich, dass C# nicht in x86 Maschinencode übersetzt
wird, sondern in einer VM läuft.
C++ hingegen wird direkt ausgeführt. Alleine schon deshalb ist C++ Code
schneller - wenn man denn weiß wie man damit umgeht.
45redfdf schrieb:> Und mit native meine ich, dass C# nicht in x86 Maschinencode übersetzt> wird, sondern in einer VM läuft.
Das ist nicht richtig. Erst wird zwar IL-Code erzeugt, dann aber auf der
Zielmaschine (durch die CLR) nativer Maschinencode.
Tant-Al schrieb:> Das ist nicht richtig. Erst wird zwar IL-Code erzeugt, dann aber auf der> Zielmaschine (durch die CLR) nativer Maschinencode.
und in der Zeit ist mein C++ Programm mit der Berechnung schon durch...
sdadasda schrieb:> und in der Zeit ist mein C++ Programm mit der Berechnung schon durch...
Sinnloses Statement. Ich bevorzuge aus verschiedenen Gründen auch C++
(u.a. wegen des mehr oder weniger deterministischen Verhaltens bei der
Speicherfreigabe), aber der Geschwindigkeitsunterschied ist nur bei sehr
rechen- und speicherintentiven Anwendungen spürbar.
sdadasda schrieb:> und in der Zeit ist mein C++ Programm mit der Berechnung schon durch...
Dann ist die Berechnung ja nicht gerade Zeit intensiv und die C# Version
ist 1ms (Umwandlung zu Maschinencode) danach auch fertig.
Das geile an C# ist doch die enorme Produktivität, man kümmert sich um
das eigentliche Problem und nicht so sehr um die technische Umsetzung.
Außerdem reicht die Performance bis auf wenige rechenintensive Dinge
völlig aus.
C++ ist eine tolle Sprache, aber wer kann von sich behaupten in ihr ein
Profi zu sein?
45redfdf schrieb:> Wenn man Objekte per value und nicht per reference übergibt
Tja, und wenn man ganz schlau ist übergibt man Objekte dann doch per
Value, um einen Performance-Gewinn ggü. CLR / JVM zu erhalten: Wenn man
nämlich z.B. eine Klasse hat die nur einen Integer enthält, ist die
Übergabe by Value genauso schnell, aber das Anlegen auf dem Heap und die
Dereferenzierung entfällt. Gut dass man in C++ die Wahl hat...
sdadasda schrieb:> und in der Zeit ist mein C++ Programm mit der Berechnung schon durch...
Dafür kann die Just-in-Time-Compilation den Code exakt für die Ziel-CPU
optimieren, im Gegensatz zu C/C++ was bei PC's typischerweise für i386
"optimiert" wird...
sdadasda schrieb:> und in der Zeit ist mein C++ Programm mit der Berechnung schon durch...
Ihr habt immer Probleme mit eurer Performance. Man könnte denken, dass
manche Leute bei ihrer GUI im Hintergrund jeden Pixel einzeln setzen
oder 2D FFTs in Echtzeit berechnen wollen.
Eine Möglichkeit für simple GUIs ist Processing ( http://processing.org/
). Das basiert auf Java. Das wird beispielsweise in Verbindung mit dem
Arduino eingesetzt (hmpf... jetzt breche ich damit wieder eine
Grundsatzdiskussion vom Zaun).
Zu C#:
1. mit M$ .net Framework bist du auf Windoofs festgelegt ABER:
2. es gibt Mono, das nahezu genauso benutzbar ist wie der M$-Kram (was
fehlt sind sehr spzielle Sachen wie Linq, was du am Anfang eh nicht
brauchst), somit ist auch C# systemunabhängig. Prinzipiell sind in Mono
jedoch keine GUI-Sachen implementiert ABER:
3. http://www.mono-project.com/Gui_Toolkits da wird sich sicherlich
etwas passendes finden. Sogar QT Bindings sind verfügbar.
Ich mache seit einigen Jahren C/C++ und ein Jahr lang mal C# gemacht.
Parallel zur Arbeit mache ich (kleine) Projekte weiterhin lieber in C#
als in C++, da ein umfangreiches Framework das Programmieren sehr sehr
vereinfacht. Außerdem lassen (zumindest mit .net unter Windoofs) sich
die GUIs sehr schnell realisieren, ohne dass viele kryptische Dateien
generiert werden und das Projekt aufblähen (das Aufblähen geschieht bei
manchen GUI-Toolkits in Verbindung mit C++).
Um hier mal einige Leute zum Nachdenken anzuregen (und um ein wenig
rumzutrollen/rumzustänkern): so viele Leute schreien über mangelnde
Performance, programmieren aber gleichzeitig schlecht durchdachten &
mangelhaft dokumentierten Spaghetti-Code. Dieser Code wird von ganz
allein langsam, da bestimmte Fallstricke irgendwann übersehen werden.
Tim schrieb:> @Dr. Sommer & Team: Java finde ich wegen der Hardwarenahen Geschichten> nicht so passend. Hatte mir einmal NetBeans angeschaut und war nicht so> von überzeugt...
Zum Thema hardwarenah: falls du damit beispielsweise die Kommunikation
zu RS232 meinst: diese Kommunikation kann man auch unabhängig von der
GUI bzw. einer GUI-Anwendung lösen. Beispielsweise könnte man die
RS232-Kommunikation auf eine lokale TCP-Verbindung übersetzen und das
GUI-Programm hängt sich an die TCP-Verbindung (was bei Java kein Problem
sein sollte).
Zum Thema Netbeans: fande das damals sehr aufgebläht und hat ohne Ende
Festplattenplatz benötigt... Elipse ftw!
Dr. Sommer schrieb:>> Wenn man Objekte per value und nicht per reference übergibt> Tja, und wenn man ganz schlau ist übergibt man Objekte dann doch per> Value, um einen Performance-Gewinn ggü. CLR / JVM zu erhalten: Wenn man> nämlich z.B. eine Klasse hat die nur einen Integer enthält, ist die> Übergabe by Value genauso schnell, aber das Anlegen auf dem Heap und die> Dereferenzierung entfällt. Gut dass man in C++ die Wahl hat...
Heap braucht man in dem Fall sowieso nicht.
Ich leg die Variable am Stack an, und übergeb an die Funktion einfach
die Referenz darauf.
Man hat in C++ also folgende Vorteile:
->Übergabe per Referenz, also im Hintergrund per Adresse, ohne das man
aber auf !=0 abfragen muss
->Kein Heap nötig
->vorhersehbarer Löschzeitpunkt des Objekts, ohne irgendeine GC Magic
void bar(const string& str)
{
// tu irgendwas mit dem String
}
void foo()
{
string s("irgendein text..."); // Variable liegt am Stack
bar(s); // Übergabe per Referenz
} // und hier wird der string wieder automatisch zerstört (~string()
aufgerufen)
Natürlich bringt es bei einem Integer nicht viel, dort übergeb ich
einfach per copy.
Wir haben in der Firma mal eine bestehende Java SW in C++ neu
geschrieben, und man merkte einen deutlichen Performance Boost. Gerade
bei rechenintensiven Dingen kann man es einfach nicht leugnen, dass C++
spitze ist.
Ich versteh nicht ganz, warum das die .NET Fraktion nicht akzeptieren
kann, dass es eben Sprachen gibt, die eine flottere Programmausführung
ermöglichen.
Ich behaupte ja auch nicht, dass das .NET Framework schlecht ist, oder
man mit C# nicht produktiv ist.
Interessanterweise heulen aber alle rum, wenn man sagt, dass guter C++
Code schneller ist wie guter C# Code.
ein c++ nutzer schrieb:> Wir haben in der Firma mal eine bestehende Java SW in C++ neu> geschrieben, und man merkte einen deutlichen Performance Boost. Gerade> bei rechenintensiven Dingen kann man es einfach nicht leugnen, dass C++> spitze ist.>> Ich versteh nicht ganz, warum das die .NET Fraktion nicht akzeptieren> kann, dass es eben Sprachen gibt, die eine flottere Programmausführung> ermöglichen.> Ich behaupte ja auch nicht, dass das .NET Framework schlecht ist, oder> man mit C# nicht produktiv ist.> Interessanterweise heulen aber alle rum, wenn man sagt, dass guter C++> Code schneller ist wie guter C# Code.
Ich verstehe nicht ganz, warum Äpfel mit Haselnüssen verglichen werden.
C++ erzeugt überlicherweise native Code. Überführt man Java oder C# in
native Code, ist die gleiche Perfomance zu erwarten. Eine schnellere
Abarbeitung hat also nix mit der Sprache zu tun, sondern mit der
Umsetzung durch den Compiler. Du musst als das Kit vergleichen. Rein
sprachlich gesehen ist C++ ein Relikt im Vergleich zu Java oder C#.
ein c++ nutzer schrieb:> Dr. Sommer schrieb:> Heap braucht man in dem Fall sowieso nicht.
Eben - aber in den CLR/JVM Sprachen eben schon.
> Ich leg die Variable am Stack an, und übergeb an die Funktion einfach> die Referenz darauf.
Ja oder halt direkt per Value.
> Man hat in C++ also folgende Vorteile:> ->Übergabe per Referenz, also im Hintergrund per Adresse, ohne das man> aber auf !=0 abfragen muss> ->Kein Heap nötig> ->vorhersehbarer Löschzeitpunkt des Objekts, ohne irgendeine GC Magic
Ganz genau...
Bei deinem String-Beispiel könnte man vermutlich sogar effizient
by-Value übergeben, falls die String-Implementation ein Copy-on-Write
implementiert...
> Natürlich bringt es bei einem Integer nicht viel, dort übergeb ich> einfach per copy.
Ja und bei Klassen die nur ein Integer sind eben auch:
1
classMyClass{
2
public:
3
inlineMyClass(inti):m_index(i){}
4
// 9000 Funktionen
5
private:
6
intm_index;
7
};
8
voidfun1(MyClassobj){
9
}
10
voidfun2(){
11
MyClassobj(42);
12
fun1(obj);
13
}
Hier kann ich eine schöne Klasse mit tollem API und allem drum und dran
haben (=> Abstraktion), aber dennoch by-Value übergeben was dann so
effizient ist wie direkt einen Integer zu übergeben. Das geht in CLR/JVM
gerade eben nicht.
> Wir haben in der Firma mal eine bestehende Java SW in C++ neu> geschrieben, und man merkte einen deutlichen Performance Boost. Gerade> bei rechenintensiven Dingen kann man es einfach nicht leugnen, dass C++> spitze ist.
Auch wenn der rechenintensive Teil nur ein Algorithmus ganz ohne
Speicherverwaltung ist? Weil einfach nur rechnen lässt sich ja wunderbar
JIT-compilen.
> Interessanterweise heulen aber alle rum, wenn man sagt, dass guter C++> Code schneller ist wie guter C# Code.
Sie wollen halt kein C++ lernen :o) ... wobei, wenn man weiß wie man
CLR/JVM Code gut schreibt, man den auch schon ziemlich schnell kriegen
kann.
nativ schrieb:> Eine schnellere> Abarbeitung hat also nix mit der Sprache zu tun, sondern mit der> Umsetzung durch den Compiler.
Naja bei normaler Ausführung auf PC's wird ja JIT-compiled, und somit
nativer Code ausgeführt.
nativ schrieb:> Rein> sprachlich gesehen ist C++ ein Relikt im Vergleich zu Java oder C#.
C++ hat zwar alte Wurzeln, wird aber immer noch weiterentwickelt (letzte
Version von 2011) und kann sprachlich jedenfalls eine ganze Menge mehr
Dinge als Java (C# weiß ich nicht) - von Relikt würde ich hier nicht
reden! Und bei Java war man ja auch so schlau die dann doch etwas
angestaubte Syntax zu übernehmen.
da kommt ja noch einiges dazu:
Index Überprüfungen zur Laufzeit, Objekte werden am Heap angelegt, GC
läuft im Hintergrund, usw...
Alleine schon deshalb ist C# Code langsamer.
Und dann kommt ja noch die Übersetzung zur Laufzeit dazu.
Jedenfalls bei Java kann ichs sagen, da ist C++ weit voraus, und bei C#
wirds wohl ähnlich sein.
C++ gibts jetzt in der Version C++11, da hat man alles was man von
modernen Sprachen erwartet.
Und gewisse Dinge kann C++ bei weitem besser als Java und C#, nämlich
die generische Programmierung. Templates hab ich sonst noch nirgends so
mächtig umgesetzt gesehen wie in C++.
Dr. Sommer schrieb:> Hier kann ich eine schöne Klasse mit tollem API und allem drum und dran> haben (=> Abstraktion), aber dennoch by-Value übergeben was dann so> effizient ist wie direkt einen Integer zu übergeben. Das geht in CLR/JVM> gerade eben nicht.
Bei C# geht sowas schon nur leider nicht mit Klassen, aber mit
Strukturen. Diese werden auf dem Stack angelegt (also nix mit GC) und
wird generell als value übergeben (außer man will es nicht dann als
Referenz).
Das größte Ärgernis von C++ ist, wie ich finde, das absolut veraltete
Forward-Declaration Headersystem, einfach grauenhaft.
Dr. Sommer schrieb:> Sie wollen halt kein C++ lernen :o) ... wobei, wenn man weiß wie man> CLR/JVM Code gut schreibt, man den auch schon ziemlich schnell kriegen> kann.
das stimmt wohl teilweise ;-)
Ich hab letztens jemanden in der Firma eingeschult, der davor nur C# und
Java gekannt hat.
Als ich ihm gezeigt habe, wie Smart Pointer in C++ funktionieren, war er
ganz erstaunt. Was, das geht? Wow... Wie geht denn das?
C++ gilt ja als "anfällig" für Speicherlecks, doch wenn die Leute
erstmal sehen, wie sauber man das mit Smart Pointer implementieren kann,
sind sie immer erstaunt. Und das ohne den Overhead eines GC!
> Ich versteh nicht ganz, warum das die .NET Fraktion nicht akzeptieren> kann, dass es eben Sprachen gibt, die eine flottere Programmausführung> ermöglichen.
Das Erfinden solcher "Tatsachen" zeugt nicht gerade von
Diskussionsfähigkeit.
> Interessanterweise heulen aber alle rum, wenn man sagt, dass guter C++> Code schneller ist wie guter C# Code.
Hast Du das geträumt? Niemand hier hat dem widersprochen; es wurde sogar
explizit erwähnt, dass es bei rechenintensiven Programmen durchaus eine
Rolle spielt. Abgesehen davon meinst Du wohl, dass das Endergebnis
"schneller" ist; das hat nichts mit der Programmiersprache zu tun.
Theoretisch könnte man aus C#-Code die gleiche Binary wie aus einem
äquivalenten Stück C++-Code machen.
Jedenfalls sind meine Erfahrungen ganz andere: Ein Teil (ja, es geht
auch ohne fantasievolle Verallgemeinerung) der C++-Fraktion dreht mit
Schaum vor dem Mund durch, wenn man sagt, dass die Differenz bei einem
guten Teil aller Anwendungen völlig egal ist, man aber einiges schneller
und produktiver in C# implementieren kann. Um mal einen alten Spruch zu
strapazieren: Wenn man nur einen Hammer zur Verfügung hat, sieht jedes
Problem aus wie ein Nagel.
BTW: Ich mag und verwende beides.
ein c++ nutzer schrieb:> Als ich ihm gezeigt habe, wie Smart Pointer in C++ funktionieren, war er> ganz erstaunt. Was, das geht? Wow... Wie geht denn das?> C++ gilt ja als "anfällig" für Speicherlecks, doch wenn die Leute> erstmal sehen, wie sauber man das mit Smart Pointer implementieren kann,> sind sie immer erstaunt. Und das ohne den Overhead eines GC!
RAII ist schon ziemlich geil und nach meiner Meinung besser als ein GC.
Aber wie lange hat es nun gedauert bis man in C++ SmartPointer erfunden
hat? Und wie lange wird es noch dauern bis diese endlich überall genutzt
werden?
Warum zur Hölle wird C# bzw .Net überhaupt genannt, wenn es definitiv um
plattformübergreifende Programmierung geht?
Es geht mit z.B. QT + C++ oder Python problemlos plattformübergreifend,
ohne zusätzliche Programme und Gefriemel.
.Net auf Linux zu betreiben macht doch gar keinen Sinn, wenn man sich
auch einfach eine andere Sprache wählen kann.
baham schrieb:> Warum zur Hölle wird C# bzw .Net überhaupt genannt, wenn es definitiv um> plattformübergreifende Programmierung geht?
Weil C# plattformunabhängig (mit Mono) ist? Und weil C# eine tolle
Sprache ist.
baham schrieb:> Es geht mit z.B. QT + C++ oder Python problemlos plattformübergreifend,> ohne zusätzliche Programme und Gefriemel.
Qt Programme können auch nicht ausgeführt werden, wenn auf dem System
die Qt Bibliotheken fehlen. Python ebenso.
Um Mono zu installieren genügt ein: sudo apt-get install mono. Und du
kannst das Binary, was auf Windows kompiliert wurde auf Linux ausführen.
Also nix Gefriemel. Nicht mal ausprobiert, aber seinen Senf dazu geben.
ptr schrieb:> Um Mono zu installieren genügt ein: sudo apt-get install mono. Und du> kannst das Binary, was auf Windows kompiliert wurde auf Linux ausführen.> Also nix Gefriemel. Nicht mal ausprobiert, aber seinen Senf dazu geben.
So isses. Funktioniert wirklich tadellos. Ich z.B. entwickel ganz
komfortabel auf einem WIndows-Rechner, und kopiere die .exe dann einfach
auf meinen Raspberry Pi, wo das Programm dann läuft. Gaanz easy :-)
ptr schrieb:> Weil C# plattformunabhängig (mit Mono) ist? Und weil C# eine tolle> Sprache ist.
Nein. Und Nein.
C# ist das PHP der Systemsprachen. Ein paar wenige können damit wirklich
Programme schreiben, aber der große Rest macht Programme wie (früher)
die tausend "Mach deinen PC schneller".
Ein Gast schrieb:> C# ist das PHP der Systemsprachen. Ein paar wenige können damit wirklich> Programme schreiben, aber der große Rest macht Programme wie (früher)> die tausend "Mach deinen PC schneller".
Entweder verwechselst du C# mit irgendeiner anderen Sprache oder du bist
einfach ein echt schlechter Troll.
>Qt Programme können auch nicht ausgeführt werden, wenn auf dem System>die Qt Bibliotheken fehlen. Python ebenso.>Um Mono zu installieren genügt ein: sudo apt-get install mono. Und du>kannst das Binary, was auf Windows kompiliert wurde auf Linux ausführen.>Also nix Gefriemel. Nicht mal ausprobiert, aber seinen Senf dazu geben.
Dann nimm halt wxWidgets, dann brauchst du nicht mal mehr die
QT-Biblibothek.
Ich kann nicht nachvollziehen, dass man bei gezielt
plattformunabhängigen Programmen den Weg über C# geht.
Aber bitte, jedem Tierchen sein Plaisierchen.
Bescheuert ist es weiterhin.
kann wxWidgets auch sehr empfehlen!
eine wirklich sauber durchdachte und einfach verwendende gui.
wer glaubt er muss c# auf linux verwenden, soll es tun, ist halt wie
wenn man nach deutschland zieht und nur englisch sprechen kann. ja es
geht, aber viel kann man sich davon nicht erwarten.
wxWidgets schrieb:> aber viel kann man sich davon nicht erwarten.
Wieso nicht? Habe bis jetzt keinerlei Einschränkungen finden können.
wxWidgets schrieb:> ist halt wie> wenn man nach deutschland zieht und nur englisch sprechen kann
Jetzt unstellst du, dass ich nur eine Programmiersprache "spreche"?
Keine Angst, es sind deutlich mehr (incl. C und C++). Aber warum sollte
ich zu C/C++ greifen wenn C# so viel besser funktioniert und die
gleichen Ergebnisse liefert?
ein c++ nutzer schrieb:> C++ gibts jetzt in der Version C++11, da hat man alles was man von> modernen Sprachen erwartet.
Ein Hindley-Milner-artiges Typsystem? eg
Ich möchte hier auch nochmal Lazarus in die Waagschale werfen. Wer
Delphi kennt, muß sich nicht umstellen, plattformübergreifend ist es
auch, die Programmentwicklung so effizient wie in C#, GUI kein Problem,
die FTDI-Bibliotheken kann man auch einbinden, oder SynaSer für
Com-Port-Zugriff benutzen, und der wichtigste Unterschied ist, daß
monolithische .exe-Dateien entstehen, die kein in Hintergrund
installiertes Framework benötigen, statisch gelinkt läuft überall. Für
mich persönlich der entscheidende Grund, Lazarus gegenüber C# den Vorzug
zu geben.
>Bleibt für mich auch nur QT und Lazarus>“(Das ist natürlich eine völlig sachliche und professionelle Tatsache>und keine persönliche Meinung ;-)“
Kein Java zu nutzen ist ja schonmal die richtige Entscheidung ;)
Aber warum eigentlich kein Python?
Imho auch die am einfachsten zu lesende Sprache von allen genannten und
problemlos (Ohne Gefrickel und irgendwelche "Wir versuchen Microsoft
Produkte auch unter Linux laufen zu lassen"-Pakete)
plattformübergreifend.
+ Undendlicher Vorrat an gut funktionierenden Modulen für zig
Anwendungen.
xarm schrieb:> Aber warum eigentlich kein Python?
Das einzige was gegen Python spricht, ist die Performance, da ja
interpretiert wird. Wenn das nicht stört, ist Python eine super Sache.
(Mal ehrlich, in wie viel prozent aller Fälle kommt es wirklich auf die
Performance an?)
Was mich persönlich an Python nervt ist höchstens die Einrückungs-Syntax
;-)
Die Einrückungssyntax ist Gewöhnungssache, ich finde nach einiger Zeit
erhöht das die Lesbarkeit enorm. (Besser als {} ist sowieso fast alles
;) )
Klickibunti kann man z.B. mit QT-Creator haben. Da kann man sich eine
Klickbunti Gui zusammenklicken und die kann man dann wirklich
komfortabel mit Python nutzen.
Pyside und PyQT funktionieren beide gut und sind auch fast
Syntax-identisch.
http://qt-project.org/wiki/PySidehttp://qt-project.org/wiki/QtCreator_and_PySidehttp://zetcode.com/gui/pyqt4/german/ <-- ist ohne klickibunti Gui Aufbau
aber zeigt schnell die elementare Benutzung.
Für Performancekritische Sachen ist Python natürlich nicht die richtige
Wahl, aber C++/C Module lassen sich sehr einfach einbinden und nutzen.
(Swig & Ctypes) Große Berechnungen o.ä. kann man dann auch mit C++
erledigen.
Und z.B. die serielle Schnittstelle ansprechen geht in zwei eindeutigen
Zeilen, einfacher geht es glaub ich nicht.
Möglicherweise spricht gegen Python die dynamische Typisierung, nicht
jedermanns Sache. Mir gefällt sie jedenfalls nicht.
xarm schrieb:> Imho auch die am einfachsten zu lesende Sprache von allen genannten und> problemlos (Ohne Gefrickel und irgendwelche "Wir versuchen Microsoft> Produkte auch unter Linux laufen zu lassen"-Pakete)> plattformübergreifend.
Ich mach fast kein C# mehr, sondern eigentlich nur noch C/C++. Ich bin
kein Fanboy, aber C# ist und bleibt eine Alternative. Es funktioniert
und macht keine Probleme, da einheitliches und umfangreiches Framework.
Die Sprache hat ein tolles Design und vereint Erfahrungen aus C, C++,
Java etc., aber es gibt natürlich auch Dinge die Umstritten sind bzw.
nicht jedem gefallen, wie z.B. der GC.
Diese fanatische Abneigung in der Linuxwelt gegen C# ist doch zum Teil
ein Resultat der radikalen Einstellung gegen Microsoft und allen
nicht-OpenSource/FreeSoftware Unternehmen. Außerdem da gibt es noch eine
Menge Leute die sich strikt weigern etwas anderes als C und GTK+ zu
machen.
Versteht mich nicht falsch ich will hier Niemanden C# aufquatschen. Aber
hier wird der Programmiersprache C# einfach unrecht getan.