• ベストアンサー

WINDOWSなどのOSを構成している言語って?

最近、プログラミングを始めたのですが、その際に、様々なアプリケーションやOSをはどんな言語によってかかれているのかが知りたくなりました。 確かUNIXはC言語だったでしょうか? そして、WINDOWS98、NT、2000やMacOSは何によってかかれ ているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.2

予測ですが、各CPU対応のassemblerとC/C++でしょう 少なくとも生ポインタが扱えない言語ではOSは作れません。 なぜなら、OSはアプリケーションと違いハードウェアを直接操作する必要があるわけで、その時にリソースの一部、または全部がメモリマップされたハードウェアではアクセスできないからです。 Assemblerが必要な理由は割り込み処理と呼ばれる一連の処理ルーチンを記述する場合、CPU依存の命令が必要な場合があり、C/C++ではCPU依存の命令が書けない為、実現できない可能性がある為です。 また、UNIXは「大部分を」Cで書かれていますがすべてがCで記述されているわけではありません。やはり一部はAssemblerで記述されています。昔のUNIXのソースコードが http://www.amazon.co.jp/exec/obidos/ASIN/4756118445/qid%3D991260496/249-1074141-4505105 の lion's Commentary UNIXと言う本に完全なソースコードとして載っています。 後WindowsNTであれば開発秘話がhttp://www.amazon.co.jp/exec/obidos/ASIN/4822740161/qid=991260837/sr=1-11/249-1074141-4505105 の 戦うプログラマー (上下巻)に載っています。開発言語まで載っているかは分からないですが・・・

takato78
質問者

お礼

ありがとうございます。 今、職場でつかっているOSがNTですので、是非とも開発秘話のページを 参照させていただきます!

その他の回答 (3)

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.4

補足です msystemさんが >MacOSのAPI(昔はTool Boxと呼んでいました。)は、呼び出しの約束がPascalです。 はWindowsAPIにも当てはまります。といってもPascalで作られているわけではなく、Pascal呼び出し規約と言う点について、ですが。 x86CPUのCの処理系では、関数呼び出し時に呼び出し側がスタックに引数をつみ、関数から戻ってきたのち、つんだスタックを破棄します。 たいしてPascalでは呼び出し側がスタックに引数をつむのは同様ですが、スタックは、その関数から出る時に関数側が破棄します。 これがx86 CPUでは関数から戻る+スタック破棄が一命令で実行でき、関数から抜けた後、破棄するのに比べ、微妙に速度向上が望めます。ほんの数クロックですがAPIのように膨大な回数呼び出されるものであれば、ちりも積もればなんとやらでそれなりの高速化が期待できるでしょう。 では、なぜCがPascalと同じ呼び出し規約にしなかったか?と言うと printf関数のような可変長引数関数ではPascal呼び出しでは実現できない為です。 関数からの戻り+スタック破棄は x86の RET命令を使っており RET命令は RET n(nはイミディエイト値、直接書きこんである値)のため可変する個数のスタックを破棄する事は出来ません。 そのため引数をつんだ側で、スタックを破棄する必要がある為、Pascal呼び出しを利用していないのです。

takato78
質問者

お礼

2度のご回答、ありがとうございます。 今現在でのワタクシには専門的すぎて半分ぐらいしかわからないのですが、 言語はちがえども規約・規格というものが同じことがあるというのが分かり とても参考になりました。

  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

Windowsは、他の方がおっしゃているとおりだと思います。(私も、推測の域を出ません) MacOSは、現在はちょっとわかりませんが、以前はPascalでかかれていました。 WinAPIがC言語からの呼び出しを想定しているように、MacOSのAPI(昔はTool Boxと呼んでいました。)は、呼び出しの約束がPascalです。(OS XからTool Boxではなくなったので、言語が変わった可能性があります。)

takato78
質問者

お礼

ありがとうございます。 MacOSが以前、Pascalでかかれていたのは意外でした。 学生時代、情報処理の教養講座でPascalの説明を受けたとき、 この言語はほとんど使われていないと聞いたので。

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  WindowsはC++とアセンブラで書かれていると思います。 プログラマーに公開している Win32APIは C言語で使われる事を想定しているのでその可能性は高いです。  WinNTは、「他人が読めないくらい Cとアランブラが入り混じっている」と聞いて事もあります。  ただし、マイクロソフトは、Windowsはこんな言語で書いています」と公表しているわけではないので、あくまで推測です。  参考になれば幸いです(..

takato78
質問者

お礼

こんにちは、honiyonさん。 知識がすくないワタクシですが、一番知りたいことをピンポイントで答えて いただき参考になりました。 ありがとうございました。

関連するQ&A

  • windowsでもC言語を始めたいのですが…

    某大学の数学科1回生です。 今までC言語を学んだことが無かったので、最近ASCIIの「C言語入門」 を購入しました。(4月から学校で講義が始まります。) この入門書を読み進めていくにはUNIX系のOSがあるとスムーズに進行出来るようです。 しかし、僕が使用しているパソコンはwindows7で、 非UNIX系のOSなのでC言語でプログラミングをする環境が整っていません。 そこで、次のサイトhttp://www.ooyashima.net/db/prog.htmでコンパイラと IDEとテキストエディタを手に入れる必要があります。 windowsのOSでも、UNIX系のOSを用いた時と同様にC言語プログラミングを 可能にするためには、先ほどのサイトで、コンパイラからテキストエディタまで 何を手に入れるのがベストでしょうか? 出来れば無料のソフトが良いです。 C言語やプログラミングに関しては全くの初心者なので、稚拙な文章となり 非常に読み辛かったかと思いますが、回答よろしくお願いいたします。

  • Windowsを構成しているプログラミング言語は?

    PC「初級~中級」の者です。 OSのWindowsを構成しているプログラミング言語は何でしょうか? また、その言語で、何行くらいのプログラムを組んでいるのでしょうか? 御多忙中恐縮ですが、宜しく御教示下さい。

  • windowsでC言語

    windowsXPでC言語のプログラミングをしたいのですが お勧めのエディタコンパイラを教えていただきたいです。 Visual C++というのが一番使いやすいのでしょうか? 学校ではUNIX機を使っておりました。

  • Windowsはいったい何言語で書かれているのでしょうか?

    OSのWindowsですがいったい何言語で書かれているのでしょうか? 普段使用しているアプリケーションなどはCやC++などですがOSがCで書かれているとは聞いたこともありません。どのような言語で書かれているのでしょうか?

  • C言語においてUniとLinの違い

    C言語でプログラミングをする際、UnixとLinuxの違いを教えてください これから勉強しようと思うのですが、どちらを先に覚えれば後々スムーズに行くでしょか。

  • プログラミング言語

    現在文系私立大学の一年生です。 パソコンを扱うのが好きなので、在学中にプログラミング言語を覚えたいと考えています。 が、今はC、C+、C++、Javaなどの言語の名前だけを知っている状態です。 どのプログラミング言語を学ぶと役に立つのでしょうか? また、どのプログラミング言語が簡単でどのプログラミング言語が難しいなども教えていただけるとありがたいです。 また、私は数学がかなり苦手で文系に進んだのですが、プログラミングは数学が出来ない人間にも可能なのでしょうか? あとOSですが、プログラミングをするにはWindowsよりもLinuxの方が良いのですか? UbuntuとWin7のデュアルブートの経験はあります。今度はDebianというものでやってみようかなと思っています。

  • C言語についてどうしてもわからない疑問

    プログラミング初心者です。 C言語を勉強中に疑問に思ったことが2つあります。 まず1つ目。 C言語以外のプログラミング言語、例えばjavaとかC#とかjsとかpythonとかrubyとかPHPとか、には開発者にとって便利なライブラリとかフレームワーク(僕にはこの2つの明確な違いがわかりません。が、どちらも「開発者が定義しなくてもよい関数やオブジェクトの集合」という認識があります)がありますよね。 そのおかげで色んな人達がプログラミングし易くなりました。 ネット(はてぶのホットエントリとか)でも「馬鹿な俺がプログラミングを勉強して〇〇を作った」といった記事をよく目にします。 でも「C言語を使って」というのは聞いたことがありません。 そもそも、C言語はそいういったライブラリやフレームワークが少ないように感じます。 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 これが無かったらプログラムなんて作れないのでは? しかし、世間にはC言語で作られたプログラムが多いのもまた事実。 C言語ではいったいどのように開発が行われているのか教えてください。 2つ目 unixとかlinuxといったOSはC言語で書かれている聞いたことがあります。 しかし、プログラムの開発は「コードを書く→コンパイル(→デバッグ)→実行」という流れですよね。 ではOSを開発するときに、そのコードをどうやってコンパイルするのでしょうか? コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 そこがわかりません。 誰かこの2つの疑問に答えてください。 お願いします。

  • WindowsでC言語を書く

    WindowsでC言語を書きたいと思いますが、UNIXで使えるemacsみたいに自動でインデンテーション位置を設定してくれる(Tabを押すと適切な位置までスペースが入力される)ソフトみたいなものはありますか?

  • expectについて

    expectを使ってみたいのですが、expectがどういうものなのか、よく分かりません。 ・基本的にUNIX系のOSでしか動かないものなのでしょうか?(例えばWindowsでは動かない?) ・CやJavaなどのプログラミング言語と、同じようなものなのでしょうか? ・検索するとTclという言語がどうのこうのと出てくるのですが、それとの関係は?

  • osのwindowsはアセンブリ言語でも作られてい

    osのwindowsはアセンブリ言語でも作られていると書いてあるんですが、 アセンブリ言語って機械語に近い低級言語ですよね? windowsを人間がコーディングするときにアセンブリ言語を打つんですか? 大変じゃないんでしょうか?