Trong bản phát biểu và bản trình diễn của Build 2011, họ luôn nói về C++, C#, Visual Basic và JavaScript. Tôi không thể xây dựng ứng dụng kiểu Metro với F #? Hoặc là nó an toàn để nói rằng nếu nó làm việc với C#, sau đó nó hoạt động với F # là tốt?Ứng dụng kiểu Metro với F #?
Trả lời
Hoặc là nó đủ điều kiện để nói nếu nó hoạt động với C# thì nó hoạt động với F #?
Vâng, đó là cách nó được cho là hoạt động. Ngoài javascript và C/C++, mọi ngôn ngữ CLS tương thích chạy trên đầu CLR sẽ có quyền truy cập vào API WinRT.
Đáng tiếc là trong VS 2011 Express phiên bản bạn không nhận được hỗ trợ công cụ nhưng tôi đoán này sẽ được bổ sung dần dần hoặc các phiên bản khác:
Don nói về vấn đề này một chút xung quanh 07:40 vào cuộc nói chuyện của anh ấy.
Tuyệt vời, cảm ơn vì liên kết. – jeha
Tôi có cùng một câu hỏi và tạo ra một bài viết trên blog: Create a Metro App in F# (NOT)
Có một vài vấn đề:
- Bạn không có thể tham khảo thông thường NET dll của (ngay cả trong C#). Họ phải được biên dịch lại với một “tham chiếu” cho WinRT. Bởi vì điều này bạn không thể tham chiếu F # dll. Tôi nghĩ rằng điều này sẽ được giải quyết khi F # 3.0 được phát hành (nguồn: Hiểu F # slide từ Don Syme tại số xây dựng).
- Khả năng từ F # để tạo ứng dụng Metro. Đây phải là do nhóm F # xây dựng. Đây là một câu hỏi mở. Đây là cách tiếp cận tất cả-F # (Trong WPF nó là ngày hôm nay có thể nhưng không được khuyến khích).
- Hỗ trợ công cụ để tạo dự án đầu cuối Metro. Điều này sẽ không xảy ra đối với phiên bản F # 3.0. (nguồn: Hiểu F # slide từ Don Syme tại số xây dựng).
Sử dụng Visual Studio 11 Developer Preview (Đầy đủ, không thể hiện), tôi đã có thể tham khảo và chạy F # mã từ một ứng dụng phong cách C# Metro với các chú ý sau đây:
Bạn sẽ nhận được một xây dựng cảnh báo nói rằng dự án không thể được tham chiếu, mặc dù Visual Studio vẫn sẽ cho phép bạn thêm nó.
Bạn phải xóa tất cả các tham chiếu đến tất cả các DLL trong dự án F #, bao gồm FSharp.Core.
Bằng cách làm theo các bước này có thể chạy mã F # từ ứng dụng C# Metro, nhưng gần như không thể viết bất kỳ mã hữu ích nào trong F # mà không tham chiếu đến thư viện ngôn ngữ chính. Hãy hy vọng họ cập nhật các thư viện để tương thích với WinRT.
Câu hỏi đã được trả lời ở đây: Windows 8 and F# Mặc dù bạn không thể tạo và thiết kế Metro apps trực tiếp trong F #, bạn vẫn có thể tạo ra cái gọi là thư viện di động trong F # với tất cả các mô hình và ViewModels và sử dụng nó trong một dự án tàu điện ngầm. Nó không lý tưởng, nhưng nó hoạt động.
Tôi đã chuyển thư viện biểu đồ chứng khoán của mình cho .NET3.5-4.0 sang Thư viện di động, nó hoạt động khá tốt trên Metro với ứng dụng C# Metro và một số cầu nối Metro UI của tôi. Tôi tin rằng tôi có thể sử dụng F # để làm cho ứng dụng Metro ở nhiều nơi.
Nó không phải là khá dễ dàng. Đúng, phép chiếu thời gian là hoàn toàn minh bạch đối với bất kỳ thứ gì biên dịch sang IL, nhưng hầu hết các trình biên dịch cũng cần tải thông tin kiểu từ các assembly tại thời gian biên dịch (để kiểm tra kiểu). Điều này có nghĩa là có thể đọc và phân tích cú pháp các tệp .winmd, có một vài phần mở rộng so với các cụm từ vanilla CLI. Hơn nữa các tệp .winmd mô tả các kiểu WinRT như, không áp dụng các quy tắc chiếu CLR - ví dụ: nếu bạn đọc chúng, bạn sẽ thấy một kiểu thực thi 'IIterable' giao diện WinRT, nhưng tại thời gian chạy CLR sẽ ánh xạ nó tới 'IEnumerable '. Vì vậy, hỗ trợ trình biên dịch là cần thiết. –