最近、プログラミングを始めたのですが、その際に、様々なアプリケーションや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と関連する良く見られている質問

Q物理学上の階層性と身体について

お世話になります。
物理学には、階層性が有ると聞いておりますが、
人間の身体を構成する、物質的世界の中にも、
当然、階層性が有ると思っていましたが、具体的にはどうなのでしょう。
例えば、塩基と細胞、細胞と身体の間に、物理学上の、階層性はあるのですか?
出来れば、階層性全体の説明から、素人相手のご説明を、お願いします。

Aベストアンサー

あると思います.ただどこまでを物理学の範疇として捉え、どこまでを他の科学の領域と捉えるかによって変わってくると思います.

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

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

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

Aベストアンサー

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

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


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

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

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

Qディレクトリ構成の洗い出し

3階層のフォルダ構成があります。

3階層目は「10個ほどのフォルダ」、とそれら10個の各フォルダ内には
「数10個のPDFファイル」があります。

このフォルダ構成をできればツリー上で、テキストに出力したいのですが、
DOSコマンドや無償ツールでは可能でしょうか?。
※VBScriptでもかまいません

実は上記をCDにコピーする業務があるのですが、コピーが漏れてしまう
ミスが発生しています。

そのため、コピー元とコピー先(CD)で、上記のようにフォルダ構成をツリー上で
テキストに出力し、それをdiffなどで比較する、などのチェックをしたいと考えております。

アドバイスを頂ければ助かります。

Aベストアンサー

TREE /F
とか,
DIR *.PDF /S
とか,
FOR /R %A IN (*.PDF) DO @ECHO %A
とか……。

http://technet.microsoft.com/en-us/library/cc771130(v=ws.10).aspx
http://technet.microsoft.com/en-us/library/cc755121(v=ws.10).aspx
http://technet.microsoft.com/en-us/library/cc754900(v=ws.10).aspx
※英語版へのリンクなのは,日本語版の機械翻訳があまりに酷いため……

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

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

Aベストアンサー

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

Qマルチドメインの場合、上階層のファイルを呼べる?

マルチドメインは、あるディレクトリをドメインのように利用するようですが、そのディレクトリより上の階層にあるファイルにもアクセスすることはできるのでしょうか?

home
├musti_domain1 ←これをマルチドメインに指定
│└index.php
└function.php

上記のような構成の場合、index.phpはfunction.phpをincludeすることは可能ですか?

どうぞよろしくお願い致します。

Aベストアンサー

サーバパス(フルパス)で指定すれば(読み込み権限さえあれば)どの場所でも可能。当然、VirtualHostで割り当てたディレクトリより上の階層くらいは何の問題もない。

#include_pathに /usr/local/php とかもあるわけだしww


>あるディレクトリをドメインのように利用する

正確にはVirtualHostで、そのホスト名でのアクセスに対してのDocumentRootを設定するだけ。

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

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

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

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

Aベストアンサー

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

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

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

Q全階層のファイルを検索して処理(Windows)

以下のようなフォルダ構成があるとします。
C:.
├─aaa
│ ├─bbb
│ │ ├─g.txt
│ │ └─h.txt
│ └i.txt
└─j.txt

これら全階層のファイルに対して処理をして、

C:.
├─ccc
│ ├─ddd
│ │ ├─g.tst
│ │ └─h.tst
│ └i.tst
└─j.tst

とフォルダ構成そのままに移したいと考えています(拡張子tstは適当な例です)。

これをWindowsのバッチで何とか実行したいのですが何とかなりませんでしょうか。
フォルダ構成はxcopyで移すとして、個別のファイルに対しての処理が出来ずにおります。
お知恵を拝借出来れば幸いです。よろしくお願いいたします。

Aベストアンサー

> アプリケーションを通して変換したファイルのみを、別フォルダにフォルダ構造ごと移したいと思っています。

なるほど。じゃあこんな感じで。
---ここから---

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion

rem 処理元フォルダ
set srcfolder=c:\aaa

rem 処理元フォルダの文字数
set srcfolderlen=6

rem 処理元ファイルの拡張子
set srcext=.txt

rem 処理元ファイルの拡張子の文字数
set srcextlen=4

rem 処理先フォルダ
set dstfolder=c:\ccc

rem 処理先ファイルの拡張子
set dstext=.tst

for /R %srcfolder% %%f in ( *%srcext% ) do (
set src=%%f
set dst=%dstfolder%!src:~%srcfolderlen%,-%srcextlen%!%dstext%

rem ディレクトリ作成。ちょっと泥臭いです
mkdir !dst!
rmdir !dst!

rem 処理コマンド(!src!は処理元ファイル、!dst!は処理先ファイルが入る)
echo !src!→!dst!
)
---ここまで---

C:\AAA 中の*.txt から、同じディレクトリ構成でC:\CCC下の*.tst なファイル名を生成し、
それを表示してるだけですので、処理内容に応じて適宜書き変えて下さい。

> アプリケーションを通して変換したファイルのみを、別フォルダにフォルダ構造ごと移したいと思っています。

なるほど。じゃあこんな感じで。
---ここから---

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion

rem 処理元フォルダ
set srcfolder=c:\aaa

rem 処理元フォルダの文字数
set srcfolderlen=6

rem 処理元ファイルの拡張子
set srcext=.txt

rem 処理元ファイルの拡張子の文字数
set srcextlen=4

rem 処理先フォルダ
set dstfolder=c:\ccc

rem 処理先ファイルの拡張子
set d...続きを読む

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

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

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

Aベストアンサー

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

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

Q「Windowsフォルダ」の「system32」以下のフォルダ構成を教えてください

すみません。
システムフォルダのファイル操作をしていたら
ふとしたはずみで、何かのフォルダが「system32」のフォルダに
入ってしまうという、情けないミスをしてしまいました。

分かっているのは、「system32」フォルダと同じ階層にある
「system32」より後のフォルダが移動した、ということです。

大変申しわけがありませんが、
WindowsXP pro の「system32」より後には
どんなフォルダがあるか、お教えいただけませんでしょうか?
同じ階層です。

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

----------------------------------------
なお、フォルダ構成を簡単にテキスト出力できる
ソフトをお使いの方は、「system32」フォルダには
どんなフォルダがあるのかを全部列挙していただけると
涙が出るほど助かります。

Aベストアンサー

私のフォルダ構成です。WindowsXp Professional SP2です。
%LOCALAPPDATA%
1025
1028
1031
1033
1037
1041
1042
1054
2052
3076
3com_dmi
appmgmt
Cache
CatRoot
CatRoot2
Com
config
dhcp
DirectX
dllcache
drivers
DRM
DRVSTORE
en-us
export
ias
icsxml
IME
inetsrv
ja-jp
LogFiles
Macromed
Microsoft
MsDtc
mui
npp
oobe
PreInstall
ras
ReinstallBackups
Restore
Setup
ShellExt
SoftwareDistribution
spool
URTTemp
usmt
wbem
wins
xircom
XPSViewer

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ランキング