Schlanke Programme mit C++
-
muemmel schrieb:
C++ wurde entwickelt um damit Großprogramme wie Betriebssysteme und Compiler für PCs mit Speicher im Gigabyte-Bereich effektiv und effizient schreiben zu können.
Eigendlich falsch, hauptsächlich weil C++ nciht mit solchen Zielen designed wurde. Es entstand mehr aus einem eher evolutionären Vorgang. Beim ersten entwurf von C++ ging Stroustrup z.B. davon aus das 1MB (ja Megabyte) Speicher auf PCs zur Verfügung stehen würde usw.
Das man C++ für die von Dir genannten Aufgaben sehr gut nutzen kann? Ja, sicher. Das es speziell dafür entwickelt wurde? Nein.
Gibt ein schönes Buch: http://www.amazon.de/Design-Evolution-C-Bjarne-Stroustrup/dp/0201543303/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1215091785&sr=8-1
-
Hi Loks,
ja sicher hast Du recht mit der eigentlichen "Erfindung" (aus C über C mit Klassen...)der Programmiersprache C++ damals durch Stroustup. Aber C++ ist ja bei weitem nicht mehr das was Bjarne damals entwickelt hat. Die letzten Versionen haben da doch schon recht gewaltig an Funktion zugelegt, und gerade die Bibliotheken sind gewaltig gewachsen. Wenn man dann noch das dazu nimmt, was aktuelle Implementationen dazupacken, z.B. die VCL bei CodeGear... dann kann man da schon davon ausgehen, das das was man sich heutezutage neu auf dem Computer installiert bei seiner Fertigstellung mit einem Speicher im mindestens Gigabytebereich im Hinterkopf designed worden ist.
Warum sollte man auch auf Kosten der Möglichkeiten sparen, wenn Platz heute keine Rolle mehr spielt. Hauptspeicher im Gigabytebereich, Festplatten im Terabytebereich, was macht es da noch, ob ein leeres Programm 10 k oder 2 GByte groß ist. Und bei großen Projekten ist es nie verkehrt, auf die nächste Rechnergröße zu schauen, denn bis das Programm fertig ist ist meist selbst die überholt.Guß Mümmel
-
muemmel schrieb:
C++ wurde entwickelt um damit Großprogramme wie Betriebssysteme und Compiler für PCs mit Speicher im Gigabyte-Bereich effektiv und effizient schreiben zu können.
seltsamerweise baut kaum einer betriebssysteme in c++. die bekanntesten pc-os'se sind jedenfalls nicht in c++ programmiert worden.
muemmel schrieb:
Warum sollte man auch auf Kosten der Möglichkeiten sparen, wenn Platz heute keine Rolle mehr spielt. Hauptspeicher im Gigabytebereich, Festplatten im Terabytebereich,
in solchen umgebungen muss man sich allerdings nicht mit c++ herumärgern. es gibt genügend modernere alternativen, die programmierung einfacher, sicherer und effizienter machen, als c++, diesen über 25 jahre alten hund mit angenagelten beinen.
muemmel schrieb:
...was macht es da noch, ob ein leeres Programm 10 k oder 2 GByte groß ist.
das, finde ich, ist übrigens eine ganz furchtbare einstellung. sowas hat uns 'vista' und 'ne menge anderen 'bloated bullshit' beschert.
-
windows7 und hurd werdens besser machen
-
Hi Fricky,
das mit 10k oder 2GByte war ein Schreibfaehler von mir, es sollte heißen 10 k oder 2 MByte. Und in dem Bereich macht es heute wirklich nichts aus.
Bei meiner ersten Abschlußarbet habe ich damals noch nach jeder Funktion geguckt, was an Größe dazu gekommen ist, und gegebenenfalls geändert.
War damals auch nötig, weil es auf Minimalst-Computern unter XT-Größe, so ab 256K Hauptspeicher laufen sollte.
Würde ich heute nie mehr machen, 0b ein Programm 2 oder 4 oder 6 MB groß ist, ist mir recht herzlich egal, Es muß zügig und fehlerfrei laufen und der Entwicklungsaufwand muß sich in Grenzen halten.
Feilen am letzten Byte lohnt sich nur noch bei Programmen, die wirklich sehr oft verwendet werden, wie Betriebssysteme und Offisse, aber gerade da wird ja die ganz große Datenschaufel genommen.
Wenn ich Anwendungen mit der VCL programmiere, gleich ob C++ oder Delphi, dann landet in jedem Fall erst mal ein richtiger Haufen auf der Platte, so als ob die Kuh was fallen gelassen hat. Andererseits ist der Zuwachs der sich mit jeder weiteren Quelltextseite ergibt dann recht gering. Aber ich habe dafür als Gegenwert ein Tool bei dem ich mich voll auf die eigentliche Verarbeitung konzentrieren kann und muß mir nicht ständig Gedanken machen, wie ich mit dem Nutzer reden will. Ich komme schneller und besser zu einem Ergebnis und davon hat auch der Nutzer etwas. Wenn ich nur auf API-Basis arbeiten würde käme ich sicher zu viel kleineren Programmen, aber es würde unendlich länger dauern und keiner könnte es bezahlen.Gruß Mümmel
-
fricky schrieb:
muemmel schrieb:
C++ wurde entwickelt um damit Großprogramme wie Betriebssysteme und Compiler für PCs mit Speicher im Gigabyte-Bereich effektiv und effizient schreiben zu können.
seltsamerweise baut kaum einer betriebssysteme in c++. die bekanntesten pc-os'se sind jedenfalls nicht in c++ programmiert worden.
hallo du schlaumeier, schon mal was von
Windows XP
Windows NT (NT4 and 2000)
Windows 9x (95, 98, Me)
gehört?
-
Naja, der Kernel-Code ist wohl schon C. Wie die unixoiden Systeme. Im Gegensatz zu den BSDs und Linux wird bei Microsoft im Userland allerdings wesentlich mehr auf C++ gesetzt, gerade auch durch die graphischen Administrationstools, z.B. in der Systemsteuerung, die bspw. die MFC verwenden.
-
kreater@woanders schrieb:
hallo du schlaumeier, schon mal was von
Windows XP
Windows NT (NT4 and 2000)
Windows 9x (95, 98, Me)
gehört?ja, siehe beitrag von Xantus. es stimmt, was er sagt.
-
fricky schrieb:
kreater@woanders schrieb:
hallo du schlaumeier, schon mal was von
Windows XP
Windows NT (NT4 and 2000)
Windows 9x (95, 98, Me)
gehört?ja, siehe beitrag von Xantus. es stimmt, was er sagt.
Warum musst du immer alles besser wissen? Imho gehört zu einem Betriebssystem mehr als nur der Kernel, der alleine reicht ja nicht um das Gerät in Betrieb nehmen zu können.
-
Neugieriger schrieb:
Imho gehört zu einem Betriebssystem mehr als nur der Kernel, der alleine reicht ja nicht um das Gerät in Betrieb nehmen zu können.
und wie er das tut. sonst würde der kernel sehr unvollständig sein.
-
Neugieriger schrieb:
Warum musst du immer alles besser wissen?
weil ich die geleakten win2k-codes irgendwo noch rumfliegen habe und in gewissen büchen von m$ (inside windows nt/2000, etc.) steht das, glaube ich, auch drin. die kernkomponenten, also alles unterhalb der 'executive api', sind definitiv nicht in c++ programmiert worden. nur relativ unwichtige usermode-programme, ohne die das system auch laufen kann (aber vielleicht nicht so gut bedienbar wäre) sind in c++ gecodet worden.
-
Und? Das beweist noch lange nicht, das es mit C++ weniger gut umsetzbar ist. Denn letztendlich sind die Kernel von Unixe und WinNT aus rein historischen Gründen in C implementiert. Denn C ist wesentlich länger normiert, und da man die Kernel portabel halten wollte, blieb wohl logischerweise damals nur C übrig. Denn damals war die Chance größer auf den gewünschten Platformen einen ANSI-C Compiler zu finden. Da ist es nur legitim sich für C zu entscheiden.
Was wäre, wenn heute jemand mit einem neuen OS (nein, kein Clone) anfangen würde? Ich wette, wenn derjenige kein genereller C++-Hasser ist, wird C++ sicherlich in die engere Auswahl fallen.
-
UnregUser schrieb:
Was wäre, wenn heute jemand mit einem neuen OS (nein, kein Clone) anfangen würde? Ich wette, wenn derjenige kein genereller C++-Hasser ist, wird C++ sicherlich in die engere Auswahl fallen.
klar, zuerst wäre c++ bestimmt unter den kandidaten, aber wenn er sich näher informieren würde, und dabei sowas findet: http://yosefk.com/c++fqa/defective.html
könnte das schon das aus für c++ bedeuten. die frage finde ich übrigens ganz interessant: 'welche programmiersprache nimmt man am besten für ein neues, grosses betriebssystem, vom kaliber eines windoofs oder unix". ich wüsste nicht welche. C, glaube ich, würde ich heute auch nicht mehr für so ein grosses projekt benutzen.
-
Man muss nicht unbedingt alle Möglichkeiten von C++ ausreizen. Objektorientierung, bessere Typenprüfung und eine Variablendeklaration auch mitten in der Funktion bzw. im Block sind schon mal große Vorteile gegenüber reinem C. Auf Exceptions, Templates, STL und andere C++-Besonderheiten kann man ja auch verzichten.
Statt Weiß oder Schwarz einfach mal Grau in diversen Abstufungen verwenden.
-
sri schrieb:
Variablendeklaration auch mitten in der Funktion bzw. im Block
das bitte aus der liste rausstreichen
-
sothis_ schrieb:
sri schrieb:
Variablendeklaration auch mitten in der Funktion bzw. im Block
das bitte aus der liste rausstreichen
Warum?
-
Tachyon schrieb:
Warum?
weil das seit C99 der vergangenheit angehört.
-
sothis_ schrieb:
Neugieriger schrieb:
Imho gehört zu einem Betriebssystem mehr als nur der Kernel, der alleine reicht ja nicht um das Gerät in Betrieb nehmen zu können.
und wie er das tut. sonst würde der kernel sehr unvollständig sein.
Kommt drauf an welcher Kernel. Ein monolithischer sollte wohl auch Treiber integriert haben, ein Micro-Kernel nicht.
MacOS ist in ObjectiveC geschrieben, Singularity in C# und Haiku in C++. Who cares was fuer eine Sprache fuer ein B-System verwendet wird?
Btw, C ist halt praktisch, weil C nunmal den kleinsten gemeinsamen Nenner bildet. Jede DLL oder .so kannst du in C einbinden und du kannst in jeder "hoeheren Sprache" C Bibliotheken einbinden.
Mit C++ wird es schon kompliziert, bei anderen Sprachen bist du bei Bibliotheken auf die Sprache beschraenkt (Java-jars koennen nur in Java benutzt werden, Ruby-Bibs nur in Ruby usw.).
-
sri schrieb:
Man muss nicht unbedingt alle Möglichkeiten von C++ ausreizen. Objektorientierung, bessere Typenprüfung und eine Variablendeklaration auch mitten in der Funktion bzw. im Block sind schon mal große Vorteile gegenüber reinem C. Auf Exceptions, Templates, STL und andere C++-Besonderheiten kann man ja auch verzichten.
Statt Weiß oder Schwarz einfach mal Grau in diversen Abstufungen verwenden.seltsam. bei keiner anderen sprache, ausser bei c++, wird einem immer geraten: 'mach das nicht, dieses ist böse, benutze jenes nicht, nimm nur einen subset, usw...'. woran das wohl liegen mag?
DEvent schrieb:
Who cares was fuer eine Sprache fuer ein B-System verwendet wird?
na, viele. z.b. die, die am OS selber rumbasteln, oder erweiterungen dafür schreiben wollen, etc.
-
fricky schrieb:
sri schrieb:
Man muss nicht unbedingt alle Möglichkeiten von C++ ausreizen. Objektorientierung, bessere Typenprüfung und eine Variablendeklaration auch mitten in der Funktion bzw. im Block sind schon mal große Vorteile gegenüber reinem C. Auf Exceptions, Templates, STL und andere C++-Besonderheiten kann man ja auch verzichten.
Statt Weiß oder Schwarz einfach mal Grau in diversen Abstufungen verwenden.seltsam. bei keiner anderen sprache, ausser bei c++, wird einem immer geraten: 'mach das nicht, dieses ist böse, benutze jenes nicht, nimm nur einen subset, usw...'. woran das wohl liegen mag?
Liegt IMHO daran, dass C++ allen recht machen will und es eine Multiparadigmen-Sprache ist. Deswegen muss der Benutzer abwaehgen ob er wirklich die Features braucht oder ob sie mehr behindern als nuetzen.
z.B. Exceptions oder RTTI. Braucht mans, oder doch nicht? In Java stellt sich die Frage nicht, oder nur ganz selten. In C++ bringt es halt eine Menge Overhead, Java wurde darauf optimiert. In C++ bringt es viel darauf zu verzichten, in Java bringt der Verzicht einem nichts.