Tại sao Scala có khả năng mở rộng hơn các ngôn ngữ khác?


12

Scala được coi là ngôn ngữ có thể mở rộng, một tính năng thậm chí được bao gồm trong tên của nó :

Tên Scala là một danh mục của "ngôn ngữ có thể mở rộng" và "ngôn ngữ", biểu thị rằng nó được thiết kế để phát triển với nhu cầu của người dùng.

"Khả năng mở rộng" có nghĩa là gì trong bối cảnh của Scala? Điều gì làm cho Scala có khả năng mở rộng hơn, nói, Java?


5
Scala không thể mở rộng theo cách bạn nghĩ: bạn thực sự nên đọc cuộc phỏng vấn của các nhà phát triển Twitter về Scala / Java ... Về cơ bản mỗi khi họ gặp vấn đề về khả năng mở rộng (thực), cuối cùng họ đã xóa mã Scala và đưa vào đa luồng chính xác Mã Java (như đã được chỉ ra ở đây, dễ thực hiện hơn trong Java so với Scala). Scala là tuyệt vời cho các bài kiểm tra đơn vị đánh máy và viết trước và bất cứ điều gì không liên quan đến lượng dữ liệu "Thế giới thực" [TM] đã nói.
Tristan St.

5
Viết mã đa luồng chính xác trong Java dễ hơn so với Scala? làm sao vậy
Aaron Novstrup

@Webinator Bạn có liên kết đến cuộc phỏng vấn không?
Aaron Novstrup

Đồng ý với Tristan St về khả năng mở rộng. Erlang là nhà lãnh đạo của gói trong trường hợp lập trình đồng thời do khả năng tạo các quy trình trong thời gian tối thiểu. Bạn không thể tạo hơn 10000 chủ đề và tương tác với nhau trong SCALA theo cách bạn nghĩ.
Ubermensch

3
@TristanSt. Sự lan truyền tuyệt vời của FUD, đó hoàn toàn không phải là sự lấy đi cơ bản mà tôi có được từ cuộc phỏng vấn đó. - "Nhưng đối với các bộ phận khác, chúng tôi vừa quay lại mô hình luồng Java truyền thống. Kỹ sư làm việc về điều đó, John Kalucki, chỉ thấy nó dễ kiểm tra hơn một chút, dễ đoán hơn một chút. Điều tuyệt vời là, nó mất vài phút để chuyển mã là diễn viên dựa trên chủ đề nào đó. Đó là một vài tìm kiếm và thay thế. Vì vậy, sẽ không tệ lắm nếu diễn viên thất bại vì bất kỳ lý do gì. " Khái niệm tuyệt vời - một số thứ phù hợp với mô hình diễn viên và một số thì không!
Derek Litz 17/03/2016

Câu trả lời:


14

Khi Martin Oderky nói về scala như một lựa chọn ngôn ngữ có thể mở rộng, điều ông muốn nói là chính ngôn ngữ đó phù hợp với:

  • kịch bản
  • viết ứng dụng
  • viết các ứng dụng "doanh nghiệp" (vì muốn có một từ tốt hơn)

Ông chắc chắn không đề cập đến khả năng mở rộng từ góc độ hiệu suất!

Thực tế là anh ta có thể tuyên bố rằng scala phù hợp với kịch bản nhanh chóng vì nó dành cho việc triển khai doanh nghiệp quy mô lớn đại khái như sau:

Viết kịch bản

Scala là tuyệt vời cho kịch bản bởi vì kiểu suy luận và phong cách chức năng của nó làm cho nó vừa súc tích vừa tuyệt vời để cắt và cắt các bộ sưu tập, v.v.

Các ứng dụng

Scala rất tốt cho việc viết các ứng dụng vì đây là ngôn ngữ được kiểm tra kiểu tĩnh với một số tính năng tuyệt vời để làm việc theo cả hai phong cách chức năng và mệnh lệnh. Scala tương thích với Java và do đó bạn có thể tận dụng một hệ sinh thái khổng lồ của các thư viện.

Triển khai doanh nghiệp

Scala biên dịch thành mã byte và chạy trên Máy ảo Java, một hệ thống ổn định với hiệu năng tuyệt vời, khi so sánh với (được gọi là) ngôn ngữ được gõ động (tức là chưa được gõ). Một lần nữa, thực tế là nó được gõ tĩnh có nghĩa là việc tái cấu trúc được thực hiện dễ dàng hơn nhiều trên các cơ sở mã lớn.


Bất kỳ bằng chứng hỗ trợ nào cho "gõ tĩnh có nghĩa là tái cấu trúc được thực hiện dễ dàng hơn nhiều trên các cơ sở mã lớn"? Nghe giống như một "nó phụ thuộc", tình huống sau đó là một thực tế. Điều duy nhất tôi thấy các ngôn ngữ đánh máy cung cấp dứt khoát là chúng dễ dàng hơn đối với các nhà văn trình biên dịch.
Derek Litz 17/03/2016

21

Những gì Oderky nói là (Slide 11, http://www.sl slideshoware.net/rawwell/scalaliftoff2009pdf ):

"Scala là sâu nơi mà các ngôn ngữ khác là rộng."

Điều này có nghĩa, khả năng mở rộng có nghĩa là về tính linh hoạt và tính biểu cảm. Bạn có thể tạo cấu trúc điều khiển của riêng bạn. Ví dụ, các khung diễn viên là một thư viện, nhưng có vẻ như nó sử dụng các tính năng ngôn ngữ.

Điều này có nghĩa là Scala sẽ mở rộng theo mức độ trừu tượng cần thiết, không nhất thiết là về mặt "trả lời 1.000.000 yêu cầu trong một giây" (nhưng Scala cũng ở đây rất mạnh).


1
+1 điều này thực sự phù hợp với "LAAluage". Đó là một ngôn ngữ được thiết kế để phát triển theo nhu cầu của nhà phát triển.
Ben James

11

Điều gì làm hạn chế khả năng mở rộng của Java trong thực tế không phải là JVM, đó là khó khăn trong việc viết mã đồng thời chính xác. Scala làm cho điều này dễ dàng hơn thông qua việc hỗ trợ lập trình chức năng và mô hình diễn viên.

Java có thể rất có khả năng mở rộng khi đồng thời dễ dàng, chẳng hạn như trong các máy chủ web (mỗi yêu cầu gần như hoàn toàn độc lập). Nhưng khi nói đến việc song song hóa một nhiệm vụ dài hạn, nó có thể là một cuộc đấu tranh thực sự để có được quyền.


Mặc dù Java không hỗ trợ lập trình chức năng, nhưng điều này không có nghĩa là bạn không thể sử dụng nó trong Java. Làm như vậy có thể cung cấp cho bạn nhiều khả năng mở rộng tương tự, mặc dù để nỗ lực nhiều hơn. Một thư viện có thể giúp code.google.com/p/lambdaj
Peter Lawrey

2
Khả năng mở rộng mà Scala sở hữu tên của nó là của ngôn ngữ , không phải của các chương trình.
Daniel C. Sobral


6

Điều đó không cần thiết bản thân ngôn ngữ có khả năng mở rộng hơn Java, như bạn nói cả hai ngôn ngữ có thể tạo ra cùng một mã byte.

Nhưng mô hình Actor và phong cách lập trình chức năng có thể tăng cường khả năng mở rộng (bằng cách tóm tắt - đơn giản hóa việc lập trình đồng thời chính xác và giảm nhu cầu đồng bộ hóa).

Để hiểu rõ hơn, hãy xem mô hình diễn viên và so sánh nó với ứng dụng java đa luồng truyền thống:

Thậm chí, bạn có thể sử dụng khung Akka để tạo ứng dụng Java có khả năng mở rộng cao mà không cần mã hóa trong Scala:


Thư viện diễn viên là một ví dụ điển hình về cách Scala có thể mở rộng, nhưng ví dụ này không liên quan đến đồng thời: API diễn viên trông giống như một tính năng gốc với các toán tử đặc biệt (chẳng hạn như! Message-send), nhưng thực sự tất cả chỉ là cuộc gọi phương thức thường xuyên.
Ben James

Mô hình diễn viên giúp bạn viết phần mềm có thể mở rộng mà không quá đau đớn và không quá đau đầu đồng thời, phải không? vì vậy ngay cả khi bạn không nhìn thấy nó khi sử dụng Diễn viên, hãy đồng thời làm điều gì đó với mô hình diễn viên. Mô hình diễn viên nhằm mục đích đơn giản hóa tính toán đồng thời, vậy tại sao ví dụ này không liên quan gì đến đồng thời ... Tôi không hiểu ý của bạn ở đây?
Alois Cochard

Nhận xét của tôi đã không thành công từ, xin lỗi. câu trả lời của llemieng hoặc michael.kebe giải thích nó tốt hơn.
Ben James

Không vấn đề gì ! Bây giờ tôi hiểu quan điểm của bạn, tôi chỉ nói về khả năng mở rộng thư viện Scala chứ không nói về khả năng mở rộng ngôn ngữ / tính năng đồng thời của chính nó. Cảm ơn
Alois Cochard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.