c++에 포트란90의 모듈같은 게 있었음 좋겠어요...

parkon의 이미지

여기선 포트란은 별로 인기가 없어
저도 잘 모르지만 간단히 소개하자면,

포트란 90부터 여러가지 새로운 개념들이 도입됩니다.
그중 대표적인게 모듈이란 녀석인데
이게 문법은 c++의 클래스나 struct이고
쓰임새는 namespace (혹은 singleton class) 비슷한 녀석입니다.

즉, 생성자나 소멸자는 없고 (그래서 인스턴스라는 개념도 없고 그래서 singleton 비슷하죠),
대신 public/private 키워드가 있고
"using namespace"에 해당되는 "use"라는 문법을 가집니다.
c++의 연산자 오버로딩이나 오버라이딩도 (적어도 어느 정도까지는) 지원하구요.

상속이란 개념이 없지만 저 "use"를 사용해서 상속의 기본적인 개념도 이용할 수 있구요
(namespace 생각하시면 될것 같아요.)

물론 인스턴스가 필요한 구조체를 위한 구조는 따로 있구요 (type라고 부르죠).

C++ 코딩하다가 저 모듈이 그리워(?) 지는 순간은,
예를 들어 전체 흐름을 컨트롤하는 부분을 만들때
namespace도 불편하고 singleton class도 불편하다고 느낄때인데요,

일단 namespace의 경우,
일단 클래스 사용법 배우기도 귀찮은데 namespace 작성의 문법이 클래스와 완전히 같지 않아서
배워야 할 게 늘어 난다는 점,

멤버 변수를 선언할 때 extern이란 보기 싫은 키워드도 붙여야 되고,
소스 코드에 다시 정의해야되고, 암튼 할 순 있는데 귀찮고
(제 눈에는) 코드가 지저분해 진다는 점...,

그리고 private 선언을 허락하지 않는다는 점...,
물론 소스코드에 이름없는 namespace로 private 변수들을 활용할 순 있지만
역시 여러모로 불편하죠.

그리고 싱글톤의 경우,
무슨 GetInstance같은 요상한 녀석을 일일히 만들어서 구현해야 되는 점도 맘에 안들고,
그리고 "using namespace ..."를 지원하지 않기 때문에
유저 인터페이스가 지저분해지는 걸 피할 수 없다는 점 정도가 되겠네요.

저의 막연한 생각으론
그냥 C++에 포트란의 모듈을 도입하고 그 쓰임새를

1. Class와 문법이 동일한데 단지 생성자와 소멸자를 허락하지 않는다.
2. 모듈을 선언할 때 모듈 변수의 초기화를 허용한다.
예: int fValue = 0;
3. 다른 모듈이나 클래스, 또는 다른 함수에서
using module foo;
와 같은 문법을 허용한다.

이 정도만 해 주면 사람들이 무지 좋아하고 편하게 잘 이용할 것 같은데
역시 컴터 언어를 잘 몰라서 해보는 망상이려나요 ?

empty2fill의 이미지

C++의 모듈 기능은 차기 표준에 포함될수 있도록 추진중에 있습니다.

얼마전 제정된 표준인 C++11(또는 C++0x)에 포함될 예정이었으나 시간상 어려워 뒤로 밀렸다고 하네요.

아직은 실험 단계인것 같구요.

아래 애플의 제안을 보면 대략적인 기능을 살펴볼 수 있습니다.

누군가는 망상을 꿈꿔야 합니다^^

Apple's proposal for modules in C(++) [PDF slides]
http://llvm.org/devmtg/2012-11/Gregor-Modules.pdf

Modules in C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2316.pdf

State of C++ Evolution (Post San Francisco 2008)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2869.html

Modules in C++11
http://stackoverflow.com/questions/3596147/modules-in-c11

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -

parkon의 이미지

덕분에 재미있게 잘 읽었습니다.
제 망상이 완전 망상만은 아니었군요... ^^

아직 잘은 이해를 못했지만 여러모로 좋아보이네요,
빨리 표준에 포함되어 한번 써 봤으면 좋겠습니다.