PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In welcher Programmiersprache werden Betriebssyteme programmiert?


Gast
2004-02-17, 23:22:14
dachte eigentlich , dass die bevorzugte programmiersprache C wäre.

habe jetzt folgenden beitrag gelesen

http://www.planet3dnow.de/cgi-bin/newspub/viewnews.cgi?category=1&id=1077016285

- Neben dem offenbar schlampigen Programmierstil im Windows 2000 Quellcode spielt natürlich auch die verwendete Programmiersprache eine nicht unerhebliche Rolle. Microsoft programmiert seine Betriebssysteme nach wie vor in C (oder Abwandlungen davon). Während man in anderen Programmiersprachen strikte Vorgaben in Sachen Datentypen einzuhalten hat und der Compiler sich weigert, den Quellcode zu übersetzen, wenn etwa ein Signed Integer einem Unsigned Integer zugewiesen wird, ist es in C ohne weiteres möglich, auch fehlerhaften Quellcode zu übersetzen und auszuführen.

demnach ist meine annahme falsch.

welche sprache wird denn jetzt zB bei linux oder MacOS verwendet?

Xmas
2004-02-18, 01:07:35
:???:
Der Text bestätigt doch deine Annahme. Und auch bei Unix und Derivaten ist der größte Teil C.

aths
2004-02-18, 04:36:52
Original geschrieben von Gast
dachte eigentlich , dass die bevorzugte programmiersprache C wäre.Ja. Leider. C++ gibt es nun schon so lange.

Demirug
2004-02-18, 07:21:02
Original geschrieben von aths
Ja. Leider. C++ gibt es nun schon so lange.

C++ ist in der Beziehung auch nicht besser. Damit kann man sich genauso leicht ein Loch ins Knie schiessen.

Das der Kern von Windows NT/2K/XP in C programmiert ist hat den einfachen Grund das die C++ Compiler damals einfach noch nicht gut genug waren.

Richtiges C ist das aber trotzdem nicht. Durch das eingesetzte ADT Model ist es ein Zwischending zwischen C und C++.

Exxtreme
2004-02-18, 09:43:16
Original geschrieben von Gast
dachte eigentlich , dass die bevorzugte programmiersprache C wäre.

habe jetzt folgenden beitrag gelesen

http://www.planet3dnow.de/cgi-bin/newspub/viewnews.cgi?category=1&id=1077016285

- Neben dem offenbar schlampigen Programmierstil im Windows 2000 Quellcode spielt natürlich auch die verwendete Programmiersprache eine nicht unerhebliche Rolle. Microsoft programmiert seine Betriebssysteme nach wie vor in C (oder Abwandlungen davon). Während man in anderen Programmiersprachen strikte Vorgaben in Sachen Datentypen einzuhalten hat und der Compiler sich weigert, den Quellcode zu übersetzen, wenn etwa ein Signed Integer einem Unsigned Integer zugewiesen wird, ist es in C ohne weiteres möglich, auch fehlerhaften Quellcode zu übersetzen und auszuführen.

demnach ist meine annahme falsch.

welche sprache wird denn jetzt zB bei linux oder MacOS verwendet?
Windows, Linux, MacOS und andere Betriebssysteme werden vorzugsweise in C geschrieben da diese Sprache sehr hardwarenah ist und somit sind die Binaries klein und sehr schnell da relativ wenig Overhead anfällt.

Und C ist halt eine Programmiersprache für Leute, die wissen was sie tun. Der Compiler lässt vieles zu und beschützt einem nicht vor sich selbst. Und Fehler wie mögliche Bufferoverflows kann man schon mit Boardmitteln minimieren. Mal die Compilerwarnungen beachten und statt z.B. strcpy mal strncpy nutzen.

Stone2001
2004-02-18, 10:48:58
Ich würde mal behaupten, das die meisten üblichen Betriebsysteme in (ANSI-) C geschrieben werden. Unix und Derivate, Windows und Co gehören in diese Kategorie.

Aber ich würde auch behaupten, das die Zahl der Betriebsysteme die in Assembler-Code geschreiben wurden auch nicht gerade klein ist. Forschungs-Betriebsysteme werden oft (ich will nicht sagen alle, es gibt noch Gruppen, die glauben, die Performance auch in C hinzubekommen) in Assembler geschrieben. Das bringt mehrere Vorteile mit sich, es ist schneller und der Code ist kompakter und man umgeht die schlechten Compiler, die mit all ihren Optimierungen nur noch Müll fabrizieren.

Darkstar
2004-02-18, 11:04:27
Selbst das im Vergleich zu Windows und UNIX relativ moderne BeOS nutzt auf der untersten Ebene schlichtes C (ansonsten C++).

Harleckin
2004-02-18, 11:13:25
"In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA."

"The fact is, C++ compilers are not trustworthy. They were even worse in 1992, but some fundamental facts haven't changed: 1) the whole C++ exception handling thing is fundamentally broken. It's _especially_ broken for kernels. 2) any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel. 3) you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++."

--Linus Torvalds

http://kerneltrap.org/node/view/2067

Demirug
2004-02-18, 11:21:59
Original geschrieben von Harleckin

"In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA."

"The fact is, C++ compilers are not trustworthy. They were even worse in 1992, but some fundamental facts haven't changed: 1) the whole C++ exception handling thing is fundamentally broken. It's _especially_ broken for kernels. 2) any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel. 3) you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++."

--Linus Torvalds

http://kerneltrap.org/node/view/2067

Ja, wenn man eben mit C++ nicht umgehen kann dann kommen solche Aussagen. Das gleiche musste ich mir auch ewig bei den Spieleentwicklern anhören: "C++ ist zu langsam und zu aufgebläht um damit schnelle Spiele zu programmieren"

Aber er hat schon Recht für einen monoliten Block den der Linux Kern ja darstellt ist C schon besser. Beim richtigen Einsatz von C++ müsste man ja abstrahieren.

HellHorse
2004-02-18, 19:43:37
Java ;)
http://jnode.sourceforge.net/portal/
http://www4.informatik.uni-erlangen.de/Projects/JX/download-demos.html

Stone2001
2004-02-18, 20:16:46
Original geschrieben von HellHorse
Java ;)
http://jnode.sourceforge.net/portal/
http://www4.informatik.uni-erlangen.de/Projects/JX/download-demos.html
Naja, zumindest JavaOS ist auf einem absteigenden Ast und von anderen hört man recht wenig. Aber es gibt gute Ansätze, zumal es Java-Prozessoren gibt, also Prozessoren, die Java Bytecode ausführen können.

HellHorse
2004-02-18, 20:19:27
Original geschrieben von Stone2001
Naja, zumindest JavaOS ist auf einem absteigenden Ast und von anderen hört man recht wenig. Aber es gibt gute Ansätze, zumal es Java-Prozessoren gibt, also Prozessoren, die Java Bytecode ausführen können.
Man beachte den Simley.
Ich hätte noch JOS (http://jos.org/) hinzufügen können ;)

marco42
2004-02-19, 11:34:30
Original geschrieben von Demirug
Ja, wenn man eben mit C++ nicht umgehen kann dann kommen solche Aussagen. Das gleiche musste ich mir auch ewig bei den Spieleentwicklern anhören: "C++ ist zu langsam und zu aufgebläht um damit schnelle Spiele zu programmieren"


Also, ich habe ehrlich gesagt nur C++ programmiert und ich meine damit nicht C + Klassen(ich kann da nur Modern C++ Design empfehlen, baut sehr schon auf The C++ Programming Language auf). Aber mal ehrlich, gute C++ Compiler gibt es doch erst seit kurzem. Der gcc 3.3 kann immer noch nicht alles und MS hat auch erst mit dem 7.1 aufgeschlossen. Im Moment programmiere ich alles mit Python + ein paar C routinen. So schnell habe ich nie was hinbekommen, der Code laesst sich auch noch super lesen und die Geschwindigkeit stimmt auch, da ich an den 3% Geschwindigkeitsengpaessen C benutzt wird. Deswegen bin ich einfach ein bisschen weg von C++.


Original geschrieben von Demirug
Aber er hat schon Recht für einen monoliten Block den der Linux Kern ja darstellt ist C schon besser. Beim richtigen Einsatz von C++ müsste man ja abstrahieren.

Naja, C wurde ja als portabler Assembler zur Unix Programmierung entwickelt und dafuer ist es auch ganz gut. Wenn die Leute wissen, was sie tun, dann ist C wirklich nicht schlecht.

Ich finde es nur "bescheuert" einen Desktop in C zu implementieren, wie GNOME das macht.

So monolitisch ist Linux gar nicht mal mehr. Also, vieles wird mittlerweile in den User Space verschoben, sogar Treiber. Linus ist halt pragmatisch. Und er liebt das KISS(keep it simple stupid) Prinzip und da muss ich ihm zustimmen, KISS ist wirklich kein schlechtes Prinzip, wesentlich besser als gleich zu versuchen, alles in die Architektur zu legen, was irgendwann mal gebraucht werden koennte.

Legolas
2004-02-19, 11:57:52
Original geschrieben von HellHorse
Java ;)
http://jnode.sourceforge.net/portal/
http://www4.informatik.uni-erlangen.de/Projects/JX/download-demos.html

Einer meiner Übungsleiter hat als Diplomarbeit dafür einiges geschrieben, und er hat gemeint, daß es ganz gut funktionieren würde. :)

Stone2001
2004-02-19, 12:13:33
Original geschrieben von marco42
So monolitisch ist Linux gar nicht mal mehr.
Naja, aber mit 10^8 LOC ist der 2.6er Kernel definitiv kein Mikrokernel. ;)

marco42
2004-02-19, 12:52:03
Original geschrieben von Stone2001
Naja, aber mit 10^8 LOC ist der 2.6er Kernel definitiv kein Mikrokernel. ;)

Yupp, aber so monolithisch ist er auch nicht mehr. Ausserdem, wie gross ist denn der Darwin Kernel, wenn sie noch einen Microkernel benutzten, ich habe ja gehoert, sie wollen ihn austauschen.

Demirug
2004-02-19, 13:15:19
Eine hohe Anzahl von Codezeilen bedeutet ja nicht zwangsläufig das man es mit einem monolithischen Kern zu tun hat. Und Zwischen einem monolithischen Kern und einem Microkernel gibt es ja noch Zwischenstufen. NT nutzt ja einen geschichteten Kern mit Subsysteme.

marco42
2004-02-19, 13:32:31
Original geschrieben von Demirug
Eine hohe Anzahl von Codezeilen bedeutet ja nicht zwangsläufig das man es mit einem monolithischen Kern zu tun hat. Und Zwischen einem monolithischen Kern und einem Microkernel gibt es ja noch Zwischenstufen. NT nutzt ja einen geschichteten Kern mit Subsysteme.

Machen das nicht die meisten Kernel? Layer sind ja ein klassisches Instrument zur Abstrahierung. Soweit ich mal in Betriebssysteme gelernt habe, ist eigentlich Linux, SVR4 und NT alles ein klassischer monolithischer Kernel. Wobei es da ja noch riesige Unterschiede gibt.

Eigentlich ist das ja auch egal, Hauptsache es erfuellt seinen Zweck. Bei NT war ja noch der Kernel das Problem, sondern das Verhalten der Firma, die ihn entwickeln laesst.