이 기사는 C# 실행 원리에 대한 심층적인 분석(그림 및 텍스트)을 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
Unity3D가 C#을 실행할 수 있는 이유, C#과 Mono의 관계, Mono와 .Net Framework의 관계는 무엇인가요? 이 주제에 대해 심도 깊게 이야기해 봅시다!
컴파일의 원리부터 시작하세요
컴파일러를 한 문장으로 소개해보세요. 컴파일러는 특정 프로그래밍 언어로 작성된 소스 코드(소스 언어)를 다른 프로그래밍 언어(대상 언어)의 동등한 형태로 변환하는 프로그램입니다. 일반적으로 우리는 특정 고급 언어(예: C, C++, C#, Java)를 하위 수준 언어(어셈블리 언어, 기계어)로 변환합니다.
컴파일러는 파이프라인 형태로 작동하며 소스 코드 → 어휘 분석 → 구문 분석 → 의미 분석 → 대상 코드 → 링크 → 실행 파일의 여러 단계로 나뉩니다. 최신 컴파일러는 더욱 복잡해지고 중간에 전처리기, 중간 코드 생성, 코드 최적화 등과 같은 더 많은 프로세스가 추가될 것입니다.
가상 머신이란 무엇인가요?
가상 머신(VM)은 간단히 이해하면 특정 명령을 실행할 수 있는 프로그램입니다. 명령어를 실행하려면 레지스터, 스택 등과 같은 일부 지원 시설도 필요합니다. 가상 머신은 매우 복잡할 수도 있고, 너무 복잡해서 실제 컴퓨터 하드웨어를 시뮬레이션할 수도 있고, 너무 단순해서 덧셈, 뺄셈, 곱셈, 나눗셈만 할 수도 있습니다.
컴파일러 분야에서 가상 머신은 일반적으로 중간 코드라는 언어를 실행합니다. 중간 코드는 고급 언어에서 다음 언어로 변환됩니다. Java를 예로 들면, Java 컴파일 후에 생성되는 것은 실행 파일이 아니라 Java의 코드가 포함된 ByteCode(바이트 코드) 파일입니다. 소스 코드는 바이트코드 형식의 동등한 코드로 변환됩니다. JVM(Java Virtual Machine)이 이 파일을 실행하는 역할을 담당합니다.
가상 머신이 중간 코드를 실행하는 방법에는 두 가지가 있습니다. 해석된 실행과 JIT(적시 컴파일). 해석과 실행이란 각 명령어를 하나씩 실행하는 것을 의미하며, JIT 중간 코드는 실행이 시작될 때 먼저 기계어 코드로 컴파일된 다음 기계어 코드가 실행됩니다. 중간 코드가 실행되기 때문에 서로 다른 플랫폼에 구현된 서로 다른 가상 머신은 동일한 중간 코드를 실행할 수 있으므로 크로스 플랫폼을 달성할 수 있습니다.
int run(context* ctx, code* c) { for (cmd in c->cmds) { switch (cmd.type) { case ADD: // todo add break; case SUB: // todo subtract break; // ... } } return 0; }
요약하자면, 가상 머신 자체는 크로스 플랫폼이 아니지만, 언어는 크로스 플랫폼입니다. 개발자는 개발 언어에만 신경 쓰면 되고, 가상 머신이 어떻게 구현되는지는 신경 쓸 필요가 없습니다. . Java가 크로스 플랫폼이 가능한 이유는 C#과 같습니다. 확장하면 이론적으로 컴파일러나 가상 머신과 같은 지원 기능이 해당 플랫폼에서 구현되는 한 모든 언어는 크로스 플랫폼이 될 수 있습니다.
C#은 무엇이고 IL은 무엇인가요?
C#은 .NET 프레임워크를 기반으로 Microsoft에서 출시한 고급 개체 지향 프로그래밍 언어입니다. Microsoft는 이 언어를 Java를 대체하기 위해 2000년에 출시했습니다. 자세한 소개는 C# Wiki를 참조하세요.
C#은 언어 사양을 맞춤화하여 개발, 컴파일, 배포 및 실행까지 완전한 원스톱 서비스를 제공합니다. 가끔씩 최신 사양이 출시되어 새로운 사양이 추가됩니다. 언어 기능. 문법 수준에서 볼 때 C#은 작성하기 매우 편리한 매우 완전한 언어입니다.
C# Java와 마찬가지로 C#은 중간 언어(CIL, MSIL이라고도 함)로 컴파일됩니다. 고급 언어이기도 하며 CIL을 실행하는 가상 머신을 CLR(Common Language Runtime)이라고 합니다. 보통 우리는 넣어 C#, CIL, CLR 및 Microsoft에서 제공하는 .Net Framework라는 기본 클래스 라이브러리 세트.
C#은 우주를 정복하기 위해 태어났지만 안타깝게도 Microsoft의 폐쇄로 인해 이 목표는 달성되지 못했습니다. 물론 C#은 지금도 여전히 잘 나가고 있고, 게임 때문에, Unity3D 때문에, Mono 때문에 다시 활성화되고 있습니다.
.Net Framework와 Mono
Mono는 .Net Framework의 크로스 플랫폼 구현입니다. Mono는 지원되는 모든 플랫폼에서 CLR을 다시 구현하고 .Net Framework에서 제공하는 기본 클래스 라이브러리를 다시 구현하는 등 훌륭한 일을 해냈습니다.
위의 Compile Time 작업은 실제로 Microsoft의 기존 성과를 직접 사용할 수 있으며, 런타임 CLR이 다른 플랫폼에서 구현되는 한 이 작업량은 클 뿐만 아니라 호환성도 보장해야 합니다. 매우 큰 프로젝트였습니다. Mono가 해냈습니다. 경의를 표합니다!
Unity3D
의 CUnity3D에는 Mono 가상 머신이 내장되어 있습니다. 위에서 보면 특정 플랫폼의 가상 머신이 구현되면 해당 플랫폼에서 언어가 실행될 수 있음을 알 수 있습니다. 따라서 엄밀히 말하면 Unity3D는 Mono 가상 머신을 사용합니다. , 컴파일러에서 컴파일한 C#으로 생성된 IL 코드를 실행합니다.
Unity3D는 기본적으로 C#을 개발 언어로 사용합니다. 또한 Unity3D는 JS 및 BOO를 IL로 컴파일하기 위해 해당 컴파일러를 개발했기 때문에 JS 및 BOO도 지원합니다.
Summary
C# Windows에서 IL 코드는 Microsoft의 C# 컴파일러를 통해 생성되고 CLR에서 실행됩니다.
C# Windows 이외의 플랫폼에서는 IL 코드가 Mono 컴파일러를 통해 생성되고 Mono 가상 머신에서 실행됩니다. (모든 플랫폼 컴파일을 통해) 컴파일된 IL 코드를 직접 실행할 수도 있습니다.
이론적으로 언어를 만들고 특정 플랫폼에 맞는 컴파일러를 구현한 다음 모든 플랫폼의 언어 사양을 충족하는 가상 머신을 구현하면 어떤 플랫폼에서든 언어가 실행될 수 있습니다.
위 내용은 C# 실행 원리에 대한 심층 분석(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!