.NET 11, x86-64-v2 이상 요구로 베이스라인 상향하고 런타임 네이티브 async 도입
- x86/x64 최소 요구가 x86-64-v1에서 x86-64-v2로 올라가 CX16, POPCNT, SSE3, SSSE3, SSE4.1, SSE4.2를 추가로 보장함
- 기준을 못 맞춘 하드웨어에서는 런타임이 실행되지 않고 The current CPU is missing one or more of the baseline instruction sets. 메시지가 나옴
- ReadyToRun 타깃은 Windows와 Linux x64가 x86-64-v3(AVX, AVX2, BMI1/2, F16C, FMA, LZCNT, MOVBE 추가)로, Windows Arm64가 armv8.2-a + RCPC로 상향됐고 Apple 쪽은 그대로임
- Windows Arm64 JIT/AOT 최소 기준에 LSE가 추가됐고 Linux Arm64는 Raspberry Pi처럼 AdvSimd만 있는 기기를 계속 지원하되 R2R 타깃만 armv8.0-a + LSE로 바뀜
- 변경 이유로 구형 하드웨어 지원이 키우는 코드베이스 복잡도와 AOT 타깃의 최소 공통분모가 만드는 성능 손실을 들었고, 같은 릴리스에 런타임 네이티브 async인 Runtime Async V2도 들어감
Hacker News 의견들
async 스택 트레이스가 읽기 좋아지면 개발자들이 실제로 열어보게 될지도. 지금은 상태 머신 지옥이라 읽을 엄두가 안 남.
Go랑 .NET이 겹치는 영역에서 왜 .NET을 고르는지 궁금함. 내가 알기론 Go가 문법도 메모리도 더 효율적인데.
Go는 재미가 없음. 내 작업에선 보통 더 느렸고 GC 올리면 메모리는 비슷해짐. C# async가 Go 동시성보다 가볍다고 느꼈고 .NET 11에서 차이가 더 분명해질 듯.
네이티브 interop은 .NET이 훨씬 나음. 그게 중요한 시스템이 꽤 있음.
CLR이 C++ 지원 염두에 두고 설계됐다는 건 도시전설임. Go는 아직 C# 2.0 단계고 없는 언어 기능이 많음.
툴링은 Visual Studio, Rider, VS Code C# Dev Kit 다 좋음. IDE 싫어하는 사람도 있지만 가끔은 진짜 편함.
Go에 LINQ 해당하는 게 뭐임?
예전 직장에선 그냥 다들 아는 언어를 썼음. .NET에서 Go로 갈아탈 시간을 아끼는 거지. 컨테이너 크기 차이도 CRUD 앱에선 상관없고 성능도 비슷했음.
NativeAOT랑 비교하면 Go가 그렇게까지 효율적이진 않음. C#은 표현력이 좋아서 LINQ로 DB 쿼리를 타입 안전하게 쓸 수 있음.
툴링이랑 개발 UX 차이임. 원격 디버깅을 나란히 놓고 보면 왜 MS 도구를 쓰는지 바로 알게 됨.
C#은 추상화가 훨씬 강하고 언어 자체가 큼. 장점이자 단점임. Go는 저수준과 고수준이 이상하게 섞여 있고 LINQ 같은 게 없어서 결국 안 쓰게 됐음. 난 async/await가 Go 동시성보다 좋음.
최신 .NET은 성능이 좋으면서 필요하면 고수준으로 쓸 수 있음. 한 번 배워서 여러 용도에 쓰니까 생태계도 채용 시장도 넓음.
생태계를 비교해보면 IoT, 모바일, 웹 프론트와 백엔드, 클라우드 다 됨. Go는 전통적인 영역에 몰려 있음.
.NET 리플렉션이 진짜 촘촘함. 다른 언어 리플렉션이 원시적으로 느껴질 정도.
Go struct tag는 그냥 문자열이라 json 대신 jsom이라고 써도 컴파일러가 모름. C#은 attribute로 타입 검사가 됨.
.NET은 생태계도 숙련 개발자도 많음. Go는 주말 프로젝트엔 충분한데 200명짜리 모노레포로 키우긴 어려움.
Go 새 버전 나올 때마다 .NET에 20년 전부터 있던 기능이 들어옴. 제네릭이 그랬고 에러 처리는 영원히 안 된다고 선언했음.
나한테 Go는 그냥 동시성 언어임. C#은 만능이고 스크립팅만 빼면 거의 다 좋음.
최신 C#은 iterator, collection expression, record, source generator, Span, ref struct까지 있어서 Go보다 표현력이 훨씬 강함. Go 장점은 컴파일 속도랑 goroutine, 프로파일링, 포매터 정도.
런타임 async로 성능이 동등하게 나온다는 게 놀라움. Erlang이나 Go, Java 비슷한 구현을 실험해서 배운 걸 반영한 듯.