C++ oder doch C ?

Wenn du es einfach nur nebenbei machst, dann wirst du wahrscheinlich ein paar Sachen haben, die an der einen Sprache vorteilhaft sind und bei der anderen Sprache umständlicher sind oder ähnliches. Wenn du jetzt ein Jahr lang intensiv C++ gemacht hast: Was ist der Grund da jetzt abzuspringen? Du schreibst ja, dass es da noch vieles gibt, wo du vielleicht noch Lücken hast. Ist das nicht toll, dass du jetzt mit dem Rest so gut kannst, dass du jetzt Projekte machen kannst, wo du diese Lücken schließen kannst?

Wenn du mit C begonnen hättest würde ich da C stattdessen schreiben, aber versuch mal noch ein zwei Jahre. Ich glaube du wirst da vieles lernen, was dir, solltest du auf C oder sonst was umsteigen auch dort helfen wird. Ich bin dafür über den Tellerrand zu sehen, nur scheinst du gerade an einem Punkt zu sein wo du größere Projekte machen kannst, wo man nochmal viel lernt, aber ganz anderes als am Anfang. Vielleicht hast du ein größeres Projekt, das du gerne machen würdest oder wo du gerne mitarbeiten würdest. Da kannst du dich ja dann voll reinlegen, dann kommen ohnehin noch so neue Themen rund um Code-Design, Buldprozess, etc. dazu und dann noch all die Themen, die vom jeweiligen Projekt abhängig sind.

Lass dich von so Phasen des "aber Sprache X ist doch besser" nicht zu viel aufhalten. Die perfekte Sprache hat noch keiner geschrieben und alles was breit anerkannt in in der einen oder anderen Form in die Richtung geht findet verhältnismäßig(!) sehr wenig Anwendung. Ich denke da an LISP oder Scheme.

Ich glaube du bist mit beiden Sprachen gut bedient, würde dich also ermuntern hardwarenahe Programmierung einfach in C++ zu machen. Auch wenn ich nicht weiß in welche Richtung das gehen soll hat zumindest Haiku bewiesen, dass das ganz gut geht.
 
Lass dich von so Phasen des "aber Sprache X ist doch besser" nicht zu viel aufhalten.
Ach, das ist klar! :) Dazu habe ich schon zu viel gesehen, gelesen und gemacht, wenn auch niemals in einem ernsthaften Projekt. In den letzten Jahren habe ich Erlang und Lua benutzt, was Spass macht und wirklich produktiv ist. Aber spielen ist sicherlich eine gute Sache, ein ernsthaftes Projekt etwas anderes. Mich treibt immer die Frage um "warum" etwas so ist wie es ist und ich denke das das am besten zu verstehen ist wenn man die zugrunde liegende Design- und Implementierungs-Entscheidungen versteht. Daher jetzt C/C++. Letztlich ist es egal welche von beiden, vermutlich beide. Ich muss darin nicht perfekt werden, nur gut genug um irgendwann eine Entscheidung für mein ins Auge gefaßtes Projekt treffen zu können. Und dann werde ich mich noch mit Hardware beschäftigen müssen und Assembler lernen...
Auch wenn ich nicht weiß in welche Richtung das gehen soll...
Ach, ich bin noch in der Orientierungsphase: Zur Zeit interessieren mich z.B. die verschiedenen Varianten von Coroutinen, ihre jeweiligen Vor- und Nachteile, und wie die implementiert sind. Aber da gibt es noch einiges mehr...:)
...hat zumindest Haiku bewiesen, dass das ganz gut geht.
Sag mal mehr dazu, hört sich interessant an. Ich weiß von Haiku, habe es mir aber hinsichtlich des Design noch nicht näher angeschaut, - wohl weil ich z.Z. an GUI nicht besonders interessiert bin.

Nachtrag: Jo Armstrong, der Entwickler von Erlang, hat einmal gesagt dass programmieren im Gegensatz zu früheren Zeiten als Hobby tot ist. Das ist insofern richtig als die Dinge enorm komplex geworden sind und für einen Amateur kaum zu bewältigen. Andererseits gibt es immer mehr Leute die Zeit haben, sei es wie ich in Rente sind, arbeitslos sind oder reichlich geerbt haben. Es gibt schlimmeres als seine Zeit mit so etwas zu vertreiben.:cool:
 
Sag mal mehr dazu, hört sich interessant an. Ich weiß von Haiku, habe es mir aber hinsichtlich des Design noch nicht näher angeschaut, - wohl weil ich z.Z. an GUI nicht besonders interessiert bin.

Übermäßig viel kann ich nicht sagen, nur dass es immer hieß "Wenn du was hardwarenahes (wie ein OS) machen willst nimm C". Das war ziemlich lange ein Dogma und alle, die das vor allem außerhalb von irgendwelchen Research-Systemen getan hat wurden etwas belächelt. Das geht auch ziemlich leicht, weil mal ehrlich, auch wenn du C verwendest ist die Chance, dass dein OS kein großes Projekt wird und "stirbt" sehr hoch. Es ist immer leicht etwas auf eine Sprache zu schieben, wenn das der Unterschied ist, auch wenn diese Behauptung nicht durch mehr gestürzt wird als ein "Die Anderen machen es alle so".

Haiku hat C++ als Basis genommen und ganz generell stark objektorientierte Ansätze und zwar durchgehend (bis zum Bootloader). Ich müsste den jetzt raussuchen, aber es gibt zumindest einen Vortrag über die Erfahrungen mit dieser Art von OS-Entwicklung, die zumindest nicht die Norm darstellt. Ganz generell schienen sie selbst überrascht wie gut OS-Entwicklung und C++ miteinander funktionieren.

Solche Dogmen zu durchbrechen sind aus dem oben erwähnten Grund ziemlich schwer. Wenn du ein Projekt in einer ungewöhnlichen Sprache schreibst (oder auch irgendetwas anderes daran ungewöhnlich/neu ist), dann wird der Misserfolg sehr schnell damit in Zusammenhang gebracht, was in vielen Fällen Humbug ist. Mögliche andere Ursachen: Schlechtes Management, schlechte Programmierer, zu wenig Marketing, einfach die Tatsache, dass es schwierig ist oder das komplett andere Ursachen haben könnten werden oftmals nicht in Betracht gezogen, wenn du etwas herausstechendes hast, das dein Projekt unterscheidet.

Ich weiß, Haiku bereitet jetzt weder Microsoft, noch Apple und noch nicht mal Linuxdesktop-Distributionen Konkurrenz, aber von den Open Source Desktop-OS-Projekten die es in den letzten Jahrzehnten so gab scheint es doch ziemlich geglückt zu sein. Kurz bevor ihre erste Beta rauskam habe ich mir das mal ein wenig angesehen und auch wenn ich es keine Woche verwendet habe hat mich die Tatsache, dass weite Teile der Community überhaupt keine Techniker waren, also so garnicht und nicht mal BeOS-Fans doch unglaublich überrascht. Vergleicht man das mit so Projekten, wie AROS, ReactOS und ähnlichem leisten die exzellente Arbeit und haben quasi bewiesen, dass C++ eine gute Sprache für derartige Dinge sein kann.

Um's klarzustellen: Niemand hat bestritten, dass man das tun *kann*. Was ich mit dem Dogma meinte ist, dass es eben die Haltung gab (und sicherlich auch noch gibt), dass ein anständiges OS, zumindest bei den Low Level Teilen in C geschrieben ist. Ende der Diskussion quasi.

Dass das jetzt nicht gut ist für die Evolution von Softwareentwicklung ist dürfte klar sein und auch, dass das zu irrationalen Abneigungen was Programmiersprachen angeht führen kann. Im kommerziellen Bereich ist es natürlich noch ein wenig schlimmer, weil da mehr Druck ist.

Noch eine Kleinigkeit, um nicht falsch verstanden zu werden: Ich sage nicht, dass man alles anders machen soll, irgendwie das neueste vom neuen Verwenden muss (eigentlich ganz im Gegenteil. Ich finde es manchmal arg, wenn es heißt "der Code ist ein Jahr alt, also ist er schlecht", als hätte der ein Allaufdatum und dann würden wenn er ranzig wird Bugs reinkommen. Dementsprechend will ich auch C nicht als alt und ranzig darstellen. Das was ich sagen will ist, dass man Dogmen auch hinterfragen soll und sich trauen neue Wege zu gehen. Oft gibt es hinter Dogmen gute Gründe, manchmal ist es so, dass man ziemlich viel Wissen und Erfahrung braucht, um zu erkennen warum irgendwas Unsinn ist. Ab und an ist es so, dass diese Dogmen zu lange leben und etwa darauf beruhen, dass Rechner oder Betriebssysteme in den 80ern Limitierungen hatten, die dann ein Dogma begründet haben und die Leute gar nicht mehr wissen warum sie dieses "mach es so, aber auf keinen Fall so" im Hinterkopf haben.

Tut mir Leid, dass ich zu Haiku nicht viel mehr sagen kann, aber ich werde schauen, ob ich den Vortrag finde. Oder du bist schneller. :)
 
Athaba, danke für die Ausführung!

Ich habe mich auch gefragt warum Betriebssysteme nach wie vor in C geschrieben werden, und nicht in einer höheren Sprache. Das ist vermutlich nicht nur mit Tradition zu erklären. Ich denke ein wichtiger Grund ist dass C relativ (und zwar nur relativ!) einfach ist und daher ein C-Compiler faktisch überall zur Verfügung steht, und sei es durch cross-compiling. Ein weiterer Grund scheint mir zu sein dass man bei C vor Überraschungen ziemlich sicher ist, - allerdings nicht vor denen die man selbst produziert hat. Bei höheren Sprachen, die sich ja meist recht schnell weiter entwickeln, ist das nicht unbedingt der Fall. Man vergleiche mal nur die letzten C++ Standards und die Unterschiede zwischen den Compilern und StdLibs. Kleine Sprachen haben ihre Vorzüge! [*]
...hat mich die Tatsache, dass weite Teile der Community überhaupt keine Techniker waren, also so garnicht und nicht mal BeOS-Fans doch unglaublich überrascht. Vergleicht man das mit so Projekten, wie AROS, ReactOS und ähnlichem leisten die exzellente Arbeit ...
Das freut mich zu hören! Wie es scheint ist Programmieren als ernsthaftes Hobby doch noch nicht ganz ausgestorben. Verständlich dass das in solchen, eher randständigen Projekten sichtbar wird. Auch ein gutes Beispiel für ein spezialisiertes OS.

[*] Deswegen glaube ich nicht dass Rust - abgesehn von eingen guten Ideen - wirklich eine Zukunft hat.
 
Das ist vermutlich nicht nur mit Tradition zu erklären. Ich denke ein wichtiger Grund ist dass C relativ (und zwar nur relativ!) einfach ist und daher ein C-Compiler faktisch überall zur Verfügung steht, und sei es durch cross-compiling. Ein weiterer Grund scheint mir zu sein dass man bei C vor Überraschungen ziemlich sicher ist, - allerdings nicht vor denen die man selbst produziert hat. Bei höheren Sprachen, die sich ja meist recht schnell weiter entwickeln, ist das nicht unbedingt der Fall. Man vergleiche mal nur die letzten C++ Standards und die Unterschiede zwischen den Compilern und StdLibs. Kleine Sprachen haben ihre Vorzüge!
Da stimme ich dir voll und ganz zu, rubricanis. Es ist nicht nur damit zu erklären. Das sollte einem bewusst sein und ich will mit dem vorangegangenen Post keineswegs das Gegenteil behaupten. Nichts war als *nur* gemeint, sondern einfach so, dass das auch einen nicht zu unterschätzenden Einfluss hat.
 
Ich habe mich auch gefragt warum Betriebssysteme nach wie vor in C geschrieben werden, und nicht in einer höheren Sprache. Das ist vermutlich nicht nur mit Tradition zu erklären. Ich denke ein wichtiger Grund ist dass C relativ (und zwar nur relativ!) einfach ist und daher ein C-Compiler faktisch überall zur Verfügung steht, und sei es durch cross-compiling. Ein weiterer Grund scheint mir zu sein dass man bei C vor Überraschungen ziemlich sicher ist, - allerdings nicht vor denen die man selbst produziert hat. Bei höheren Sprachen, die sich ja meist recht schnell weiter entwickeln, ist das nicht unbedingt der Fall. Man vergleiche mal nur die letzten C++ Standards und die Unterschiede zwischen den Compilern und StdLibs. Kleine Sprachen haben ihre Vorzüge!

C hat da noch andere Gründe:
* ein Kernel ist ein "freestanding environment", es steht also sowieso keine STL etc. zur verfügung, also können viele Vorteile von C++ garnicht genutzt werden
* C Compiler sind deutlich einfacher als C++-Compiler, entsprechend haben obskure Hardwareplattformen oft erstmal nur eine C-Unterstützung, bis GCC portiert wurde
* meiner persönlichen Einschätzung nach kann Code-Bloat in C besser kontrolliert werden als in C++, und das ist bei Betriebssystemen nach wie vor ein relativ wichtiger Faktor

Aber C und C++ sind nach wie vor recht kompatibel, Singularity, eines von Microsofts Forschungssystemen, verwendet beispielsweise nur .cpp-Dateien, der Inhalt ist aber in vielen Fällen praktisch reines C (beispielsweise im Bootloader). Der Rest ist allerdings weitgehend in einem (eigenen) C#-Dialekt geschrieben, und die gewonnenen Erkenntnisse aus diesem Experiment sind in Microsoft Azure eingeflossen.

Außerdem sollte bedacht werden, dass Betriebssystementwicklung sich doch sehr stark von normaler Anwendungsentwicklung unterscheidet, dort sind die oben genannten Gründe eigentlich komplett irrelevant.
 
Ich tendiere eher zu C, da meiner Meinung nach stets die Komplexitaet von Software reduziert werden sollte.

Auf dem goldenen Mittelweg kommt es an.

Ist eine (weitestgehende) vom OS unabhaengige Abstaktion spezifiziert, bspw. Softwaremodulen die als Viewer
agieren oder eine top-half-layer eines (User)Interface oder eines Modells, dann kann der operative Einsatz von C++ eine Bereicherung, wenn bspw. die zugriundeliegende Architektur, der zu implementierenden Software, in diensterbringende Schichten strukturiert wurde.

Je hoeher der grand an Abstraktion von OS, je wahrscheinlicher die Implementierung von Teilschichten in C++.

Mal abgesehen davon, es ist sogar moeglich mit reinem C das OOP zu implementieren, bspw. hier.
 
Ich habe jetzt einige Zeit C benutzt und muss sagen dass durch das Fehlen von angemessenen Abstraktionen alles ziemlich kompliziert wird. Allein das Fehlen von Namespace macht es erforderlich sich alle möglichen Namen auszudenken und die dann auch noch mit einem prefix zu versehen. Na ja, geht schon, mit entsprechenden Makros bekommt man auch einiges geregelt - auch OOP wenn es denn sein muss - aber schön ist anders. :rolleyes:

Ich werde wohl reumütig zu C++ zurückkehren da ich inzwischen sehe wie ich bei meinem Projekt mit Exceptions umgehen bzw. die weitgehend oder auch ganz reduzieren kann. Insofern war dieser Ausflug nach C schon nützlich.
 
Für mich sehr einfach C. Ich kann C++ einfach nicht ausstehen. Und wenn es ein Objektorientiertes C sein soll, dann Objective-C. Nur über Geschmack lässt sich entweder gar nicht oder trefflich streiten.
 
Zurück
Oben