CppCon 2019 컨퍼런스에서 요즘 축하되고있는 Microsoft의 지수는 코드 공개를 발표 할 기회를 가졌습니다. 구현을 위해 C ++ 표준 라이브러리에서 (STL이라고도 함), MSVC Toolkit 및 Visual Studio 개발 환경의 일부입니다.
라이브러리는 현재 C ++ 14 및 C ++ 17 표준에 설명 된 기능을 구현합니다. 또한 현재 작업 초안의 변경 사항에 따라 향후 C ++ 20 표준을 지원하는 방향으로 개발되었습니다.
로 Microsoft 직원들이 이러한 움직임을 결정한 이유, 진술에서 그들은 설명합니다.
이 작업을 수행하는 데에는 몇 가지 이유가 있습니다. 그 중 하나는 GitHub에서 STL 작업을하기위한 것입니다.이를 통해 고객은 개발 상황을 따라갈 수 있고, 최신 변경 사항을 테스트하고, 검토를 통해 풀 요청을 개선 할 수 있습니다.
C ++ 표준화가 가속화되고 매년 더 큰 기능이 투표됨에 따라 핵심 기능을 오픈 소스 기여로 받아들이는 것이 중요 할 것이라고 생각합니다. (예를 들어 C ++ 20 형식 및 연대순 라이브러리가 잠재적 후보입니다.) 우리는 또한 핵심 기능의 구현을 가능하게함으로써 C ++ 커뮤니티에 다시 기여하고자합니다. (예 : C ++ 17의 charconv)
그것으로 Microsoft 사람들은이 라이브러리를 개방형 프로젝트로 계속 개발할 계획임을 알 렸습니다. GitHub에서 개발 중이며 수정 및 새로운 기능 구현을 통해 외부 개발자의 pull 요청을 수락합니다 (개발에 참여하려면 이전 된 코드에 소유권을 이전하려면 CLA 계약이 필요합니다).
관찰되는 것은 STL에서 GitHub로 개발을 이전하면 Microsoft 고객이 개발 진행 상황을 추적하고, 최신 변경 사항을 실험하고, 들어오는 혁신 요청을 검토 할 수 있습니다.
코드 열기 커뮤니티가 기성 구현을 사용하도록 허용 다른 프로젝트에서 새로운 표준을위한 기회.
이 라이브러리의 코드 라이선스에 대해 생성 된 실행 파일의 구성에 런타임 라이브러리를 포함시키는 문제를 해결하는 바이너리 파일에 대한 예외를 제외하고 Apache 2.0 라이선스에 따라 개방 된 것으로 제안되었습니다.
확실하게, MSVC STL은 여전히 별도의 라이브러리이므로 libc ++와 병합되지 않습니다.
Microsoft는 코드 라이선스가 필요한 이유를 설명합니다. LLVM 프로젝트의 libc ++ 라이브러리와 코드 스왑을 허용하는 방식으로 선택됩니다. STL과 libc ++는 데이터 구조의 내부 표현이 다르지만 원하는 경우 libc ++ 개발자는 흥미로운 STL 기능 (예 : charconv)을 이식하거나 두 프로젝트가 공동으로 일부 혁신을 개발할 수 있습니다.
MSVC STL은 최근 Clang / LLVM / libc ++ 프로젝트에 의해 생성 된 LLVM 예외가있는 Apache v2.0 라이선스에 따라 배포됩니다.
Apache 라이선스에 추가 된 예외는 최종 사용자에게 STL 컴파일 바이너리를 제공 할 때 소스 제품의 사용을 언급하는 요구 사항을 취소합니다.
이 허용 오픈 소스 라이선스는 libc ++와 동일한 라이선스를 가지고 있기 때문에 선택되었습니다. 라이브러리간에 코드를 더 쉽게 공유 할 수 있습니다. 분명히 말하면 MSVC STL은 libc ++와 병합되지 않습니다. 데이터 구조 표현이 다른 다른 플랫폼을 지원하는 별개의 라이브러리입니다.
반면에 프로젝트의 주요 목표 중 하나는 요구 사항을 완전히 준수하는 것입니다. 사양, 고성능, 사용 편의성 (디버깅, 진단, 오류 감지 도구) 및 이전 버전의 Visual Studio 2015/2017과의 소스 및 ABI 수준 호환성을 보장합니다.
지역 중 Microsoft는 다른 플랫폼으로의 이식성 및 사용자 지정 확장 추가 개발에 관심이 없습니다.
Microsoft가 작성한 진술에 대해 더 알고 싶다면 그것을 참조하십시오. 다음 링크에서.