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

そして、WINDOWS98、NT、2000やMacOSは何によってかかれ
ているのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

予測ですが、各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 …
の 戦うプログラマー (上下巻)に載っています。開発言語まで載っているかは分からないですが・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/03 00:44

補足です



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呼び出しを利用していないのです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/03 00:49

Windowsは、他の方がおっしゃているとおりだと思います。

(私も、推測の域を出ません)

MacOSは、現在はちょっとわかりませんが、以前はPascalでかかれていました。
WinAPIがC言語からの呼び出しを想定しているように、MacOSのAPI(昔はTool Boxと呼んでいました。)は、呼び出しの約束がPascalです。(OS XからTool Boxではなくなったので、言語が変わった可能性があります。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/03 00:47

こんにちは、honiyonです。


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

 参考になれば幸いです(..
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/03 00:41

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語より後に開発されたプログラミング言語は

C言語を基にして開発されたのでしょうか?

C++,C#はもちろんそうですが、Java、PHP、JavaScriptなどもそうなのでしょうか?と言うのも、C言語の関数とこれらのプログラミング言語の関数がかなり似ているところ(共通しているものも)があるからです。また、Excelの関数とも似ているのですが、これらのプログラミング言語と何か関係があるのでしょうか。

Aベストアンサー

ちょっと面白いものがあります
http://gigazine.net/news/20070126_computer_languages_history/

影響は受けるでしょうが、「C言語を基に」というのはちょっと違うと思います。


ただ、関数名だけに注目した場合は別の理由もあります。

関数名は、その関数の機能を表わすような名前を付けるのが普通です。
その際、英単語がよく使われます。数学関数だと、数学用語がそのまま使われます。
そのため、同様の機能の関数は、同じ英単語/数学用語が元になることが多く、結果、同じ関数名になることが多いです。

例えば、sin関数なら、数学のsinから来たもので、特定プログラミング言語の影響とは考えにくいです。

Qプログラミング言語(主に通信中心に使うなら)何の言語がいいですか?

タイトルどおりなんですが、通信中心に使うとなれば、なんのプログラム言語が一番なんですかね?
Winnyとかは、BorlandC++とからしいですが。

Aベストアンサー

通信中心とのことですので、重いのはやめたほうが良いと思います。メモリ消費が激しいものも適さないでしょう。
となると C/C++あたりになりませんかね。
Java,VB,Delphi,Kylix,PHP等ソケットはほとんどのメジャーな言語で使えますが、直接OSのAPIを利用できる言語が良いと思います。

Qコンピュータ言語とプログラミング言語の違い

履歴書のようなものに自分のスキルを登録する際に、
「使用したことのあるプログラミング言語を記入してください」とあったので、
C、C++、アセンブラ、Perl、HTML、
としました。
その後、「使うことの出来るコンピュータ言語を記入してください」とありました。

この、「プログラミング言語」と「コンピュータ言語」という定義には何か違いがあるのでしょうか?また、C、C++、アセンブラは間違いないと思うのですが、残りの2つはプログラミング言語に含めてもいいのでしょうか?

よろしくお願いいたします。

Aベストアンサー

まず、皆さんも書いてるように、プログラミング/コンピュータ言語の違いはないと思います。

しかし、HTMLはプログラミング/コンピュータ言語ではないと思います(^^;

HTMLは「書式(フォーマット)付きテキスト」です。いわゆる「リッチテキスト」ってやつです。
リッチテキストには、HTMLの他に、RTF形式や、MS-Wordのファイルなどが含まれます。
プログラミング/コンピュータ言語にHTMLを入れるとすると、その欄にRTFやWordなども入れなきゃならないでしょうねぇ・・・

QUNIX系でのプロセスIDの操作プログラミング

OSはFreeBSDを使用しています。
プロセスを起動させたときのプロセスIDを
取り出すようなヘッダーは存在しないでしょうか?

実現可能でしょうか?
よろしくお願いします。

Aベストアンサー

>プロセスを起動させたときのプロセスIDを
>取り出すようなヘッダーは存在しないでしょうか?

ごめんなさい。どうしたいのか理解できません。
自分自身のPIDは、getpid()でわかるのではないでしょうか? 

Q動作環境MacOS X の アプリケーション開発

MacOS Xを対象としてアプリケーションを開発するのですが、
どのような言語を利用すればいいかアドバイスをお願い致します。
動作としては、複数枚の画像を選択して画像の回転・反転を行い、指定したキーワードを元にリネーム。所定のフォルダに保存といった処理を自動で行うものです。
GUIでのインタフェースを必要としています。

上記のようなアプリケーションを開発する場合、
どの言語を選択すればいいのでしょうか?
言語の習得の有無は問いません。

できれば、開発環境がwindowsでも可能なものがあれば教えて下さい。

見当違いな質問かもしれませんが、ご教授の程、宜しくお願いします。

Aベストアンサー

>オススメの書籍・サイトなんかがあれば、教えていただけると助かります。

なんか少しずつ元の質問とは離れているような気がしますが・・・。

Macには処理を自動化する為にApplescriptと言うものがあります。
http://ja.wikipedia.org/wiki/AppleScript
AutomatorはApplescriptの様なスクリプトを記述出来ない知識の無い人が簡単に同様のもの作成出来るように考えられたものです。(完全では無く限定的なものですが)
ですから最初に回答したように用意されている処理をブロックのように組み合わせるだけなのです。
最初の質問にある様な処理なら用意されているものだけで出来るからです。
またApplescriptと組み合わせる事も出来ます。
他に、デフォルトで登録されていないような処理の場合、OSX10.6からは操作を記録させて、それをアプリケーション等にする事も出来ます。
換言すればAutomatorはGUIでの操作だけで言語の記述などは不要と言うか出来ないのです。(Applescriptと組み合わせる場合はこちらの記述が必要ですが)

単に「Mac用のアプリケーションの開発」なら他の方々の回答にもあるような言語の勉強が必要になります。
と、言う訳で書籍と言うよりやってみた方が早いと思います。
手許にMacがなければもどかしいでしょうが・・・。
http://support.apple.com/kb/HT2488?viewlocale=ja_JP
http://www.apple.com/jp/pro/techniques/automator/
http://docs.info.apple.com/article.html?path=Automator/1.0/jp/disauto.html
また「Apple Automator」で検索してみてください。
使い方等を書いてあるブログや、出来上がったものを配布しているHP等がヒットする筈です。

>オススメの書籍・サイトなんかがあれば、教えていただけると助かります。

なんか少しずつ元の質問とは離れているような気がしますが・・・。

Macには処理を自動化する為にApplescriptと言うものがあります。
http://ja.wikipedia.org/wiki/AppleScript
AutomatorはApplescriptの様なスクリプトを記述出来ない知識の無い人が簡単に同様のもの作成出来るように考えられたものです。(完全では無く限定的なものですが)
ですから最初に回答したように用意されている処理をブロックのように組み合わせるだけな...続きを読む


人気Q&Aランキング

おすすめ情報