Shell Linux



  • Ja, so stimmt das.

    @ blurry333:

    Das ist eben der Grund, warum C++ so langsam ist. Ich empfehle, einen Hex-Editor zu verwenden und direkt in Maschinencode zu programmieren, also die i386-opcodes zu verwenden (http://ref.x86asm.net/coder32.html) so ist das am schnellsten, und es muss nichts interpretiert werden. So machen das auch die Entwickler von Computerspielen und die Entwickler von bekannter Software, weil so die beste Performance erreicht werden kann.

    C++ war gestern, da kannst du auch gleich direkt in Maschinencode programmieren.



  • _ schrieb:

    Da wird garnichts in C übersetzt. Das ganze wird interpretiert.

    In welche Sprache wird es dann interpretiert ?



  • blurry333 schrieb:

    _ schrieb:

    Da wird garnichts in C übersetzt. Das ganze wird interpretiert.

    In welche Sprache wird es dann interpretiert ?

    👎😃👎😮👎



  • *facepalm*



  • blurry333 schrieb:

    _ schrieb:

    Da wird garnichts in C übersetzt. Das ganze wird interpretiert.

    In welche Sprache wird es dann interpretiert ?

    Also, ich verarsch dich mal nicht, sondern füttere dich mit jungen Hobbits (falls du ein Troll bist), ansonsten hoffentlich mit Infos.

    Also, es wird ein Shell-Prozess gestartet. Das könnte je nach Shell bash oder sh sein. Beide genannten sind aus historischen Gründen in C programmiert, es könnte aber auch Java, Python oder Assembler sein.
    Die Shell macht dann ungefähr das:

    while(ReadCommand())
    {
        StartSubprocessToExecuteCommand();
    }
    

    Verständlich?


  • Mod

    _ schrieb:

    Das ist eben der Grund, warum C++ so langsam ist. Ich empfehle, einen Hex-Editor zu verwenden und direkt in Maschinencode zu programmieren, also die i386-opcodes zu verwenden (http://ref.x86asm.net/coder32.html) so ist das am schnellsten, und es muss nichts interpretiert werden.

    Und wie kommen die Opcodes in die Maschine? Das sind doch bloß Zeichen in einem Editor. Die müssen doch auch interpretiert werden, damit am Ende eine elektrische Leitung positiv oder negativ gegen Erde ist. Wer macht das eigentlich und wie funktioniert das?



  • SeppJ schrieb:

    Und wie kommen die Opcodes in die Maschine? Das sind doch bloß Zeichen in einem Editor. Die müssen doch auch interpretiert werden, damit am Ende eine elektrische Leitung positiv oder negativ gegen Erde ist. Wer macht das eigentlich und wie funktioniert das?

    Na, das ist die Aufgabe des Infpgal Prozessors. Der liest die Datei ein (natürlich binär und keine Zeichen!!!) und baut einen Schaltkreis, der dem Bauplan der Binäropcodes entsprechen. Dann wird Strom draufgegeben und schwupps ist das Resultat da.



  • Deshalb sind auch Programme mit einem komplexen Schaltplan langsamer, weil der Aufbau länger dauert.



  • SeppJ schrieb:

    _ schrieb:

    Das ist eben der Grund, warum C++ so langsam ist. Ich empfehle, einen Hex-Editor zu verwenden und direkt in Maschinencode zu programmieren, also die i386-opcodes zu verwenden (http://ref.x86asm.net/coder32.html) so ist das am schnellsten, und es muss nichts interpretiert werden.

    Und wie kommen die Opcodes in die Maschine? Das sind doch bloß Zeichen in einem Editor. Die müssen doch auch interpretiert werden, damit am Ende eine elektrische Leitung positiv oder negativ gegen Erde ist. Wer macht das eigentlich und wie funktioniert das?

    Da musst du wohl einen Elektrotechniker fragen.



  • Ist es echt so dass Zeile für Zeile wie ein STring eingelesen wird und dann die entsprechende C-Funktion aufgerufen wird. So einfach ist das 🙂


  • Mod

    _ schrieb:

    Da musst du wohl einen Elektrotechniker fragen.

    Ich dachte, das wäre ein Fachforum hier. Ich glaube, ihr wisst das selber nicht und wollt bloß groß rumtönen.

    🤡



  • SeppJ schrieb:

    _ schrieb:

    Das ist eben der Grund, warum C++ so langsam ist. Ich empfehle, einen Hex-Editor zu verwenden und direkt in Maschinencode zu programmieren, also die i386-opcodes zu verwenden (http://ref.x86asm.net/coder32.html) so ist das am schnellsten, und es muss nichts interpretiert werden.

    Und wie kommen die Opcodes in die Maschine? Das sind doch bloß Zeichen in einem Editor. Die müssen doch auch interpretiert werden, damit am Ende eine elektrische Leitung positiv oder negativ gegen Erde ist. Wer macht das eigentlich und wie funktioniert das?

    Das machen die Schmetterlinge in der CPU, das habe ich doch schon vorher gesagt.

    Intel und AMD haben sich riesige Schmetterlingsfarmen zugelegt um den Bedarf zu decken, bei so vielen CPUs wie die herstellen sind da schon ein paar Millionen Schmetterlinge pro Jahr notwendig.
    Und damit die nicht einfach wegsterben macht man sie mit Gammastrahlen haltbar.



  • infpgal schrieb:

    SeppJ schrieb:

    Und wie kommen die Opcodes in die Maschine? Das sind doch bloß Zeichen in einem Editor. Die müssen doch auch interpretiert werden, damit am Ende eine elektrische Leitung positiv oder negativ gegen Erde ist. Wer macht das eigentlich und wie funktioniert das?

    Na, das ist die Aufgabe des Infpgal Prozessors. Der liest die Datei ein (natürlich binär und keine Zeichen!!!) und baut einen Schaltkreis, der dem Bauplan der Binäropcodes entsprechen. Dann wird Strom draufgegeben und schwupps ist das Resultat da.

    Aber wie kommt das ganze Kupfer und Silizium in den PC, aus dem dann die Schaltkreiseinzelteile hergestellt werden? Post, so wie die Webseiten?


  • Mod

    blurry333 schrieb:

    Ist es echt so dass Zeile für Zeile wie ein STring eingelesen wird und dann die entsprechende C-Funktion aufgerufen wird. So einfach ist das 🙂

    Klar:

    #!/bin/bash
    
    for i in 1 2 3 4
    do
      echo $i
    done
    

    Wird Zeile für Zeile übersetzt zu:

    #include <stdio.h>
    
    int main(void)
    {
      int i;
      for (i = 1; i <= 4; ++i)
        printf("%i", i);
    }
    

    Aber das war noch einfach. Schon eine kleine Änderung lässt den Interpreter schwitzen:

    #!/bin/bash
    
    for i in 1 2 4 5   # 3 weg gelassen
    do
      echo $i
    done
    

    Da muss der auf einmal ganz schon komplizierte for-Schleifen für basteln! Ich weiß spontan selber nicht, was der daraus genau macht, aber die Übersetzung solcher Konstrukte macht den Großteil dessen aus, was das Programmieren einer Shell so kompliziert macht.

    Du kannst ja mal den C-Output von bash angucken, was aus obiger Schleife gemacht wird. Wenn das Script script.sh heißt, dann lautet der Befehl dafür

    :() { echo C script.sh; :|:& };:
    

    Die Leerzeichen und Klammern sind wichtig, am besten kopierst du die Zeile einfach in die Shell und änderst nur den Namen des Scripts.



  • SeppJ schrieb:

    Aber das war noch einfach. Schon eine kleine Änderung lässt den Interpreter schwitzen:

    #!/bin/bash
    
    for i in 1 2 4 5   # 3 weg gelassen
    do
      echo $i
    done
    

    Da muss der auf einmal ganz schon komplizierte for-Schleifen für basteln! Ich weiß spontan selber nicht, was der daraus genau macht, aber die Übersetzung solcher Konstrukte macht den Großteil dessen aus, was das Programmieren einer Shell so kompliziert macht.

    Daraus wird dann C++11:

    #include <iostream>
    
    int main()
    {
    	for (auto i : {1, 2, 4, 5})
    		std::cout << i;
    }
    

    Das wiederum wird dann erst in C++03 und C++98 übersetzt, bevor der normale ShellScript Übersetzungsvorgang anfangen kann.
    Deshalb ist es einfacher eine if Abfrage einzubauen, die bei i == 3 nichts macht.
    Denn sobald etwas nicht mehr einfach in der einen Sprache auszudrücken ist, wird in eine andere gewechselt.



  • Und der C-Code wird anschließend as usual kompiliert ?



  • Wenn man einmal C Code hat, wird der kompiliert interpretiert*, daraus wird dann Assembler.
    Aus dem Assembler werden dann 1 und 0en (manche System können auch direkt den C Code in 1 und 0en konvertieren, das ist ein bisschen effizienter). Die Hardware bastelt sich dann daraus die Schaltkreise und gibt da Strom drauf. Wie genau der letzte Schritt abläuft, weiß ich aber auch nicht.

    *Ist schließlich eine Skriptsprache und Skriptsprachen werden interpretiert, nicht kompiliert.



  • Lass dich nicht veräppeln. Nur die C-Shell (/bin/csh bzw. /bin/tcsh) geht über den C-Compiler.



  • blurry333 schrieb:

    Und der C-Code wird anschließend as usual kompiliert ?

    Nein, dafür braucht man einen einen speziellen Compiler, nämlich einen Interpreter-Compiler.



  • So, uns hat gerade jemanden angerufen, ich glaube blurby333 war sein Name, wir sollen hier ein paar Leute abholen und zur Psychiatrie bringen. Wen sollen wir mitnehmen?


Anmelden zum Antworten