LangDev

프로그래밍 언어 개발에 관심 있는 사람들의 모임입니다.


C++얼마나 복잡한 언어인가요?

2008-07-23 19:26:36

C++은 학교에서 관련수업을 들은거(아주 기초적인거까지만 했음) 말고는 경험을 안해봤다가 졸업을 앞두고 부랴부랴 공부를 하고 있습니다. 책은 TC++PL인데 이건 뭐 책을 보는데 머리가 돌아버릴 지경이네요. 이해가 안되는 부분도 많이있고, 언어가 이 정도로 복잡하게 되어있을줄은 상상도 못했네요. 물론 제 머리가 딸려서이겠지만 다른 언어들과 비교해 보았을때 C++이라는 언어의 복잡도는 어느정도나 되는지 궁금합니다. 굳이 OOP계열뿐만이 아니라 함수형 언어와의 복잡도 비교도 재밌을꺼같네요.

랑고랑진 님이 2008-07-23 19:27:11에 고쳤습니다.

트랙백 주소: http://langdev.net/post/trackback/108

  1. Cheap nexium. from Cheap nexium.
  2. Ncsl auto insurance publications. from Auto insurance.
  3. Buy soma cheap. from Soma buy soma cheap soma soma online.
  4. Tramadol cheap no rx free overnight shipping. from Cheap tramadol.
  5. Generic lipitor. from Lipitor.
  6. Buy alprazolam overnight. from Buy alprazolam overnight.
  7. Order prescriptions generic xanax. from Order xanax overnight.
  8. Lipitor effects gall bladder. from Lipitor.
  9. Buy soma online without rx. from Soma buy soma cheap soma soma online.
  10. San diego mortgage rates. from Colorado doc florida loan mortgage no.
  11. Can a person get off of plavix. from Plavix swelling breathing difficulties.
  1. 민군 2008-07-23 19:32:02

    c++ 는 복잡한 면도 있지만 그만큼 강력합니다. c++ 를 별로 좋아하진 않고 Ruby 를 좋아하지만, C++ 가 ‘최고의 언어중 하나’라고 생각합니다. c++ 를 잘 익혀둔다면 다른 언어를 배우는데 적지 않은 도움이 됩니다.

    동문서답이 되어버렸습니다만, 제 입장에서 배우기 쉬운건 ruby, vb, php 정도일뿐입니다. 제 아는바가 짧아서 본론적인 내용은 다음분께 pass

  2. semmal 2008-07-23 19:45:33

    C++ = C + Simula67 + Generic 정도로 생각하면 될 것 같습니다. 3개 언어의 요소와 패러다임이 들어가있는 언어로 보시면 될 듯 합니다. 세가지 요소는 각각 keyword를 가지고 있어서 문법이 방대하고, 나름의 패러다임으로 프로그래밍 할 수 있습니다. 같은 C++이라도 C style, Simula style, Generic style로 짜면 완전히 다른 코드가 되어버리죠. 당연히 각각에 대한 프로그래밍하는 방법은 다르고 제대로 쓰려면 일일이 배워야할 필요가 있습니다. 뿐만아니라, C와 호환성을 갖추기 힘들고, OO로는 기능이 부족하고, Generic만 가지고는 아무것도 못합니다. 물론 이런 어정쩡한 기능도 잘 조합만 한다면 쓰기에 나쁠 이유는 없겠지요. 하지만 저도 C++을 쓰고 있기는 하지만, C++로 제대로 만들어진 어플리케이션은 KDE밖에 없는 것 같습니다. 그것도 Qt라는 확장을 더해서 말이죠. 겨우겨우

  3. lifthrasiir 2008-07-23 20:04:59

    얼마나 복잡한지 수치로 비교하자면, C++ 98의 모든 기능을 구현하는데 대략 5~10인년이 걸릴 거라는 추산이 있습니다. 정확히는 수치는 꽤 왔다 갔다 합니다만 제 기억으로 컴파일러 “파서”에만 1인년 정도 걸릴 거라는 얘기를 본 적 있고, 모 컴파일러에서 (워낙 복잡해서 다른 컴파일러가 구현 안 한) export를 구현하는데 2인년이 걸렸다는 얘기가 있으니 (아마 Exceptional C++ Style 쯤에 있던 얘기인 듯…) 꽤 많이 걸리는 거죠.

    그에 비해 자바의 구현에는 2인년 정도가 걸렸다고 합니다…

  4. 랑고랑진 2008-07-24 01:01:42

    10인년이라 하면 10명의 프로그래머로 1년 걸렸다는 이야기 인가요? 어찌됐던 복잡하긴 복잡한거군요.

  5. lifthrasiir 2008-07-24 07:06:40

    10명 고용해서 1년 돌리거나, 한 명 고용해서 10년 돌리거나… 를 10인년이라 합니다. g++가 그렇게 꽤 많이 개발되었는데도 아직 여기 저기 문제점이 있는 (템플릿 컴파일할 때 아직도 어쩌다가 뻗는 경우가 있었습니다. 4.0.x 대였는데… VC++는 좀 더 심했죠.) 걸 보면 20인년일지도 모르고 -_-;

  6. jong10 2008-07-24 00:11:08

    얼마나 복잡하냐고 물으셨으니, 적당한 단어를 고르자면.. MMORPG입니다. -_-;

  7. 임수서룬뫼 2008-08-15 18:17:21

    MMORPG로는 부족합니다! (큭)

  8. semmal 2008-07-24 14:53:07

    아참 C++의 exception도 또다른 언어에서 가져온 것 아닌가요? 어떤 언어인지 아시는 분? 예전에 들었는데 까먹었네요.

  9. lifthrasiir 2008-07-24 15:08:06

    Ada일 것 같군요.

  10. 랑고랑진 2008-07-24 16:19:08

    C++의 예외처리가 어떤 문제가 있나요? 토발즈가 C++을 커널에 사용하는것에 대해 다음과 같이 말했다고 하던데요

    “In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ >is a BLOODY STUPID IDEA.

    “The fact is, C++ compilers are not trustworthy. They were even worse in 1992, but some fundamental facts >haven’t changed: 1) the whole C++ exception handling thing is fundamentally broken. It’s especially broken >for kernels. 2) any compiler or language that likes to hide things like memory allocations behind your back >just isn’t a good choice for a kernel. 3) you can write object-oriented code (useful for filesystems etc) in >C, without the crap that is C++.”

    http://kldp.org/node/29882

  11. 홍민희 2008-07-24 16:43:43

    성능상의 이슈가 있습니다. 커널 개발에 쓰기에는 부적절하다는 얘기인듯. (저도 자세히는 모르니 다른 분이 설명해주길 기다리겠;)

  12. lifthrasiir 2008-07-24 17:08:51

    리누스가 정확히 어떤 의미로 한 건지 몰라서 구글을 뒤지니 이런 글이 나오는군요.

    I second that. The basic reason the C++ exception handling mechanism is broken is because of what happens when an exception is thrown from a destructor, during a stack unwind caused by an exception. There are paths of exception/destructor combinations that you just cannot get out of correctly. This is perfectly OK for most userland apps, but for kernels it’s definitely not OK.

    대강 요약하면 특히 소멸자와 예외 처리 사이의 관계가 제대로 쓰기에는 매우 복잡해진다는 것 같습니다. 커널에 있어서는 모든 가능한 경로를 체크할 필요가 있는데 C++가 그런 경로를 추적하는 작업을 방해한다고 보는 것 같군요.

  13. 임수서룬뫼 2008-08-15 18:19:44

    그럼에도 불구하고 저는 C++로 커널을 짜고 있습니다. 물론 예외는 gg…가 아니라 예외를 “어쨌든 쓸 수는 있도록”(표준 문법이 아니더라도) 매크로와 그 하층부를 만드려고 시도는 하고 있습니다.

  14. 서상현 2008-07-24 23:19:51

    C++은 세상에서 제일 복잡한 프로그래밍 언어중에 하나입니다. 이해하기 어렵다고 기죽지 마세요. 대부분의 프로그래밍 언어는 C++보다는 간단합니다.

  15. lifthrasiir 2008-07-25 14:12:17

    아놬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 가 아니라,

    흔히 C++나 Ada 같이 표준이 언어 구현의 개발을 독려하기는 커녕 오히려 위축시키는(?) 상황을 committee-driven language라고 하죠.

  16. 까막 2008-07-25 11:28:01

    안복잡합니다! 라고 외치고 도망가고 싶지만… 복잡한건 사실입니다. 서상현님 말씀대로 대부분의 언어는 C++보다 간단하니까요. :)

    입문서로 TC++PL을 읽으시는건 추천드리고 싶지 않습니다. 물론 한권 옆에 두고 있으면 든든하긴 하지만…

    Accerlated C++을 추천드리고 싶네요. :)

  17. 홍민희 2008-07-25 11:51:10

    저도 Accerlated C++를 강추.

  18. 김우승 2008-07-25 15:09:14

    Andrew Koenig 책은 다 강추!!! Accelerated C++ 만 초급자용이긴 합니다만…

  19. lifthrasiir 2008-07-25 15:14:40

    Koenig lookup 납하요.

  20. 김우승 2008-07-25 15:18:02

    ^_^! 사용하는 입장에서는 분명히 편하긴 한데..

    동작원리는 template 실체화와 overloading의 선택만큼이나 돌아보리게 이해가 안 되더군요.

    아직도 이해가 안 가는 놈들입니다. 아마 앞으로 이해하게 되겠지만.

  21. 랑고랑진 2008-07-26 11:43:25

    accelerated c++은 사실 도서관에서 한번 빌려봤었습니다. 한 10몇 페이지까지 봤었는데 이 책의 번역이 안좋다는말에 바로 반납해버렸습니다. 원서를 구해야할까요?

  22. 김우승 2008-07-26 23:31:31

    심혈을 기울여 번역된 책은 아닙니다만 그렇게 질이 떨어지는 것은 아닙니다. 원서의 오자까지 그대로 담고 있을 정도인걸요.. ^_^ 뭐, 그정도면 봐줄만 하지 않나 싶습니다.

    우리나라에서 책 번역일의 대우가 좋지도 않은 것을 생각하면 그래도 칭찬해줄만한 수준이 아닐까 싶습니다.

  23. 까막 2008-08-04 16:52:46

    요즘(?) 나온 C++ 빨간책(?!)들의 번역수준은 그냥 읽어줄만합니다.

    다만… 원어를 떠올리며 읽는게 속이 편하긴 하더군요.

  24. 임수서룬뫼 2008-08-15 18:10:26

    C++ In Depth 시리즈를 말씀하시는 것인가요?

목록보기

← puts 함수 네임 간단화 | 특정 도메인을 위해 언어를 수정해서 쓰는 것에 대해 어떻게 생각하세요? →