Pertanyaan Mengapa .NET-code dikompilasi untuk berbagai platform


Kapan e. g. membuat aplikasi Windows Phone, saya harus memilih x86 untuk debugging di emulator dan ARM untuk melakukan debug pada ponsel. Itu tentu saja karena PC saya menjalankan x86 (x64, untuk spesifik, tetapi prosesor x64 hanya berbeda dalam panjang register (tolong perbaiki saya jika saya salah)) dan ponsel saya telah mendapat prosesor ARM. Tetapi tidak seperti C ++ C # tidak dikompilasi langsung ke assembler, tetapi dalam beberapa jenis bahasa intermediate. Jadi pertanyaan saya adalah: mengapa bahasa menengah ini berbeda untuk platform yang berbeda. Bukankah cukup untuk menulis ulang mesin virtual yang menafsirkan bahasa perantara? E. g. Java berjalan di Mac, PC, dll. Tanpa harus mengkompilasi untuk setiap platform.


4
2017-12-08 17:26


asal


Jawaban:


Anda baru saja melakukannya dengan salah. IL adalah persis sama, terlepas dari pemilihan platform.

Ketika Anda membuat proyek Telepon baru di Visual Studio 2013, Anda mendapatkan solusi dengan tiga Pilihan platform: AnyCPU, x86 dan ARM. Dua yang terakhir ini berlebihan dalam proyek NET murni. Satu-satunya alasan bahwa mereka hadir adalah karena Telepon juga mendukung proyek-proyek C ++ asli. Di mana arsitektur target tidak masalah karena C ++ dikompilasi langsung ke kode mesin.

Dalam proyek NET murni. Anda hanya membutuhkan AnyCPU. Dinamakan cukup tentu saja;)


4
2017-12-08 17:47



Bahasa perantara (CIL; Common Intermediate Language) tidak berbeda di seluruh platform target. Namun, itu punya menjadi just-in-time compiled (atau precompiled) ke dalam bahasa mesin CPU target. Kalau tidak, itu tidak akan berjalan (catatan: itu bisa ditafsirkan, tapi itu kasus sudut yang tidak mungkin). Persis sama berlaku untuk Java.

Mengenai pengaturan CPU target di Visual Studio, Anda selalu dapat menggunakannya AnyCPU dan masalah Anda hilang.


1
2017-12-08 17:41