Natives C++ und die Verwendung in Betriebssystemen



  • Hi ich hab das hier gerade gelesen: http://www.c-plusplus.net/forum/p2167780#2167780

    Native C++ gehört nach wie vor zu den wichtigsten Programmiersprachen – bei der Entwicklung von Betriebssystemen, Treibern oder hochperformanter Software ist sie die erste Wahl.

    In welchem großen Betriebssystem wurden den C++ verwendet?
    Wurde in Windows in Linux nicht nur C und Assembler eingesetzt?



  • Ein Betriebssystem ist je nach Definition mehr als nur der Kernel.



  • skaselbat schrieb:

    Wurde in Windows in Linux nicht nur C und Assembler eingesetzt?

    Bei Linux sind das aber andere als rein technische Gründe.

    C++ wäre für den Linux-Kernel eigentlich ein Segen, wenn man trotzdem stets einen Blick auf Eleganz und Performance hat, wie sich das gehört.

    Aber es laufen zu viele C++-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben. Vor denen hat Linus ganz viel Angst.

    Natürlich laufen auch viele C-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben. Aber die schreiben wenigstens performace-orientiert. Mehr ist es nicht.

    Auf den Punkt gebracht:
    http://twitter.com/#!/ID_AA_Carmack/status/26560399301



  • volkard schrieb:

    Aber es laufen zu viele C++-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben.

    Kannst du mal definieren was C++-Kotz-Code ist?



  • <D|-< schrieb:

    volkard schrieb:

    Aber es laufen zu viele C++-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben.

    Kannst du mal definieren was C++-Kotz-Code ist?

    Wer sich mit C++ strikt an die Objekt Orientierung hält und Datenkapselung einsetzt (also setter getter Methoden implementiert usw.), der schreibt zwar gut wartbaren Code, aber der Code ist auch langsam gegenüber dem, was mit Zeigerarithmetik möglich wäre.



  • skaselbat schrieb:

    In welchem großen Betriebssystem wurden den C++ verwendet?

    AFAIK in Haiko, dem BeOS Plagiat.



  • volkard schrieb:

    Auf den Punkt gebracht:
    http://twitter.com/#!/ID_AA_Carmack/status/26560399301

    Oder:
    Bjarne Strousoup: "In C kann man sich leicht ins Bein schiessen. In C++ ist es schon schwerer, aber wenn, dann ist das ganze Bein weg!"



  • Kenner des Grundes schrieb:

    <D|-< schrieb:

    volkard schrieb:

    Aber es laufen zu viele C++-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben.

    Kannst du mal definieren was C++-Kotz-Code ist?

    Wer sich mit C++ strikt an die Objekt Orientierung hält und Datenkapselung einsetzt (also setter getter Methoden implementiert usw.), der schreibt zwar gut wartbaren Code, aber der Code ist auch langsam gegenüber dem, was mit Zeigerarithmetik möglich wäre.

    Nö. Getter und Setter werden wegoptimiert. Die Probleme sind viel einfacher. Dadurch, dass man bei C++ schnell mal eine Kopie anlegt, ohne groß nachzudenken (operator = sei Dank), entstehen hier und da gerne mal Performancefallen. C++ begünstigt halt unnötige Kopien, während man in C gleich Speicher anfordern und eine Funktion aufrufen muss.

    void foo(const std::string& s)
    {
      std::string s2 = s;
    }
    
    // Äquivalent zu
    
    void foo(const char* s)
    {
      char* s2 = malloc(strlen(s) + 1);
      if (s2)
      {
        strcpy(s2, s1);
        free(s2);
      }
    }
    

    An sich wäre das ja unproblematisch, die zweite Möglichkeit wird nicht viel schneller sein als die erste. Performanceprobleme entstehen aber, wenn man beispielsweise gar nicht den ganzen String hätte kopieren müssen, sondern nur einen Teil. Dass dieses Vorgehen dann hier nicht sinnvoll ist, fällt in C natürlich sofort auf, aber in C++ sieht man das schon schwerer. ("Ist ja nur ein = ")

    Und ähnliche Probleme ergeben sich, wenn man eigentlich auf dem Stack arbeiten und sich die Speicherreservierung vom Heap sparen könnte. (z.B. ein immer 100 byte großer vector<char> der in einer Schleife zerstört und wieder reserviert wird.)



  • cooky451 schrieb:

    void foo(const std::string& s)
    {
      std::string s2 = s;
    }
    
    // Äquivalent zu
    
    void foo(const char* s)
    {
      char* s2 = malloc(strlen(s) + 1);
      if (s2)
      {
        strcpy(s2, s1);
        free(s2);
      }
    }
    

    An sich wäre das ja unproblematisch, die zweite Möglichkeit wird nicht viel schneller sein als die erste. Performanceprobleme entstehen aber, wenn man beispielsweise gar nicht den ganzen String hätte kopieren müssen, sondern nur einen Teil. Dass dieses Vorgehen dann hier nicht sinnvoll ist, fällt in C natürlich sofort auf, aber in C++ sieht man das schon schwerer. ("Ist ja nur ein = ")

    Was soll das jetzt sein? Code der nichts sinnvolles macht sieht in C länger aus? Wo ist das "nur einen Teil kopieren"?



  • volkard schrieb:

    Auf den Punkt gebracht:
    [url=http://twitter.com/#!/ID_AA_Carmack/status/26560399301]
    http://twitter.com/#!/ID_AA_Carmack/status/26560399301[/url]

    👍
    Volle Zustimmung.

    Und nachdem ich Linus’ C++ Hass-Tirade gelesen hatte, lud ich mir mal den Kernel Quellcode und den Git Quellcode runter. Das ist für C-Verhältnisse recht gutes C, auch relativ objektorientiert sogar teilweise mit „Destruktor-Emulation“ 😉 In Git ist mir noch die Buffer-Datenstruktur aufgefallen. Mein Fazit soweit: Spätestens mit C++11 kann man die Funktionalität exakt aber um einiges eleganter dank Move-Semantics in C++ abbilden („exakt“ im Sinne der Performanz).



  • krümelkacker schrieb:

    volkard schrieb:

    Auf den Punkt gebracht:
    [url=http://twitter.com/#!/ID_AA_Carmack/status/26560399301]
    http://twitter.com/#!/ID_AA_Carmack/status/26560399301[/url]

    👍
    Volle Zustimmung.

    Und nachdem ich Linus’ C++ Hass-Tirade gelesen hatte, lud ich mir mal den Kernel Quellcode und den Git Quellcode runter. Das ist für C-Verhältnisse recht gutes C, auch relativ objektorientiert sogar teilweise mit „Destruktor-Emulation“ 😉 In Git ist mir noch die Buffer-Datenstruktur aufgefallen. Mein Fazit soweit: Spätestens mit C++11 kann man die Funktionalität exakt aber um einiges eleganter dank Move-Semantics in C++ abbilden („exakt“ im Sinne der Performanz).

    Also ist C++ "nur" 20 Jahre zu spät soweit, dass man es verwenden kann.





  • Linus about C++ schrieb:

    thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

    👍 Jetzt versteh ich was volkard will und das Problem das Linux und C++ Fanboys haben.



  • volkard schrieb:

    skaselbat schrieb:

    Wurde in Windows in Linux nicht nur C und Assembler eingesetzt?

    Bei Linux sind das aber andere als rein technische Gründe.

    http://lkml.indiana.edu/hypermail/linux/kernel/0604.3/0964.html





  • Linus about C++ schrieb:

    volkard schrieb:

    skaselbat schrieb:

    Wurde in Windows in Linux nicht nur C und Assembler eingesetzt?

    Bei Linux sind das aber andere als rein technische Gründe.

    http://lkml.indiana.edu/hypermail/linux/kernel/0604.3/0964.html

    The real problem with C++ for kernel modules is:

    - the language just sucks. Sorry, but it does.



  • Kenner des Grundes schrieb:

    <D|-< schrieb:

    volkard schrieb:

    Aber es laufen zu viele C++-Deppen rum, die man nicht an einem Kernel herumschrauben lassen sollte, weil sie Kotz-Code schreiben.

    Kannst du mal definieren was C++-Kotz-Code ist?

    Wer sich mit C++ strikt an die Objekt Orientierung hält und Datenkapselung einsetzt (also setter getter Methoden implementiert usw.), der schreibt zwar gut wartbaren Code, aber der Code ist auch langsam gegenüber dem, was mit Zeigerarithmetik möglich wäre.

    C++-K-Code wird von Leuten geschrieben, die meinen, Datenkapselung sei langsam und Zeigerarithmetik viel sinnvoller. C++ ist halt gerade deshalb so grossartig, weil man Abstraktion (z.B. durch getter und setter) ohne Overhead (durch inlining ovn gettern und settern) bekommt, ohne dass man diese fehleranfällige und schlecht wartbare Zeigerarithmetik verwenden muss.

    Aber Volkards Link ist grossartig. Da kann ich nur voll zustimmen. Mit C++ lässt sich viel schlechterer Code schreiben, als mit den meisten anderen Programmiersprachen. Aber auch viel besserer, wenn man das entsprechende Know-How mitbringt. Es laufen einfach zu viele Anfänger rum, die sich C++ Profis nennen. Und mehrere Jahre C++-Erfahrung bedeutet nicht zwangsweise, dass einer ein guter C++-Programmierer ist.



  • I find C++ developing way more orgainzed than C



  • tntnet schrieb:

    Es laufen einfach zu viele Anfänger rum, die sich C++ Profis nennen. Und mehrere Jahre C++-Erfahrung bedeutet nicht zwangsweise, dass einer ein guter C++-Programmierer ist.

    Heute in diesem Forum gelesen: "Ich habe lange genug Informatik studiert, um hier fachliche Lösungen geben zu können." höhö
    ~(War zwar C, aber diese Art Anfänger sind es wohl.)~



  • Manchmal wäre ich zu gerne Leiter der Programmierabteilung eines Unternehmens oder wie man sowas nennt. Denen würde ich auf die Finger klopfen, bis sie kündigen 🤡


Anmelden zum Antworten