2010-02-24 35 views
9

Tôi mới sử dụng Mono và mới bắt đầu gần đây. Chương trình mono có được biên dịch từ C# thành mã gốc để có thể chạy trên một số hệ điều hành không?Có đơn biên dịch C# và bản địa không?

và cũng có thể, tôi thấy một screencast trên MonoTouch, cho tôi biết rằng monotouch (đặc biệt) biên dịch mọi thứ xuống Native for C# để có thể chạy trên Iphone.

Im khá gây nhầm lẫn.

Trả lời

19

Mono theo mặc định biên dịch thành mã bytecode trung gian, sau đó được chạy trên máy ảo. Mã byte này là xách tay nhưng không phải là mã máy gốc.

Mono có an AOT compiler sẽ tạo ra hình ảnh gốc khi bytecode không phải là một tùy chọn.

1

Cốt lõi của dự án Mono là JITter cho MSIL (ngôn ngữ trung gian do trình biên dịch .NET tạo ra).

Tất nhiên, Trình biên dịch Just-In-Time vẫn là trình biên dịch và bạn chỉ có thể lấy mã gốc do quá trình JIT tạo và chạy sau đó. Tùy thuộc vào JITter, nó có thể cung cấp các phương tiện một cách rõ ràng để làm điều đó.

5

Bản thân Mono sẽ biên dịch sang bytecode .NET CLR, cho phép nó thực thi trên bất kỳ nền tảng hỗ trợ .NET hoặc Mono nào. Các tệp thực thi này không được tạo bằng các chỉ dẫn máy gốc; chúng vừa được biên dịch thành mã nguồn gốc theo thời gian chạy trên hệ thống thực thi nó. Trong ngắn hạn, Mono nhị phân là di động.

Vì CocoaTouch, việc biên dịch mã thành mã gốc là cần thiết vì Apple sẽ không cho phép các hệ thống như Mono trên iPhone. Nó là một trường hợp đặc biệt; các chương trình Mono bình thường sẽ không làm điều này.

6

Khá nhiều nền tảng .NET, cả Microsoft (bao gồm máy tính để bàn, khung nhỏ gọn và microframework) và bên thứ ba (chẳng hạn như mono) biên dịch mọi thứ trước tiên thành ngôn ngữ trung gian phổ biến. biên dịch trong khi thực thi thành mã gốc. Một số không có JIT và chỉ giải thích trực tiếp IL.

Mã gốc rõ ràng là không thể di chuyển.

Điều đó có hữu ích không?

2

Có, bạn có thể viết bằng ngôn ngữ C# hoặc các ngôn ngữ dotnet khác như VB.Net khi biên dịch với Mono. Mono biên dịch mã của bạn thành IL (một ngôn ngữ trung gian) mà bạn triển khai và sau đó nhận được JIT (chỉ trong thời gian) được biên dịch khi chạy.

Mono có thể chạy một số nền tảng như Windows, Mac OSX, Linux và thậm chí cả iPhone. Mặc dù với việc thực hiện iPhone, tôi tin rằng mã của bạn là trong thực tế dường như biên dịch cho Objective C mà sau đó được biên dịch thành mã gốc chứ không phải là IL.

7

Kiểm tra 'mkbundle' để biên dịch thời gian chạy mono thành tệp thực thi của bạn. ví dụ: mkbundle --static --deps Hello.exe -o hello

Các vấn đề liên quan