eggy 曰く、C#言語のみを使ってCosmosというOSが開発されたとのこと。C言語は一切使用されていないという(本家/.)。現段階ではコンパイルと実行にマイクロソフト社のVisual Studioが必要であるが、ソースコードのコンパイルはExpress版でもできるとのこと。近日中にVB.NETサポートが追加されるそうだ。
OS作っていいんだっけ? (スコア:1)
>現段階ではコンパイルと実行にマイクロソフト社のVisual Studioが必要であるが、
あれ?マイクロソフトの言語製品には、「OSを作ってはいけない」という規約がなかったっけ?
Re: (スコア:0)
昔は知りませんが、さすがにMicrosoftのお膝もとCODEPLEXで公開されてんだから大丈夫なんじゃない?
機械語が吐かれるの? (スコア:0)
中間言語が吐かれるような気がするのですが、ちゃんと機械語が吐かれるんですか?
そのまま動くギミックに興味があります。
Re:機械語が吐かれるの? (スコア:5, 参考になる)
IL2CPU [codeplex.com]というものを使うようですね
IL2CPU is the heart of Cosmos. It is an ahead-of-time (AOT) compiler that translates the CIL emitted by Visual Studio into Machine Code.
マジですげえ (スコア:0)
.NETランタイムとかデバイスドライバとかブートストラップローダも全部C#で書かれてるのか。
# どうやって?
Re:マジですげえ (スコア:3, おもしろおかしい)
uni+みたいなもんだったりして。
Re: (スコア:0)
オサーンはっけーん!
Re: (スコア:0)
記事読んで一番最初に同じ事思った>uni+
Re: (スコア:0)
どうしてuni+を知っているとオサーンだとわかるのですか?
Re:マジですげえ (スコア:2)
年が若くても uni+ を知っているようじゃ中身はオサーンなのさ
#アレゲ者にはほめ言葉。
Re:マジですげえ (スコア:2, 興味深い)
C#はC言語のポインタに相当するものを言語仕様として持ってるから(持ってなくてもやりようはあるけど)不可能ではない
また.NETランタイムとC#はWindows上では切り離せないように見えなくもないが本来は無関係というか違うレイヤーの話なので
.NETランタイムをフルに実装したわけでもなければ実装する必要性も全くない
Re:マジですげえ (スコア:2)
Re:マジですげえ (スコア:1)
とりあえずソースコードをざっと眺めた範囲ではコンテキストスイッチ(のことだよね?)は今のところ実装されてないっぽい
ただ、IL2CPUに任意のオペコード出力(変換)ができるっぽい機能とそれを指定するっぽいOpCode属性があって
OpCode属性を指定しただけのダミークラスがsource2/compilerディレクトリ内のCosmos.Compiler.Assembler.X86パッケージ内にずらずらと・・・
というわけでC#じゃなくてもなんとでも出来そう
Re:マジですげえ (スコア:2)
そう、いわゆるコンテキストスイッチ。(コンテキストという言葉はコンテキスト依存だから使いたくなかったんだ(笑))
私の知ってるCPUはどれも大なり小なり高級言語では制御できない内部ステートがあるんだけど、x86とかx64には無いのかな?
IL2CPUってそこまでやれるんですか?
#完全にC#のみで記述するという記事だとは思わなかったんだけど、そうじゃないのかしらん?普通はCとアセンブラの混合で記述されてるもんだから、Cの部分をC#という話しかと…。
Re: (スコア:0)
IL2CPUを使ってC#(というかIL)で無理やり(今のところX86の)インラインアセンブリやってるみたいだからやろうと思えば何でもできるんじゃないかな
Re: (スコア:0)
すごいし面白いけど
バイナリさえ出力できれば泥臭くてもなんとかはなるでしょう。
# 実際は違うだろうけど
リンク先くらい読めや (スコア:0)
http://cosmos.codeplex.com/wikipage?title=Technology [codeplex.com]
めんどくさい人向けのまとめ (スコア:4, 参考になる)
ネイティブコードを呼び出すP/Invokeはサポートしていない。
その代わりにネイティブコードへの変換時にメソッドを置き換える仕組み(Plugs)がある。
C#等のCIL言語やアセンブラ言語のコードで置き換えられる。
その他:
インターフェースはまだサポートされていない。特にForeachは動かない。
今はx86だけだけど、他のアーキテクチャもサポート可能。
QEMUがプライマリなプラットフォームだけど、ネイティブにブートできるISOやUSBのイメージも作れるし、PXEでネットワークブートもできる。
Monoもサポートしている。
修正BSDライセンス。
C言語で書かれてた時代は (スコア:0)
chaos [wikipedia.org]だったのですね・・・
unsafe は使っているのかね? (スコア:0)
C#は、整数の配列さえオブジェクトとする(ヒープを割り当てる)言語なので、OSというパフォーマンスが要求されるソフトの開発には向いていないと思っていたので驚いた。しかし、unsafe なコードを多用すれば、C#らしさが失われる代わりに、C言語並のことができるので、OSが作れたとしても特にすごくは無いのだが。
Re: (スコア:0)
GCからのメモリ割り当ては、スタックからのメモリ割り当てと同じで、今ここと記録してある値を変えるだけでは?
スタックポインタと違ってレジスタではないですが、ヒープに割り当てるのが遅い原因とはあまり思えません。
むしろ、配列の境界チェックなどが遅さの原因と思います。
Re:unsafe は使っているのかね? (スコア:1)
使用済み配列の開放もGCにやってもらわなければならないのがオーバーヘッドになる。構造体のメンバに配列がある場合、配列の実態は構造体とは別領域なので両方をコピーしないとならないのだが、つまりコピー用のメソッドを別途定義しなければならない。整数型の自動変数のノリで配列を使ってはならないのがC#。
Re: (スコア:0)
今時の言語なら、使用済み配列の解放程度なら、ほとんど気にする必要ないくらいのオーバーヘッドじゃないかな。
Re: (スコア:0)
unsafeどころかIL2CPUの変換を前提とした疑似インラインアセンブリの嵐ですた
本家で叩かれまくりじゃないか (スコア:0)
プロジェクトが停滞して久しいこのタイミングでなぜ?と。
本家から機械的に移植してくるだけの記事はいらんよ。
Re: (スコア:0)
じゃあなんであなたがタレこまなかったの?
俺は昔から知ってたけどねーって姿勢はカッコ悪いよ。
Re:本家で叩かれまくりじゃないか (スコア:1)
「なんでfirehose時点でツッコまなかったか」でしょう。
ストーリー採用されてからツッコむのはマイナスモデされがちですが、
firehoseではtypoやdupeやoldnewsなど
タグで指摘することが推奨されているようですよ。
Re: (スコア:0)
あー俺2年前にこれ知ったわぁ、2年前に既に知ってたわぁ〜
OSって言えるの? (スコア:0)
IPLから直接起動されるC#のランタイム+C#で記述したOSかとおもったら
実行にVisualStudioが必要って・・・?
Re: (スコア:0)
別のレスにもあるけどネイティブにブートできるISOやUSBのイメージも作れるから必要じゃないよ