it-swarm-vi.com

Sự khác biệt lớn nhất giữa F # và Scala là gì?

F # và Scala đều là các ngôn ngữ lập trình chức năng không buộc nhà phát triển chỉ sử dụng các kiểu dữ liệu bất biến. Cả hai đều có hỗ trợ cho các đối tượng, có thể sử dụng các thư viện được viết bằng ngôn ngữ khác và chạy trên máy ảo Cả hai ngôn ngữ dường như được dựa trên ML.

Sự khác biệt lớn nhất giữa F # và Scala mặc dù thực tế là F # được thiết kế cho .NET và Scala cho Java = nền tảng?

59
Jonas

Sự khác biệt chính :

  • Cả Scala và F # kết hợp lập trình hàm OO và lập trình hàm thành một ngôn ngữ. Cách tiếp cận của họ đối với việc thống nhất các mô hình là rất khác nhau. Scala cố gắng Cầu chì hai mô hình thành một (chúng tôi gọi đó là mô hình chức năng đối tượng), trong khi F # cung cấp hai mô hình cạnh nhau. Ví dụ: các loại dữ liệu đại số trong F # là các cấu trúc chức năng thuần túy không có OO'ness trong khi các ADT trong Scala vẫn là các lớp và đối tượng thông thường. (Lưu ý: Trong quá trình biên dịch thành mã byte CLR, thậm chí F # ADT trở thành các lớp và đối tượng nhưng chúng không hiển thị cho lập trình viên F # ở cấp nguồn.)

  • F # có kiểu suy luận kiểu Hindley-Milner đầy đủ. Scala có suy luận kiểu một phần. Hỗ trợ cho việc phân nhóm và thuần OO-ness làm cho kiểu suy luận kiểu Hindley-Milner không thể đối với Scala.

  • Scala là ngôn ngữ tối giản hơn nhiều so với F #. Scala có một tập hợp các cấu trúc trực giao rất nhỏ được sử dụng lại trong toàn bộ ngôn ngữ. F # dường như giới thiệu cú pháp mới cho mọi thứ nhỏ, do đó trở nên rất nặng cú pháp so với Scala. (Scala có 40 từ khóa, trong khi F # có 97. Điều đó sẽ cho bạn biết điều gì đó. :-)

  • F # là ngôn ngữ của Microsoft có hỗ trợ xuất sắc IDE dưới dạng Visual Studio. Mọi thứ không tốt lắm ở phía Scala. Trình cắm Eclipse vẫn chưa tối đa đối với nhãn NetBeans. IDEA dường như là đặt cược tốt nhất của bạn tại thời điểm này, mặc dù nó thậm chí không gần với những gì bạn nhận được với Java IDE. (Đối với người hâm mộ Emacs, có ENSIME. Tôi đã nghe rất nhiều điều hay về gói này, nhưng tôi chưa thử nó.)

  • Scala có hệ thống loại mạnh hơn (và phức tạp) hơn nhiều so với F #.


Khác biệt khác :

  • Các chức năng F # được mặc định theo chế độ. Trong Scala, cà ri có sẵn nhưng không được sử dụng rất thường xuyên.

  • Cú pháp của Scala là sự pha trộn của Java, Standard ML, Haskell, Erlang và nhiều ngôn ngữ khác. Cú pháp F # được lấy cảm hứng từ những cú pháp của OCaml, C # và Haskell.

  • Scala hỗ trợ các loại cao hơn và kiểu chữ. F # không.

  • Scala dễ sử dụng DSL hơn F #.


PS: Tôi yêu cả hai Scala và F #, và hy vọng chúng trở thành ngôn ngữ chính của nền tảng tương ứng của chúng trong tương lai. :-)

61
missingfaktor
  • F # được giải quyết trên các khía cạnh chức năng trong khi scala dựa trên các khía cạnh hướng đối tượng.
  • F # có tốt hơn IDE hỗ trợ với Visual studio while Trình cắm Eclipse của Scala dành cho nguồn mở IDE và tương đối chậm hơn.
  • F #, giống ML nhiều hơn Scala, có cảm giác tính toán lambda tối thiểu theo cách mà OCaml, ML chuẩn và Scheme có. F # dường như là một ngôn ngữ đơn giản hơn đáng kể.
9
Ayush Goyal

Một điểm nhỏ nhưng quan trọng là giấy phép: Scala là BSD (khá nhiều giấy phép phần mềm miễn phí được cho phép nhất), F # từng là "thỏa thuận cấp phép nguồn chia sẻ nghiên cứu của Microsoft" nhưng là quảng cáo sản phẩm hiện nay (theo @Lorenzo dưới đây, mặc dù tôi không thể tìm thấy thỏa thuận cấp phép cụ thể hơn ở bất cứ đâu).

0
Joonas Pulakka