web-dev-qa-db-ja.com

Cはオープンソースですか?

これはおそらくばかげた質問ですが、私はこれについてしばらく考えていました。 C(または、さらに言えば他の低レベル言語)にもソースがありますか、それともコンパイラーは、解析を含めて「すべての作業を行う」部分ですか?もしそうなら、異なるコンパイラが異なるC方言を持つことはできませんか? stdlibはこれをどこに考慮しますか?これがどのように機能するのか本当に知りたいです。

73
Hypercube

C言語はソフトウェアではなく、 定義された標準 であるため、オープンソースであるとは言えず、オープン標準であると言えます。

Cには膨大な数の異なるコンパイラがありますが、それらの多くは確かにオープンソースです。最も注目すべき例は GCCのCコンパイラ で、これはすべてオープンソースライセンスである GNU General Public License(GPL) に基づいています。

より多くのオプションがあります。 Watcom は、たとえばオープンソースです。オープンソースのCコンパイラーに不足はありませんが、間違いなく、少なくともWindows以外の世界で最も普及しているのはGCCです。

Windowsの場合は、おそらく Cygwin または MinGW を使用して、WatcomまたはGCCが最適です。

127
Teekin

Cは、Cコンパイラがプログラムを生成する方法を指定する標準です。
音符にプラスチックがないように、C自体にもソースコードはありません。

GCCなどの一部のCコンパイラはオープンソースです。

27
SLaks

Cは単なる言語であり、標準化された言語でもあります。 「すべての作業を行う」のはコンパイラです。コンパイラが異なれば、方言も異なります。 C99 ANSI標準以前は、C言語を独自の方法で実装するBorland Cや他の競合するコンパイラなどがありました。

stdlibは、ANSI Cの実装に存在する必要がある標準ライブラリの合意済みのコレクションです。

10
nesv

他の素晴らしい答えに追加するには:

さまざまな方言について-Cにはコンパイラ固有の追加機能がいくつか追加されています。コマンドラインフラグ_-std=..._をgccに指定して、使用するC標準を指定できます。それぞれに構文にわずかなバリエーション/追加があり、最も一般的なものはおそらく_c99_です。

各コンパイラはいくつかの異なる追加機能を実装する傾向があります。たとえば、typeof()はC標準にないため、コンパイラはこれを実装する必要はありませんが、それでも有用であり、ほとんどのコンパイラが提供しています。これが gcc C拡張のリスト です。

Stdlibは、C標準で指定された関数のセットです。コンパイラのように、stdlibは異なる実装を持つことができます。 GNU実装はgccと同様にオープンソースですが、他のコンパイラーがあり、クローズドソースであるstdlibの他の実装である可能性があります。

4
Jesse Cohen

コンパイラはCからアセンブリなどへのすべてのマッピングを決定しますが、それを所有している誰かまでは.......本当にCを所有している人はいませんが、ANSI/ISOは標準を決定します

3
user475353

GCCのCコンパイラはCで書かれています。したがって、少なくともone CコンパイラがCで書かれていることがわかります。

GNUのstdlib(glibc)もC(stdio.h、stdlib.h)で記述されています。ただし、アセンブリ言語で記述された部分もあります。

2

Helgi Hrafn Gunnarssonが主な回答を書きましたが、方言も効果的に使用できることは注目に値すると思います。

コンパイラは、サポートする標準(最近ではほとんど同じバージョンになるはずです)に関して同じことを行う必要がありますが、灰色の領域があります。たとえば、コンパイラが「未定義」機能のために機能する方法。 C仕様で動作が特定のケースで定義されていないことが示されている場合、コンパイラーは必要なことをほぼ実行できます。

特定のプラットフォームの特性をサポートするため、競争上の優位性を作成するため、または単に生活を楽にするために、コンパイラメーカーによってライブラリに追加された関数(および追加された新しいライブラリ)の例もあります。シニカルは、これらのいくつかが人々を特定のコンパイラにロックするのを助けるために追加されることを示唆するかもしれません。

1
Colin Newell

本当に良い質問です。 方法があります 言語ソース(実装ではありません)を「ソースコード」の形式で、厳密で明確な言語で定義します。残念ながら、Cを含むすべての古い言語は十分に定義されていません。ただし、その定義をソースコード形式に変換することは可能です。

別のアプローチは、その 操作セマンティクス を介して言語を定義することです。これは、多くの場合、単純な(そして非効率的な)参照実装の形式です。

1
SK-logic

言語としてのCはオープンソースではないと思います。多くの人が指摘しているように、GNUライセンスされたコンパイラとライブラリを無料でダウンロードできますが、独自のCコンパイラを作成したい場合は、ISO C標準とISO料金に従う必要があります。 C言語の仕様に対するハードキャッシュ。これは、投稿時点では178ドルです。そのため、実際の答えは、フリーでオープンソースであることに関心のある要素によって異なります。

0
user2827968