2011-09-19 26 views
28

Từ hình ảnh bên dưới, Nền tảng và công cụ Windows 8. Tôi biết điều này có nghĩa là tôi có thể sử dụng C++, C# hoặc JavaScript cho ứng dụng kiểu Metro. Tôi cũng xem một số phát biểu quan trọng của xây dựng và tôi có vài câu hỏi ở đây.C++, C# và JavaScript trên WinRT

Windows 8 Platform and Tools http://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  1. Họ có bất kỳ sự khác biệt trong C++, C# và JavaScript trên WinRT, ví dụ Hiệu suất, tính năng, khả năng, vv ..
  2. Làm cách nào để tạo ứng dụng Metro gốc bằng JavaScript, tôi có cần sử dụng thư viện js từ MS hoặc tôi có thể sử dụng bất kỳ js nào mà tôi quen thuộc không, ví dụ jQuery.
  3. Trong ứng dụng kiểu Metro, Dịch vụ hệ thống chỉ là WinRT, điều này có nghĩa là tôi không thể sử dụng dll cấp thấp nữa không? Điều này sẽ đi kèm với chi phí hiệu suất?
+1

Về # 2 họ nói trong bài phát biểu rằng jquery được hỗ trợ và (IIUC) sẽ được vận chuyển cùng với VS. – CAFxX

Trả lời

2
  1. Sự khác biệt giống như chúng luôn có. Không có thứ như C# không có quản lý bộ nhớ tự động. Ngôn ngữ được quản lý sẽ có chi phí tương tự như mọi khi.

  2. Nếu chạy Javascript, bạn sẽ có thể sử dụng jQuery (JavaScript thuần túy). Bạn có thể cần phải gọi một số chức năng MS để khởi tạo, vv, nhưng các hàm script hiện có phải vẫn chạy.

  3. Các nguồn đáng tin cậy nhất mà tôi đã thấy đã chỉ ra rằng (ít nhất là hầu hết) WinRT nằm trên đỉnh của Win32. Khối "Dịch vụ hạt nhân Windows" đó là số kernel32.dll của Win32. Một số công cụ Win32 cấp cao không được sử dụng trong Metro, nhưng ứng dụng nào đã từng sử dụng TẤT CẢ Win32?

+0

Re "Bạn có thể cần phải gọi một số chức năng MS để khởi tạo" - trong thử nghiệm của tôi, tôi có thể xóa tất cả các tệp .js khỏi dự án ứng dụng web Metro mới được tạo và thay thế HTML bằng trang trống - và nó vẫn hoạt động, trong khi nó được đóng gói, triển khai và chạy. Vì vậy, tôi nghĩ bạn có thể lấy đi mà không cần bất kỳ cuộc gọi WinRT nào cả. –

0

Góp ý:

  • Tại sao bạn không tải về bản xem trước phát triển và tìm kiếm cho mình:

http://msdn.microsoft.com/en-us/windows/apps/br229516

Sự kiện:

  • Tất nhiên bạn vẫn có thể sử dụng Win32 .dll (ở một mức độ khác), giống như bạn có thể với .Net.

  • Windows 8 chính thức hơn một năm: không có cách nào để nói vào thời điểm này "tính năng" và "khả năng" cụ thể sẽ nằm trong bản phát hành cuối cùng.

+1

"Tất nhiên bạn vẫn có thể sử dụng Win32 .dll" - Không, bạn không thể –

3

1) Điểm cho phép lựa chọn ngôn ngữ là cho phép bạn chọn ngôn ngữ cho những lợi thế nội tại của ngôn ngữ chứ không phải vì đó là cách duy nhất để truy cập API. Nếu bạn thích các ngôn ngữ động, hãy chọn JavaScript. Nếu bạn thích gõ tĩnh, nhưng không muốn xử lý bộ nhớ, hãy sử dụng C#. Nếu bạn muốn thực hiện nhanh nhất (nhưng khả năng nhất để tự bắn mình vào chân), hãy chọn C++.

2) Điều đó phụ thuộc vào ý bạn là người gốc. Nếu bạn chỉ có nghĩa là bạn muốn họ trông giống như các ứng dụng phong cách Metro, cách tốt nhất là sử dụng các thư viện WinJS đi kèm với SDK xem trước nhà phát triển.

3) WinRT cung cấp cho bạn khả năng viết và gọi riêng C++ DLL hoặc C# Assemblies từ mã JavaScript của bạn. Hạn chế là bạn phải trưng ra DLL như một đối tượng WinRT và bạn không thể gọi bất kỳ chức năng nào không được phép sử dụng trong các ứng dụng kiểu Metro.

43

Về số 1, dòng sản phẩm sẽ gần như sau:

JavaScript - cao nhất, được nhập động, GC. Bạn chỉ có thể sử dụng HTML5/CSS cho giao diện người dùng của mình, khung công tác XAML (không gian tên Windows.UI.XAML) không khả dụng. Cung cấp một số API JS tiêu chuẩn (được chỉ định bởi HTML5) ngoài bề mặt có sẵn của WinRT, chẳng hạn như lưu trữ cục bộ hoặc IndexedDB. Được gõ động, quá trình xử lý CPU nặng có thể chậm hơn .NET hoặc C++, mặc dù động cơ JS vẫn rất nhanh do được biên dịch JIT và được tối ưu hóa rất nhiều. Bạn có thể tiêu thụ các thành phần C++ và .NET WinRT, nhưng không viết riêng của bạn trong JS. Một số khía cạnh của phép chiếu ngôn ngữ dường như bị giới hạn tương ứng - ví dụ: cho đến nay tôi có thể thấy, chẳng có cách nào để thực hiện một giao diện WinRT trong JS, ví dụ. Các thư viện JS hiện có thường có thể được tái sử dụng mà không cần hoặc tốn ít công sức, miễn là chúng hoạt động trong IE10.

.NET (C#/VB) - ở mức trung bình, được nhập tĩnh với tính năng nhập động tùy chọn (dynamic từ khóa v.v.) và GC. Giao diện người dùng XAML là khung mặc định cho giao diện người dùng, nhưng bạn cũng có thể sử dụng HTML bằng cách sử dụng điều khiển WebView. Cung cấp quyền truy cập đầy đủ vào thư viện WinRT, nhưng cũng có một số đặc điểm riêng của nó, đôi khi thuận tiện hơn để sử dụng (ví dụ: StreamIInputStream/IOutputStream). Ngoài ra, chỉ có một hỗ trợ mức ngôn ngữ đặc biệt cho các hoạt động không đồng bộ (asyncawait từ khóa), được sử dụng nhiều khi sử dụng API WinRT do thiết kế không đồng bộ cao. Nói chung, cung cấp hầu hết cú pháp đường - ngoài công cụ không đồng bộ, bạn sẽ nhận được LINQ to objects (hoạt động trên các bộ sưu tập WinRT). Có thể viết các thành phần WinRT của riêng bạn, sau đó có thể được sử dụng từ JS hoặc C++/CX. Các thư viện .NET hiện có có thể hoặc không thể tái sử dụng được, tùy thuộc vào những lớp nào trong .NET Framework mà chúng dựa vào; các thành phần được viết cho Silverlight hoặc WP7 có nhiều khả năng được tái sử dụng mà không có hoặc thay đổi tối thiểu, trong khi các thành phần được viết cho .NET 4 Full hoặc Hồ sơ khách hàng có thể yêu cầu thay đổi đáng kể để chạy.

C++/CX (Phần mở rộng thành phần Visual C++) - thấp/trung cấp, được nhập tĩnh, không chỉ GC - chỉ đếm ngược. Gần nhất "với kim loại" ở chỗ mô hình đối tượng của nó được thiết kế để ánh xạ trực tiếp tới WinRT mà không có sự không phù hợp trở kháng - do đó vẫn nạp tiền - nhưng vẫn đủ cao để tránh boilerplate và nói chung là an toàn để sử dụng (ví dụ ngoại lệ hơn là HRESULTs, làm đối tượng và không xử lý, dynamic_cast thay vì QueryInterface v.v.). Không có lớp bổ sung, đối tượng proxy, vv giữa bạn và WinRT, tất cả các cuộc gọi đều trực tiếp. Trong hầu hết các trường hợp, nhanh nhất trong cả ba trường hợp, mặc dù sự khác biệt chính xác thay đổi đáng kể tùy thuộc vào nhiệm vụ cụ thể và có thể trừ đi một số (ví dụ: ứng dụng hướng sự kiện không có hoặc ít tính toán) và đáng kể cho những người khác (ví dụ: phân tích cú pháp hoặc toán học nặng)). Câu chuyện giao diện người dùng giống với .NET. Ngoài ra, bạn nhận được toàn bộ thư viện chuẩn C++ có sẵn cho bạn, cũng như một tập con của ATL. Có thể viết các thành phần WinRT của riêng bạn, sau đó có thể được sử dụng từ JS hoặc .NET. Các thư viện C++ hiện tại có thể hoặc không thể tái sử dụng được, tùy thuộc vào các API mà chúng sử dụng; những người dựa hoàn toàn vào tiêu chuẩn C/C++ thường sẽ không hoạt động mà không có thay đổi, trong khi những người gọi API Win32 có thể gây ra vấn đề nếu họ dựa vào API không có sẵn trong vùng chứa ứng dụng Metro.


Về # 3, bộ phim này - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C - nên trả lời hầu hết các câu hỏi của bạn liên quan đến việc sử dụng Win32 (mà tôi đoán những gì "ở mức độ thấp DLL" có nghĩa là) từ các ứng dụng Metro. Lưu ý rằng trong khi video là về C++, điều này cũng áp dụng đầy đủ cho C#, như P/Invoke và COM Interop vẫn còn đó. Vì vậy, nếu bạn có thể gọi nó từ C++, bạn có thể gọi nó từ C#.

+0

C++/CX đang thêm một lớp bổ sung, nếu nó dịch 'HRESULT' thành ngoại lệ. Có lẽ cũng có khả năng sử dụng native C++, và sử dụng WinRT giống như bất kỳ đối tượng COM nào khác, hoàn toàn không có các lớp bao bọc. –

2

Những người khác đã giải thích sự khác biệt giữa 3 giếng tùy chọn, vì vậy tôi sẽ không lặp lại nó.

Tuy nhiên tôi nghĩ rằng nó đi kèm thực hiện để:

  • Chọn bạn biết
  • Chọn những gì cho phép bạn sử dụng lại mã nhất

Vì vậy

  • Nếu bạn là một lập trình viên .net sau đó sử dụng C# hoặc VB.Net
  • Nếu bạn đang porting một ứng dụng từ các cửa sổ điện thoại sử dụng C# hoặc VB.NET
  • Nếu bạn có một C++ cơ sở mã lớn, sau đó xem xét sử dụng không được quản lý C++ với WinRT
  • Nếu bạn có một trang web và muốn cung cấp một phiên bản ngoại tuyến của nó, bạn có thể sử dụng lại mã (và kỹ năng) tốt bằng cách sử dụng JavaScript với HTML
  • Nếu bạn như JavaScript và HTML, nhưng không thích .Net thì sử dụng….
  • Etc
Các vấn đề liên quan