2014-07-24 18 views
9

Vì cây cú pháp của Roslyn là bất biến, và làm việc với các trình biên dịch về cơ bản là tất cả về các phép biến đổi (chính xác là lập trình hàm nào là tốt), tôi nghĩ với Roslyn trong F # có thể là một ý tưởng tuyệt vời.
Vì vậy, có khả thi để kết hợp Roslyn và F # không? Có ai đã thử nó trước đây không? Liệu nó có bất kỳ lợi thế hơn bằng cách sử dụng C#? Và nếu có thể, tôi có bắt đầu học F # không?

PS: Tôi có một số kinh nghiệm về lập trình chức năng với Đề án và tôi hiện đang học Haskell, nhưng tôi chưa nếm thử F #.
Sử dụng Roslyn trong F #

+0

Tôi biết 'Roslyn' áp dụng' C# ', nhưng thẻ đó (' C# ') áp dụng cho câu hỏi này như thế nào? –

+2

Nguyên nhân ở vị trí đầu tiên là tất cả về thao tác mã C# và cây cú pháp! Mặc dù tôi có thể thấy quan điểm của bạn. – Rsh

Trả lời

13

Tôi nghĩ rằng bản thân mình sử dụng Roslyn trong F # có thể là một ý tưởng tuyệt vời.

Đó chắc chắn là một ý tưởng tuyệt vời. Một số người đã tự hỏi tại sao Roslyn không được viết bằng F # vì ngôn ngữ rất tốt cho việc viết trình biên dịch (xem http://neildanson.wordpress.com/2012/12/24/the-roslyn-incident/ để tham khảo).

Rất dễ dàng để khớp mẫu trên AST Roslyn khi bạn xác định một tập hợp các composable active patterns. Xem https://gist.github.com/jbevain/01a083c07010bc7b7cd0 như một ví dụ thuyết phục. Kể từ khi AST Roslyn là bất biến, bạn cũng có thể tạo ra combinators để biến đổi chúng dựa trên mục đích của bạn. Các công đoàn phân biệt đối xử có thể được sử dụng như các kiểu dữ liệu ngay lập tức nếu mục tiêu là nhổ ra C# ASTs một lần nữa.

Nhược điểm của việc sử dụng F # là bạn không tìm thấy nhiều ví dụ hoàn chỉnh bằng cách sử dụng API Roslyn trong F #. Chúng tôi có kế hoạch sơ bộ để integrate Roslyn vào Visual F# Power Tools. Giả sử bạn có một giải pháp C#/F # hỗn hợp; nếu bạn muốn đi đến các định nghĩa cho một biểu tượng C# từ một dự án F #, Roslyn là cần thiết để xử lý mã C# cho mục đích đó. Tuy nhiên, điều này đòi hỏi một lượng lớn công việc; Tôi không biết có ai đang làm việc trên nó không.

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