MFC oder WinAPI oder .NET

Re: Portabilität?!

Original geschrieben von Daniel Toplak
Auch Java ist glaube ich keine große Alternative. (Chris bitte verzeih mir :) ).
Ok ich kann über Java nicht groß Urteilen, aber ich kann auch Gründe nennen, die dagegen Sprechen:
- benötigt JRE
- Performance
- kein echten Binaries (oder täusch ich mich da) in bezug auf Closed Source

äh... falsch ;-)

Stichwort Excelsior JET....http://www.excelsior-usa.com/jet.html
Damit kannst du in er Pro version 1.) JRE unabhängige dateien erstellen
2.) wird durch das Compilieren die Performance n nettes stück in die höhe getrieben
3.) Ist das ergebnis des diese Compiler hier auspukt eine ECHTE x86-PE EXEcutable.
naja soweit für Windows, für andere Systeme gibt es ähnliche Compiler.
 
Wer Linux und Windows gleichermaßen mit C++ GUI Programmen eindecken will, kommt um Qt aber fast nicht herum.
Im Normalfall sind die Quellcodes 1:1 in Linux und Win32 compilierbar!
 
Tobiasm hat gesagt.:
Die Portabilität ist sehr wohl gegeben. Was ist denn mit Mono? Ganz nebenbei ist alles andere (also MFC + Win32-API) noch weniger Portabel. Wenn Du portibilität willst, nimm Java oder C++ mit QT.
mono wird nicht alles umsetzen was im .net Framework vorhanden ist. Aus dem einfachen Grund:
Softwarepatente.

Errinnert euch an einen Spruch vom Microsoft CEO Steve Ballmer:
Es wird nur eine .net Plattform geben, und die ist von Microsoft.

Sicher? Ich sehe das eher anders. Wenn man es mit dem Programm mitliefert (z.B. auf CD) wird wohl kaum ein Nutzer damit Probleme haben. Einzig über das Internet gibt es Probleme, weil es doch relativ groß ist. Aber das wird auch Ende dieses Jahres Geschichte sein, weil dann sehr viele Leute auf Windows .Net haben werden und unter Linux wird es länger dauern aber auch kommen.
Aber mit einem anderen Framework, womit die portabilität nicht gewährleistet ist.

.net wird nicht portabel werden. Um mit .net portable zu programmieren muss mono sowohl auf Windows als auch auf Linux Plattform verwendet werden. Portables hin und her zwischen mono und .net wird nicht möglich sein.

Ich programmiere .net seid der Alpha version des Frameworks und finde es auch ganz gelungen (kein Wunder bei der Vorlage: Java). Damals wurde noch die portabiltät beworben, mittlerweile ist Microsoft da natürlich von weg. Portabilität heisst in Redmond:
Windows XP -> Windows CE -> Smartphone.
Aber selbst da (Smartphone) ist .net noch sehr eingeschränkt und wird wohl auch keine Rolle mehr spielen.
 
Re: Portabilität?!

Daniel Toplak hat gesagt.:
I
Zum Thema Plattformunabhängig:
Viele Leute sind zu engstirning, sie blicken nicht weiträumig.
Bei Plattformunabhängikeit spreche ich nicht nur von Windows und Linux, denn es gibt noch zig andere Betriebssysteme, die durchaus ihre Daseinsberechtigung haben.
Und im Bereich professioneller Plattformunabhängiger Anwendungen wird .Net keine Rolle Spiele. Auch Java ist glaube ich keine große Alternative. (Chris bitte verzeih mir :) ).
Ok ich kann über Java nicht groß Urteilen, aber ich kann auch Gründe nennen, die dagegen Sprechen:
- benötigt JRE
- Performance
- kein echten Binaries (oder täusch ich mich da) in bezug auf Closed Source

Java spielt schon eine grosse Rolle in plattformunabhängigen Anwendungen.. Java ist nach C++ die 2. meist eingesetzte Sprache. Gerade wenn es um sogenannte Business-Anwendungen geht die stark auf Netzwerke setzen ( SOAP - RPC - Verteilte Systeme) ist Java die nr 1.
IBM mit ihrem Websphere, BEA mit Weblogic , Oracle , Borland verdienen sich die Finger krum und dämlich an den jeweiligen Applikationsserver.
Das sind Cash-Cows für die Firmen. Amazon hat die Webseite mithilfe J2EE aufgebaut.

Zur performance, da war vor kurzem erst ein neuer Benchmark in der iX der aufzeigte das Java mittlerweile 90% an C++ heran. In manchen Operationen sogar schneller als C++, das kommt durch den HotSpot Compiler der den Code extrem optimiert. Ich lese dazu gerade ein Buch, es ist erstaunlich was dieser durch Caching und ähnliche Techniken alles leistet.
Java wird schon seid 1.2 nicht mehr wirklich interpretiert. Auch wenn kompilierter Java Code immer noch bytecode ist, wird dieser bei Bedarf in binary kompiliert.

Java hat sich nicht durchgesetzt auf dem Desktop, das stimmt. Das liegt zumeist an der mangelenden Performance von Swing Oberflächen. Das problem ist die meisten Leute
nehmen die Geschwindikeit von Swing Oberflächen und münzen das ganze als Java ist langsam. Das geht mir gewaltig auf die Eier, weil es eine extrem unqualifizierte Aussage ist.
Swing ist deshalb so langsam, weil sämmtliche Controlls auf den Monitor gezeichnet werden und nicht nativ vom Betriebssystem her kommen. Dies war nötig da nicht alle Plattformen auf denen die VM portiert wurde, z.b eine Combobox vorhanden war. Also gibt es AWT welches ein kompromiss aus allen OS ist und demnach nur wenige Controlls bietet, und Swing welches durch die zusatzschicht etwas träge wirkt.
Aber ich programmiere mittlerweile wenn ich GUIs programmiere mit SWT. SWT gibt es nicht für alle Plattformen auf denen eine JVM läuft, sondern nur auf jenen die bestimmte Anforderrungen entsprechen. So gibt es SWT für Windows, Linux/UNIX GTK und Motif, MacOS und OS/2. Damit dürfften doch mehr als 99% aller eingesetzten OS entsprechen. Durch SWT wird nicht selber gezeichnet sondern ähnlich wie bei AWT die nativen Betriebssystemkomponenten genutzt. SWT Applikationen unterscheidet sich in aussehen und feeling rein gar nicht von nativen Applikationen. Wer das mal gerne testen möchte, der gehe auf http://www.eclipse.org und lade sich eclipse herunter ;)


Daniel Toplak hat gesagt.:
I

Zum Thema Mono
Also beim kurzen Überfliegen des Mono-Projektes sind mir 2 große Nachteile aufgefallen.
- Nicht Plattformunabhängig bezieht sich nur auf Linux (ok evtl. lässt es sich auf anderen UNIX-Systemen übersetzten
- Absolut unvollständig und das wird es evtl. auch immer bleiben, siehe Aussage von chibisuke

Also bedeutet der Weg .Net über Mono doch auch nur eine Sackgasse, oder?
Ich für meinen Teil muss beruflich Anwendungen (mit GUI) entwickeln, die auf folgenen Betriebssystemen Lauffähig sind:
Windows
Linux
SunOS
HP-UX
Irix
AIX
und da hat .Net keine Chance.
Denkt mal darüber nach.

Gruß Homer

Auch wenn du von Java keine Ahnung hast ( :) scherz), hier hast du vollkommen recht
 
Original geschrieben von Thomas Kuse
Wer Linux und Windows gleichermaßen mit C++ GUI Programmen eindecken will, kommt um Qt aber fast nicht herum.
Im Normalfall sind die Quellcodes 1:1 in Linux und Win32 compilierbar!

Mich dünkt es gibt auch ein GTK Port für Windows?

shit habe ich jetzt wirklich 3 Beiträge hintereinander geschrieben? ;) *ich oller spamer*
 
Nun. Ich glaube ich hätte meine Frage genauer formulieren sollen.
Um zum Punkt zu kommen. Ich bin die ewige textbasierte Programmierung leid. Ich möchte grafische Anwendungen erstellen. Da ich aber keine Kurse besuche sondern mir alles selber lernen muss/will, bin ich gezwungen den richtigen Weg von Anfang an zu wählen.

Ich möchte, da ich schon längere Zeit in C/C++ programmiere, auch dabei bleiben. Ich möchte Anwendungen erstellen, die auch mit dem Internet arbeiten können sowie ich Anwendungen schreiben will, die systemnaher sind (z.b.: Zugriff auf Ports oder Hardware).

Vielleicht ist das aber auch nicht möglich, deshalb bitte ich um Erklärung.
 
Qt, GTK+, MFC, .NET, WinAPI

Das sind alles riesige Befehlsbibliotheken.
Du solltest Dir davon eine auswählen, nach den Kriterien die Du benötigst!
Mithilfe der normalen Bibliotheken von C++ kannst Du auch in Konsolen-Programmen Hardware ansprechen oder Netzwerkverbindungen aufbauen etc. es liegt also alles an Dir und Deinem Portemonaie.
 
Original geschrieben von Sebastian Thalhammer
Nun. Ich glaube ich hätte meine Frage genauer formulieren sollen.
Um zum Punkt zu kommen. Ich bin die ewige textbasierte Programmierung leid. Ich möchte grafische Anwendungen erstellen. Da ich aber keine Kurse besuche sondern mir alles selber lernen muss/will, bin ich gezwungen den richtigen Weg von Anfang an zu wählen.

Ich möchte, da ich schon längere Zeit in C/C++ programmiere, auch dabei bleiben. Ich möchte Anwendungen erstellen, die auch mit dem Internet arbeiten können sowie ich Anwendungen schreiben will, die systemnaher sind (z.b.: Zugriff auf Ports oder Hardware).

Vielleicht ist das aber auch nicht möglich, deshalb bitte ich um Erklärung.

Den richtigen Weg von Anfang an gibt es nicht. Grundsätzlich bringt dich jede Kentniss weiter. Sprich wenn du C# und .net lernst, so hilft dir das Java zu verstehen und zu lernen, genauso wie du auch für C++ etwas lernst.
Solange du dich nicht auf schlechte Programmiersprachen wie VB versteifst, oder sehr
eigenwillige wie LIPS, wird dich jede Kentnis weiterbringen.
Eine schöne biblothek wurde schon vorgeschlagen Qt. Da ich absoluter Java Liebhaber bin, muss ich dir auch zu Java raten ;)

Kurz gesagt: Willst du dich auf Windows beschränken und Windows wirklich verstehen:
C++ & WinAPI
Willst du dich auf Windows beschränken, und GUIs und Webprogrammierung durchführen:
C# .net und ASP.net
willst du Plattformunabhängig programmieren:
C++ & Qt
willst du plattformunabhängig programmieren, webprogrammierung und Handyprogrammierung und dabei sexy wirken:
Java :)
 
Zurück