cppkorea / cppcoreguidelines Goto Github PK
View Code? Open in Web Editor NEWC++ 핵심 가이드라인 한글화 프로젝트 (C++ Core Guidelines)
Home Page: http://cppkorea.github.io/CppCoreGuidelines/
License: Other
C++ 핵심 가이드라인 한글화 프로젝트 (C++ Core Guidelines)
Home Page: http://cppkorea.github.io/CppCoreGuidelines/
License: Other
어휘정리 이슈에 댓글로 달았는데, 어휘 의견은 이슈를 등록하라는 가이드를 보고 옮겼습니다:
저는 Enforcement:
를 강조사항:
으로 번역했습니다. 번역하면서 고민이 가장 많았던 단어였는데요. 이 단어는 Minjang님이 말씀 하신 Police Enforcement와 같은 '집행, 시행, 강제'의 뉘앙스를 담는 경우가 많지만 Cpp Core guidelines 에서는 '강조'의 의미로 사용 했습니다. 좀 낯설긴 하지만, 네이버 영어사전을 검색해보면 3번 뜻으로 나오니 근거없는 용법은 아닙니다.
항목의 내용도 Flag that으로 기술되었습니다. 직역하면 '깃발로 마크하라' 쯤이 되며, 원래의 의미를 담아 의역하면 '꼭 기억해두어라' 쯤이 되는 것 같습니다. (이런 경우에 일반적으로 사용하는 Note that 보다 훨씬 더 강한 어조입니다.) 종합해보면 Enforcement:
는 Note:
항목보다 더 강력히 제안하는 가이드라인이라고 보면 될 것 같고, 저는 영한사전의 용례를 따라 강조사항으로 번역했습니다.
Rationale를 이론적 근거로 번역하였습니다.
참고로 저는
**Word**: says Hello:
Lolem, ipsum.
과 같은 내용을
**단어**: 안녕이라고 말함:
번역한 문장.
> **Word**: says Hello:
Lolem, ipsum.
이라고 번역합니다.
안녕하세요. SL 섹션을 읽어보다가 (약 30%정도) 일부 번역을 시작해 봤는데 혹시 다른분이 진행하지 않으시면 제가 맡아서 진행해도 괜찮을까요? 아래 이슈에서 말씀해주신대로 sync
branch 를 대상으로 하겠습니다.
@yiatom님이 작업을 시작하셨으니 전 여기까지 하기로 하겠습니다.
Include .h
files before other declarations in a file
이런 경우나
Including entities subject to the one-definition rule leads to linkage errors.
이런 경우를 보게 되면
include 라는 것이 #include 를 이용하는 것을 가리키는 것으로 보입니다.
이럴 때 어떻게 번역하는 게 좋을까요?
단순히 포함한다고 쓰면 내용이 제대로 전달이 안 될 것 같고,
인클루드한다라고 쓰면 아예 번역을 안 한 것 같고,
다 조금씩 마음에 안 드네요.
안녕하세요.
1차 번역까지 작업하고 회사일이 밀려서 한참 못 보다가 이제야 다시 왔습니다. ^^;;
업데이트 된 원문은 어떻게 기존 번역작업과 머지해야 하나요?
최신 원문과 1차 작업한 내용이 많이 바뀌었습니다. 한줄 한줄 찾아서 붙여 넣기에는 무리인것 같습니다.
지금 생각으로는 원문을 통째로 가져와서 기존에 작업한 내용을 참고하여 다시 번역하는게 빠르지 않을까합니다. ^^; 좀 무식한 방법입니다.
스마~트한 방법있으면 공유해 주세요 ^^
작업하는 부분을 공유 드립니다.
E: Error handling을 번역하고 있습니다.
코드에 Markdown 문법을 적용하지 않습니다.
원문이 자주 바뀌기 때문에 Markdown을 사용하지 않아야 비교할 때 편합니다. 번역이 어느 정도 진행되어 합치게 되면 그 때 Markdown 문법으로 변환해 Syntax Highlighting을 할 예정입니다.
>
를 사용해 번역문 밑에 원문을 넣습니다.
원문:
The answer is 42.
번역한 문서:
답은 42다.
The answer is 42.
단어, 어휘는 다른 글을 통해 정리할 예정입니다.
PER.15: Do not allocate on a critical branch
critical branch를 어떻게 해석해야 할지 궁금합니다.
검색을 해봐도 관련 의미를 찾기가 힘드네요. 본문에도 추가 설명도 없고,
"성능 크리티컬한 부분에서 할당을 하지마라" 정도 될까요?
PS : question label을 어떻게 add 하는건가요?
도움및 기여를 들어가면 인코딩이 깨지면서 이상하게 나옵니다.
영어는 문제없이 나오는 것 같습니다.
제가 실행했던 환경은 크롬 최신버전입니다.
안녕하세요.
원래 NL 번역을 맡기로 예약한 방기연입니다.
우선 미리 번역해주신 분께 감사를 드립니다.
또한 개인적인 일(중간고사) + 다른 문서 번역으로 인해 번역이 늦어진 점도 사과드립니다.
저는 NL 초안에 대해 개선 작업을 하고자 합니다.
문맥에 맞지 않거나 의역된 부분을 수정하고 있으며 조금 더 원본에 가깝게 직역하고자 합니다.
번역해주신 문서 수정에 양해를 구합니다.
argument와 parameter를 어떻게 구분하면 좋을까요?
보통 argument는 인자로 parameter는 매개변수로 번역 하는 것 같습니다.
Sorry, I don't speak Korean.
I'd just like to point out that you guys forgot to actually link to each section .md file.
Example:
On sections/ReadMe.md
, someone clicks on the index entry In: 소개
It tries to go to the anchor by appending #S-introduction
to the url.
It should link to the sections/Introduction.md
file, if I'm not mistaken.
The same goes for other entries.
혹시라도 중복되지 않도록 뒤에서부터 진행.
SF.6: Use using-directives for transition, for foundation libraries (such as std), or within a local scope
여기서 transition 이라는 것이 의미하는 것이 무엇일까요?
C++20 표준이 들어오기 전에 가이드라인 문서를 한 번 갱신하는 시간을 가져보려고 합니다.
섹션별로 어떤 내용이 갱신되었는지 확인한 뒤에 하나씩 갱신하면 좋겠네요.
(이 이슈에 섹션별로 추가된 내용을 정리할 예정이니 참고 부탁드립니다.)
안녕하세요, CP 항목중 빠진 부분들을 제가 번역해보아도 될까요?
아래와 같이 진행해보려 하며 CP.con 부분 먼저 작업 마치게 되면 PR 올리도록 하겠습니다.
ES : @yiatom 님이 맡고 계십니다.
C - @jenix21 님이 C50까지, C51부터는 김준성님이 맡고 계십니다.
안녕하세요. 이아톰입니다. 지금 ES 섹션 번역중이며 금주안에 번역을 완료할 예정입니다.
안녕하세요.
raw pointer라는 단어가 있습니다.
smart pointer에 대비되는 단어입니다.
날-포인터..
비스마트 포인터..
그냥.. 포인터
스마트 포인터냐 아니냐만 놓고 보면 수식어 없이 '포인터'로 하는게 맞을 것 같기도 합니다.
원문: "Warn if a raw pointer is dereferenced without being tested against nullptr
(or equivalent) within a function..."
다른 의견 있으신가요?
즐거운 하루 보내세요.
제가 작업하면서 만난 것들입니다.
각 용어들이 다른 장에서도 많이 쓰일 것 같은데, 어느 정도 통일된 단어를 선택하는 것이 필요할 것 같습니다.
이전에 Appendix C: Discussion 번역되었던 흔적은 있지만, 원본 내용 추가되면서 없어진 것으로 보입니다.
이어서 진행해보도록 하겠습니다.
inline function은 그대로 인라인 함수라고 번역하면 될 것 같습니다.
그런데 inline을 동사화해서 inlined 라고 하면 어떻게 번역하는 것이 좋을까요?
"functions are easily inlined..."
"내제화하다", "내제시키다", "즉시 처리하게 하다"... 뭘로 해도 어색하고 어감이 와 닿지 않네요.
좋은 단어 있을까요?
C++ 핵심 가이드라인에는 Lifetimes I and II와 Introduction to type and resource safety라는 문서가 있습니다. 혹시 이 두 문서를 저랑 같이 번역하실 분이 있다면 댓글로 참여 의사를 남겨주시면 감사하겠습니다. 많은 인원은 필요 없을 듯 하고 2~3명 정도면 충분할 것 같습니다.
문서 항목별로 여러 분들이 함께하고 계셔서, 번역 책임자에 대한 부분을 없애기로 했습니다.
보시고 진행이 되어있지 않은 부분을 수시로 작성하셔서 갱신해주세요.
단 겹치는 부분이 없도록 이슈에 새 글로 작성하신 뒤, 어떤 부분을 번역하고 있다고 알려주시면 감사하겠습니다. Readme.md 부분은 오늘 중으로 업데이트 할 수 있도록 하겠습니다.
편리한 접근을 위해 https://cppkorea.org/CppCoreGuidelines 로 연결되도록 작업하는 게 좋겠습니다.
모든 Collaborator의 권한을 Write에서 Read로 변경했습니다.
번역한 부분은 Pull Request로 넣어주시면 확인 후 Merge 할 수 있도록 하겠습니다.
자주 사용하는 단어나 어휘에 대해서 정리합니다.
혹시 단어나 어휘 선택에 관련된 문의가 있다면, 댓글이 아닌 Issues에 등록해주시기 바랍니다.
Argument : 인자
Parameter : 매개변수
Reason : 근거
Note : 참고 사항
Example : 예
Example, bad : 잘못된 예
Enforcement : 시행하기
Alternative formulation : 다른 공식
Exception : 예외 사항
원문이 변경되었거나 추가된 항목, 아직 번역이 안된 부분을 작업하고 있습니다.
CppCoreGuidelines - English.md 와 Subsections 디렉토리의 파일만 수정하면 되나요?
CppCoreGuidelines - Korean.md까지 3개를 수정해야하나요?
Eliminate redundant indirections
이 문장에서 indirection을 문맥에 맞게 어떻게 해석 해야 될까요?
"간접접근" 은 어떤가요?
일부 오기된 내용과 업데이트되면서 추가 변경된 부분 업데이트하도록 하겠습니다.
#137 을 해결하기 위한 지침
기본적인 문서간 링크 수정 지침은 아래와 같습니다.
새로운 의견이 있다면 자유롭게 댓글을 작성해주시기 바랍니다
원본 문서는 하나의 md파일에 모든 내용이 모여있어서, HTML Anchor만 충돌하지 않는다면 별다른 문제없이 해당 항목으로 이동할 수 있었습니다.
하지만 현재 이 방법은 다음과 같은 이유로 불편함이 있습니다.
상기 이유로 CppCoreGuidelines.md 문서는 sections/의 여러 문서로 분리되었고, 결과적으로 아래와 같이 Anchor로 이동하는 링크들이 무효화 되었습니다..
[{} 초기화 문법을 선호하라](#Res-list).
다행히 ](#
를 검색하여 수정이 필요할수도 있는 링크가 있는지 쉽게 검색할 수 있습니다.
해당 문서로의 상대경로를 추가합니다.
이는 번역자가 Local clone이후 작업할 때, Visual Studio Code와 같은 도구에서 제공하는 문서 Navigation기능을 활용할 수 있도록 하기 위함입니다.
GitHub 에서 문서를 읽을때도 상대경로 링크가 문제없이 동작하는 것을 확인할 수 있었습니다.
다른 문서(Section)로의 링크
* [F: 함수(Functions)](./Functions.md)
* [E: 오류 처리(Error handling)](./Errors.md)
* [T: 템플릿과 제너릭 프로그래밍(Templates and generic programming)](./Templates.md)
* ...
다른 문서의 특정 항목(Item)으로의 링크
[{} 초기화 문법을 선호하라.](./Expr.md#Res-list).
일부 예제코드에는 참고 항목으로의 Anchor가 주석에 작성되어 있기도 합니다.
일반적으로 Local에서 문서의 Raw 파일을 검색하면서 읽을때는 문제가 되지 않으나, GitHub에서 읽을때처럼 Markdown Rendering을 수행한 이후에는 이 내용을 검색해서 찾아가기 어렵다는 문제가 있습니다.
최종적으로는 독자가 어떤 항목을 참고해야 하는지 전달하는데 그 목적이 있으므로, 수정 지침은 아래와 같습니다.
// [see also](./#Ri-expects)
unsigned area(unsigned height, unsigned width) {
// ...
}
항목으로의 링크가 아니라 제목을 적어 해당 규칙을 검색하지 않고도 읽어나갈 수 있도록 합니다.
// see also: I.6 사전 조건을 표현하고 싶다면 `Expects()`를 사용하라
unsigned area(unsigned height, unsigned width) {
// ...
}
역자의 판단에 따라 아래와 같이 항목 번호만 작성하여도 좋습니다.
// see also: I.6
Performance.md 번역되지 않은 부분 진행 (~4/7)
작업 부분 공유 합니다.
subsection/PER - Performance.md
작업하는 부분을 공유 드립니다.
CP: Concurrency and Parallelism을 번역하고 있습니다.
안녕하세요, 짧은 토막 하나 더 번역해보고자 합니다.
Con: Constants and immutability 진행하고 계신분 없으시면
번역 후 PR 올리도록 하겠습니다.
감사합니다.
안녕하세요. 윤종희 입니다.
저는 F: Functions 섹션을 번역하겠습니다.
즐거운 하루 보내세요.
안녕하세요.
dangling pointer는 어떻게 번역하면 좋을까요.
지금까지 생각해본건 '허상 포인터' 입니다. 허상이 흔히 쓰이는 단어는 아니것 같아서 좀 어색한 느낌도 있습니다.
발음나는대로 '댕글링 포인터'가 의미상 더 와닿지 않을까하는 생각도 듭니다.
@jenix21 댓글로 적어주시기 바랍니다.
Con: Constants and immutability section을 최신 내용으로 업데이트하려고 합니다.
저는 아래와 같은 스타일로 편집하고 있습니다.
원문:
syntax highlight가 적용되지 않았습니다.
코드가 밋밋하게 보입니다.
std::cout << "Hello, World!" << endl;
제안:
다음과 같은 Markdown을 사용하여 syntax highlight를 주었습니다.
C++ 코드 Markdown
```C++
std::cout << "Hello, World!" << endl;
```
Markdown이 적용된 결과
std::cout << "Hello, World!" << endl;
>
를 사용하여 번역문 밑에 원문을 넣었습니다.
원문:
The answer is 42.
번역한 문서:
답은 42.
The answer is 42.
진도를 더 나가야할지 말아야 할지.
개인적으로 자주 commit하는 방식이 다른 사람에게 참여기회를 줄 수 있고 프로젝트가 살아 있다는 느낌을 줄 수가 있어서 선호하는 편인데, 여기는 pull request가 거의 없어서 꼭지를 맡은 분들이 번역작업을 진행중인지 어떤지 알 수가 없고, 큰 꼭지들의 양이 상당해서 혼자 하기에는 분명히 벅찰거라 생각이 드는데 번역작업을 다한 후에 pull request를 하려는건지 잘 모르겠네요. 진행상황이나 현재 작업상태를 모르면 함께 나눠서 할 수가 없잖아요.
한글화 프로젝트 진행상황을 공유할 수 있도록 Issue를 개설합니다.
체크박스의 마킹을 통해 번역이 진행된 부분/필요한 부분을 확인하실 수 있습니다.
마킹된 항목들은 한글화가 진행된 부분을 의미하며, 나머지는 한글화가 필요한 항목들입니다.
현재는 전부 원문을 표기하고 있습니다만, 점진적으로 한글화가 진행된 부분은 한글 제목으로 교체하겠습니다.
이하의 진행상황은 master
브런치를 대상으로 합니다.
ALL_CAPS
for macro names onlyunderscore_style
namesvoid
as an argument typeconst
notation.cpp
는 코드 파일에, .h
는 인터페이스 파일에 사용하라.h
파일에는 개체 변수(object definition) 혹은 inline이 아닌 함수의 정의가 있어서는 안된다.h
파일은 여러 소스 파일에서 사용되는 선언을 담아라.h
를 include하라.cpp
파일은 반드시 해당 인터페이스를 정의하는 .h
를 include해야 한다using namespace
는 네임스페이스의 이름 바꾸기, std
처럼 기본적인 라이브러리, 혹은 지역 유효범위 안에서(만) 사용하라using namespace
를 작성하지 마라.h
파일에서 #include
가드(guard)를 사용하라#include
된 이름이 필요하지 않도록 하라namespace
는 논리적 구조를 표현할 때 사용하라std
에 추가하지 말라array
나 vector
를 사용하라vector
를 기본으로 사용하라std::string
을 사용하라std::string_view
나 gsl::string_span
을 사용하라zstring
나 czstring
을 사용하라char*
를 사용하라std::byte
를 사용하라std::string
을 사용하라std::string_view
보다는 gsl::string_span
을 사용하라std::string
을 의도할 때는 s
접미사를 사용하라iostream
을 선호하라printf
계열의 함수를 사용하지 않는다면 ios_base::sync_with_stdio(false)
를 호출하라endl
의 사용을 피하라auto
보다는 컨셉의 이름을 사용하라typedef
보다는 using
을 사용하라Regular
혹은 SemiRegular
하도록 하라enable_if
로 유사하게 작성하라()
보다는 {}
를 사용하라constexpr
함수를 사용하라static_assert
를 사용해 확인하라T*
)는 소유를 의미하지 않는다T&
)는 소유를 의미하지 않는다const
가 아닌 전역 변수를 지양하라malloc()
과 free()
의 사용을 피하라new
와 delete
호출을 지양하라unique_ptr
혹은 shared_ptr
를 사용하라shared_ptr
보다는 unique_ptr
를 선호하라shared_ptr
를 만들때는 make_shared()
를 사용하라unique_ptr
를 만들때는 make_unique()
를 사용하라shared_ptr
의 순환참조를 부수기 위해 weak_ptr
를 사용하라widget
의 소유권을 맡는다는 것을 표현하기 위해 unique_ptr<widget>
를 매개변수로 사용하라widget
을 새로 설정한다는 것을 표현하기 위해 unique_ptr<widget>&
를 사용하라shared_ptr<widget>
를 매개변수로 사용하라shared_ptr<widget>&
를 매개변수로 사용하라const shared_ptr<widget>&
을 매개변수로 사용하라 ???return
구문을 사용하라goto exit
을 사용하라protected
로 하라const
가 아닌 전역변수를 지양하라Expects()
를 사용하라Ensures()
를 사용하라T*
) 혹은 참조(T&
)를 사용해 소유권을 전달하지 마라not_null
로 선언하라constexpr
로 선언하라inline
으로 선언하라noexcept
로 선언하라T*
나 T&
타입의 인자를 사용하라X&&
타입과 std::move
로 전달하라TP&&
타입과 std::forward
로만 전달하라not_null<T>
를 사용해 표시하라span<T>
혹은 span_p<T>
를 사용하라zstring
혹은 not_null<zstring>
을 사용하라unique_ptr<T>
를 사용하라shared_ptr<T>
를 사용하라T&
보다는 T*
를 선호하라T*
를 반환하라T&
를 반환하라T&&
를 반환하지 말아라main()
는 int
를 반환해야 한다T&
를 반환하라return std::move(local)
은 사용하지 말아라this
를 캡쳐할 때는, 모든 변수를 명시적으로 캡쳐하라(기본 캡쳐를 사용하지 않는다)va_arg
전달인자를 사용하지 말아라ALL_CAPS
같은 이름을 피하라auto
를 사용하라{}
초기화 문법을 사용하라unique_ptr<T>
에 담아라const
혹은 constexpr
로 선언하라std::array
나 stack_array
를 사용하라const
변수의 초기화에는 람다를 사용하라ALL_CAPS
형태로 선언하라0
혹은 NULL
보다는 nullptr
를 사용하라const
를 제거하지 마라std::move()
는 개체를 다른 유효범위로 명시적으로 옮겨야 할때만 사용하라new
와 delete
사용을 피하라delete[]
, 단일 개체는 delete
를 사용해서 해제하라T{e}
표기를 사용하라if
구문보다는 switch
구문을 사용하라for
구문 보다 범위기반 for
-구문을 사용하라while
-구문보다 for
-구문을 사용하라for
-구문보다 while
-구문을 사용하라for
-구문의 초기화 부분에서 선언하라do
-구문을 사용하지 마라goto
를 사용하지 마라break
와 continue
의 사용을 최소화하라case
는 break
하라default
를 사용하라==
나 !=
를 사용하지 마라unsigned
를 사용하지 마라unsigned
를 쓰지 말고 gsl::index
를 사용하라throw
를 허용하지 않거나 불가능한 함수에는 noexcept
를 사용하라swap
은 절대 실패해선 안된다try
/catch
문의 사용을 최소화하라final_action
객체를 사용하라errno
처럼)catch
를 배치하라enum
보다 enum class
를 선호하라ALL_CAPS
형태로 사용하지 마라synchronized_value<T>
를 사용하라async()
를 사용하라struct
와 class
)class
를 사용하라; 데이터 멤버들에 대한 제약이 자유롭다면 struct
를 사용하라struct
보단 class
를 사용하라=delete
로 선언했다면, 나머지 모두 정의하거나 =delete
하라T*
)나 참조(T&
)를 가지고 있다면, 참조 대상을 소유하고 있는지를 고려하라noexcept
로 작성하라explicit
으로 선언하라virtual
동작이 필요하다면, 팩토리 함수를 사용하라virtual
로 만들지 말아라. 매개변수는 const&
로 받고, const&
로 반환하지 말아라virtual
로 만들지 말아라, 매개변수는 &&
를 사용하고, const&
로 반환하지 말아라noexcept
로 만들어라=default
를 사용하라=delete
를 사용하라noexcept
swap함수를 제공하는 것을 고려하라swap
연산은 실패해선 안된다swap
연산은 noexcept
로 작성하라==
연산자는 피연산자 타입들에 대칭적이고, noexcept
로 만들어라==
에 주의하라hash
는 noexcept
로 작성하라*
과 ->
연산자를 제공하라virtual
, override
, 혹은 final
중 하나만 명시해야 한다clone
을 선호하라virtual
로 만들지 말아라protected
데이터를 지양하라const
가 아닌 모든 데이터 멤버들이 같은 접근 레벨을 가지도록 하라virtual
을 사용하라using
을 사용해 상위/하위 클래스를 위한 중복 정의 집합을 만들어라final
은 필요한 만큼만 사용하라dynamic_cast
를 사용하라dynamic_cast
를 참조 타입에 사용하라dynamic_cast
를 포인터 타입에 사용하라unique_ptr
혹은 shared_ptr
를 사용하라unique_ptr
로 소유되는 개체를 생성하기 위해서는 make_unique()
를 사용하라shared_ptr
로 소유되는 개체를 생성하기 위해서는 make_shared()
를 사용하라using
을 사용하라&
는 스마트 포인터와 참조 체계를 따르는 경우에만 중복정의하라union
은 메모리를 절약하기 위해 사용하라union
을 사용하지 말아라union
을 사용하라union
을 사용하지 말아라https://github.com/isocpp/CppCoreGuidelines/tree/master/docs
가이드 라인 말고도 최근 docs에 cpp관련 문서들이 추가되고 있는데요
Introduction to type and resource safety 이문서 내용이 좋은것 같은데
추가적인 문서에 대한 번역은 진행을 어떻게 해야할까요
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.