C++ is a horrible language

yeoni의 이미지

싸움구경과 불구경이 제일 재밌다는데, 새로운 구경꺼리가 생겼습니다.

리누스가 C++을 싫어하는 것은 알고있었는데, 드디어 쌍욕(?)까지 등장하는 싸움에 끼어들었네요.

git를 C로 작성하는 이유에 대해서 질문하는 도발적인 글이 올라오자 리누스의 댓글이 이어지면서 서로 치고박는 와중에, 요즘 유행하는 D language의 Walter Bright까지 끼어들었습니다.

http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

지리즈의 이미지

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

kasi의 이미지

BS가 bullshit 인가요?-_-

imyejin의 이미지

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

only2sea의 이미지

제 짧은 생각으로는,
이 상황에서 BS는 창시자 이름은 아닌 것 같아 보이네요.

블로그: http://turtleforward.blogspot.com

imyejin의 이미지

C++ 이 horrible 하다고 말하는 거야 알마든지 있을 수 있는 일인데,
문제는 C++ 이 horrible 한 이유는 C 가 horrible 하기 때문입니다.

그래서 그냥 언어적인 측면에서 보자면 C++ 보다 C 가 더 좋다는 건 말도 안되는 얘기죠.

하지만 시스템 개발자의 입장에서는 C를 더 선호할 만한 이유가 있습니다. 왜냐하면 C++ 컴파일러가 C 컴파일러만큼 다양한 플랫폼에서 이식성이 있고 안정화가 아직 안 되어 있는 경우가 많으니까요. 다음 버전 컴파일러가 나왔는데 짜놨던 커널 모듈들이 컴파일이 안되고 warning 나오고 그러면 골치아프겠죠.

이식성에 목숨거는 라이브러리나 커널이 아니라면 C로만 작성해야 한다고 고집을 피우는 건 잘못된 일입니다. 애플리케이션의 경우는 아예 C계열 언어가 아닌 걸로 많이들 만드니까요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

체스맨의 이미지

C++ 과 C 를 단순히 기능적으로 비교하면, 결코 C++ 보다 C 가 좋을 수는 없습니다.

그럼에도 불구하고, C++ 을 써서 개발하면, C++ 답게 프로그램을 작성해야 한다는 철학적, 기술적 제약이 있다고 봅니다.

리누스씨가 시스템 프로그래머인 부분도 있지만, 꼭 그 쪽 프로그래머인 이유가 전부라고 보진 않습니다. 저는 리누스씨의 프로그램 개발 철학 때문에, C++ 을 멀리하는게 아닌가 싶네요.

저는 응용 프로그램 개발자이고 리누스씨처럼 C++ 에 치를 떠는 정도는 아니지만, C++ 과 C 만 놓고보자면, C 로 개발하는 것을 더 선호합니다. C로 개발한다는 것은, 도구 자체만 얘기하는 게 아니라, C 세계의 룰을 따른다는 얘기가 되지요.

Orion Project : http://orionids.org

select99의 이미지

리누즈가 아무이유없이 고집피운다고 생각하세요?

그건 님이너무 속단하시는거로 봅니다..

님은 맥가이버칼에 +드라이버, -드라이버, 병따게, 칼,톱 다달려있어 만능이라고 생각할지몰라도..

A/S 기사는 그거들고 서비스 하지 않습니다.. 보통사람들은 말하겠죠.. 저거하나면 다할수있는데 뭐하러 귀찮게..

다따로따로된거 들고다니나..정리하게도 복합하게..^^

되기야되죠..사실별차이안날수도 있죠.하지만 작업하는데 조금이라도 속도도 느리고.. 사용하기 불편하고..이런사소한차이가 엄청난차이죠..

C++이 좋은게 뭔가요.. 라이브러리는 어차피 양쪽다 있다친다면..
아마도 C++이 더걸릴껄요.. 만들어놔도 동일한 구현이라면 C가더빠르죠..

jick의 이미지

전 C야말로 맥가이버칼이라고 생각하는데요. 별로 좋지도 않은 #define 하나가지고 수십가지 찬란한 테크닉을 구사하는 걸 보고 있자면...

Polymorphism 비스무리한 걸 흉내내기 위해 Perl script로 소스를 생성해내는 삽질을 하고 있다 보면, 가끔씩 C++의 기능이 아쉬워집니다. C가 가볍고 빠르긴 하지만, 무거운(?) 작업을 할 때는 무거운 공구가 좋을 때가 많죠.

* 4년째 회사에서 C만 하고 있습니다. -_-

select99의 이미지

문법적 기능을 말합니다. C++이 C의 문법적기능들을 대부분포함하고 있지만.. 다된다고 좋은것은 아니란뜻입니다.

디파인하나로 여려가지 테크닉을 구사했다면 - 드라이버하나로 여러가지 일을했다고 비유해야죠..

말하자면 님은 기능이 부족한데 억지스런 기교를 부린것이 마음에 안들어 하시는것 같습니다만.

그기교가 그리 비효율적인지... 혹은 C++의 구현법이 과연 효율적인지는.. 구체적으로 봐야하며.. 정확히 따지기도 힘듭니다만...동일한 노력을 들일것이면 좀더 쉽고 성능좋게...해야겠죠..

제생각엔 반드시 필요한것만을 포함하는 C. 모든것을 포함하는 C++ 로 보여지기에..

마치 슈퍼마켓처럼 너저분한느낌입니다.

나는오리의 이미지

#define을 많이쓰면 디버그할때 애먹지 않나요?

totohero의 이미지

이식성만 아니라면 항상 C < C++라는 말인가요? C가 문법적으로는 C++의 subset인지는 몰라도, C의 스타일이 C++의 스타일과 종속 관계는 아니지요. 2개의 스타일 사이에는 분명 (이식성의 문제가 아닌) 서로 다른 장단점이 있으며 C++가 싫으면서 C가 좋을 수도 있습니다.

kyagrd의 이미지

--
There's nothing so practical as a good theory. - Kurt Lewin

--
There's nothing so practical as a good theory. - Kurt Lewin
"하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/

only2sea의 이미지

리누스 등이 쓴 글들이 totohero님이 하신 말씀과 비슷합니다. 리누스가 좀 더 C++을 비판적으로 보긴 하지만요. (C++은 어중간하다. High-level features가 필요하면 완전한 high-level 언어를 쓰지 이도 저도 아닌 C++을 쓰지 말라는 식으로 말했죠.)

드미트리는 이식성만 아니라면 C < C++이라고 생각하는 것 같구요. (이식성에 대한 말을 했는지 모르겠습니다만...)

implicit하게 많은 것을 숨기고 있는 C++이 코더가 적은 노력을 들이고, 적게 타이핑해도 되기 때문에 더 편한 것인지,
어디서 성능을 죽이는 요인이 막 숨어들어가지 않아서 눈에 보이는, 그리고 디버깅하려고 내부의 숨겨진 것들을 덜 파헤쳐도 되는 C가 좋은 것인지...

전, 강타입 언어를 매우 좋아하기 때문에 둘 중에 고르라면, 그나마 타입 시스템이 좋은 C++을 선호하는 것이구요.

그런데 다시 생각을 해 봐야겠습니다. 전, C++을 좋아하긴 하지만, practical하게 볼 때, 여럿이서 작업을 해 보니까, 어려운 점이 많더군요. 언어에 내공이 너무 많이 필요한 것일까요? 모든 사람이 내공이 다 강할 수가 없으므로 잘 작성하지 못하는 사람이 꼭 있게 마련인데, 이 사람이 짠 코드를 디버깅하는 것이 너무 힘듭니다. 버그가 눈에 잘 안 보이거든요.

블로그: http://turtleforward.blogspot.com

terzeron의 이미지

문제는 C++로 짜다보면 시스템 라이브러리에 접근하기 위해 결국 C를 써야 하는 상황이 되어서 C++도 아니고 C도 아닌 어정쩡한 코드가 나온다는 데 있는 것 같습니다.

물론 사용자 애플리케이션만 작성한다면 C++이 더 좋긴 한데, 순수성을 따지자면 C++은 시스템 프로그램을 개발할 때 짬뽕 코드가 될 수 밖에 없는 숙명을 가진 셈이죠.그렇다고 POSIX 시스템의 API들을 모두 C++로 제공한다는 것도 웃긴 일이구요.

C++이 제법 빠르긴 한데, 아직까지는 성능이나 메모리 사용량 때문에 시스템 프로그래밍에서는 C를 선호하는 도메인도 있습니다. 언어 각각의 특성과 장단점을 무시할 순 없다고 봅니다. 그런 게 없었다면 예전에 사장되었겠죠.

orangecrs의 이미지

C++로 작업하게 되면 그 양이 늘어 날수록, 10000줄 이상이 되면 제가 짜고 있으면서도 나 말고 이걸 알아볼까하는 의구심이 생깁니다. 제가 전체적이 모델을 잘못 구성해서 그런면도 있겠지만 예측치 못하게 프로그램이 늘어날 경우 그 대비책이 저로서는 여전히 숙제입니다. 윗분이 말씀하신경우 C를 어쩔수 없이 섞어쓸경우 그 경우의 수는 더 늘어 나는것 같습니다.
10000줄 이상의 프로그램의 경우 듀얼 모니터가 필수라고 생각되어질만큼 복잡해지는 것도 같습니다. C도 물론 그런경우이지만 꼭까지야 라고 생각되어진적은 없었습니다. 다른사람의 코드 들려보는 경우 C++의 경우 모니터가 3개,4개 되었으면 좋겠다라는 생각도 드는 경우가 있었으니까요...
제가 C에서 C++넘어가는데 3년정도 걸렸습니다. 넘어갈려고 해서 넘어간게 아니라 도저히 안넘어 가졌는데 어쩔수 없이 자바 공부하다보니 어느순간 넘어가지더군요. 그래서 유독 그런지도 모르겠습니다. 남들은 C++이 큰 프로젝트에 쉽다고 말하는데 저는 아직까지도 저는 이해를 못하겠습니다. asm를 해야하는 입장이라서 그런걸까요?

---------------------------------------------------
야!...

아르아의 이미지

읽을수록 재밌나네요.
C++을 쓰자고 주장하는 사람에서는 'C++은 새로운 유저도 쉽게 버그를 찾고 고치기 쉽고...'
C를 주장하는 쪽에서는 '그렇게 쉽게쉽게 버그 고치다가 걸레가 된 코드는 누가 다시짜냐?
그리고 C++은 숨기는것이 많아서 최적화하기도 암울그 자체다'
뭐 이런말도 오가고 있네요. 물론 다른 이야기도 많지만요.
하긴 저도 C++에서 unit test해가며 refactoring하는것은
현명한 처사는 아닌것 같다는 생각을 합니다

차라리 C를 주장하는 사람들처럼
팔만대장경쓰듯 프로그래밍 하는것이 더 나을것 같습니다
Knuth처럼 치밀한 설계,계획을 통해서만 코딩한다는거지요.

저는 C를 주로 사용하는편이긴 하지만
단 한가지 미련을 버리지 못하는 이유는,
'게임업계에서는 C++만 쓰지 않은가!'
왜 그럴까요? DirectX때문이긴 하겠지만
게임시장에서 OpenGL이 도태되고 DirectX가 살아남은 이유도 잘 모르겠습니다.

익명 사용자의 이미지

DirectX가 살아남은 이유는 플랫폼 때문이 아닐까요?
두번째는 남들이 이거 쓰니까 "우리도 이걸로 간다" 정도가... ^^

revoman의 이미지

속성자체가 객체지향적이니까 그렇지 않을까요? 캐릭터라든가, 인터페이스라든가...

익명 사용자의 이미지

> 게임시장에서 OpenGL이 도태되고 DirectX가 살아남은 이유도 잘 모르겠습니다.

아니 MS께서 하시는 일에 감히 토를 달다니~
MS가 걷는 길이 곧 정도요 진리니,
우매한 백성들은 그저 선지자 빌께서 가시는 길을 믿고 따르라~
네 컴에 임하신 윈도XP가 이를 간증하노라~

neogeo의 이미지

Windows 때문입니다.

대부분의 유저가 Windows를 쓰고있던 상황에서 OpenGL 로 개발하기보단 DirectX 로 개발하는 것이

여러모로 개발사 입장에선 비용도 적게 들고 시장도 크게 잡을 수 있었죠.

OpenGL 은 windows에서도 잘 돌지 않느냐 라고 반문하실수도 있는데 하드웨어 밴더들이 고가형 그래픽카드에선

OpenGL 지원이 매우 원활하였지만 저가형 카드들은 안습이었죠.

게다가 DirectX 의 성공의 이면에는 다양한 이유가 숨어있습니다.

제가 꼽는 이유는

1. 통합적인 멀티미디어 개발환경 - DirectSound DirectInput 이 두가지만 놓고 봐도 OpenGL 이 당시 단순한 그래픽 라이브러리 or 환경이었던 것에 비해 DirectX 는 게임 개발을 위해 필요한 것을 좀더 갖추고 있었습니다.

2. 일관적인 Vertex , Math Model. - OpenGL 은 내부 자료 구조를 스스로 만들어야 합니다. Matrix 연산도 마찬가지구요. DirectX 는 불편하나마 이를 개발할 부담을 어느정도 덜어주었습니다.

3. DirectX 만의 emulation - 하드웨어가 지원하지 않는 코드를 철저하게 에뮬레이션 해주었습니다. OpenGL 은 아예 게임이 안되는 경우도 일부 있었죠.

저도 소프트웨어 엔지니어 학과 출신이고 OpenGL 이 훨씬 여러모로 그래픽스 환경에 정석적으로 어울리게 , 개념을 확실히 다지기에 좋은 환경이라는 것을 잘 느끼고 있습니다만...

게임쪽에서 일하다보니 이미 DirectX 가 대세를 꽉 쥐고 있는 지라 어떻게 피해갈 수가 없네요.

특히 그래픽스 분야에서 VS , PS 가 나오기 시작하면서 OpenGL 과 DirectX 는 더욱 독자적인 노선을 걷기 시작했습니다.

제가 가장 존경해 하는 Quake , Doom , 울펜 스리즈를 만든 존 카멕은 최근 까지는 OpenGL 로 개발을 해왔습니다만.....

OpenGL 역시 안되는 것은 없습니다만, 게임 개발에는 DirectX 가 비용이 적게 들고 시장이 조금이라도 더 크다는 점이 발목을 잡습니다.

혹자는 OpenGL 과 DirectX 의 성능차를 두고 말이 많은데, Vista 가 아닌 이상 큰 차이는 안난다고 봅니다.

물론 DirectX 가 한 때 속도를 내기가 더 좋은 환경이었던것도 사실이었지만 지금은 별반 차이가 없는 것 같습니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

익명 사용자의 이미지

제가 가지고 있는 라뎅 9100의 경우 DirectX의 속도가 OpenGL보다 월등히 좋더군요.

ruinfire의 이미지

하드웨어적 칩셋의 지원 때문에 속도차가 나는건 아닌가요?

------------------------------------------------------
팔 어딘가가 간지러운데 찾아 긁을 수 없는? 그런 기분??

------------------------------------------------------
팔 어딘가가 간지러운데 찾아 긁을 수 없는? 그런 기분??

moonhyunjin의 이미지

code warrior에서 keyboard warrior로 변신~

<- 이거면 안되는 게 없어~
정품 소프트웨어 사용 캠패인

<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인

only2sea의 이미지

전 C++을 매우 좋아합니다만, 아쉽게도 글을 읽고 보니 Dmitry Kakurin의 주장은
설득력이 매우 떨어지네요. (제 생각이 그렇단 겁니다.)

글타래를 쭉 읽어보니...
처음에 밀리다가 조금 회복하려하는듯 하더니 제대로 한 방 먹고 그 다음 반격은 완전
설득력이 없어지네요. (현재 C로 작성되어 있는 코드를 그대로 두고 C++로 바꾸라...)

이렇게 되면...
토발즈가 말한대로 crap이 되겠죠. 확실히 토발즈 쪽의 글이 내공이 있어 보이네요.
아직도 처음부터 C로 작성하려고 염두에 두고 작성된 프로그램을 중간에 마음을 바꿔먹어
C++ 컴파일러로 컴파일하면서 C++의 Feature를 이용하면 짜기 편한 부분만 교체해나가면서
작성하는 것이 가능하다고 생각하는지...

물론 C++로 작성할 것을 생각하고 작성을 하지만, C++에 대하여 많은 것들을 몰라서
C와 비슷한 형태로 작성해 나가면서 필요한 부분을 대체해나가는 (C++을 처음 배우는 경우 등)
방법으로 작성하는 경우에는 혼자서 해 보면 재미라도 있겠습니다만...

여튼 저로서는 느끼는 바가 많습니다.

블로그: http://turtleforward.blogspot.com

나는오리의 이미지

사람들이 오해하는것중 하나가
"C++에 C가 포함되어있다"는 생각을 하고 있는거죠.
C 는 C++이 아니고 C++ 또한 C가 아니며 C++이 C를 포함하고 있지 않죠.
C++은 단지 C문법을 꽤 지원해주는 정도이며 C로 개발된 라이브러리를 이용할 수 있는것이지
절대 C++이 C를 포함한게 아니라는거죠.

결국 한문장이면될걸 제가 길게쓰는 버릇때문에 주절주절...

bestyt의 이미지

아쉽군요.

linus도 자신이 가지고 있는 발언의 강도가 지금의 커널영역에 국한되지 않았다는걸 생각해서
좀더 다양성을 인정해 주었으면 하네요..
(kernel에 XWindow 넣을지 말지 여부도 그렇고, C++에 대한 의견도 그렇고..)

물론 system programming에서는 C가 편하고 빠릅니다. 이미 커널은 C로 작성되어있고, 수많은 driver들이 C로 작성되어있어서 C++로 다시 작성할 필요는 없겠죠.(커널에서 C나 C++이냐는 소모적인것보단 어서 Driver Framework좀 제대로 제공했으면...)

다만 system programming이 아닌 다른쪽으로 눈을 돌려보면 C보단 다른언어들이 훨씬 더 많이 쓰인다는걸 알 수 있을겁니다.
Windows의 COM/ATL/WTL/.NET 등등이 모두 C++을 base로 하고 있거나, 지원하고 있죠. Java도 그렇고, Perl도 많이 쓰이죠.

제일 경계되는 사항이
"C++은 linus가 않좋다고 했으니 나도 이제부터 C lover."
가 아닐지..

이런 생각들이 바탕이 되어서 여전히 linux는 application쪽에서 하나로 통합된 몬가(?)가 나오지 않는게 아닌지 조심스레 생각해봅니다.

sangwoo의 이미지

Linus는 커널 뿐 아니라 application 개발에도 C++보다 C가 낫다고 이야기하는 걸로 들립니다만, (git의 구현에 대한 이야기였죠?) 저는 C++에 대한 경험이 거의 없어서 뭐라고 코멘트를 하기가 힘드네요.

----
Let's shut up and code.

----
Let's shut up and code.

imyejin의 이미지

KDE는 C++로 개발하는걸요. 특히 Qt 라이브러리 쓰면 C++을 쓰게 되잖아요.

리누스는 커널 개발하는 사람이니까 그분이 하는 말은 커널이나 시스템 프로그래밍 하는 플랫폼이나 이식성 관점에서 새겨 들어야지 그 이상 확장할 필요는 없다고 생각합니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

yundreamm의 이미지

토론중에도 나온 언급이 되었는데,
토발즈가 C++을 싫어하는 이유는 그 자체가 독립적인 환경을 가지고 갈 수 없다고 보기 때문인거 같습니다.
Perl, Python, Java, C#, Ruby는 (기본적으로)는 독립적으로 프로그래밍 되고 실행되는 환경을 제공합니다.. 만..
C++은 그렇지가 못하죠. 이런 저런 이유로 C library를 가져다가 써야 합니다. C++로 작성된 프로그램에서 C라이브러리를 호출해서 사용하는 것은 개발/배포 여러가지 면에서 깔끔하지가 못합니다. 차라리 윈도우 환경에서의 VC계열 툴을 이용한 C++응용 개발이라면 C++을 인정하겠다는 요지의 발언도 이러한 측면에서 나온거라 생각됩니다.

eyehint의 이미지

파이썬 같은경우는 애초에 C로 만들어진거라...
즉.. 말하자면 파이썬 같은 환경을 C로 만들수 있다는거죠...
환경의 문제라면 글쎄요... 뭐 결국 닭이 먼저냐 달걀이 먼져냐의 문제랄까요...

김일영의 이미지

저런 문제를 가지고 싸우기도 한다는 사실을 오늘 처음 알았네요.
역시 그 사람들 역시 사람은 사람인가 봅니다.

modestcode의 이미지

글쎄 이 정도면 쌍욕 축에도 못들고 건전한 토론이 아닌가 생각합니다^^.
근데 D 아저씨는 시스템 프로그래밍 영역에 도전하려고 한 수 배우려고 하는데 토발즈 아저씨가 개무시하네요.
왜 거긴 갑자기 끼어들어가지고 ^^.

지리즈의 이미지

좋은 코드를 작성하기가 너무 어렵다는 점입니다.

물론 단순한 레벨의 어플리케이션을 작성한다면 크게 차이가 없겠지만,
큰 수준이 된다면 시행착오에 대한 댓가가 말그대로 기하급수적으로 증가하죠.

개체지향언어들은 기본적으로 요구하는 것이 너무 많습니다.

실제의 것을 냉정하게 분석하고 이를 추상화 할 수 있는 통찰력과 경험
이를 바탕으로 어플리케이션 전반에 걸쳐 모든 것을 고려한 설계
그리고, 이에 대한 코딩

즉, 분석과 설계가 전체 개발에 있어서 너무나 커다란 영향을 주고,
이곳에서의 실수는 코딩에서의 실수에 비해 그 파급과 악영향이 너무나 커다랗죠.

하지만, 말이죠...

개체지향은 뭐라할까 로맨틱한 것 같아요.

잘 만들어진 개체들이 개성을 가지고 서로 상호작용하면서 새끼(상속)도 치고 그러는 것을 보면,
어플리케이션이 마치 조그만 사회같고 그리고, 그속의 개체들의 살아 움직이는 숨소리가 들리는 것만 같습니다.

이것이 개체지향의 언어들의 매력이 아닐까요?

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

modestcode의 이미지

Quote:
개체지향은 뭐라할까 로맨틱한 것 같아요.

갑자기 이런 말이 생각나네요.
남들이 하면 불륜 자기가하면 로맨스?
galien의 이미지

동감입니다.

객체지향성을 잘 살리는 프로그래밍은 내공이 좀 많이 쌓여야 가능 한 것 같습니다.

C++은 싫어하는 편이지만 JAVA의 경우 문법이 매력적(내지는 섹시~)이라고 생각했었는 데,
지리즈님도 그렇게 생각하시는 것 같아 재미있군요.

ssik425의 이미지

C 가 좋냐 C++이 좋냐는 주제만을 놓고 얘기하자면..

저는 리눅스에서 구동되는 패키징 소프트웨어를 개발하고 있습니다.

지금도 설치중이고 지금까지 설치된 서버가 아마도 500개는 넘지 않을까 싶네요...

이런 다양한 환경(모두 리눅스이기는 하지만)에서의 언어를 선택하라면

저는 주저없이 C를 선택합니다.

최근에 들어서는 C++을 사용함에 있어 그리 불편이 없었지만, 2년전의 리눅스

패키지들은 정말이지 C++을 사용하기 어려웠습니다.

그많은 서버들을 관리하고 보수해야 입장에서는 당연히 Horible이라는

소리가 나올수도 있구요...

개발자들의 궁극적 비전은 ?

eyehint의 이미지

스크립트 랭귀지가... 전 python을 제1랭귀지로 사용합니다... [도망...]