Bagaimana cara Windows 8 Runtime (aplikasi WinRT / Windows Store / Windows 10 Universal) dibandingkan dengan Silverlight dan WPF? [Tutup]


353

Saya mencoba mendapatkan Runtime Windows 8 baru yang digunakan untuk membuat aplikasi gaya Metro . Saya tahu Anda dapat menggunakannya dengan XAML dan didasarkan pada. NET sehingga C # dan VB.NET dapat digunakan untuk menulis aplikasi, tetapi tampaknya ada hubungannya dengan HTML, CSS, DOM, dan JavaScript.

Dapatkah seseorang menjelaskan apa itu dalam beberapa paragraf, dalam hal yang dapat dipahami oleh programmer .NET UI? (Saya kehilangan sesuatu "kunci" yang perlu untuk memahaminya.)


Kita semua tahu bahwa WPF, Silverlight , Windows Forms , dll. Akan tetap berfungsi di bawah Windows 8 (dan Windows 10) setidaknya pada sistem Intel, jadi tolong jangan katakan padaku ...


22
Itu tidak didasarkan pada. NET, hanya terkena itu (sedikit seperti COM interop, tetapi jauh lebih mulus ... misalnya tidak ada majelis interop).
Pavel Minaev

Apakah Anda meminta WinRT sebagai platform (ABI, model objek, dll) - dalam hal ini lebih masuk akal untuk membandingkannya dengan COM atau .NET - atau tentang perpustakaan kelas standar WinRT, termasuk yang untuk UI?
Pavel Minaev

1
Perhatikan bahwa Anda harus membedakan teknologi yang mendasarinya, model objek dll - mirip dengan misalnya COM - dan perpustakaan tertentu yang diimplementasikan menggunakan teknologi itu. Bahkan dalam kasus yang terakhir, tidak semua pustaka standar adalah pustaka UI - jika Anda melihat di Object Browser di VS, Anda dapat melihat luasnya fitur yang Windows.*tercakup dalam namespaces. Terminologi sejauh ini agak membingungkan di sini, karena WinRT mengacu pada teknologi dan seluruh rangkaian perpustakaan standar. Saya tidak berpikir ada label ringkas hanya untuk perpustakaan UI ( Windows.UI.*).
Pavel Minaev

@ TrueWill: Lebih masuk akal untuk mempelajari ketiganya, sehingga pengetahuan Anda akan lebih baik, sehingga Anda dapat memutuskan solusi mana yang terbaik untuk masalah yang diberikan. Jangan hanya belajar satu dari tiga.
Chris Charabaruk

2
@TrueWill: Silverlight tidak akan memiliki masa depan rilis: zdnet.com/blog/microsoft/microsoft-releases-silverlight-5/...
Sabuncu

Jawaban:


479

Pada level terendah, WinRT adalah model objek yang didefinisikan pada level ABI. Ia menggunakan COM sebagai basis (jadi setiap objek WinRT mengimplementasikan IUnknowndan melakukan penghitungan ulang), dan membangun dari sana. Itu memang menambahkan cukup banyak konsep baru dibandingkan dengan COM yang lama, yang sebagian besar datang langsung dari .NET - misalnya, model objek WinRT memiliki delegasi, dan acara dilakukan .NET-style (dengan delegasi dan menambah / menghapus pelanggan metode, satu per peristiwa) daripada model COM sumber kejadian dan tenggelam. Dari hal-hal penting lainnya, WinRT juga memiliki antarmuka parametrized ("generic").

Satu perubahan besar lainnya adalah bahwa semua komponen WinRT memiliki metadata yang tersedia untuk mereka, seperti halnya .NET assemblies. Dalam COM Anda agak punya dengan typelibs, tetapi tidak setiap komponen COM memilikinya. Untuk WinRT, metadata terkandung dalam file .winmd - lihat di dalam "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \" di Pratinjau Pengembang. Jika Anda mengaduk-aduk, Anda akan melihat bahwa mereka sebenarnya adalah kumpulan CLI tanpa kode, hanya tabel metadata. Anda dapat membukanya dengan ILDASM. Catatan, ini tidak berarti bahwa WinRT sendiri dikelola - hanya menggunakan kembali format file.

Lalu ada sejumlah perpustakaan diimplementasikan dalam hal model objek - mendefinisikan antarmuka dan kelas WinRT. Sekali lagi, lihat folder "Windows Metadata" yang disebutkan di atas untuk melihat apa yang ada di sana; atau jalankan Object Browser di VS dan pilih "Windows 8.0" di framework selector, untuk melihat apa yang dibahas. Ada banyak hal di sana, dan itu tidak berurusan dengan UI saja - Anda juga mendapatkan ruang nama seperti Windows.Data.Json, atau Windows.Graphics.Printing, atau Windows.Networking.Sockets.

Kemudian Anda mendapatkan beberapa perpustakaan, yang secara khusus berurusan dengan UI - sebagian besar akan berbagai ruang nama di bawah Windows.UIatau Windows.UI.Xaml. Banyak dari mereka sangat mirip dengan WPF / ruang nama Silverlight - misalnya Windows.UI.Xaml.Controlssangat cocok System.Windows.Controls; Dato untuk Windows.UI.Xaml.Documentsdll

Sekarang, .NET memiliki kemampuan untuk mereferensikan komponen WinRT secara langsung seolah-olah mereka adalah .NET assemblies. Ini berfungsi berbeda dari COM Interop - Anda tidak memerlukan artefak perantara seperti majelis interop, Anda hanya /rfile .winmd, dan semua jenis dan anggota mereka dalam metadata-nya menjadi terlihat oleh Anda seolah-olah mereka adalah objek .NET. Perhatikan bahwa pustaka WinRT sendiri sepenuhnya asli (dan dengan demikian program C ++ asli yang menggunakan WinRT tidak memerlukan CLR sama sekali) - keajaiban untuk mengekspos semua hal yang dikelola di dalam CLR itu sendiri, dan levelnya cukup rendah. Jika Anda membuat program NET. Yang mereferensikan .winmd, Anda akan melihat bahwa itu benar-benar terlihat seperti referensi perakitan eksternal - tidak ada sulap tipu tangan seperti jenis embedding di sana.

Ini juga bukan pemetaan tumpul - CLR mencoba menyesuaikan tipe WinRT dengan padanannya, jika memungkinkan. Jadi misalnya GUID, tanggal dan URI menjadi System.Guid, System.DateTimedan System.Uri, masing-masing; Antarmuka koleksi WinRT seperti IIterable<T>dan IVector<T>menjadi IEnumerable<T>dan IList<T>; dan seterusnya. Ini berlaku dua arah - jika Anda memiliki objek .NET yang mengimplementasikan IEnumerable<T>, dan meneruskannya kembali ke WinRT, itu akan melihatnya sebagai IIterable<T>.

Pada akhirnya, ini berarti bahwa aplikasi .NET Metro Anda mendapatkan akses ke subset dari perpustakaan .NET standar yang ada, dan juga ke pustaka WinRT (asli), beberapa di antaranya - khususnya Windows.UI- terlihat sangat mirip dengan Silverlight, berdasarkan API. Anda masih memiliki XAML untuk mendefinisikan UI Anda, dan Anda masih berurusan dengan konsep dasar yang sama seperti di Silverlight - binding data, sumber daya, gaya, template dll. Dalam banyak kasus, dimungkinkan untuk mem-port aplikasi Silverlight hanya dengan usingruang nama baru, dan men-tweak beberapa tempat dalam kode tempat API disesuaikan.

WinRT sendiri tidak ada hubungannya dengan HTML dan CSS, dan itu berhubungan dengan JavaScript hanya dalam arti bahwa itu juga diekspos di sana, mirip dengan bagaimana hal itu dilakukan untuk .NET. Anda tidak perlu berurusan dengan HTML / CSS / JS ketika Anda menggunakan pustaka WinRT UI di aplikasi .NET Metro Anda (well, saya kira, jika Anda benar-benar ingin, Anda dapat meng-host WebViewkontrol ...). Semua keterampilan .NET dan Silverlight Anda tetap sangat relevan dalam model pemrograman ini.


Bagaimana dengan kompatibilitas WPF-WinRT? Akankah ada semacam inkonsistensi WPF-Silverlight?
Den

5
@Den WPF bukan titik dasar perbandingan yang baik di sini - API jauh lebih dekat dengan Silverlight. Jika Anda melihatnya seperti itu, ada inkonsistensi antara keduanya, tetapi skalanya lebih dekat ke desktop vs WP7 Silverlight, bukan Silverlight vs WPF.
Pavel Minaev

11
Jawaban yang bagus Apakah WinRT mengakses kernel NT secara langsung (ketika membutuhkan dukungan OS) atau apakah ia pergi melalui Win32?
Timores


66

Dari keynote Build :

Tumpukan utama

Mereka menyediakan API umum untuk aplikasi HTML / CSS / JavaScript dan aplikasi C # / XAML. C # dan XAML akan digunakan, tetapi itu bukan WPF atau Silverlight.


8
Ini sedikit lebih terlibat, karena XAML baru tersedia untuk C # dan (asli) C ++. Ini bukan WPF atau Silverlight, tetapi sangat dekat dengan yang terakhir - seperti yang ditunjukkan pada keynote, Anda sering dapat pergi dengan hanya mengubah sekelompok usings dan refactoring sepele seperti lainnya dalam kode Silverlight yang ada. Gagasan inti di balik WPF / Silverlight - markup deklaratif, sumber daya, gaya, templat, binding data dll - semuanya ada di sana. Sebagian besar kontrol ada di sana juga.
Pavel Minaev

2
Ada grafik yang lebih baik di luar sana yang saya lihat pagi ini, tetapi saya tidak dapat menemukannya lagi. EDIT: Ditemukan, terima kasih atas jawaban lain untuk pertanyaan ini. dougseven.files.wordpress.com/2011/09/win8-new-platform.png
Chris

1
Di mana WPF cocok pada slide?
paparazzo

1
Ini dikelompokkan bersama dengan .NET / Silverlight cara di kanan bawah.
BoltClock

1
Gambaran itu sangat tidak benar, sejauh menyangkut potongan-potongan yang ada. Anda hampir dapat memperbaikinya dengan mengganti "Windows Kernel Services" dengan "Win32 kernel32.dll" dan "Win32" dengan "Win32 user32.dll + gdi32.dll" ... tetapi IE dan .NET / Silverlight harus berlapis sebagian besar di atas dari user32.dll + gdi32.dll, dan juga C / C ++ / Java / Delphi / etc juga menjangkau ke kernel32.dll. Yang penting adalah bahwa user32.dll dan gdi32.dll tidak mendasari WinRT, dan bahwa Windows Store Apps tidak dapat mencapai masa lalu WinRT langsung ke kekuatan penuh kernel32.dll.
Ben Voigt

37

Gagasan utamanya adalah sekarang ada dua jalur pengembangan - Desktop dan Metro.

  • Desktop adalah tempat aplikasi lama hidup.
  • Kelas aplikasi baru, aplikasi Metro, dapat dibangun dalam beberapa cara, termasuk oleh VB.NET, C # atau C ++. Tiga opsi bahasa ini dapat menggunakan XAML untuk membangun UI. Alternatifnya adalah menggunakan JavaScript / HTML5 / CSS untuk pengembangan UI dan kode aplikasi.

Beberapa poin penting:

  • Windows 8 terasa seperti OS ponsel yang ditingkatkan.
  • Di Metro, tidak ada jendela tingkat atas yang tumpang tindih, sama seperti tidak ada pada ponsel. Jika Anda menginginkan aplikasi gaya MDI, Anda harus tetap berada di desktop.
  • Aplikasi gaya metro secara otomatis ditangguhkan ketika tidak terlihat. Ini dilakukan untuk memperpanjang usia baterai. Ini berarti tidak masuk akal untuk banyak aplikasi desktop yang ada, yang melakukan pemrosesan latar belakang bahkan ketika pengguna tidak berinteraksi dengan mereka, untuk diangkut ke Metro.
  • Versi ARM Windows 8 tidak akan mendukung aplikasi desktop. Jadi jika Anda ingin menulis aplikasi dan Anda ingin bekerja pada versi Windows apa pun maka itu haruslah aplikasi Metro.

2
Di Metro, tidak ada jendela tingkat atas yang tumpang tindih . Masih ada Popup( msdn.microsoft.com/en-us/library/windows/apps/… ), jadi jika Anda mau, Anda bisa memasak sesuatu seperti MDI. Jelas tidak disarankan untuk menyalahgunakannya karena Anda berisiko berakhir dengan UI yang tidak ramah sentuhan.
Pavel Minaev

@Pavel - itu menarik - apakah itu berarti Anda dapat memiliki beberapa jendela tingkat atas yang berjalan berdampingan, tetapi tidak tumpang tindih? misalnya ubin ... masing-masing berbagi setengah layar? Aplikasi WPF yang saya kerjakan sekarang membutuhkan fungsi semacam ini.
dodgy_coder

3
Setiap aplikasi Metro hanya memiliki satu jendela tingkat atas. Anda dapat memiliki dua aplikasi Metro berjalan berdampingan, tetapi ini adalah sesuatu yang diputuskan pengguna - tidak ada cara bagi aplikasi untuk memaksa dirinya sendiri ke dalam konfigurasi ini. Selain itu, bahkan jika Anda memiliki dua aplikasi yang berjalan berdampingan, mereka tidak dapat berkomunikasi untuk berkoordinasi (kecuali melalui gerakan pengguna yang eksplisit seperti "Bagikan Ke").
Pavel Minaev

1
Di sisi lain, Anda dapat, tentu saja, membagi jendela tingkat atas tunggal Anda sendiri menjadi sebanyak mungkin area yang Anda inginkan, dan menyediakan pembagi yang dapat dipindahkan untuk mengubah ukurannya - yang, dari perspektif pengguna, akan terlihat seperti dua jendela tingkat atas ubin . Mereka masih akan muncul sebagai satu hal di pengalih aplikasi (tapi kemudian Anda mungkin menginginkannya?).
Pavel Minaev

3
Menurut Martyn Lovell, tidak ada mekanisme yang disengaja untuk itu, dan beberapa yang dapat digunakan untuk itu sengaja dibatasi. Pipa yang dinamai tidak ada, misalnya, juga file yang dipetakan memori. Ada soket (termasuk soket server), tetapi saat terhubung localhost, Anda hanya dapat terhubung ke aplikasi yang sama. Anda bisa menggunakan file normal di salah satu "folder yang dikenal" bersama (Dokumen, Gambar dll), tetapi itu adalah peretasan yang cukup kasar yang mengharuskan polling dan dapat dilihat oleh pengguna.
Pavel Minaev

24

Ada versi modifikasi dari arsitektur yang pasti akan membantu Anda memahami di mana tepatnya letak semua itu. Salah satu ninja Telerik mengobrol dengan tim CLR dan memodifikasi gambar:

Platform dan Peralatan Windows 8 (termasuk CLR)

Di sini Anda dapat melihat di mana posisi CLR. Kerangka .NET sekarang memiliki dua profil

1- .NET Metro profil (CLR yang berhubungan dengan aplikasi Metro)

2-. Profil Klien NET (runtime CLR untuk aplikasi C # dan VB.NET)

Saya harap ini memberi Anda gambaran yang lebih jelas. Baca artikel lengkapnya dalam Gambar yang buruk bernilai diskusi panjang. .


17

Banyak detail dari Microsoft di sini .

Windows Runtime terpapar menggunakan metadata API (file .winmd). Ini adalah format yang sama yang digunakan oleh .NET framework (Ecma-335). Kontrak biner yang mendasarinya memudahkan Anda untuk mengakses Windows Runtime APIs langsung dalam bahasa pengembangan pilihan Anda. Bentuk dan struktur API Windows Runtime dapat dipahami oleh kedua bahasa statis seperti C # dan bahasa dinamis seperti JavaScript. IntelliSense tersedia dalam JavaScript, C #, Visual Basic, dan C ++.

Singkatnya, Windows Runtime adalah kumpulan perpustakaan baru yang mengekspos fungsionalitas Windows dan tersedia untuk JavaScript / C # / VB / C ++. Setiap bahasa telah dibuat untuk memahami dan dapat memanggil mereka secara langsung daripada harus melalui beberapa lapisan pemogokan.

Silverlight dan WPF adalah rasa XAML yang berjalan pada CLR. Di antara fungsionalitas lain, Windows Runtime memperlihatkan versi XAML yang sangat mirip dengan Silverlight, tetapi melakukannya dengan cara asli, bukan melalui CLR. Itu dapat diakses dari CLR, tetapi juga dari C ++.


2
"Thunking layer" mungkin ada - misalnya CLR benar-benar menggunakan RCW - tetapi ini adalah detail implementasi sekarang. Dari perspektif dev, Anda secara langsung mereferensikan file Winwin .winmd, dan bekerja secara langsung dengan tipe di dalamnya.
Pavel Minaev

3
Sementara layer thunking memang menggunakan RCW, RCW untuk runtime windows lebih ringan daripada RCW P / Invoke lama.
ReinstateMonica Larry Osterman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.