-
Kernel: C vs C++ vs X
Autor: ibsi 19.06.15 - 13:55
Nicht das ich so stark in dem Thema stecke, aber wieso wird nicht in C++ OO gearbeitet? Wäre das zu langsam oder wieso macht man das so?
-
Re: Kernel: C vs C++ vs X
Autor: Linuxschaden 19.06.15 - 14:00
-
Re: Kernel: C vs C++ vs X
Autor: Nifty 19.06.15 - 14:01
Hier findest Du dazu eine ziemlich umfangreiche Erklärung:
http://answers.google.com/answers/threadview/id/718661.html
Von meinen eigenen Erfahrungen her kann ich auch nur dazu sagen das es schwierig ist auf leistungsschwächeren Maschinen C++ zu nutzen, bei C eis viel einfacher absehbar was passiert wenn ich etwas instantiiere. -
Re: Kernel: C vs C++ vs X
Autor: Nifty 19.06.15 - 14:05
Da hast Du aber gerade wirklich eine seiner Glanzleistungen ausgegraben.
Ich finde die Leitung von Linus gut, so richtig teilen kann ich aber nicht alle seine Ansichten. -
DANKE (kt)
Autor: ibsi 19.06.15 - 14:38
DANKE (kt)
-
Re: Kernel: C vs C++ vs X
Autor: motzerator 19.06.15 - 14:50
Linuxschaden schrieb:
-----------------------------------
> Linus im Diplomatiemodus.
Hochgradig sympathisch. :D (ernst gemeint, keine ironie) -
Re: Kernel: C vs C++ vs X
Autor: fragmichnicht 19.06.15 - 15:03
> Linus im Diplomatiemodus.
Ja, Linus ist manchmal echt unausstehlich. Aber er hat Recht. Wie so häufig.
Ich mag ihn! ;-) -
Re: Kernel: C vs C++ vs X
Autor: MarkusSx 19.06.15 - 16:08
Das hat mir grade den Freitagnachmittag versüßt :D Dankeschön ! :D
-
Re: Kernel: C vs C++ vs X
Autor: bladewing 19.06.15 - 16:18
ibsi schrieb:
--------------------------------------------------------------------------------
> Nicht das ich so stark in dem Thema stecke, aber wieso wird nicht in C++ OO
> gearbeitet? Wäre das zu langsam oder wieso macht man das so?
Auch wenn ich C++ sehr gerne habe, aber OO im Kernel, nein danke! Einerseits bremst es teilweise und andererseits sollte man im Kernel die Strukturen so halten, dass man kein OO braucht um sie zu verstehen. Das gelingt im Kernel ganz gut, der C-Code ist sehr verständlich und in weiten Teilen ausreichend kommentiert. Ein Projekt dem OO dagegen gut tun würde ist ffmpeg. Das ist abschnittsweise der widerlichste C-Code der mir unter die Finger gekommen ist. Mit defines und Makros vollkommen übersättigt - unmöglich ordentlich zu debuggen. Das ordentlich strukturieren und Makros durch inline-Funktionen ersetzen würde echt helfen. -
Re: Kernel: C vs C++ vs X
Autor: stiGGG 19.06.15 - 17:02
Es gibt im Kernel viele Stellen wo OOP angewendet wird. Ist nicht unbedingt schön, aber das geht auch mit C, siehe auch GTK.
-
Re: Kernel: C vs C++ vs X
Autor: Bonita.M 19.06.15 - 18:11
> Von meinen eigenen Erfahrungen her kann ich auch nur dazu sagen das es
> schwierig ist auf leistungsschwächeren Maschinen C++ zu nutzen, bei C eis
> viel einfacher absehbar was passiert wenn ich etwas instantiiere.
Das ist Quatsch. Die Funktionalitäten von C++ sind bis auf Exceptions und RTTI sehr minimalistisch und es lässt sich leicht sagen welcher Maschinencode bei welcher Operation bei rauskommt. -
Re: Kernel: C vs C++ vs X
Autor: Bonita.M 19.06.15 - 18:13
> Auch wenn ich C++ sehr gerne habe, aber OO im Kernel, nein danke!
OO machct überall Sinn wo komplexe Datenstrukturen verarbeitet werden.
> Einerseits bremst es teilweise ...
An C++ ist nichs langsam bis auf Exceptions und RTTI.
Und beides ist nicht Performance-kritisch.
> ... und andererseits sollte man im Kernel die Strukturen
> so halten, dass man kein OO braucht um sie zu verstehen.
OO macht den Code verständlicher. -
Re: Kernel: C vs C++ vs X
Autor: derats 19.06.15 - 19:06
bladewing schrieb:
--------------------------------------------------------------------------------
> Auch wenn ich C++ sehr gerne habe, aber OO im Kernel, nein danke!
Das finde ich witzig.
Sowohl der NT-Kernel als auch BSD/Darwin als auch Linux sind praktisch vollständig objektorientiert geschrieben. Tatsächlich fällt mir auf die schnelle kein einziger praktisch genutzter Kernel der letzten ~20-25 Jahre ein, der *nicht* objektorientiert gewesen wäre. (Der "DOS-Kernel", wenn man so will, fällt raus, weil der ein klein wenig älter ist). -
Re: Kernel: C vs C++ vs X
Autor: derats 19.06.15 - 19:13
Nifty schrieb:
--------------------------------------------------------------------------------
> Da hast Du aber gerade wirklich eine seiner Glanzleistungen ausgegraben.
>
> Ich finde die Leitung von Linus gut, so richtig teilen kann ich aber nicht
> alle seine Ansichten.
Seine Meinungsäußerungen sind idR stark überspitzt, er findet C++ selbst auch gar nicht so schlimm (nur manche Features, und spezifische Libs), weswegen er und seine 'Gang' subsurface auch auf C++ (mit Qt) portiert haben - weil C (mit GTK+) einfach so unaushaltbar war.
Wundert mich nicht. glib (und insb. GObject) ist eine der schlechtesten C-Libraries, die es überhaupt gibt, wobei GTK+ dem in nicht sonderlich viel nachsteht. Da ist einfach alles verkackt, inkl. der Docs und die total vergiftete Community.
Da mag man sich als normaler Anwendungsentwickler einfach nicht mit befassen. -
Re: Kernel: C vs C++ vs X
Autor: kernkraftzwerg 19.06.15 - 19:18
Es ist immer sinnvoll, C++ statt C zu verwenden. Bei C++ hat man sehr viele Fehler von C behoben, z.B. braucht man den Präprozessor nun nicht mehr für Konstanten und Funktions-Templates (Präprozessor-Makros) zu missbrauchen, weil C++ beides beherrscht. Ein C++-Programm wird auch nicht zwangsläufig größer, als ein C-Programm, das hängt nur von den verwendeten Programmiertechniken und -paradigmen ab. Im Embedded-Bereich findet meines Erachtens in letzter Zeit ein Richtungswechsel statt, immer mehr Projekte setzen auf C++ (ich sehe das im Automotive-Sektor). Auch die Arduino-Entwicklungsumgebung setzt auf C++.
Ob man OO verwenden will, hängt nicht von der Sprache ab. Auch in C kann man OO entwickeln, was dort aber unter Umständen mehr Ressourcen schluckt, weil Elementfunktionen als Zeiger in Strukturen abgelegt werden müssen. Bei C++ ist das nur bei virtuellen Funktionen der Fall. -
Re: Kernel: C vs C++ vs X
Autor: derats 19.06.15 - 19:56
kernkraftzwerg schrieb:
--------------------------------------------------------------------------------
> Auch die
> Arduino-Entwicklungsumgebung setzt auf C++.
*hust* Also Arduino ist aus technischer Sicht kein sonderlich gelungener Einsatz von C++ (oder C) für Embedded.
> Ob man OO verwenden will, hängt nicht von der Sprache ab. Auch in C kann
> man OO entwickeln, was dort aber unter Umständen mehr Ressourcen schluckt,
> weil Elementfunktionen als Zeiger in Strukturen abgelegt werden müssen. Bei
> C++ ist das nur bei virtuellen Funktionen der Fall.
Das stimmt nicht per se und kommt auf den Stil an. Wenn ich Polymorphe Funktionalität haben will, braucht man den Zeiger immer und kommt um einen indirekten Sprung nicht herum. -
Re: Kernel: C vs C++ vs X
Autor: kernkraftzwerg 19.06.15 - 20:00
derats schrieb:
--------------------------------------------------------------------------------
> Das stimmt nicht per se und kommt auf den Stil an. Wenn ich Polymorphe
> Funktionalität haben will, braucht man den Zeiger immer und kommt um einen
> indirekten Sprung nicht herum.
Wenn ich irgendwo etwas anderes geschrieben hätte, wäre dein Kommentar eventuell richtig sinnvoll gewesen. OO heißt nicht, dass man zwingend polymorph programmieren muss. In C bleibt einen aber kaum die Wahl, weil man sonst Funktionen nicht in Strukturen unterbringt. Das geht entweder über Zeiger (virtuelle Funktionen in C++) oder über Namenskonventionen (wird in C++ automatisch erledigt, vorm Entwickler verborgen, in C gibt es da keine vernünftige Möglichkeit). Außerdem muss man selbst für Polymorphie keine virtuellen Funktionen nutzen, nur wenn man zur Laufzeit des Programms die Objektfunktionen dynamisch ändern möchte.
2 mal bearbeitet, zuletzt am 19.06.15 20:15 durch kernkraftzwerg. -
Re: Kernel: C vs C++ vs X
Autor: FreiGeistler 19.06.15 - 20:52
Und wieder einmal eine Diskussion über persönliche Vorlieben, pro und kontra 7-mal gewendet und x-mal zitiert, doppelt soviel ignoriert, deren in nicht absehbarer Zeit folgenden aber absehbar vielfältigen Schlussfolgerungen im Umkehrschluss und von hinten nach vorne einiges Sinnvoller wären.
Schönes Wochenende! : )
1 mal bearbeitet, zuletzt am 19.06.15 20:53 durch FreiGeistler. -
Re: Kernel: C vs C++ vs X
Autor: gadthrawn 20.06.15 - 20:27
bladewing schrieb:
--------------------------------------------------------------------------------
> ibsi schrieb:
> ---------------------------------------------------------------------------
> -----
> > Nicht das ich so stark in dem Thema stecke, aber wieso wird nicht in C++
> OO
> > gearbeitet? Wäre das zu langsam oder wieso macht man das so?
>
> Auch wenn ich C++ sehr gerne habe, aber OO im Kernel, nein danke!
> Einerseits bremst es teilweise und andererseits sollte man im Kernel die
> Strukturen so halten, dass man kein OO braucht um sie zu verstehen.
Oh, das ist Quatsch.
Schau dir mal Singulartity von MS Research an. Gerade Taskwechsel werden unheimlich schnell, da nur OO Prinzipien zur Trennung von Adressräumen genutzt werden - und eben nicht lange und mühsame Contextswitche traditioneller Scheduler.
Es kommt immer drauf an, was man machen will. Wenn du etliche Prüfungen nicht brauchst, da du neue Wege zur Erreichen von Tasksicherheit findest - dann wäre Assembler eher hinderlich bei der Implementierung.. -
Re: Kernel: C vs C++ vs X
Autor: Bonita.M 20.06.15 - 22:12
> Schau dir mal Singulartity von MS Research an. Gerade Taskwechsel werden
> unheimlich schnell, da nur OO Prinzipien zur Trennung von Adressräumen
> genutzt werden - und eben nicht lange und mühsame Contextswitche
> traditioneller Scheduler.
Selten so ein dummes Zeug gelesen.
Dass der Scheduler so schnell ist liegt nicht an OOP oder nicht, sondern daran, dass da mehrere VMs im selben Adressraum arbeiten (bei .NET gibt's das auch, da nennt sich das AppDomain).



