프로그래밍

[C++] Philosophy 1 & 2

하루삼십만원 2020. 11. 29. 17:16
반응형

[C++] Philosophy 1: Express ideas directly in code

 

Reason Compiler 는 주석(또는 design 문서)을 읽지 않는다. 많은 프로그래머도 마찬가지다. code에서 표현되는 것들은 의미론적으로 정의했고 Compiler들과 다른 tool들에 의해 체크될 것이다.

 

Example

month의 첫 번째 선언은 Month을 반환하고 Date object의 상태를 수정하지 않는 것에 대해 명시적이다. 두 번째 버전은 독자들이 추측하게 하고, 잡히지 않는 bugs가 발생할 가능성을 더 많이 열어준다.

 

Example,bad 이 loop는 축약된 std::find 함수 이다.

Example, good 훨씬더 명확한 표현은 아래와 같다.

잘 설계된 library는 언어적 특징을 직접 사용하는 것보다 의도(무엇이 어떻게 되어가는가 보다 무엇을 해야 하는가)를 훨씬 잘 표현한다.

 

C++ 프로그래머는 표준 라이브러리의 기본을 알고 있어야 하며, 적절한 곳에 사용해야 한다. 프로그래머라면 누구나 작업 중인 프로젝트의 foundation 라이브러리의 basics를 알고 이를 적절히 활용해야 한다. 이 guideline을 사용하는 프로그래머라면 누구나 라이브러리를 지원하는 guideline을 알고 적절히 사용해야 한다.

 

Example

더 나은 접근방식은 double(새로운 속도 또는 이전 속도에 대한 delta?)와 사용된 unit의 의미를 명시하는 것이다.

있는 그대로의(단위 없는) double를 delta로 받아들일 수도 있었지만, 그건 오류가 발생하기 쉬웠을 것이다.

만약 우리가 절대 속도와 delta 모두를 원했다면, 우리는 Delta type을 정의했을 것이다.

 

Enforcement Very hard in general.

  •  const를 일괄되게 사용해라. (member funtion들이 object를 변경하는지, 함수에서 수정된 argument가 pointer 나  reference를 통해 전달되는지 확인해라)
  • cast(형변환) flag 사용(cast(형변환)은 type system에 중립적임)
  • 표준 라이브러리를 모방한 초드 찾기

 

Reference

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p1-express-ideas-directly-in-code

 

C++ Core Guidelines

 

isocpp.github.io

 

[C++] Philosophy 2: Write in ISO Standard C++

 

Reason 이것은 ISO standard C++ 작성 guidelines 모음입니다.

Note (시스템 resources에 접근한느 것처럼) extension들이 필요한 환경이 있다. 이 경우, 필요한 extension들의 사용을 국소화하고, non-core Coding Guidelines(비 핵심 코딩 가이드라인)들의 사용을 통제해라. 가능하면 extension을 지원하지 않는 시스템에서 extension을 끄거나 compile할 수 있도록 캡슐화하는(encapsulate) interface들을 구축하십시오.

Extension들은 종종 엄격하게 정의된 의미론(semantics)를 가지고 있지 않다. 여러 compiler들에 의해 구현되는 공통적인extension들 조차도 엄격한 standard definition(표준 정의)가 없는 직접적인 결과로서, 약간 다른 behavior(동작)과 edge case behavior을 가질 수 있다. 그러한 extension들을 많이 사용하면, 기대하는 software portability에 영향을 줄 것이다.

 

Software portability

en.wikipedia.org/wiki/Software_portability

 

Software portability - Wikipedia

This article is about portability in itself. For the work required to make software portable, see porting. For other uses, see portability. Portability in high-level computer programming is the usability of the same software in different environments. The

en.wikipedia.org

Note 유효한 ISO c++을 사용한다고 해서 portability가 보장되는 것은 아니다.(정확성은 말할 것도 없다). 정의되지 않은 동작(behavior)에 의존하지 말고(예: 정희되지 않은 evaluation순서) "구현이 정의된 의미"를 갖는 구조들을 인식하십시오. (예: sizeof(int))

 

Note 예를 들어 "항공지 제어 SW 표준에서 요구하는 동적 메모리 할당(dynamic memory allocation)을 피하기 위해" 표준 C++언어 또는 library 기능의 사용 제한이 필요한 환경이 있다. 이러한 경우, 특정 환경에 맞춤화된 본 Codeing Guidelines의 extension으로 사용을 통제한다.

 

Reference (원문 출처)

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p2-write-in-iso-standard-c

 

C++ Core Guidelines

 

isocpp.github.io

 

반응형

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

[C++] Philosophy 5 & 6  (0) 2020.12.01
[C++] Philosophy 3 & 4  (0) 2020.11.30
[C++] shared_ptr, weak_ptr  (0) 2020.10.18
[C++] unique_ptr  (0) 2020.10.17
[C++] string format  (0) 2020.10.12