Die feinen Unterschiede der Programmiersprachen

DefconDev

Commander
Registriert
Jan. 2008
Beiträge
2.601
Daaron schrieb:
Dein Bagger scheitert, wenn du einen einzelnen (z.B. kranken) Baum in einem Waldstück fällen willst/musst.
Axt und Säge scheitern, wenn du keinen Stumpf mehr haben willst.

Das Werkzeug spielt schon eine Rolle. PHP ist z.B. für reine Desktop-Anwendungen gänzlich ungeeignet

Dann war meine Analogie fürn Arsch. Selbst wenn er mit PHP anfängt, wird ihm ein Einstieg in die anderen Sprachen leichter fallen, also er fängt nicht jedes mal von Null an. Daher ist es in meinen Augen schon egal womit er anfängt.
Ergänzung ()

S.Kara schrieb:
Ich kann das mit Java in Autos jetzt auch nicht so ganz glauben. C++ braucht wesentlich weniger Ressourcen als Java - ich würde schon sagen dass es deshalb eher zum Einsatz kommt. Ich glaube kaum, dass da in irgendeinem Auto eine JVM läuft.

C++ ist bei GUI's alles andere als ausgestorben. Es ist nur einfach so, dass Java leichter zu lernen und zu managen ist C++ und man in den meisten Fällen die Nachteile von Java gegenüber C++ keine Rolle spielen (Performance, ...).

C++ wesentlich weniger ressi-lastig als Java, dafür will ich aber ne Quelle sehen!? Und das mit der Performance ist auch je nach Anwendungsgebiet auch nicht mehr richtig. Testweise habe ich mal in Java und in C++, Primzahlen errechnet und in dem Beispiel war Java um einiges schneller. Vergleiche haben ich dann auch in einem Programmierforum gezogen. Java war in dem Bespiel immer schneller. Aber c++ ist keineswegs ausgestorben oder wird kaum noch genutzt, subjektiv betrachtet, bezogen aufs berufliche Umfeld durch Freunde und Bekannte, würde ich fast behaupten es hält sich die waage. Wie es weltweit aussieht kann ich nicht beurteilen.


Edit von e-Laurin:
Abgetrennte Diskussion von hier: https://www.computerbase.de/forum/threads/programmiersprache-fuer-neuling-mit-gui.1351297/
Bitte diesen Post beachten: https://www.computerbase.de/forum/t...grammiersprachen.1354697/page-3#post-15781888
 
Zuletzt bearbeitet von einem Moderator: (Themen geteilt)
AW: Programmiersprache (für Neuling) mit GUI

Hades85 schrieb:
C++ wesentlich weniger ressi-lastig als Java, dafür will ich aber ne Quelle sehen!?
Java:
Code:
public class test {

	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		for (int i = 0; i < 10; i++) {
			System.out.println(i + 1);
			Thread.sleep(1000);
		}
	}

}
C++:
Code:
#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>
#include <windows.h>

 int _tmain(int argc, _TCHAR* argv[]) 
{
	for (int i = 0; i < 10; i++) {
		printf_s("%d\n", i + 1);
		Sleep(1000);
	}
	return 0;
}
Die Java-Anwenung braucht ~12,5 MB RAM, die C++-Anwendung nur ~2,2 MB.

Hades85 schrieb:
Und das mit der Performance ist auch je nach Anwendungsgebiet auch nicht mehr richtig. Testweise habe ich mal in Java und in C++, Primzahlen errechnet und in dem Beispiel war Java um einiges schneller. Vergleiche haben ich dann auch in einem Programmierforum gezogen. Java war in dem Bespiel immer schneller.
Dann war der C++-Code schlecht geschrieben, anders kann ich mir das nicht erklären.
 
AW: Programmiersprache (für Neuling) mit GUI

Hades85 schrieb:
Gibt es überhaupt Menschen die in C GUI's entwickeln?
Charles Petzold:

http://read.pudn.com/downloads66/ebook/238647/Programming Windows Fifth Edition.pdf

Geht doch nichts über ein hübsches WINAPI WinMain() mit einer while(GetMessage())-Hauptschleife und eine herrliche LRESULT CALLBACK WndProc() :)

Wer mehr Kontrolle über sein Programm will, darf statt GetMessage() auch PeekMessage() verwenden ;)
Ergänzung ()

@S.Kara: nicht wenige Leute würden über deinen C++ Code sagen, dass es gar kein C++ Code sei, sondern C-Code. Um bei solchen Leuten als C++ Code durchzugehen, müsste zumindest die Zeilen
Code:
#include <stdio.h>
// ...
printf_s("%d\n", i + 1);
ersetzt werden durch
Code:
#include <iostream>
// ...
std::cout << i + 1 << std::endl;
 
AW: Programmiersprache (für Neuling) mit GUI

Jap, es gibt eigentlich keinen schlüssigen Grund den stdio in einem C++ Programm zu verwenden. Es ist sogar ziemlich schlechter Stil.
 
AW: Programmiersprache (für Neuling) mit GUI

Dann würde ich den Leute sagen, dass sie sich bei Embarcadero beschweren sollen. Ich habe ein C++ Projekt gestartet und die IDE hat mir den Header selbständig angelegt. :)
Außerdem: Zeile 16. ^^
 
AW: Programmiersprache (für Neuling) mit GUI

So würde das ganze mit sauberem C++11 Code aussehen. ;)
Code:
#include <iostream>
#include <thread>
#include <chrono>

int main()
{
    for(int i = 1; i < 11; i++)
    {
        std::cout << i << std::endl;
	std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}
 
AW: Programmiersprache (für Neuling) mit GUI

Jack159 schrieb:
In Autos kommt auch Java zum Einsatz? O.o
ja, die GUI. sogar die programme mit denen du die daten aus den autos ziehst sind oft in java. hardware + software als gesamtpaket pro stück ab 30k € (je einmal verbaut pro auto und teststand im büro).
 
AW: Programmiersprache (für Neuling) mit GUI

Bei der Installation von Java sieht man ja immer die Werbung "Läuft auf Milliarden von Geräten" im Installer. Damit sind nicht (nur) die Anzahl der PCs gemeint. ;)
Die meisten wären überrascht, wo Java eigentlich alles läuft.
 
AW: Programmiersprache (für Neuling) mit GUI

S.Kara schrieb:
Außerdem: Zeile 16. ^^
?

S.Kara schrieb:
Dann war der C++-Code schlecht geschrieben, anders kann ich mir das nicht erklären.
jit, anyone?

man mag ja über performance und speicherverbrauch von c++ vs java mit der jvm und dem garbage collector streiten, aber den von dir genannten code als benchmark zu nutzen ist absurd.
man sollte sich schon etwas besser mit den technischen hintergründen und wesentlichen unterschieden von c++ und java beschäftigen, wenn man solche behauptungen aufstellt, deren hintergründe dir offensichtlich nicht klar sind.

ich arbeite übrigens täglich beruflich mit c++ und würde die sprache für dieses projekt auch gegenüber java bevorzugen, wenn ich die wahl hätte, habe also keinen bias richtung java.
 
Zuletzt bearbeitet:
AW: Programmiersprache (für Neuling) mit GUI

Hades85 schrieb:
C++ wesentlich weniger ressi-lastig als Java, dafür will ich aber ne Quelle sehen!? Und das mit der Performance ist auch je nach Anwendungsgebiet auch nicht mehr richtig.

http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=gpp&lang2=java&data=u64q
Eine nichtrepräsentative Zusammenstellung von kleinen Benchmarks. Wie man an den Namen erkennen kann, ist hier der Schwerpunkt eher auf wissenschaftliche Anwendungen gelegt worden. Wenn man sich in Tabelle unter Punkt 3 anschaut, ist nur ein Java Programm schneller, wo anscheinend kein C++ Multihreading Variante eingereicht wurde...
Wer das nötige Kleingeld hat, kann vielleicht mit dem Intelcompiler noch ein bisschen mehr rausholen. Kann man ja gerade in der aktuellen c't nachlesen, wie sehr der Intelcompiler gegenüber dem Visual Studio Compiler überlegen ist (keine Ahnung wie sich der gegenüber dem gcc verhält. Der gcc ist meiner Erfahrung auch dem VS Compiler haushoch überlegen)
 
AW: Programmiersprache (für Neuling) mit GUI

Keine Ahnung was "jit" heißen soll, aber wieso sollte mein Beispiel nicht für einen Vergleich nutzbar sein?

maxwell-cs schrieb:
man sollte sich schon etwas besser mit den technischen hintergründen und wesentlichen unterschieden von c++ und java beschäftigen, wenn man solche behauptungen aufstellt, deren hintergründe dir offensichtlich nicht klar sind.
Es ging um Ressourcen-Verbrauch und ich habe ja wohl deutlich gezeigt, dass Java hier wesentlich mehr RAM benötigt als C++. Was soll mich da ein technischer Hintergrund interessieren?
Ich musste beruflich schon öfters Anwendungen schreiben die möglichst wenig RAM benötigen, da würde niemand Java C++ bevorzugen.

Der Link von geisterfahrer bestätigt das ja auch noch einmal. Der Unterschied kommt mir da aber schon ziemlich krass vor, besonders bei n-body, spectral-norm, fasta-redux und fannkuch-redux.

Der VS ist aber tatsächlich nicht grad der beste, da kann man noch viel mit Inline-Assembler rausholen.
 
AW: Programmiersprache (für Neuling) mit GUI

Man muss fairerweise dazu sagen, dass der Ressourcenverbrauch für Desktop-Anwendungen zunächst eine komplett untergeordnete Rolle spielt und man den Fokus eher auf sauberen Code und gutes Design legt; Optimieren kann man danach immer noch dort, wo es wichtig ist.

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." (Knuth, Donald. Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.)
 
AW: Programmiersprache (für Neuling) mit GUI

Es ging ja auch nicht direkt um Desktop-Anwendungen, sondern um den Einsazt in Autos.
Da C++ (teilweise anscheinend deutlich) weniger Ressourcen als Java benötigt, braucht man hier weniger potente Hardware. Ich kenne keine Zahlen oder Fakten, aber der höhere und somit teurere Programmieraufwand (falls er überhaupt höher ist) müsste durch günstigere Hardware ja mehr als ausgeglichen werden können.
 
AW: Programmiersprache (für Neuling) mit GUI

Wir reden hier nicht von "C++ braucht 1GHz, Java 1.5GHz, um flüssig zu arbeiten", sondern wir reden hier oftmals von 4-5% Unterschied, wenn überhaupt. Das gleichst du wunderbar dadurch aus, dass du nur gegen die JVM programmieren musst, und nicht gegen spezifische Hardware.
 
AW: Programmiersprache (für Neuling) mit GUI

Es geht vielmehr um den RAM-Verbrauch.
Ich schrieb ja: "Die Java-Anwenung braucht ~12,5 MB RAM, die C++-Anwendung nur ~2,2 MB."
Das sind nicht nur läppische 4-5%, sondern vielmehr 400-500%.

Und hast du dir mal den Link von geisterfahrer angeschaut?
Ausgehend von der Programmlaufzeit brauchen die Programme dort in Java ~90% mehr CPU-Leistung als in C++. Wenn man jetzt noch auf eine spezifische Hardware optimiert, kann man mit C++ sicher nochmals einiges rausholen.
Mit C++ muss man aber garnicht unbedingt gegen spezifische Hardware optimieren, in vielen Embedded-Systemen läuft ja ein Linux-OS.
 
AW: Programmiersprache (für Neuling) mit GUI

Das skaliert aber nicht linear @RAM.
Natürlich braucht die JVM mit ihren ganzen Subsystemen (Security, Garbage Collector) immer etwas mehr Speicher, das Programm selbst aber nicht unbedingt.
 
AW: Programmiersprache (für Neuling) mit GUI

S.Kara schrieb:
Es geht vielmehr um den RAM-Verbrauch.
Ich schrieb ja: "Die Java-Anwenung braucht ~12,5 MB RAM, die C++-Anwendung nur ~2,2 MB."
Bei einem 3-400MB - Programm, z.B. einer IDE oder einer Office-Suite, wäre der Overhead durch die JVM weiterhin nur bei nem guten Dutzend MB. Muss man alles relativieren.

Und hast du dir mal den Link von geisterfahrer angeschaut?
Ausgehend von der Programmlaufzeit brauchen die Programme dort in Java ~90% mehr CPU-Leistung als in C++.
Wenn die Programme wirklich bleeding edge sind, immer haarscharf am Limit. Also bitte, welche sind das?

Kleines Beispiel aus meiner tagtäglichen Arbeit: Wie erstelle ich ein DOM-Element per JavaScript / jQuery. Die üblichen Verdächtigen sind: $("<div>") vs $("<div></div>") vs $(document.createElement('div'))
Wenn man jetzt noch weiß, dass createElement ca. 4x so schnell ist wie die anderen beiden Ansätze, könnte man glatt aus dem Häuschen kommen. Da spart man sich doch glatt 2-3ms, wenn man 1000 DOM-Elemente erzeugt.

All diese tollen Benchmarks muss man immer in einem realistischen Kontext sehen. Was bringt es dir am Ende, wenn du in 0,1% der Fälle 100% performanter bist, in den restlicehn 99,9% die Kiste aber gähnt und wartet?

Mit C++ muss man aber garnicht unbedingt gegen spezifische Hardware optimieren, in vielen Embedded-Systemen läuft ja ein Linux-OS.
Nicht OPTIMIEREN, aber KOMPILIEREN.. Oder hast du schon mal ein normales Debian-Desktop-Paket auf nem Raspbian laufen lassen?
 
AW: Programmiersprache (für Neuling) mit GUI

Klar, bei 400 MB machen 10 MB mehr oder weniger nicht sonderlich viel aus. Wenn es aber um 200 zu 700 oder 0.8 zu 20 MB geht, ist das schon etwas anderes.
Und dass bei einer GUI keine Millisekunden entscheidend sind ist klar. Flüssig sollte es aber schon laufen und da kann es eben einen Unterschied machen, ob man nur eine CPU mit 500 oder mit 800 MHz benötigt.

Daaron schrieb:
Nicht OPTIMIEREN, aber KOMPILIEREN.. Oder hast du schon mal ein normales Debian-Desktop-Paket auf nem Raspbian laufen lassen?
Ich glaube nicht, dass die Hersteller ständig das OS wechseln. Die werden ihre Software für ein bestimmtes OS haben und wenn es ein Hardware-Upgrade gibt ist das der Software egal, da sich das OS ja darum kümmert.
Vielleicht hast du mich auch falsch verstanden. Ich wollte nicht sagen, dass C++ Plattformunabhängig ist. :)
 
AW: Programmiersprache (für Neuling) mit GUI

S.Kara schrieb:
Klar, bei 400 MB machen 10 MB mehr oder weniger nicht sonderlich viel aus. Wenn es aber um 200 zu 700 oder 0.8 zu 20 MB geht, ist das schon etwas anderes.
Ja, aber wie oft hast du ein Szenario, in dem du wirklich nur so eine Mini-Anwendung hast, dass der JVM-Overhead wirklich ins Gewicht fällt? Lad ein paar Grafiken oder Töne, schon wars das mit dem Overhead.
Denk nur an die Car-Entertainment - Systeme von heute.... Navi, Sprachsteuerung, Spotify-Client (Volvo), mp3, evtl. Video-Formate, Browser,... Denkst du, da scheißen sich 10MB JS-Overhead nicht total weg?

Flüssig sollte es aber schon laufen und da kann es eben einen Unterschied machen, ob man nur eine CPU mit 500 oder mit 800 MHz benötigt.
Jo, aber meist reicht es, einfach mal den Code auszumisten.

Ich glaube nicht, dass die Hersteller ständig das OS wechseln. Die werden ihre Software für ein bestimmtes OS haben und wenn es ein Hardware-Upgrade gibt ist das der Software egal, da sich das OS ja darum kümmert.
Linux != Linux.
Du kannst einen Kernel auf drölfzillionen Arten kompilieren, und so manche von den Varianten hat großen Einfluss auf die Lauffähigkeit von "Stock"-Software. Spätestens wenn du von einer x86-CPU auf einen ARM wechselst, oder von 32Bit auf 64Bit, ist Neukompilieren angesagt.

Bei Java entfällt der Mist. Da tauschst du nur die JVM aus.
 
AW: Programmiersprache (für Neuling) mit GUI

S.Kara schrieb:
Und dass bei einer GUI keine Millisekunden entscheidend sind ist klar. Flüssig sollte es aber schon laufen und da kann es eben einen Unterschied machen, ob man nur eine CPU mit 500 oder mit 800 MHz benötigt.

Man merkt bei GUI-Anwendungen aber schon i.d.R. den Unterschied, wenn man ein Java-Programm bedient oder ein C/C++-Programm. Java GUI-Programme fühlen sich irgendwie unflüssig/langsam an. Nicht viel, aber ein klein wenig.
 
Zurück
Oben