마이크로소프트, C# 메모리 안전성을 러스트 수준으로 높인다
Source: Byline Network
마이크로소프트의 C# 메모리 안전성 강화 계획
마이크로소프트는 C# 언어의 메모리 안전성을 러스트 수준으로 끌어올리겠다는 계획을 발표했습니다. 닷넷 제품 관리자 리처드 랜더는 21일 개발자 블로그에서 “C#의 메모리 안전성을 대폭 개선하는 작업을 진행 중”이라며, unsafe 키워드를 재설계해 호출자에게 안전성 유지를 위한 의무를 명시하고, 새로운 안전성 주석 스타일로 이를 문서화할 예정이라고 밝혔습니다.
그는 “이 키워드는 포인터 표시를 넘어, 컴파일러가 안전하다고 검증할 수 없는 방식으로 메모리와 상호작용하는 모든 코드에 적용될 것”이라며, “컴파일러는 unsafe 키워드가 안전하지 않은 연산을 캡슐화하는 데 사용되게 강제할 것”이라고 설명했습니다.
결과적으로 안전성 계약과 가정이 관례에 따라 암묵적으로 이뤄지는 대신 명확하게 드러나고 검토 가능해진다고 덧붙였습니다.
새로운 모델과 출시 일정
- 닷넷 11 (C# 16) 미리보기: 내년 말 출시 예정이며, 새로운 unsafe 모델과 구문이 포함됩니다.
- 닷넷 12 (LTS) 정식 출시: 이후 기본값으로 적용될 예정입니다.
- 초기에는 선택 사항으로 도입되며, 추후 기본값으로 전환될 전망입니다.
- 널 허용 참조 형식(null‑able reference types)처럼 템플릿을 업데이트해 새 모델을 활성화합니다.
- 초기 컴파일러 구현은 메인 브랜치에 병합돼 현재 개발 중입니다.
기존 unsafe 구문의 현황과 변화
unsafe구문은 C# 1.0부터 존재했지만, 사용 빈도는 낮았습니다.- 기존
unsafe는 포인터 사용, 메모리 주소 직접 접근, 배열 경계 검사 우회 등을 허용했습니다. - 새로운 모델에서는 **안전성 계약(safety contract)**을 코드 차원에 명시해 메모리 안전성을 강화합니다.
unsafe키워드는 더 이상 단순 구문 종류가 아니라, 컴파일러가 검증할 수 없는 연산을 캡슐화하고, 호출자가 이를 준수해야 하는 계약을 나타냅니다.
AI 기반 코드 생성과의 연계
리처드 랜더는 새로운 메모리 안전 모델이 AI 코드 생성 에이전트의 안전한 코드 작성을 강제하고 검증하는 도구를 제공한다고 설명했습니다.
-
AI 에이전트 제한: 위험한 코드를 자유롭게 작성하지 못하도록 두 가지 요소를 추가합니다.
- 호출 그래프를 통해 세이프, 언세이프, 경계 메서드를 구분.
- 컴파일러가 unsafe 블록이 없는 unsafe 호출을 거부.
-
전파 및 억제 모델: AI가 실수로 가드 없는 코드를 생성하면, 컴파일 단계에서 차단되고, 호출자에게 경고가 전파됩니다.
-
안전성 문서: 모든 unsafe 멤버는 XML 주석 블록으로 공식 문서화해야 하며, 누락 시 분석기가 오류를 표시합니다.
이를 통해 AI가 메모리 안전 모델을 우회하려는 시도가 깃 히스토리나 코드 리뷰 단계에서 쉽게 포착될 수 있습니다.
기대 효과 및 결론
- C#은 기본적으로 타입 안전성과 메모리 안전성을 지향하지만, 러스트와 같은 시스템 언어의 흐름에 맞춰 컴파일 단계부터 검증을 강화합니다.
- 미국 정부는 공공 시스템 보안을 위해 메모리 안전성을 높인 언어 사용을 권고하고 있으며, 러스트가 주목받고 있는 상황에서 C#도 동일한 흐름에 동참합니다.
- 새로운 모델은 기존 언어 구조를 대부분 유지하면서, 대부분의 개발자가 건드리지 않는 unsafe 패턴을 개선하고 전반적인 안전성과 안정성을 크게 향상시킵니다.
리처드 랜더는 “우리는 C#이 타입 안전성과 메모리 안전성을 엄격히 준수하는 언어로 인정받는 미래를 꿈꾼다”고 밝히며, “이러한 모델 변화를 통해 C#, 러스트, 스위프트는 더욱 공통된 안전성 용어와 워크플로우를 갖게 될 것”이라고 전했습니다.
