Cả hai ngôn ngữ đều là JVM dựa trên sự hỗ trợ mạnh mẽ cho lập trình hàm. Tôi biết rằng sẽ có một lớp lớn các vấn đề mà cả hai ngôn ngữ sẽ cung cấp các giải pháp tuyệt vời .. Điều tôi muốn biết là nếu có bất kỳ loại vấn đề cụ thể nào mà các tính năng của Clojure sẽ cho nó một lợi thế đáng chú ý đối với Scala và ngược lại. Hiện tại chúng tôi làm rất nhiều công việc của chúng tôi ở Scala nhưng tôi muốn tìm kiếm các không gian vấn đề cụ thể nơi Clojure có thể cung cấp giải pháp tốt hơn.Lớp học nào của vấn đề là Clojure tốt/xấu trong việc giải quyết Scala vis-a-vis?
Trả lời
Cả hai ngôn ngữ đều rất có khả năng và phù hợp với hầu như tất cả các miền. Bạn không thể đi sai với ngôn ngữ nào cả - tôi đã đi xa đến mức có thể nói rằng họ có lẽ là hai ngôn ngữ hứa hẹn nhất hiện nay.
tôi vẫn nghĩ rằng có một vài lĩnh vực mà họ từng có lợi thế đặc biệt: những điểm mạnh đặc biệt
Clojure của liên quan đến Scala:
- Concurrency - Clojure đã hỗ trợ đồng thời độc đáo và rất mạnh mẽ được xây dựng vào ngôn ngữ, dựa trên một cách suy nghĩ mới về nhận diện đối tượng và trạng thái có thể thay đổi. Điều này đã được giải thích rất tốt ở nơi khác vì vậy tôi sẽ không đặc biệt đi vào chi tiết ở đây, nhưng điều này video by Rich Hickey là một nơi tuyệt vời để có được một số hiểu biết.
- Lập trình meta - Clojure là ngôn ngữ homoiconic làm cho nó đặc biệt thích hợp cho lập trình meta dựa trên macro, tạo DSL và tạo mã. Nó tuân theo triết lý "mã hóa dữ liệu" của Lisp về mặt này.
- động gõ - Clojure là một ngôn ngữ năng động, với tất cả những ưu điểm thường đi kèm với các ngôn ngữ động (ít soạn sẵn, tạo mẫu nhanh, mã rất ngắn gọn, vv)
- lập trình chức năng - mặc dù bạn có thể làm FP trong Scala, Clojure chắc chắn cảm thấy giống như một langauge chức năng (trong khi Scala có lẽ là mô tả tốt nhất là đa mô hình). Sự nhấn mạnh chức năng này trong Clojure thể hiện bằng nhiều cách, ví dụ được xây dựng trong hỗ trợ đánh giá lười biếng trên tất cả các thư viện cốt lõi, tất cả các cấu trúc dữ liệu đều không thay đổi, Clojure thành ngữ "coding style" là chức năng hơn là bắt buộc/OOP.
mạnh đặc biệt của Scala so với Clojure:
- Object hướng - Scala là khái niệm gần gũi hơn với Java và có hỗ trợ tốt hơn cho các phương pháp OOP Java-style. Trong khi bạn có thể làm OOP trong Clojure, nó không phải là một sự phù hợp thoải mái.
- cú pháp quen thuộc - cú pháp Scala có lẽ sẽ thoải mái hơn với những người đến từ ngôn ngữ không phải Lisp khác
- tĩnh gõ - Scala có một hệ thống kiểu tĩnh rất tinh vi. Trong trường hợp gõ tĩnh là lợi thế, Scala sẽ có một cạnh rõ ràng. Các lợi thế thông thường của việc gõ tĩnh áp dụng - trình biên dịch có thể bắt được nhiều lỗi "loại" hơn, trình biên dịch có nhiều cơ hội hơn để thực hiện tối ưu hóa hiệu suất, v.v.
- trưởng thành hơn - Scala dài hơn Clojure một chút (2003 so với . 2007), và kết quả là có một số lợi ích mà bạn mong đợi từ một ngôn ngữ trưởng thành hơn (hỗ trợ công cụ tốt hơn, cộng đồng lớn hơn một chút)
Để hoàn thiện, có một số lợi thế đặc biệt mà cả hai ngôn ngữ chia sẻ:
- cộng đồng tích cực và sáng tạo - cả hai ngôn ngữ đã xây dựng được một cộng đồng năng động với một loạt các đóng góp
- khả năng tương tác tuyệt vời với Java - cả hai ngôn ngữ có thể dễ dàng tận dụng các mảng lớn các thư viện và các công cụ trong hệ sinh thái Java
- lợi thế JVM - cả hai ngôn ngữ được hưởng lợi từ tất cả các kỹ thuật tuyệt vời trong JVM (biên dịch JIT, các thuật toán thu gom rác thải, môi trường thực thi tối ưu hóa, vv)
Tôi thích sử dụng Clojure để viết DSL vì hệ thống macro của Clojure. Ngoài ra, tôi thích Clojure cho một số loại hệ thống đồng thời. Hỗ trợ bản địa của Clojure cho software transactional memory hoàn toàn khác với mô hình diễn viên của Scala.
Clojure không có hỗ trợ tuyệt vời cho lập trình hướng đối tượng. Đối với các dự án mà mô hình hướng đối tượng hoạt động tốt, hoặc bạn sẽ dựa chủ yếu vào các thư viện/khung công tác Java, tôi thích Scala hơn.
Câu trả lời hay, mặc dù Scala tốt hơn cho các DSL tự nhiên hơn (ít hơn (parenthetical)). –
Lưu ý rằng [Akka] (http://akka.io/) cung cấp [hỗ trợ STM] tương tự (http://akka.io/docs/akka/1.2/scala/stm.html) cho Scala/Java. –
@Duncan - lưu ý rằng Clojure DSL không cần phải có bất kỳ dấu ngoặc đơn nào ngoài hàm macro/hàm bạn quấn chúng vào bên trong. Bạn có thể dễ dàng viết một DSL mà đã làm một cái gì đó như (giải quyết-phương trình-rễ [x] "0,5x^3 - 6x^2 + 2x -1 = sin x") ví dụ – mikera
Một trong những điều tuyệt vời về Clojure và Scala là bạn có thể sử dụng cả hai trong số đó ở cùng một nơi, với ma sát tối thiểu. Tôi chỉ đề nghị thực hiện hầu hết các interop trong Clojure, vì tôi nghĩ rằng nó có một cạnh ở đó.
Chỉ cần thử cả hai và xem những vấn đề và ngôn ngữ nào phù hợp với nhau. Bạn luôn có thể tương thích giữa mã Java, Scala và Clojure trong cùng một hệ thống rất dễ dàng.
Interop với cái gì? – soc
Interop giữa các ngôn ngữ trên JVM. I E. Clojure sử dụng Java, Java sử dụng Scala, Scala sử dụng Clojure, v.v. –
Khá lạ. Tôi thường nghe tuyên bố này rằng Clojure có sự tương tác tốt hơn, nhưng tiếc là điều này không bao giờ được hỗ trợ bởi bất kỳ sự kiện thực tế nào. – soc
- 1. Giải quyết vấn đề về lớp học trong Spring 3
- 2. JXL giải quyết vấn đề #VALUE
- 3. cách giải quyết vấn đề bế tắc?
- 4. Làm cách nào để giải quyết việc nhấn đúp vào Vấn đề nút trong Android?
- 5. Cách giải quyết vấn đề javax.mail.AuthenticationFailedException?
- 6. Vấn đề Django trong việc giải quyết các ký tự đặc biệt trong url
- 7. Bạn muốn giải quyết vấn đề tối ưu hóa nào?
- 8. Giải pháp phi hàm mũ để giải quyết vấn đề?
- 9. Giải quyết vấn đề trong C++ với STL
- 10. NHibernate: Làm thế nào để giải quyết việc này "phương ngữ" cấu hình vấn đề
- 11. ModelFactory trong ASP.NET MVC để giải quyết vấn đề 'RenderPartial'
- 12. Loại vấn đề nào có thể mapreduce giải quyết?
- 13. Confused về việc giải quyết của classname
- 14. Động lực cho loại lớp học ở Scala là gì?
- 15. Doesnt http Keep-Alive giải quyết vấn đề mà giải quyết cuộc thăm dò dài?
- 16. vấn đề với việc giải quyết các hoạt động cho một mục đích - resolveActivityInfo()
- 17. Rails omniauth-facebook chưa giải quyết vấn đề
- 18. JSON vấn đề phân tích không được giải quyết
- 19. Các vấn đề bảo mật cần được giải quyết khi làm việc với Google App Engine?
- 20. MS giải quyết vấn đề gì khi tạo PowerShell?
- 21. Giải quyết vấn đề ưu tiên cho công việc cần tây trên RabbitMQ?
- 22. Clojure: giải quyết biểu tượng tuyên bố
- 23. Giải quyết các vấn đề nghịch đảo với PyMC
- 24. Cách giải quyết vấn đề này: Vấn đề 'Chạy android lint'
- 25. Peaberry cho Guice giải quyết vấn đề gì?
- 26. Java: Chưa giải quyết vấn đề biên soạn
- 27. Cách giải quyết các vấn đề với cảnh báo fileAttributesAtPath?
- 28. Ưu điểm của việc giải quyết từ vựng trong Chương 5 của SICP là gì?
- 29. Làm thế nào để dễ dàng biết liệu Ninject có thể giải quyết một lớp học
- 30. Làm cách nào để giải quyết vấn đề khóa trong MySQL?
Tôi sợ những câu trả lời như một câu hỏi có thể đã dẫn đến. Cảm ơn bạn đã tạo ra một câu trả lời hoàn hảo! –