대부분의 Linux 프로그램이 C로 작성된 이유는 무엇입니까?


30

대부분의 Linux 프로그램이 C로 작성된 이유는 무엇입니까? 왜 최신 C ++로 작성되지 않습니까?


14
C++보다 최신 버전 C이지만 조금 관련이 없습니다. 그들은 다른 언어입니다.
Mat

6
아마도 StackOverflow 또는 프로그래머 (이 주제가 실제로 잘 다루어 진 곳)에서 물어보십시오 .
rozcietrzewiacz

4
@Mat C ++은 C의 상위 집합이므로 완전히 정확하지는 않습니다. C로 프로그래밍하고 C ++ 컴파일러로 컴파일 할 수 있습니다. 예상대로 컴파일되고 작동합니다.
polemon

8
@polemon : 맞지 않습니다. 호환성이 없습니다. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

답변:


37

이에 대한 많은 토론이있었습니다. 주로 그 이유는 철학적 인 것입니다. C는 시스템 개발을위한 간단한 언어로 개발되었습니다 (응용 프로그램 개발은 그리 많지 않습니다). C ++ 사용에 대한 많은 주장이 있지만 C ++을 사용 하지 않고 C를 고수하는 것에 대한 많은 주장이 있습니다 .

결국, 그것은 역사적인 문제입니다. 대부분의 응용 프로그램 내용은 C로 작성됩니다. 대부분의 커널 내용은 C로 작성되기 때문입니다. 그 당시 대부분의 내용은 C로 작성되었으므로 사람들은 원래 언어를 사용하는 경향이 있습니다.

이 시점에서 누군가가 "OK, 왜 커널 이 C로 작성되고 C ++로 포팅되지 않습니까?"라고 물을 수 있습니다. . 이것은 얼마 전에 커널 트랩 에서 논의되었습니다 . 이 글에서 인용 할 수있는 좋은 설명 중 하나는 yoshi314 의 답변입니다 (직접 인용).

거의 모든 c ++ 앱이 작동하려면 별도의 c ++ 표준 라이브러리가 필요하기 때문입니다. 그래서 커널에 포팅해야하고 어디에서나 추가적인 오버 헤드를 기대해야합니다.

c ++는 더 복잡한 언어이므로 컴파일러는 더 복잡한 코드를 작성합니다. 이 때문에 c에서 코드 오류가 아닌 컴파일러 버그에서 문제가 발생한다는 것을 알았습니다.

또한 c 언어는 더 기본적이며 어셈블리 표현을 따르는 것이 더 쉽습니다. 종종 예측하기 쉽습니다.

c ++는 다재다능하지만 c는 저수준 또는 포함 된 것들에 더 적합합니다.


반면 "리눅스 프로그램의 대부분"은 오해의 소지가 있습니다. 그래픽 응용 프로그램을 살펴보십시오. 파이썬은 특히 Linux의 GUI 환경에서 점점 더 발전하고 있습니다. Windows 및 .NET에서 발생하는 것과 동일한 내용입니다.


3
또한 C에는 안정적인 ABI가 있으며 기본 FFI를 통해 다른 언어에 쉽게 연결할 수 있지만 C ++에는 사람이 읽을 수있는 ABI가없고 g ++에는 ABI가 변경되었습니다. 따라서 라이브러리는 C ++가 아닌 C로 작성되는 경향이있었습니다. 프로젝트에 하나의 언어를 원하기 때문에 프로그램과 함께 라이브러리가 번들로 제공됩니다. (적어도 그놈의 이야기였습니다).
Maciej Piechotka

@MaciejPiechotka이 모든 것이 사실이며, 좋은 토론이지만 c에는 각 플랫폼에서 작업을 수행 하는 "분명한" 방법 이 있다는 점을 제외하고 c에 ABI가 정의되어 있지 않습니다 . 그 후 그것은 지도자를 따릅니다.
dmckee

@ dmckee : 표준화되었다고 말하지는 않았지만 각 플랫폼의 C API는 거의 변경되지 않는 몇 가지 간단한 규칙을 따르지 않습니다 .100 % 정확하지 않더라도 목적에 유용합니다.
Maciej Piechotka

2
요즘, 당신은 또한 ... * C에서 할 수있는 모든 것을 C ++에서 거의 같은 방식으로 할 수 있고, "extern C"라고 생각할 수도 있습니다 ... * 컴파일러는 더 복잡한 코드를 만들지 않을 것입니다 당신은 더 복잡한 코드를 작성하지 않습니다 ... * C ++로 같은 베어 본을 작성할 수 있습니다 ... * C에서 C ++ 라이브러리를 링크하고 사용할 수 있습니다. 결국 그것은 꽤 역사적인 문제입니다.
Zrin

7

리눅스 제작자 Linus Torvalds에서 다음 이메일을 읽은 후 위의 답변이 잘못되었다고 생각할 수 없습니다. 그는 C ++ 프로그래머가 좋은 시스템 프로그래머 가 아니라고 생각하는 것 같습니다 . 그리고 C ++의 추가 기능은 종종 단기적으로 얻는 이점에 비해 장기적으로 더 많은 문제를 유발합니다. 그에게 동의하지 않을 수도 있지만, 그가 리눅스 운영 체제에 미친 영향을 과장하기는 어렵습니다.

http://harmful.cat-v.org/software/c++/linus


젠장, 그 해로운
AFP_555
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.