No.1
- 回答日時:
こんにちは、honiyonです。
WindowsはC++とアセンブラで書かれていると思います。 プログラマーに公開している Win32APIは C言語で使われる事を想定しているのでその可能性は高いです。
WinNTは、「他人が読めないくらい Cとアランブラが入り混じっている」と聞いて事もあります。
ただし、マイクロソフトは、Windowsはこんな言語で書いています」と公表しているわけではないので、あくまで推測です。
参考になれば幸いです(..
こんにちは、honiyonさん。
知識がすくないワタクシですが、一番知りたいことをピンポイントで答えて
いただき参考になりました。
ありがとうございました。
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/4756118 … の lion's Commentary UNIXと言う本に完全なソースコードとして載っています。
後WindowsNTであれば開発秘話がhttp://www.amazon.co.jp/exec/obidos/ASIN/4822740 …
の 戦うプログラマー (上下巻)に載っています。開発言語まで載っているかは分からないですが・・・
No.3
- 回答日時:
Windowsは、他の方がおっしゃているとおりだと思います。
(私も、推測の域を出ません)MacOSは、現在はちょっとわかりませんが、以前はPascalでかかれていました。
WinAPIがC言語からの呼び出しを想定しているように、MacOSのAPI(昔はTool Boxと呼んでいました。)は、呼び出しの約束がPascalです。(OS XからTool Boxではなくなったので、言語が変わった可能性があります。)
ありがとうございます。
MacOSが以前、Pascalでかかれていたのは意外でした。
学生時代、情報処理の教養講座でPascalの説明を受けたとき、
この言語はほとんど使われていないと聞いたので。
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呼び出しを利用していないのです。
2度のご回答、ありがとうございます。
今現在でのワタクシには専門的すぎて半分ぐらいしかわからないのですが、
言語はちがえども規約・規格というものが同じことがあるというのが分かり
とても参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミング言語やOS、ネットワークに関する知識はその道の仕事に就かなくても役に立ちますか。 理由 6 2022/10/19 19:32
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- C言語・C++・C# プログラミング言語「C#」の難易度ってどれくらいですか? 4 2022/05/12 19:15
- Windows 8 win8 "ベータ ワールドワイド言語サポートで Unicode UTF-8 を使用"を出したい 2 2023/05/23 19:57
- その他(ソフトウェア) JavaとOracle Javaって何が違うんですか? 1 2022/05/05 05:46
- その他(OS) OSとCPUの関係について 2 2023/05/04 23:33
- その他(開発・運用・管理) VisualStudioSetup.exeの設定について(Rustのインストールの準備として) 2 2023/04/17 12:54
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 教えて!goo 教えてgooの OS の部分に Windows11 を追加してほしい 2 2022/08/09 17:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラー?メッセージ
-
スタックフレームの消滅
-
VB.netでDLLを読み込んで実行す...
-
スタック領域変更
-
スタックとキューの使い所
-
最大スタックサイズを大きくす...
-
基本情報技術者のデータ構造あ...
-
ハードウェアでスタック構造を...
-
パソコンでインターネット接続...
-
プログラムの規模を表す単位「k...
-
hdmiはパラレル?シリアル?
-
ubuntuで デイスク/deb/loopと...
-
パソコン初心者がキーボードを...
-
ライン数とステップ数の違いに...
-
ルータの負荷対策でL2スイッチ...
-
Ic-PcAn はどこのこと?
-
L2スイッチの管理VLANに...
-
命令口調について
-
トランザクションとは何のこと...
-
Macと iPadの違いについて 今現...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
エラー?メッセージ
-
Ethernetヘッダの取得 NDIS
-
GCCで関数の引数が渡らない
-
printf / sprintf のスタック消...
-
スタックフレームの消滅
-
H8マイコン スタック領域に...
-
pthreadのスタックサイズ設定取...
-
_CRTIMPの意味は?
-
スタックを用いて整数配列を入...
-
再帰処理を非再帰処理に書き換...
-
VC++でプログラムから現在のス...
-
cloneのスタック管理
-
マス目上の移動のアルゴリズム
-
gccでスタックサイズを変更する...
-
OCXからのコールバックを繰り返...
-
コンパイラオプション
-
VC++6.0 Stack Overflow !!
-
スタック領域変更
おすすめ情報