kubo39's blog

ただの雑記です。

D言語とOS開発と自作OS

この記事は 自作OS Advent Calendar 2016 の3日目です。

D言語とOS開発

D言語システムプログラミング言語であり、OSを開発することのできる言語のひとつです。D言語でのOSプロジェクトはすでにいくつかあります。

Vild/PowerNex

D言語でもっとも勢いがあるOS開発プロジェクトです。 公式のD Blogでも 記事 でとりあげられてました。

Rikarin/Trinix

最近は少し勢いが落ちているようですが、PowerNex以前からあるプロジェクトで、PowerNexもこちらのプロジェクトを参考にしていました。

自作への道

既存ですでにあるとはいえ、やはりOSを一から作ってみるというのは抗いがたい魅力があります。勉強していく中で既存プロジェクトに貢献できる箇所があるかもしれませんしね。

そういうわけで作り始めたいところですが、OS開発にかんしては右も左もわからない状態です。

Writing an OS in RustD言語に移植 してみたり、OSDev WikiD BarebonesGDCコンパイラから参照実装である DMDに移植し、さらにmultiboot化 してみたりということはしたのですが、なかなかここから先には手を出せていない状態です。

D言語ならではの注意点

ちょこっとしか触っていない中でもいくつかTipsみたいなものはみつかりました。

  • @nogc / nothrow を関数呼び出しにつける

@nogc をつけておくとGCを呼び出さないことを保証できます(実は抜け道はあるのですが...) 同様に nothrow をつけると関数内から例外を呼び出さないことが保証できます。

  • 静的配列のゼロ初期化に memset(3) 呼び出しを避けるために = void を使う (?)

D言語は静的配列のゼロ初期化に memset(3) 呼び出しを呼んでおりそれを避けるために = void で初期化を防ぐ...と記憶していたんですが、今objdumpしてみるとそういう処理がみられませんでした。そもそもkubOSのほうはUbuntu 16.10にあげた影響でGCC hardenedの影響で動かなくなっていてすぐには確認できず。。近い内に続報を書こうと思います。

おわりに

これからちょっとずつペースをあげて勉強していきたいなと思っています。なんとなくマイクロカーネルのほうがかっこいいと思ってるのでそっちのほうに舵をきりたいなーというかんじです。

なんだかまとまりのない記事になってしまってすいません。。