この記事は 自作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 Rust を D言語に移植 してみたり、OSDev Wiki の D Barebones をGDCコンパイラから参照実装である DMDに移植し、さらにmultiboot化 してみたりということはしたのですが、なかなかここから先には手を出せていない状態です。
D言語ならではの注意点
ちょこっとしか触っていない中でもいくつかTipsみたいなものはみつかりました。
@nogc
/nothrow
を関数呼び出しにつける
@nogc
をつけておくとGCを呼び出さないことを保証できます(実は抜け道はあるのですが...) 同様に nothrow
をつけると関数内から例外を呼び出さないことが保証できます。
- 静的配列のゼロ初期化に
memset(3)
呼び出しを避けるために= void
を使う (?)
D言語は静的配列のゼロ初期化に memset(3)
呼び出しを呼んでおりそれを避けるために = void
で初期化を防ぐ...と記憶していたんですが、今objdumpしてみるとそういう処理がみられませんでした。そもそもkubOSのほうはUbuntu 16.10にあげた影響でGCC hardenedの影響で動かなくなっていてすぐには確認できず。。近い内に続報を書こうと思います。
おわりに
これからちょっとずつペースをあげて勉強していきたいなと思っています。なんとなくマイクロカーネルのほうがかっこいいと思ってるのでそっちのほうに舵をきりたいなーというかんじです。
なんだかまとまりのない記事になってしまってすいません。。