문제

저는 거의 20년 동안 C/C++ 코드를 작성해 왔으며 Perl, Python, PHP 및 일부 Java도 알고 있으며 JavaScript를 독학하고 있습니다.하지만 저는 .NET, VB, C# 작업을 해본 적이 없습니다.정확히 무엇을 하는가 관리하다 코드 뜻?

위키피디아 그것을 설명 단순히

가상 머신의 관리 하에 실행되는 코드

그리고 특히 Java는 (보통) 관리 코드라고 명시되어 있습니다.

  • 왜 이 용어는 C#/.NET에만 적용되는 것 같나요?
  • C#을 VM도 포함하는 .exe로 컴파일할 수 있습니까, 아니면 패키지화하여 다른 .exe(java)에 제공해야 합니까?

비슷한 맥락에서,

  • .NET은 무엇입니까? 언어 또는 뼈대, 여기서 "프레임워크"란 정확히 무엇을 의미합니까?

좋아요, 그것은 하나의 질문이 아닙니다. 하지만 저와 같이 오랫동안 업계에 몸담아온 사람으로서는 지금 당장은 N00B 같은 느낌이 듭니다...

도움이 되었습니까?

해결책

C# 코드를 .exe로 컴파일하면 CIL(Common Intermediate Language) 바이트코드로 컴파일됩니다.CIL 실행 파일을 실행할 때마다 Microsoft의 CLR(공용 언어 런타임) 가상 머신에서 실행됩니다.따라서 아니요. .NET 실행 파일에 VM을 포함하는 것은 불가능합니다.프로그램이 실행될 클라이언트 컴퓨터에 .NET 런타임이 설치되어 있어야 합니다.

두 번째 질문에 대답하자면, .NET은 특정 언어가 아닌 라이브러리, 컴파일러 및 VM 세트라는 점에서 프레임워크입니다.따라서 C#, VB, C++ 및 .NET 컴파일러가 있는 기타 언어로 .NET 프레임워크에서 코딩할 수 있습니다.

https://bitbucket.org/brianritchie/wiki/wiki/.NET%20Languages

위 페이지에는 .NET 버전이 있는 언어 목록과 해당 페이지에 대한 링크가 있습니다.

다른 팁

이는 대부분 모든 메모리 할당이 사용자를 위해 "관리"된다는 사실을 의미합니다.관리 코드를 사용하는 경우 작업을 마친 후 개체를 해제하는 것에 대해 걱정할 필요가 없습니다.단순히 범위를 벗어나도록 허용하면 VM은 결국 더 이상 참조가 없음을 인식하고 가비지 수집을 통해 메모리를 시스템에 반환하게 됩니다.

반면에 관리되지 않는 코드는 참조를 삭제하기 전에 포인터를 명시적으로 해제하지 않는 한 단순히 "누출"됩니다.

.Net이 무엇인지 혼란스러워하는 사람이 여러분 혼자만은 아닐 것 같습니다.이미 다루어야 할 다른 답변이 있지만 다른 사람들을 위해 이 정보를 버릴 것입니다.

.Net이 "실제로" 무엇인지 확인하려면 c:\Windows\Microsoft.Net\Framework로 이동하세요.

여기에는 설치한 버전과 관련된 폴더가 표시됩니다.예를 들어 v2.0.xxxxx 폴더를 설치한 경우 해당 폴더로 이동하세요.

해당 폴더에는 프레임워크가 있습니다.기본적으로 .exe 파일과 .dll 파일이 많이 표시됩니다.System.*.dll로 시작하는 모든 DLL 파일은 본질적으로 .Net 프레임워크입니다.

해당 폴더에 표시되는 .exe 파일은 개발자와 컴파일러를 위한 유틸리티입니다.C#을 언급하셨습니다.csc.exe 파일을 찾으세요.이것이 C# 컴파일러입니다.

프로그램을 만드는 것은 정말 간단합니다.hello.cs 파일에 다음 코드를 삽입합니다.

using System;
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello world");
        }
    }

그런 다음 명령줄에 > csc hello.cs를 입력합니다.

그러면 .exe 파일이 생성됩니다.그것을 실행하면 분명히 'hello world'가 뱉어질 것입니다.

Console.WriteLine()이라는 줄이 프레임워크를 호출하고 있습니다.Console은 System 네임스페이스 내에 있는 개체이고 WriteLine()은 정적 메서드입니다.

다음은 해당 Console.WriteLine() 메서드에 대해 분해된 코드입니다.

[HostProtection(SecurityAction.LinkDemand, UI=true)]
public static void WriteLine(string value)
{
    Out.WriteLine(value);
}

사람들이 "PHP를 사용해야 할까요, 아니면 .Net을 사용해야 할까요?", "Python이나 .Net을 사용해야 할까요?"와 같은 말을 하면 그것이 얼마나 잘못된 논의인지 알게 됩니다.그들은 분명히 언어를 프레임워크와 비교하고 있습니다.C#은 언어이며 .Net 플랫폼에서 코드를 작성하는 데 사용할 수 있는 많은 언어 중 하나일 뿐입니다.Console.WriteLine()의 동일한 메서드는 C#, VB.Net, Pascal, C++, Ruby, Python, F# 및 .Net 플랫폼 위에서 작동하도록 만들어진 기타 언어에서 호출할 수 있습니다.

도움이 되었기를 바랍니다.

-키스

이는 Microsoft가 .NET을 C/C++ 및 기타 이전 언어와 구별하기 위해 선택한 용어이기 때문에 주로 .NET을 설명하는 데 사용됩니다.Microsoft는 C#/.NET과 Java 간의 유사성을 강조하고 싶지 않았기 때문에 일반적으로 Java와 관련된 용어가 아니기 때문에 이를 선택했습니다. 훨씬 더 Java처럼 들립니다.)기본적으로 "관리 코드"의 사용은 기술 중심의 용어라기보다는 마케팅 중심의 용어입니다.

특히 .NET 및 Visual C++에서는 비관리 코드와 관리 코드를 모두 가질 수 있습니다.이 용어는 메모리가 할당되고 '관리'되는 방식을 나타냅니다.

관리되지 않는 코드는 여러분에게 익숙한 C++ 코드일 것입니다.동적 메모리 할당 및 명시적인 메모리 해제..NET 런타임은 메모리를 관리하지 않으므로 '관리되지 않습니다'.

반면에 관리 코드는 런타임에 의해 관리됩니다.필요한 곳에 메모리를 할당하면(메모리 공간이 아닌 변수를 선언하여) 런타임 가비지 수집기가 더 이상 필요하지 않은 시기를 결정하여 모두 정리합니다.가비지 수집기는 효율성을 높이기 위해 메모리를 이동하기도 합니다.런타임이 모든 것을 '관리'합니다.

위에서 언급했듯이 관리되는 코드와 관리되지 않는 코드를 모두 작성하는 것이 가능합니다.

비관리형:

class Bar : public Foo {
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int * getFubar() { return * fubar; }
}

관리됨:

public ref class Bar :  public Foo
    private:
            int fubar;
    public:
            Bar(int i) : fubar(i) {}
            int ^ getFubar() { return ^ fubar; }
}

심판에 주목하세요?이는 관리 클래스를 거의 지정합니다.그러나 두 종류의 코드를 혼합하면 매우 혼란스러워집니다.예를 들어, 관리되지 않는 클래스 내의 Picture Box 컨트롤에 대해 관리되는 포인터에 해당하는 참조 포인터(^)를 저장하려고 합니다.가비지 수집기는 메모리를 이동할 수 있으므로 다음에 그림 상자를 역참조하려고 하면 찾을 수 없습니다.런타임은 비관리 코드에 메모리 변경 사항을 알리지 않습니다.

따라서 관리되지 않는 코드가 이를 추적할 수 있도록 관리되는 개체를 메모리에 고정해야 합니다.그런 다음 개봉기와 두 가지를 혼합할 수 있는 모든 종류의 다른 특이한 기능이 있습니다.코드 복잡성은 엄청납니다!

공식적으로 관리/비관리는 .NET 스택에서 코드가 실행되는 방식에 따라 달라질 수 있습니다.그러나 C++ 배경 지식을 갖고 계시다면 이것이 여러분에게 좀 더 관련이 있기를 바랍니다.

관리형이란 코드가 네이티브 코드로 컴파일되지 않아 가상 머신의 후원으로 실행된다는 의미입니다.Java는 Java VM이 해석하고 실행하는 방법을 알고 있는 바이트코드라는 중간 형식으로 컴파일됩니다.모든 .NET 언어는 .NET 런타임이 해석하는 IL(중간 언어)로 컴파일하는 것과 유사한 작업을 수행합니다..NET IL에는 .dll 및 .exe 파일 끝이 있기 때문에 약간 혼란스럽습니다.

용어 관리하다 Microsoft에서는 이 용어를 사용하므로 일반적으로 .NET에만 적용됩니다.Microsoft는 일반적으로 .NET 관리 실행 환경과 관련하여 "가상 머신"이라는 용어를 사용하지 않습니다.

.NET의 "바이트코드"(IL)는 관리되는 환경에서 실행되기 전에 네이티브 코드로 컴파일되도록 명시적으로 설계된 반면 Java는 해석되도록 설계되었다는 점에서 Java 바이트코드와 다소 다릅니다. 유사하다.

".NET Framework"는 기본적으로 Microsoft에서 제공하는 거대한 라이브러리 세트로, 애플리케이션 개발에 사용할 수 있는 수천 개의 클래스가 포함되어 있습니다.

컴파일된 C# .exe에는 Mono를 포함한 모든 .NET 호환 환경에서 실행할 수 있는 플랫폼 독립적인 코드가 포함되어 있습니다.그러나 런타임은 일반적으로 이를 사용하는 애플리케이션과 별도로 배포됩니다.

일부 사람들의 기분을 상하게 할 위험이 있지만, 컴파일 대신 관리되지 않는 단어를 사용할 수 있도록 관리라는 단어가 사용된 것으로 의심됩니다.관리형은 그 이상을 의미할 수 있지만 실제로는 적시에 컴파일되는 코드(한때 해석되었거나 pcode였던 코드를 대체하는 코드)와 기본 컴파일된 코드를 구별하는 데 주로 사용되는 것 같습니다.

또는 다른 방법을 사용하면 다음과 같습니다.

a) 시스템에 제어할 수 없는 작업을 수행할 수 있는 비관리 코드입니다.

b) 빠르고 견고하며 OS에 가까운 네이티브 컴파일 코드입니다.

물론 실제로는 같은 것입니다.

비슷한 맥락에서 .NET은 언어입니까 아니면 프레임워크입니까? 여기서 "프레임워크"는 정확히 무엇을 의미합니까?<<

.NET은 Microsoft의 현재 엔터프라이즈 소프트웨어 플랫폼입니다.그것은 다음으로 구성됩니다:

• Windows 기능에 액세스하기 위한 단일 범용 인터페이스:

o The .NET Framework Class Library (FCL).
o The FCL provides a rich set of high-level functionality for developers.

• .NET 애플리케이션 실행을 위한 단일 범용 언어 및 런타임:

o Common Language Runtime (CLR) executes Common Intermediate Language (CIL).
o The CLR is God: it runs, controls, and polices everything.

• .NET 애플리케이션 개발을 위한 다양한 언어 선택:

o Every development language is compiled to CIL, which is run by the CLR.
o C# and VB are the two main development languages.

.NET은 프레임워크입니다.CLR(공용 언어 런타임)은 솔루션이 컴파일될 때 생성되는 MSIL(Microsoft Intermediate Language) 코드를 실행합니다(즉, 기계어 코드로 컴파일되지 않음).exe 내에 API를 포함할 수 없으며 API가 상당히 크기 때문에 포함하고 싶지도 않습니다.여기서 가장 큰 이점은 메모리 관리입니다(다른 보안 이점과 내가 알지 못하는 다른 이점도 포함).

프레임워크 질문에 답할 수 있습니다..NET은 프레임워크이고 C#, VB.NET 등은 언어입니다.기본적으로 .NET은 호출할 라이브러리의 공통 플랫폼(모든 시스템....)을 제공합니다..NET을 사용하는 모든 언어에서 호출할 수 있는 dll)입니다.모든 .NET 언어는 MSIL(Microsoft Intermediate Language, IL로 더 잘 알려져 있음)로 컴파일되어 적절한 .NET 프레임워크가 설치된 모든 PC에서 실행될 수 있습니다.

.NET은 프레임워크입니다.다양한 언어(VB.NET, C#, IronPython, boo 등)에서 사용할 수 있습니다.

.NET은 항상 해석된 대로 실행되며 .exe 내에 'VM'을 포함할 수 없습니다..NET 앱을 실행하려는 모든 사용자는 프레임워크를 설치해야 합니다.

CPU에서 직접 실행하는 것이 아니라 가상 머신에서 실행되는 모든 코드를 나타낼 수 있습니다.

나는 이것이 가비지 수집이나 배열 범위 검사와 같은 일을 가능하게 한다고 생각합니다.

개인적으로 "프레임워크"라는 단어는 약간 잘못된 이름이라고 생각합니다.

.NET은 실행 환경(CLR 가상 머신)과 라이브러리 세트로 구성된 "플랫폼"입니다.이는 Java, Perl 또는 Python(이들 중 어느 것도 "프레임워크"라고 부르지 않음)과 정확히 유사합니다.

대부분의 경우 "프레임워크"라는 단어는 라이브러리와 같은 플랫폼 위에 있는(즉, 자체 실행 환경을 제공하지 않는) Spring, Struts 또는 QT와 같은 프로젝트에 사용됩니다.

그러나 "라이브러리"와 달리 프레임워크는 기본 플랫폼의 기본 작동을 재정의하려고 합니다.(Spring의 종속성 주입은 일반 Java 코드의 생성자 호출 논리를 무시합니다.QT의 신호 및 슬롯 구현은 일반적인 C++ 코드를 무시합니다.)

나는 단지 현학적인 개자식이라는 것을 알고 있지만 나에게 .NET은 프레임워크가 아닙니다.플랫폼입니다.

관리 코드 - MSIL 및 IL과 관리 코드는 동일합니다. 응용 프로그램을 빌드하면 .dll 또는 .exe 파일이 Bin 폴더에 생성됩니다. 이러한 파일을 관리 코드라고 합니다. 나중에 이러한 파일은 네이티브 생성을 위해 CLR에 제공됩니다. OS에서 이해할 수 있는 코드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top