프로그래밍

[C++] Philosophy 9 & 10

하루삼십만원 2020. 12. 3. 22:59
반응형

[C++] Philosophy 9 : Don't waste time or space

 

Reason 이건 C++이다.

 

Note 

목표 달성을 위해 잘 쓰는 시간과 공간(예: 개발 속도, 자원 안전성 또는 테스트의 단순화)은 낭비되지 않는다. "효율성을 위해 노력하는 또 다른 이점은 프로세스가 문제를 더 깊이 이해하도록 강요한다는 것이다."

- 알렉스 스테파노프

 

Example, bad

그래, 이건 caricature다. 하지만 우리는 production 코드에서 개인의 실수나 더 나쁜 것들을 봐왔다. X의 레이아웃은 최소 6 bytes(그리고 대부분의 경우 더 많이)가 낭비된다는 것을 보장한다는 점에 유의한다. 복사 작업의 거짓 정의는 이동 semantic을 비활성화하여 반환 작업이 느리게 한다(Return Value Optimization, RVO는 여기에서 보장되지 않는다는 점에 유의하라). buf에 대한 new와 delete의 사용은 중복적이다; 만약 우리가 정말로 local string이 필요하다면, 우리는 local string class을 사용해야 한다. 몇 가지 더 많은 performance bug와 불필요한 복잡함이 있다.

 

Example, bad

이것은 실제로 production 코드의 예다. 우리는 우리의 상태에 i < strlen(s)s가 있다는 것을 알 수 있다. 이 표현식은 loop의 모든 반복에 대해 평가될 것이며, 이는 strlen이 length를 확인하기 위해 모든 loop를 통해 walk through(실행) 한다는 것을 의미한다. string 내용이 변경되는 동안, toLower는 문자열 길이에 영향을 주지 않을 것으로 가정하므로, loop 외부에 있는 길이를 cache하고 각 반복에 드는 비용을 발생시키지 않는 것이 좋다.

 

Note

waste의 개별적인 예는 거의 중요하지 않으며, waste이 중요한 경우에는, 일반적으로 expert에 의해 쉽게 제거된다. 하지만, code base에 넓게 퍼져있는 waste은 쉽게 중요할 수 있고, expert들이 우리가 원하는 만큼 항상 이용할 수 있는 것은 아니다. 이 규칙(및 이를 지원하는 보다 구체적인 규칙)의 목적은 발생하기 전에 C++의 사용과 관련된 대부분의 waste를 제거하는 것이다. 그 이후에는 알고리즘과 요건과 관련된 waste을 살펴볼 수 있지만, 그것은 이 지침의 범위를 벗어난다.

 

Enforcement

많은 더 구체적인 규칙들은 단순함과 불필요한 waste의 제거라는 전체적인 목표를 목적으로 한다.

● (사용자 정의 기본값이 아닌) postfix operator++ 또는 operator-- 함수의 사용되지 않은 반환 값을 플래그 지정해라. 대신 prefix form을 사용하는 것을 선호해라. (참고: "사용자 정의 기본 설정되지 않음"은 noise를 줄이기 위한 것이다. 실제적으로 여전히 너무 noisy하면 이 시행을 검토하라.)

 

원문 링크

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p9-dont-waste-time-or-space

 

C++ Core Guidelines

 

isocpp.github.io

 

[C++] Philosophy 10: Prefer immutable data to mutable data

 

Reason variables(변수)에 대한 추론보다 constants(상수)에 대한 추론이 더 쉽다. 불변의 것은 뜻밖에 변할 수 없다. 때로는 불변성이 더 나은 최적화를 가능하게 한다. 상수로는 data race를 할 수 없다.

Con: Constants and immutability 참조하라.

 

원문 링크

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p10-prefer-immutable-data-to-mutable-data

 

C++ Core Guidelines

 

isocpp.github.io

 

반응형

'프로그래밍' 카테고리의 다른 글

[C++] GSL:Guidelines Support library (1st)  (0) 2020.12.10
[C++] Philosophy 11, 12 & 13  (0) 2020.12.04
[C++] Philosophy 7 & 8  (0) 2020.12.02
[C++] Philosophy 5 & 6  (0) 2020.12.01
[C++] Philosophy 3 & 4  (0) 2020.11.30