Programing

Windows에서 Mono의 요점은 무엇입니까?

lottogame 2020. 11. 26. 07:45
반응형

Windows에서 Mono의 요점은 무엇입니까?


이것은 어리석은 질문 일 수 있습니다 ...하지만 저는 Mono 프로젝트를 살펴보고 있었고 Windows에 Mono를 설치하는 것에 대한 섹션이 있습니다. 그러나 Windows에는 이미 .NET 런타임이 있으므로 누구든지 Windows 용 Mono를 사용하는 것이 정확히 무엇인지 알 수 있습니까? 크로스 플랫폼 개발에 도움이 되나요?


Mono는 MS .Net Framework와 똑같이 .Net을 100 % 구현하지 않기 때문에 Linux에서 실행하지 않고도 Mono에서 테스트 할 수 있다는 점이 좋습니다. 또한 Mono에는 MS가 지원하지 않는 GTK로 양식을 만드는 바인딩이 있습니다.


Mono에는 .NET이없는 몇 가지 기능이 있습니다.

Mono는 고도로 모듈화되어 있습니다. 작은 조각으로 분리하고 필요한 부분 정확하게 배치 할 수 있습니다. System.Xml을 원하지 않습니까? 좋아, 사라졌어.

모노는 삽입 가능합니다. C / C ++ 애플리케이션 내에서 호스팅하여 사용자가 안전하게 관리되는 샌드 박스 환경에서 스크립트를 작성할 수 있습니다. 이에 대한 가장 유명한 예는 Apache 웹 서버 내부에서 Mono를 호스팅하는 mod_mono이며, 예를 들어 ASP.NET이 Mono에서 구현되는 방식입니다. 이 기능은 위에서 언급 한 모듈화와 잘 어울립니다.

이것은 이미 언급되었습니다 : 정적 연결. 또한 모듈화와 잘 어울립니다.

서비스로서의 컴파일러는 또 다른 하나입니다. 앤더스 헤 즐스 버그는 그것에 대해 얘기를 해왔습니다 오랜 시간, 어쩌면 , 어쩌면 단지는 C # 5.0에 대한 준비가 될 것입니다. 글쎄, Mono는 이미 그것을 가지고 있으며 실제로 수년 동안 가지고 있습니다.

Mono의 수석 개발자 인 Miguel de Icaza는 "Embrace and Extend.NET"이라고 부르는 이니셔티브를 가지고 있습니다.이 계획은 다른 CLI 구현 (.NET 포함)으로는 불가능한 방식으로 CLI를 확장합니다. 지금까지 Embrace 및 Extend.NET에는 세 가지 기능이 있습니다.

Mono.Simd는 기본 CPU의 SIMD 명령 (예 : Intel의 SSE 또는 PowerPC의 AltiVec)에 대한 안전하고 제어 된 액세스를 제공합니다. 게임 및 그래픽에 사용됩니다.

ECMA 사양에서 허용하는 64 비트 어레이 인덱스이지만 실제로 제공하는 VM은 Mono뿐입니다. 슈퍼 컴퓨팅에 사용됩니다.

그리고 가장 최근에는 계속됩니다. 실제로 Mono가 사양 영역을 벗어나는 것은 이번이 처음입니다. 긴 배열 인덱스는 사양에 따라 완벽하게 유효하며 Mono.Simd는 모든 CLI 호환 구현에서도 작동하지만 ( 매우 느리지 만) Mono.Tasklet에는 특별한 기능이 필요합니다. CLI 또는 .NET의 일부가 아닌 VM에서 지원합니다. 이것은 게임 로직 및 예를 들어 세컨드 라이프에 사용됩니다.


Mono는 .Net이하지 않는 일을합니다.

예를 들어 mono는 정적 연결을 지원하므로 별도의 런타임 설치 프로그램없이 앱을 빌드, 컴파일 및 배포 할 수 있습니다. 모노를 사용하여 크로스 플랫폼이되도록 앱을 빌드 한 경우 .Net과 약간의 차이가 있으므로 Windows에서 모노를 고수하는 것이 호환성을 더욱 보장합니다.

.Net은 모노가하지 않는 일을합니다.

BCL에는 WPF 및 Winforms와 같이 아직 모노 용으로 포팅되지 않은 몇 군데가 있습니다.

Mac / Linux에서도 작동하는 앱을 원한다면 Windows에서 대부분의 작업을 수행하더라도 먼저 모노 용으로 개발하고 싶을 것입니다.


참고 :이 모든 것은 .Net Core / Standard 이전 버전입니다.


Mono의 기술 FAQ에서 :

진짜를 실행할 수 있는데 왜 Windows를 지원합니까?

여러 가지 이유가 있습니다.

Windows를 지원하면 Mono의 이식 불가능한 버전에서 Mono의 이식 가능한 부분을 식별하는 데 도움이되므로 Mono의 이식성이 향상됩니다.

문제를 분할하여 Mono의 문제를 격리 할 수 ​​있으므로 도움이됩니다 (런타임 문제입니까, 아니면 OS 문제입니까?).

Mono의 기여자 중 약 절반이 Windows 개발자입니다. 그들은 노력에 기여하는 여러 가지 이유가 있으며, 이러한 개발자가 새로운 운영 체제를 사용하지 않고 Windows에서 런타임을 실행할 수 있도록하는 것이 매우 중요합니다.

Mono는 Windows 레지스트리를 크게 수정하지 않고, 시스템 DLL을 업데이트하고, DLL을 Windows / System32 경로에 설치하지 않습니다.

Windows 기반 개발자는 Linux에 배포하기 전에 Mono에서 코드를 테스트 할 수 있습니다.

Mono 및 Mono를 포함하는 응용 프로그램은 설치 프로그램없이 배포 할 수 있습니다 (.NET 런타임을 설치하지 않고도 응용 프로그램과 필요한 Mono 파일을 "xcopy"배포 할 수 있음).


C #으로 크로스 플랫폼 애플리케이션을 개발하려는 경우 다른 플랫폼과 완전히 호환되는 대안이 없기 때문에 Microsoft의 구현을 사용하는 것이 가장 현명한 방법은 아닙니다.

따라서 Windows에서 Mono를 사용하여 응용 프로그램을 개발하면 다른 OS로 이식하는 데 문제가 거의 없습니다 (P / Invoke와 같은 다른 구덩이를 피하는 경우).


일부 사람들은 레지스트리 및 시스템 파일의 양으로 인해 Windows PC에 .Net 프레임 워크를 설치할 수 없기 때문에 사용했습니다. (엄격하게 통제 된 환경에서.)

반면 Mono는 Program Files에 자체 포함되어 있으며 경로가있는 레지스트리 키만 작성합니다 (실행할 필요가 없음).

나는 이것이 다소 어리석은 것 같지만 여러 사용자가 우리에게 말한 것입니다.


주로 Mono 특정 라이브러리 용 Mono 앱을 개발하는 데 도움이됩니다. 또한 개발자가 Mono 용으로 개발할 때 자연스러운 환경에서 작업 할 수 있도록 원인을 개선하는 데 도움이됩니다.


널리 관심이 없지만 모노가 표준 Microsoft 런타임보다 개선 된 몇 가지 경우가 있습니다. Migel은 올해 PDC에서 이들 중 일부에 대해 강연했습니다.

다음 게시물을 참조하십시오.


또한 Mono와 동적으로 연결된 프로그램이 있더라도 컴파일 된 .exe 및 Mono 런타임을 pendrive에두고 .NET / Mono가 설치되지 않은 다른 컴퓨터로 이동하여 런타임 설치없이 새 PC에서 해당 프로그램을 실행할 수 있습니다. 즉, 휴대용 앱으로 이어집니다 (특히 휴대용 USB 펜 드라이브 앱으로 유용함). .NET에서는 불가능합니다. 특정 설치 프로그램 방식으로 .NET 런타임을 설치해야합니다. 즉, 폴더 복사 및 붙여 넣기가 포함 된 런타임이 불가능합니다.


그들이 이것을 한 주된 이유는 Mono와 .NET에서 .NET 응용 프로그램을 나란히 실행하여 비교할 수 있기 때문이라고 생각합니다. 또한 Mono 라이브러리에 의존하는 몇 가지 응용 프로그램이 있습니다.


다른 답변에 언급 된 많은 이유를 추가하기 위해 Wine 내에서 .Net 응용 프로그램을 실행할 수 있도록 Windows 용 Mono를 Wine에 설치해야 할 수 있습니다.


그물에 엉키지 않도록!

참고 URL : https://stackoverflow.com/questions/751648/whats-the-point-of-mono-on-windows

반응형