C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[29090] Re: 델파이 파스칼 언어의 한계로 perfect forwarding이 불가능.
빌더(TWx) [builder] 2061 읽음    2022-03-15 19:35
질문 님이 쓰신 글 :
: http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=28886
:
: C++빌더님께서 알려주신 버그패치 잘 쓰고있습니다.
: Rad Studio 11 에서도 이 template 버그가 고쳐지지 않고 있던데 황당하네요.
: 몇년째 버그를 방치하고 있다니
: 소비자를 봉으로 보는 건지 뭐 이런 개발회사가 있는지 모르겠습니다.
:
: 제가 궁금한 건요.
:
: T&& t
:
: 버그패치를 보면 위와 같이 rvalue 레퍼런스를 이용하시던데요.
: 그럼 옵티마이징을 위해서 perfect forwarding 이용할 법 한데 안쓰고 계셔서요
: 특별한 이유가 있는 건지 궁금하네요.





답변:


rvalue move semantic rule, perfect forwarding을 완전하게 이해하고 있지 못하다면...
C++언어에 대한 공부가 전혀 되어 있지 않은 거고, C++ 프로그래머라고 할 수 없을 정도로
코드 최적화를 위한 굉장히 중요한 개념인데요.

T&& t는 template Type Deduction Rule에 의해서 lvalue 와 rvalue 모두 받을 수 있는 레퍼런스 이므로
엄격하게 말하면 rvalue reference 가 아니고, universal reference 입니다.

int&& ri = 7;

에서 ri는 rvalue로만 바인드 될 수 있는 rvalue reference 이지만...

template <typename T>
void foo(T&& t){}

와 같이 Indirect로 Type Deduction 이 적용되는 경우...
여기서 t는 rvalue reference가 아니고, lvalue와 rvalue 다 바인드 될 수 있는 universal reference 입니다.




버그패치 코드에서 perfect forwarding을 적용하지 않은 것은...

Format() 함수는 델파이로 구현되어 있는 함수에 불과하고...
델파이 파스칼 언어는... 코드 최적화를 위한 move semantic, perfect forwarding 개념 자체를
아예 갖고있지 않기 때문에 perfect forwarding 사용이 불가능 합니다.

perfect forwarding 을 적용할 수 있으려면...
라이브러리가 rvalue move semantic rule을 지원하도록...
C++로 구현되어 있어야 하죠.

델파이 파스칼 언어는 코드 최적화를 위한 그런 개념 자체가 없어요.
그래서 RTL도 속도를 낸답시고 단무지 같은 방법으로 어셈블리 코드를 잔뜩 쓰고 있죠.

델파이 파스칼은 Language specification이 간단해서 초보자들이 쉽게 사용할 수 있는 언어에 불과함.



이와같이 perfect forwarding이 불가능한 델파이 파스칼 언어의 한계에도 불구하고
버그패치 코드에서 T&& (univarsal reference)을 사용한 것은...

1. const, volatile 과 같은 qualifier 속성을 잃지 않으면서 파라미터를 전달할 수 있고

2. reference collapsing rule 에 의해서 template 파라미터가 lvaue reference 나 rvalue reference 가
   될 수 있기 때문에 불필요한 복사가 일어나지 않도록 할수 있는

C++언어의 랭귀지 파워를 활용하기 위한 것임..



+ -

관련 글 리스트
29089 C++빌더님. template 버그패치 잘 쓰고 있습니다. 질문 1846 2022/03/13
29090     Re: 델파이 파스칼 언어의 한계로 perfect forwarding이 불가능. 빌더(TWx) 2061 2022/03/15
29091         Re:Re: 일반 함수는 perfect forwarding이 안되는 거였군요 질문 1580 2022/03/16
29092             Re:Re:Re: No!!!. 엠바 컴파일러만 불가능 빌더(TWx) 1729 2022/03/17
29093                 Re:Re:Re:Re: No!!!. 엠바 컴파일러만 불가능 봄이다 1561 2022/03/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.