Hallo,
Wer Low Level programmieren will, muss die Architektur, auf der er arbeitet, wie seine Westentasche (auswendig) kennen.
muss nicht, das kommt mit der Zeit, am Anfang reicht sich die specs sehr oft durchzulesen.
Sonst bringt das ueberhaupt nichts.
Ja klar, wenn man das Konzept nicht versteht, dann sollte man vielleicht besser aufgeben.
Auch wird ein x86-Spezi niemals eine m68k-Arch gut beproggen.
Hab selber keine Erfahrung mit anderen CPU's als x86-reihe, aber von-neumann-ähnlich sind sie doch (fast?) alle. Man wird sich auch in mehrere Architekturen einarbeiten können.
Ein Compiler ist niemals in der Lage, den menschlichen Hintergedanken zu entdecken;
Wozu sollte er den genauen Hintergedanken erkennen?
Und wieso sollte er nicht in der Lage sein, das zu können?
Das Stichwort heißt AI!
ein nichtoptimierter Alghorithmus in Assembler kann langsamer sein als ein hochoptimierter in Basic (nicht kompiliert!).
ja, das stimmt
Gewisse Teile kann ein Compiler beschleunigen und mit der Masse an Anweisungen nimmt auch die Effizienz zu (ein Mensch kann keine 10 Mio Asm-Lines optimieren)
Ein Compiler beschleunigt nicht, er übersetzt eine Hochsprache in asm-code. Dieser kann attribute von langsam bis maximal optimiert bekommen
- aber das Grundprinzip muss stimmen.
Du meinst die Algorithmen und das framework. ja
Ein Microkernel wird immer langsamer sein, als ein Monolithischer - wenn beide gut designed sind.
kommt auf die Definitionen an.
Ein schrottiger Monolithischer ist langsamer als ein guter Microkernel. Und so geht es weiter.
jupp
Streitet euch ueber x verschiedene Sprungmöglichkeiten;
ne haben wir nicht gemacht
bringen tut es doch nix.
in dem sinne, "bringen täte es doch nichts"
Wie Roshl schon sagte, man muss Programmieren können - und zwar nicht nur technisch, sondern auch vom Grundgedanken her.
Was ist technisch programmieren können? meinst du theorethisch?
Und müssen tut man es nicht, sehr viele Menschen kommen auch ohne aus, auch wenn ich sie bedauere
Die Frage Asm oder Nicht-Asm ist eine Designfrage; gewisse Teile kann man so wesentlich beschleunigen.
genauso gut, kann man so gewisse Teile verlangsamen.
Ich würde nicht von mir behaupten, das ich zu den allerbesten asm-codern gehöre, das wäre selbstüberschätzung, aber die meisten Techniken kenne ich. Trotzdem würde ich nicht behaupten, das ich mit gleichem Aufwand, gleich guten, gleich viel machenden c, wie asm-code produzieren kann. Wenn ihr so gozu seid, dann bitte
Der Grossteil eines OS' muss aber nicht extremoptimiert werden.
müssen tut auch nix, aber hast schon recht
Du bist mir sympathisch^^
Ich halte nichts davon wenn man sonstwelche Programmiersprachen kann, wenn man das programmieren selbst nicht kann.
ja, stimmt schon, aber wer kann sowas und kann nicht programmieren? kann er dann die Programmiersprachen überhaupt? Er kennt dann nur die Syntax
Die Sprache sollte nur das Mittel zum Zweck sein.
Ja, aber C und asm haben zwei verschiedene Zwecke,
c teilt den Programmablauf mit,
asm teilt die Befehlsfolge für die endgültige binary mit.
Die Performancegrenzen liegen letztlich in der Assemblersprache, schneller kann es nicht werden, man kann schliesslich keine neuen Opcodes erfinden (noch nicht).
Naja, also eigentlich wurden ja mit mmx/3d now/sse/sse2/sse3 usw. neue opcodes erfunden
Aber so reduziert ist das thema nicht, es geht ja nicht darum irgendwelche befehle wild aneinander zubringen, aber das weißt du ja
Ein Compiler kann zwar optimieren bis zum was-weiss-ich-was, erreicht letztlich aber nur eine unendliche Annäherung an die
Assemblersprache.
Assemblersprache ist einfach nur die abstraktion der binärcodierten Maschinenbefehle in menschen verständlicherer Sprache.
Der Compiler übersetzt C-Code in diese Sprache, das macht er gut oder schlecht. Wenn eine maximal optimierte Übersetzung für eine bestimmte Zielplattform existiert und diese Zielplattform deterministisch arbeitet, dann ist diese maximale optimierte Übersetzung auch auffindbar, nicht nur assoziativ durch Menschen, sondern auch algorithmisch.
Und assoziatives denken (!) werden irgendwann auch Computer können.
Achja beachtet jemand, dass ein Compiler auch von Menschen programmiert wurde? Also wird die Optimierungsroutine von denen versaut kann der Compiler nix^^ und die meisten würden es hier nichtmal merken, da sie einfach blind als gut annehmen was der Compiler ausgibt.
Wie gesagt, ich guck mir meinen Code oft im disassembler an.
Mir fallen eigentlich nur selten redundanzen auf, der Rest ist fast immer sehr gut übersetzt.
Und meist wird der Compiler nicht nur von einem Menschen programmiert. Beim gcc, kann man auch selber nachbessern, wenn man es denn sogut kann.
MfG
DDR-RAM