c++, c# 언어 표준이란
C++과 C# 표준(Standard)에 대한 설명
1. C++ 표준
1.1 C++ 표준이란?
C++ 표준(C++ Standard)은 C++ 언어가 가져야 할 문법, 기능, 라이브러리, 동작 방식 등을 명확하게 규정한 공식 문서이다. 이 표준은 ISO(국제표준화기구)와 IEC(국제전기기술위원회) 산하의 ISO/IEC JTC1/SC22/WG21이라는 작업 그룹에서 관리하고 있다.
1.2 C++ 표준의 역할
- 언어의 정의: C++ 언어의 문법, 의미, 라이브러리, 연산 방식 등이 어떻게 동작해야 하는지를 정의한다.
- 컴파일러 제작자 지침: 표준에 기반하여 모든 컴파일러 제작자들이 자신들의 컴파일러가 표준에 맞게 동작하도록 구현한다.
예: int는 정수를 표현해야 하고, std::vector는 동적 배열이어야 한다는 것 등이 표준에 정의되어 있다.
1.3 C++ 표준의 주요 버전
| 표준 명칭 | 발표 연도 | 주요 특징 | |———-|———-|———-| | C++98 | 1998년 | 최초의 공식 표준화 | | C++03 | 2003년 | 버그 수정 및 안정화 | | C++11 | 2011년 | 스마트 포인터, 람다 표현식, auto 키워드 등 | | C++14 | 2014년 | C++11 보완, 더 간결한 표현 | | C++17 | 2017년 | 파일 시스템 라이브러리, 구조적 바인딩 등 | | C++20 | 2020년 | 코루틴, 개념(Concepts), 모듈 등 | | C++23 | 2023년 | 라이브러리 및 문법 개선 |
1.4 C++ 표준이 컴파일러에 적용되는 과정
- 표준 제정: ISO 작업 그룹(WG21)에서 논의 후 표준 발표
- 컴파일러 제작: 각 컴파일러 제작사(GCC, Clang, MSVC 등)가 표준에 맞게 기능 구현
- 테스트: 표준 적합성 테스트 스위트를 활용해 구현 검증
- 배포: 개발자는
-std=c++20등의 컴파일 옵션으로 특정 표준 버전 사용
1.5 주요 C++ 컴파일러와 표준 지원
| 컴파일러 | 제작사 | 표준 지원 | |———-|———|———–| | GCC | GNU 프로젝트 | C++98 ~ C++23 | | Clang | LLVM 프로젝트 | C++98 ~ C++23 | | MSVC | Microsoft | C++98 ~ C++23 |
1.6 C++ 표준과 컴파일러 관계 요약
| 구분 | 역할 | |——|——| | C++ 표준 | 언어의 문법, 라이브러리, 동작 규칙 정의 | | 컴파일러 | 표준에 따라 실제로 코드를 해석하고 실행 파일 생성 |
2. C# 표준
2.1 C# 표준이란?
C# 표준은 C# 언어의 문법, 동작 방식, 라이브러리 사용 규칙 등을 규정한 공식 문서이다.
초기에는 표준화 기관에서 관리했으나, 현재는 사실상 Microsoft가 언어 설계와 발전을 주도하고 있다.
2.2 C# 표준화 기관
| 기관 | 역할 | |——|———————| | ECMA (유럽 전산기 제조자 협회) | 초기 C# 언어 표준화 및 공식 명세(ECMA-334) 작성 | | ISO (국제표준화기구) | ECMA 표준을 기반으로 국제 표준화 진행 |
2.3 주요 C# 표준 문서
| 표준 명칭 | 발표 연도 | 내용 | |———–|———–|—————-| | ECMA-334 | 2002년 | C# 언어 표준 1.0 | | ISO/IEC 23270 | 2003년 | C# 언어 국제 표준 1.0 |
2.4 현재의 C# 표준과 Microsoft 주도
- C# 3.0 이후부터는 Microsoft(.NET)가 언어 발전을 주도하고 있다.
- 최신 C# 버전(C# 8.0 이후) 은 ECMA/ISO 표준화 없이 Microsoft가 직접 발표한다.
2.5 C# 언어 개발과 컴파일러 적용 과정
- 언어 설계: Microsoft C# 언어 설계팀이 제안 및 결정
- Roslyn 컴파일러 반영: Roslyn(오픈소스 컴파일러)에 즉시 구현
- .NET SDK 및 Visual Studio 배포: 최신 컴파일러가 포함된 도구 배포
- 개발자가 사용: Visual Studio, .NET CLI를 통해 최신 C# 기능 사용
2.6 주요 C# 컴파일러와 표준 반영
| 컴파일러 | 제작사 | 표준 반영 방식 | |———-|———|—————-| | Roslyn (csc) | Microsoft | 최신 C# 기능 즉시 반영 | | Mono (mcs) | Xamarin (현재 Microsoft) | C# 초기 버전 및 표준 반영 | | .NET Native, CoreRT | Microsoft | 특수 목적 빌드, 최신 기능 반영 |
2.7 C# 최신 버전 출시 흐름
| C# 버전 | 주요 특징 | |———|———–| | C# 1.0 | 기본 언어 기능 | | C# 2.0 | 제네릭 도입 | | C# 3.0 | LINQ | | C# 4.0 | dynamic 키워드 | | C# 5.0 | async/await | | C# 6.0 | 표현식 본문 멤버 | | C# 7.x | 튜플, 패턴 매칭 | | C# 8.0 | Nullable Reference Types | | C# 9.0 | Records, init 전용 setter | | C# 10.0 | 전역 using 지시문 | | C# 11.0 | Raw 문자열 리터럴 |
3. C++ 표준과 C# 표준의 비교
| 항목 | C++ | C# | |——|—–|—–| | 주요 표준화 기관 | ISO | 초기: ECMA, 현재: Microsoft 주도 | | 표준 적용 주체 | 각 컴파일러 제작사(GCC, Clang, MSVC 등) | Microsoft 중심(Roslyn 등) | | 표준 반영 속도 | 표준 제정 후 각자 구현 | 기능 설계 후 Microsoft가 즉시 반영 | | 언어 발전 방식 | 커뮤니티 및 위원회 중심 | Microsoft 주도 |
4. 결론
- C++은 표준 제정(ISO)과 구현(컴파일러 제작사)이 분리되어 있다.
- C#은 초기에는 ECMA/ISO 표준화를 거쳤으나, 현재는 사실상 Microsoft가 언어 설계와 구현을 주도한다.
- 최신 C# 기능은 Microsoft의 Roslyn 컴파일러와 .NET SDK를 통해 빠르게 반영된다.
- C++은 표준 발표 후 컴파일러 제작사들이 개별적으로 반영하기 때문에 반영 속도가 상대적으로 느릴 수 있다. ㄴ