Low Level / Highlevel Programmieren

...komplette Frage anzeigen

6 Antworten

High-/Low-Level würde ich in soweit unterscheiden, wie der Compiler/Interpreter mitdenkt.

Als Vergleich könnte ich da gut PHP und C++ nehmen. PHP ist typenschwach. Das heißt ich brauch Variablen weder deklarieren, noch muss ich darauf achten, was ich darin speichere. So kann ich in PHP einer Variablen im ersten Fall eine Zahl zuweisen und im zweiten Fall z.B. eine Zeichenkette. Ich kann in PHP auch sagen, "a=1" und "b='hallo'. Rechne ich dann c=a+b, so wird mir PHP in der Variablen c den Wert '1hallo' ausgeben. PHP konvertiert also automatisch und ändert ggf. auch den Variablentyp. C++ macht das nicht. Zum einen muss man Variablen deklarieren, als zwingend einen Datentyp verpassen, zum anderen kann man nicht einfach eine Zahl mit einer Zeichenkette addieren. Diese Art von Typecasting wird in C/C++ nicht nativ unterstützt. Ebenso kann man in PHP auch rechnen a=3/2. In a wird dann 1,5 stehen. Deklariere ich in C++ die Variable a als float oder double und rechne a=3/2, so wird 1.0 herauskommen, da C++ die Ausgangszahlen als Ganzzahlen interpretiert und auch so rechnet. Hier müsste man explizit angeben entweder a=(double)3/2 oder a=3.0/2.0. C++, so könnte man sagen, denkt hier nicht mit.

Arrays sind da auch ganz eigen. Ich kann in C++ (im Gegensatz zu PHP) nicht sagen ein Array hat die Länge 10 und ich füge einfach noch ein 11. und 12. Element hinzu mit a[10]=x und a[11]=y. In C++ muss man dazu erst einen weiteren array erstellen der die entsprechende Länge hat und dann den alten array in den neuen kopieren. PHP macht sowas automatisch.

Noch ein Beispiel, wenn ich in C++ einen Zeiger auf einen Speicherbereich erstelle mit int *puffer = new int[1000]; so kann ich später nicht einfach sagen puffer = new int[2000];. Man muss vorher zwingend delete puffer; ausführen, sonst wird der Speicher nicht freigegeben und man hat ein Speicherleck, da der Speicher nicht mehr zur Verfügung steht, aber immernoch im Programm reserviert ist. Bei PHP ist das durch den Garbage Collector egal. Der gibt solche "Lecks" automatisch frei.

Und da gibts noch zig andere Dinge, wie dass man Funktionen in PHP auch in Variablen speichern kann, etc...

All diese Dinge sind zwar in PHP toll, weil sie die Arbeit erleichtern, aber führen auch massig neue Fehlerquellen ein, da eben PHP einem das Denken teils zu sehr abnimmt. Man macht sich weniger einen Kopf, was man macht und schleudert wild mit Variablen und sonstigen Raffinessen um sich. Wenn man in PHP eine Zahl als Ergebis braucht, aber eine Variable eine Zahl und die andere ein Buchstabe ist, juckt das PHP nicht. Aber das Programm wird nicht das machen, was es soll. C++ meckert schon während des Programmierens herum, dass die Typen ungültig sind oder nicht umgewandelt werden können. Das ist low-level, ja, zwingt aber dazu, darauf zu achten, dass alles passt.

Die berühmten Programmierspachen die man so kennt wie C++, Java, PHP, etc. sind alles highlevel Programmiersprachen, da sie auf der obersten Schicht des PCs arbeiten. Low Level Sprachen sind solche mit direktem Zugriff auf einzelne Prozessorschritte und Speicherelemente wie Assembler. Da sind auch die Programme einfacher aufgebaut

Diese Einteilung ist eigentlich sehr schwammig. Jede Sprache wird im Endeffekt in Maschinencode umgewandelt, das ganze muss ja ausgeführt werden, als kannst du ohne weiteres auch in Python ein Betriebssystem Programmieren, wenn ich mich nicht ganz täusche. Du müsstes in diesem Fall halt die komplette Python Bibliothek mitschleppen und in den Speicher laden.

Ich würde sagen, dass diese Einteilung eher so zu sehen ist für was die Sprache "eher" gemacht ist. Es macht einfach keinen Sinn einen String in Java als eine Folge von Bytes im Speicher zu sehen so ist Java einfach nicht gestrickt. Wohingegen das bei C durchaus Sinn macht. C wird heutzutage auch als "Low-level" gesehen . Aber auch nur wieder weil es praktischer ist - du wirst Schwierigkeiten haben ein Java Programm auf einem Mikrocontroller laufen zu bekommen weil du einfach wissen musst "WAS liegt WO in meinem RAM/ROM. Du brauchst die volle Kontrolle und kannst dir nicht von einem Interpreter und tausend Java-Kram mit reinpfuschen lassen.

Am PC macht es aber durchaus Sinn eine größere Datei und nicht wirklich messbar langsameres Programm in Kauf zunehmen um leichter wartbaren, schöneren und einfacheren Code zu bekommen.

Das ganze nennt sich dann halt "High-Level".

Du musst das relativ zueinander betrachten. Maschinencode ist die niedrigste Ebene. Assembler eine Stufe höher aber ohne Abstraktion. C ist immer noch sehr maschinennah und wird heutzutage von vielen als low-level betrachtet. Leute die C++ als low-level bezeichnen meinen das im Vergleich zu "moderneren" Sprachen wie Java oder C# die Features wie z.B. den Garbage Collector haben.

Je höher die Sprache abstrahiert desto bequemer wird das Programmieren, aber durch den Overhead (GC, Laufzeitinterpreter, ...) kostet das natürlich Performance.

Das heißt C und C++ könnten sowohl Highlevel als auch Lowlevel sein, verstehe ich das richtig?

0
@JustDontSmile

Ja, mehr oder weniger. Kommt halt darauf an womit Du die vergleichst. Und wie Du die benutzt. Es ist in C++ möglich immer noch sehr systemnah zu programmieren und auf höhere Features wie zB Vererbung und Polymorphie komplett zu verzichten.

1
@werbinichbinwer

oder die schöne, undefinierte Taste, die da lautet????

kommt immer darauf an, was man machen will

aber das meiste lässt sich mit viel Erfahrung in viel kleinere Dateien in reinem C# gehalten, umschreibseln, und das ist dann schon echt höherer Anspruch an die Programmierung selbst

;)

0

reines C# hat es schon vor 30 Jahren gegeben, gute Progger baun Quelltext mit fünf Zeilen, wo andere mit C++ hunderte Zeilen verwenden

;)

Assembler wurde früher gerne verwendet, um Schaltungen von Mainboards zu konfigurieren, heutzutage werden nur kleinere Abwandlungen davon mit weit unter der Oberfläche arbeitenden Scripts verknüpft, schneller, besser, usw.

viel davon ist schon vor 25 Jahren entstanden, wird aber in der heutigen Programmierung relativ selten eingesetzt, also nur von erfahrenen ASSEN, ums mal so zu formulieren

Fazit::::::

Warum viel Programmcode schreibseln, wenn es einfacher auch geht?????

Es hat noch keinen C# und C++ Progger gegeben, der nicht noch von "Alten Hasen" lernen konnte

;)

Verstehe nicht genau was das mit der Frage zu tun hat.

C# gab es doch nicht vor 30 Jahren.

gute Progger baun Quelltext mit fünf Zeilen, wo andere mit C++ hunderte Zeilen verwenden

C++ Programmierer sind also keine guten progger?

0

den Beitrag halte ich für Unfug. sorry

1

C# wurde vor etwas über nem Dutzend Jahren von MICROS~1 entwickelt. Ich weiß jetzt also nicht, wie Du auf 30 Jahre kommst.

Ich kann mir auch nicht erklären, wie Du - mit was auch immer - mehrere hundert Zeilen Quellcode in 5 Zeilen Code packen willst. Perl ist ja schon platzsparend, aber selbst damit kann man Code nicht so enorm packen.

Fazit ist und bleibt aber, dass deine Antwort rein gar nichts mit der Fragestellung zu tun hat. Wenn Dein Quellcode zu einem Problem so aussieht, wie deine Antwort zu dieser Frage, na dann Prost Mahlzeit!

1

c und c++ sind höhere Programmiersprachen, wobei sie noch systemnäher sind als beispielsweise Java. Die welt ist nicht schwarz-weiß. die Unterscheidung ist als Abstraktion relativ zum CPU Befehlssatz gemeint.

Was möchtest Du wissen?