Có điều gì đó khác biệt cơ bản về các ngôn ngữ cho phép F # có bảng điều khiển tương tác nhưng gây khó khăn khi triển khai nó cho C #?
Vâng.
F # là hậu duệ của ngôn ngữ lập trình ML, do đó bị ảnh hưởng nặng nề bởi các ngôn ngữ như Lisp và Scheme. Những ngôn ngữ được thiết kế từ ngày đầu tiên để có ba thuộc tính tốt đẹp.
Đầu tiên, những ngôn ngữ đó không thực sự có câu nói theo cách bạn nghĩ về chúng trong C #. Thay vào đó, hầu hết mọi thứ là một biểu thức có giá trị , do đó, một cơ chế đánh giá và sau đó in giá trị có ý nghĩa trong hầu hết mọi tình huống.
Thứ hai, những ngôn ngữ đó không khuyến khích lập trình với các tác dụng phụ, vì vậy bạn có thể đưa ra các đánh giá mà không phải lo lắng rằng bạn sẽ làm rối tung trạng thái toàn cầu.
Thứ ba, hầu hết các công việc bạn làm trong các ngôn ngữ đó là ở cấp độ cao nhất; thông thường không có không gian tên lớp kèm theo hoặc các khu vực tên khác nhau hoặc bối cảnh khác.
Ngược lại, C # nhấn mạnh luồng điều khiển lập trình với các câu lệnh tạo ra hiệu ứng phụ và các câu lệnh đó luôn nằm trong nhiều thùng chứa lồng nhau - một không gian tên, một lớp, một phương thức, v.v.
Vì vậy, đây là tất cả những điều mà làm cho nó khó khăn hơn cho C # để có một REPL, nhưng chắc chắn không phải bất khả thi . Chúng ta chỉ cần tìm ra ngữ nghĩa của các câu và biểu thức xuất hiện bên ngoài bối cảnh thông thường và ngữ nghĩa của các đột biến thay đổi ràng buộc tên là gì, v.v.
Tại sao F # có chế độ tương tác mà không phải là C #?
Bởi vì nhóm F # đã quyết định rằng có một vòng lặp REPL là một kịch bản ưu tiên cho họ. Nhóm C # trong lịch sử không có. Các tính năng không được triển khai trừ khi chúng là các tính năng ưu tiên cao nhất phù hợp với ngân sách; cho đến bây giờ, REPL C # vẫn chưa đứng đầu danh sách của chúng tôi.
Dự án Roslyn có REPL C # (và cuối cùng cũng sẽ có REP REPL, nhưng nó chưa sẵn sàng.) Bạn có thể tải xuống bản phát hành xem trước của nó để xem bạn thích nó như thế nào tại
http://www.microsoft.com/en-us/doad/details.aspx?id=27746