Quatsch. C# ist eine Sprache und ob AOT (ahead of time) oder JIT kompiliert wird, hängt einzig und allein vom Compiler ab. Für einen Kernel willst du natürlich einen AOT-Compiler benutzen. Ich bin mir im Moment nicht sicher, ob Mono das kann, aber zum Beispiel für Java kann gcj nativen x86-Code produzieren.
Ja, Mono kann x86 Assembler ausgeben - dieser ist aber optimiert.
Das Konzept hinter den .Net Sprachen ist aber das .Net Framework bzw. die .Net VM.
Angenommen du lässt bei C# das Framework weg/kompilierst es mit einem x86-Compiler.
Weshalb dann nicht gleich C++ oder C nehmen?
Dann kitzle ich wenigstens das letzte an Performance raus und biege das Konzept nicht in irgendwelche falschen Bahnen.
Die Laufzeitumgebung mag plattformabhängig sein, die Sprache ist es ziemlich sicher nicht. C# hat übrigens eine sehr anständige Spec, was recht hilfreich sein kann.
Natürlich ist die Sprache plattformunabhängig.
Jede Sprache ist plattformunabhängig.
Theoretisch könnte sogar x86-Assembler-Code plattformunabhängig sein.
Man braucht nur den richtigen Compiler.
Leider bleibt für mich aber .Net nicht wirklich plattformunabhängig, weil sich Mono immer etwas verspätet auf neue .Net-Versionen zurückmeldet (Leider!).
Und zu GCJ: Hier ist doch ein Thema, das die Kernelprogrammierung mit GCJ zeigen soll.
Ich finde, dass hier auf biegen und brechen versucht wird mit dieser Sprache das zu schreiben.
Dafür wird C++ mitreingemurxt,...
Recht klug scheint mir das eigentlich nicht..
Klar.. Einfach mal aus Spaß probieren. Aber trotzdem.
Abgesehen davon linkt doch GCJ de libgcj dazu -> overhead und die Frage, ob diese Lib innerhalb eines Kernels überhaupt funktionsfähig ist.
Einen Compiler, der korrekten Code kaputtoptimiert, kann man nicht einen korrekten Compiler für die gegebene Sprache nennen. Ich bin mir relativ sicher, dass Mono einen einigermaßen korrekten Compiler hat (obwohl ich auch schon mal ein paar kleinere Bugs gefunden hatte).
Das sehe ich anderes. Mono/.Net versuchen eben alles unnötige aus dem Code zu streichen, dass nur das nötigste in den Speicher muss.
Meiner Meinung nach ist das quasi wie der Teil der x86 Architektur, der versucht den Code möglichst geschickt in den Cache zu laden.
Genau das passiert hier auch schon.
Ob das abstellbar ist weiß ich nicht.
Wenn aber z.b. ganze if-schleifen wegoptimiert wurden oder oder oder,
dann ist das sicherlich nicht sehr brauchbar für die Kompilerprogrammierung.
Aber jetzt mal ganz ehrlich: würdest du mit C# einen Kernel programmieren wollen?
Und vor allem: warum willst du das eigentliche Konzept so sehr verbiegen?
Ich bleib dabei: mit C# einen Kernel programmieren zu wollen ist irgendwie unsinn.
Wobei es mich rein interesse halber auch jucken würde mit Mono x86 assembler zu genererieren und mit dem zu arbeiten.
Einfach weil mir die Sprache an sich gefällt.
Aber ob dann wirklich Treiberprogrammierung möglich ist weiß ich nicht - wohl eher weniger (außer durch C-Module/dll's).