C#에서는 Assembly, C++ 에서는...?

.NET 에서는 빌드한 결과물을 Assembly라고 합니다. 주로 exe파일, dll 파일로 분류됩니다. (아니라면 무자비한 태클 꼭 부탁드립니다.)

혹시 C++에서도 이렇게 대응되는 단어가 있을까요?

바이너리라는 단어가 있는 것 같은데 이게 맞나요?

좋아요 2

간단히 말씀드리면, 특정 CPU 아키텍처 대상으로 기계 코드 (Machine Code)를 만드는 것이고, 이것을 PE 컨테이너에 담을지, ELF 컨테이너에 담을지를 결정하게 됩니다.

닷넷에서 빌드한 어셈블리는 중간 언어 (Intermediate Language)를 만드는 것이고, 이를 해석하는 가상 머신을 통해 (Just-In-TIme, JIT, 적시)에 기계 코드 (Machine Code)로 변환해서 실행에 투입하거나, 처음부터 미리 기계 코드로 변환시켜놓는 AOT (Ahead-of-Time, 선행) 컴파일 방식을 이용하기도 합니다.

좋아요 4

음… .NET Assembly에 관해 부연설명을 해주신 것으로 이해 되는데, 혹시 C++에서는 대응되는 단어가 있는걸까요? 질문이 그것입니다.

좋아요 1

피드백 감사합니다.

어셈블리에 딱 일치하는 컨셉의 단어는 네이티브에는 없는것 같습니다. 앞서 이야기한 머신 코드 정도와 중간 언어 간의 차이를 드는게 최선인것 같아요.

답변이 딱 맞아떨어지지 않는 느낌이 드신건 그 때문이고, 아래와 같은 케이스가 있어서였어요.

좋아요 3

아~ 좀 감 잡은 것 같습니다.

저는 Assembly를 정말 ‘결과물’ 에 포커스를 맞췄기 때문이고 C++도 그냥 결과물이라는 정도로 생각했기 때문에 답을 못찾았던 것이군요. Visual Studio를 통해 빌드를 하고 나면 어쨌거나 겉에서 보기엔 똑같은 exe 파일이 나오기 때문에 그랬던 거 같습니다.

Visual Studio에서 .NET으로 빌드된 어셈블리는 CLR을 통해 해석이 되고, Visual Studio에서 C++ 코들도 빌드된 C++ 프로그램은 그 자체로 동작한다는 차이가 있기 때문에 적당한 단어가 없다…라고 이해해도 될까요?

좋아요 2

넵. 맞습니다.

그리고 닷넷에서 뿐 아니라 후기 Win32 애플리케이션 모델에서는 SxS (Side-by-Side) 같은 컨셉을 들여왔는데, 여기서도 EXE나 DLL 파일을 그냥 언급하는 것이 아니라, 아래 자료에서 언급하는 것처럼 논리적으로 이어지는 여러 종류의 DLL 파일들을 묶어 "어셈블리"라고 칭하는 경우도 있습니다. (닷넷 사례는 아니긴 하지만요.)

그래서 어셈블리는 윈도우 OS나 닷넷 프레임워크 입장에서 애플리케이션 + alpha를 묶은 논리적인 개념의 한 세트로 취급하는게 정확한 것 같습니다. 그러다보니 어셈블리가 반드시 닷넷 프레임워크로 만든 EXE나 DLL 파일 하나만 가리킨다고 보기가 어렵고요. (물론 가장 대중적인 것은 지금 이야기한 형태가 맞고, 편의 상 그렇게 많이 부르는 것도 사실이지만요.)

좋아요 4

Assembly = 최소 배포 가능 단위

요 해석은 어떠신가욥?

그런 의미에서 C++는… Library? (.lib)

좋아요 4

개인적으로는 .lib, .obj 같은 단위보다는, 어셈블리와 비슷하게 취급할 수 있는건 오히려 .msix, .appx (Windows), .apk (Android), .app (macOS) 같은 애플리케이션 패키지 쪽이 좀 더 가깝지 않나 생각합니다. ㅎㅎ

좋아요 4