Autor Thema: C vs. C++ bzw. wo ist was sinnvoll?  (Gelesen 40821 mal)

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« am: 08. May 2005, 13:09 »
Hi,

damit ihr gleich meine Meinung kennt, ich wäre dafür alles in C++ zu machen. Es gibt nur sehr wenige Funktionen, die C kann, aber C++ nicht.
C++ verfügt aber über Sprachmittel, die C nicht kennt, wichtigste ist wohl Klassen und das diese Funktionen usw. haben, na ihr kannt das ja ;)

MfG
DDR-RAM

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. May 2005, 13:22 »
C++ wird zu fett und gibt durch die abstrakten teile zu wenig Kontrolle über den eigentlich produzierten Code, zudem ist es umständlicher C++ mit ASM zu mixen als C mit ASM...
ich bin eindeutig für C im Kernel. Über eine C++-API für Userland-Programme lässt sich aber reden ;)

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. May 2005, 13:37 »
der kernel an sich sollte wirklich C sein, C++ würd ich aber (vorallem wegen der Klassen) durchaus für die GUI verwenden, da is das ganze sinnvoll
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. May 2005, 13:39 »
Nya, so wie die Pläne jetzt stehen, kommt die GUI doch in den Kernel.

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 08. May 2005, 13:41 »
Arrrgh, welche Diskusion hab ich verpasst? Grafik im Kernel ist ok, aber die GUI sollte ganz klar extra sein (wer will schon wegen nem kleinen bugfix den ganzen Kernel neu compilieren?)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 08. May 2005, 13:44 »
Ganz meine Meinung...aber ich wüsste nicht, warum VESA sonst fix im Kernel sein sollte ;D

T0ast3r

  • Gast
Gespeichert
« Antwort #6 am: 08. May 2005, 13:51 »
Also ich bin dafür, dass der grobe Kernel in C++ ist.
Die anderen sollen den Code ja auch verstehen können.
Ansonsten würde ich nur Assembler nehmen, aber C auf keinen Fall.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 08. May 2005, 14:21 »
O_O Was ist an C unverständlich? :D

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #8 am: 08. May 2005, 14:46 »
C finde ich beste Wahl.

Um C++ komplett nutzen zu können ist einiges an Vorarbeit notwendig was unnötig wäre das extra in den Kernel zu packen.

C alleine produziert zudem auch kleineren und schnelleren Code was für den Kernel ja sehr sinnvoll ist.
----------------------
Redakteur bei LowLevel

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 08. May 2005, 16:06 »
Zitat von: TeeJay
C finde ich beste Wahl.

Um C++ komplett nutzen zu können ist einiges an Vorarbeit notwendig was unnötig wäre das extra in den Kernel zu packen.

C alleine produziert zudem auch kleineren und schnelleren Code was für den Kernel ja sehr sinnvoll ist.


new/delete ist schnell gebastelt ;-), ist ja nicht viel anders, wie malloc/free, wenn es ans exception-handling geht, dann ist tatsächlich Vorarbeit nötig. Man könnte es aber weglassen, wenn man es nicht will, allerdings hab ich es bis jetzt immer mit reingenommen, da damit leicht Möglichkeit, Fehler zu korrigieren oder Fehlermeldungen auszugeben.
RTTI würde ich im Kernel nicht verwenden, weil ich den Code net kenne. Mehrfachvererbung auch nicht, vor allem nicht von Interfaces.
Templates sind wahrscheinlich auch unnütz.
Operatorüberladung auch, aber ich würde sie nicht ausschließen wollen,
z.B. new/delete-Opeartor, evtl. Vergleichsoperatoren.

Wenn man auch Exception-Handling rauslässt,
hat man nen recht schlankes C++, das mit nem gutem Compiler garantiert nicht langsamer bzw. größer als entsprechendes C ist!
virtuelle Memberfunktionen würde ich Übrigens auch nicht ausschließen,
sie können enorm zur Abstraktion beitragen, was für den Kernel ja sehr sinnvoll ist ;-)

Wie berät sich eigentlich das Coreteam? Über PN's oder wohnt ihr zusammen? :D

MfG
DDR-RAM

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #10 am: 08. May 2005, 16:23 »
Also Operatorüberladung kann ziemlich nützlich sein, speziell bei String. Schnell ne Klasse String erstellt die nur einen char* enthält und dann paar Operatoren überladen schon kann man bequemer Vergleiche machen und braucht das olle strcmp nicht und strcat mit += ist auch recht praktisch.
Du hast Exceptionhandling für den kernel? kannste mir per PN mal verraten wie das funzt habe da keine Idee zu thx^^
Man kann mit C++ sogar kleineren Code erzeugen^^ ich habs jez so^^ Mischung aus C/C++ Code ist kleiner geworden um ca 2kb nur durchs umsetzten. Und Geschwindigkeitsmässig hat sich meiner Meinung nach wenig verändert
Naja und beraten tun wir uns über ICQ ganz einfach^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 08. May 2005, 17:05 »
Bloß mit C++ arbeiten zu _wollen_ reicht auch nicht. Wer traut sich es zu durchzuplanen welche Klassen es gibt, welche Hierarchien es geben soll, etc.? Wenn man ein richtiges C++-Projekt nicht durchplant, kann man die Möglichkeiten von C++ gar nicht ausschöpfen, sondern hat nur Flickwerk. Ist da ein relativ offenes Modell in C nicht sinnvoller und einfacher?

Ein Projekt mit einem gewissen Einsatz von C++ wird zwangläufig abstrakt. Wenn aber der Kernel zu abstrakt wird, wird alles extrem unübersichtlich und  dann kann davon auch keiner mehr was lernen. (Es soll doch noch eine art "Lern-OS" werden, oder?)

Also eine String Klasse gehört auf keinen Fall in einen Kernel. Vor allem nicht in einen Mikrokernel. Im Kernel muss außer für Fehlermeldungen fast gar nicht mit Zeichenketten gearbeitet werden. Und Fehlermeldungen sind const char*'s ...
Dieser Text wird unter jedem Beitrag angezeigt.

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #12 am: 08. May 2005, 17:57 »
Der Kernel wird in C geschrieben werden. Die Leute, mit denen ich gesprochen habe, waren alle dafür, einen Microkernel zu schreiben. C++ im Microkernel ist IMHO Unsinn.

Die GUI (die übrigens NICHT Teil des Kernels wird) oder auch andere Teile des OSes können, wenn der Wunsch besteht, in C++ geschrieben werden.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 08. May 2005, 17:59 »
Exakt meine Meinung, mastermesh :)

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 08. May 2005, 19:08 »
Zitat von: mastermesh
Der Kernel wird in C geschrieben werden. Die Leute, mit denen ich gesprochen habe, waren alle dafür, einen Microkernel zu schreiben. C++ im Microkernel ist IMHO Unsinn.


Meines Erachtens ist C++ im Microkernel überhaupt kein Unsinn.
Eventuell könnte man sich in der Mitte treffen und einige Sprachmittel von C++ nicht im Microkernel verwenden.
Ich sehe keine Vorteile von C gegenüber C++ (bin ich blind?).

MfG
DDR-RAM

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 08. May 2005, 19:33 »
C++ hat auf jedenfall einige Nachteile:

- Overhead mit new/delete, Exceptions, etc ... (ok ist relativ gering)
- Treiberprogrammierer werden dann auch dazu gezwungen ihre Treiber in C++ zu schreiben. Ein Interface von C++ nach C ist wesentlich komplizierter als von C nach C++.
- Bei der Treiberprogrammierung kommen dazu noch üble Probleme bei der Kompatibilität (C-Funktionen können einheitlich exportiert/importiert werden, bei Klassen kocht hingegen jeder Compiler sein eigenes Süppchen). Die Treiberprogrammierer werden also auf den GCC festgenagelt.
- C++ bringt keinen Vorteil bei der Programmierung von Hardware. Hardware ist darauf ausgelegt von einem Assembler- oder C-Programm (oder einer anderen Prozeduralen Programmiersprache) bearbeitet zu werden. Also nicht Objektorientiert oder ähnliches. Große Teile der Kernels werden einfach aussehen wie C-Code.
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #16 am: 08. May 2005, 19:58 »
Was ich finde ist folgendes: C++ war immer nur als ERWEITERUNG zu C gedacht und so sollte es auch verwendet werden.
new und delete bringen GARKEINEN overhead wenn mans richtig macht.
Exceptions sind im Kernel ja an sich auch garnicht nötig.(Wenn der Kernel schon Fehlerstrotzend angelegt ist kann ja auch nix werden)
Andere Entwickler werden zu nichts gezwungen, die Treiber werden ja extra compiliert und dazugelinkt. Und man kann dem C++ Compiler auch sagen die Namen (in Klassen und vor Überladenes gehts natürlich nicht) nicht zu verunstalten indem man -extern "C"- davorsetzt
Die Hardware ist auf nichts anderes ausgelegt als vom Prozessor angesteuert zu werden und das geht nur über Maschinencode, ergo Assembler. Zeige mir ne Hardware die man mit C ansteuert, rofl.
Keine der beiden Sprachen hat vor oder Nachteile gegenüber der anderen. Mit entsprechender Arbeit kann jede die andere ersetzten. Man kann auch OOP mit C machen auch wenn das umständlich und komisch wird. Aber andersrum gibts genauso Dinge.
es ist absolut geschmackssache

BTW: informiert euch mal was ne Programmiersprache eigentlich ist;)
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 08. May 2005, 20:03 »
Zitat von: PorkChicken
C++ hat auf jedenfall einige Nachteile:

- Overhead mit new/delete, Exceptions, etc ... (ok ist relativ gering)

der Overhead von new/delete geht ganz stark gegen 0.
EH hingegen ist zugegebener Maßen groß, ich würde auch nicht drauf bestehen. Aber was passiert eigentlich, wenn ein Treiber (also anderes Modul) eine Zugriffsverletzung "macht" ?

Zitat

- Treiberprogrammierer werden dann auch dazu gezwungen ihre Treiber in C++ zu schreiben. Ein Interface von C++ nach C ist wesentlich komplizierter als von C nach C++.

Es ist schon klar, das man nem C++-Treiber ein C-Interface anbieten kann, aber nicht umgekehrt. Aber das es sehr kompliziert ist, ein C-Interface zu bauen, das intern auf C++ setzt, halte ich für naja sehr übertrieben. ;-)

Zitat

- Bei der Treiberprogrammierung kommen dazu noch üble Probleme bei der Kompatibilität (C-Funktionen können einheitlich exportiert/importiert werden, bei Klassen kocht hingegen jeder Compiler sein eigenes Süppchen). Die Treiberprogrammierer werden also auf den GCC festgenagelt.


Verstehe ich nicht recht, die Treiber gehören doch nicht zum Mircokernel?
Werden also auch nicht mit denen zusammen kompiliert, bzw. gelinkt.
Wie wird überhaupt realisiert, das andere Module/Treiber auf den Microkernel zugreifen können? Sie müssen ja die Adressen kennen, also braucht man ne Art .LIB-Datei? Vielleicht hast du ja recht, aber ich will es erstnoch mal genau wissen. :roll:
Aber festgenagelt werden sie aber auf jedenfall nicht, wenn sie kein C verwenden, denn das C-Interface wird mit extern "C" deklariert.

Zitat

- C++ bringt keinen Vorteil bei der Programmierung von Hardware. Hardware ist darauf ausgelegt von einem Assembler- oder C-Programm (oder einer anderen Prozeduralen Programmiersprache) bearbeitet zu werden. Also nicht Objektorientiert oder ähnliches. Große Teile der Kernels werden einfach aussehen wie C-Code.


Der Kernel selber, befasst sich gar nicht so viel mit Hardware, das machen doch eher die Treiber, der Kernel befasst sich mit Abstrakten Typen, wie Prozessen, die sehr wohl als Objekt darstellbar sind.

MfG
DDR-RAM

edit:
da war einer bisschen schneller als ich  :oops:

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 08. May 2005, 22:09 »
Wenn ihr euch jetzt ne hitzige Diskussion liefert, was denn nun besser
sein soll, fällt das ganze Projekt mehr oder weniger ins Wasser.
Besinnt euch mal aufs Magazin zurueck...

Ich kann keine der beiden Sprachen, also auch nicht recht mitreden. Vom
Beginn war C geplant, jetzt soll es Cpp werden, mir ist es recht egal. Ich
komme dann später, wenn der Kernel eine Art Anwendungsumgebung
liefert. Und wie es scheint, kann das noch dauern...

C kam als Kernelsprache ins Gerede, weil es ein Lern-OS werden sollte,
kein grosses Etwas. Assembler war in dem Moment nämlich einfach zu
kompliziert. Besinnt euch mal ein bisschen auf die Urspruenge zurueck.
Es wird nämlich ganz sicher nichts, wenn jedes bisschen Planung wieder
umgeworfen wird. Aber das ist ein Nachteil der Demokratie, da irgendwie
keiner die Krone auf und das Zepter in der Hand hat.

Mein Machtwort und den Rest regelt ihr.

Svenska

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #19 am: 08. May 2005, 22:17 »
Zitat von: Svenska
Mein Machtwort und den Rest regelt ihr.


Bereits geregelt... zum größten Teil.

 

Einloggen