Ai đó có thể vui lòng giải thích sự khác biệt lớn giữa Scala, Groovy và Clojure. Tôi biết mỗi trình biên dịch này chạy trên JVM nhưng tôi muốn so sánh đơn giản giữa chúng.
Ai đó có thể vui lòng giải thích sự khác biệt lớn giữa Scala, Groovy và Clojure. Tôi biết mỗi trình biên dịch này chạy trên JVM nhưng tôi muốn so sánh đơn giản giữa chúng.
Câu trả lời:
Groovy là một ngôn ngữ được gõ động, có cú pháp rất gần với Java, với một số cải tiến cú pháp cho phép mã nhẹ hơn và ít bản tóm tắt hơn. Nó có thể chạy qua một trình thông dịch cũng như được biên dịch, điều này giúp cho việc tạo mẫu nhanh, tập lệnh và học ngôn ngữ động mà không phải học một cú pháp mới (giả sử bạn biết Java). Kể từ Groovy 2.0, nó cũng có sự hỗ trợ ngày càng tăng cho việc biên dịch tĩnh . Groovy hỗ trợ các bao đóng và hỗ trợ lập trình theo kiểu hơi chức năng, mặc dù nó vẫn còn khá xa so với định nghĩa truyền thống về lập trình chức năng.
Clojure là một phương ngữ của Lisp với một vài tính năng nâng cao như Bộ nhớ giao dịch phần mềm . Nếu bạn thích Lisp và muốn sử dụng một cái gì đó giống như nó trong JVM, Clojure là dành cho bạn. Nó có thể là ngôn ngữ chức năng nhất chạy trên JVM và chắc chắn là ngôn ngữ nổi tiếng nhất. Ngoài ra, nó có một sự nhấn mạnh mạnh mẽ hơn vào tính bất biến so với các phương ngữ Lisp khác, nó đưa nó đến gần hơn với trái tim của những người đam mê ngôn ngữ chức năng.
Scala là ngôn ngữ hướng đối tượng hoàn toàn, hơn cả Java, với một trong những hệ thống loại tiên tiến nhất có sẵn trên các ngôn ngữ không nghiên cứu và chắc chắn là hệ thống loại tiên tiến nhất trên JVM. Nó cũng kết hợp nhiều khái niệm và tính năng của các ngôn ngữ chức năng, mà không ảnh hưởng đến định hướng đối tượng, nhưng sự thỏa hiệp của nó đối với các đặc điểm ngôn ngữ chức năng đã loại bỏ một số người đam mê sau này.
Groovy có sự chấp nhận tốt và một khung web phổ biến trong Grails. Nó cũng cung cấp năng lượng cho hệ thống xây dựng Gradle, thứ đang trở thành một lựa chọn thay thế phổ biến cho Maven. Cá nhân tôi nghĩ rằng đó là một ngôn ngữ với tiện ích hạn chế, đặc biệt là khi Jython và JRuby bắt đầu xâm nhập vào vùng đất JVM, so với các ngôn ngữ khác.
Clojure, thậm chí giảm giá một số tính năng rất thú vị, có sức hấp dẫn mạnh mẽ chỉ bằng một phương ngữ Lisp trên JVM. Nó có thể hạn chế sự phổ biến của nó, được cấp, nhưng tôi hy vọng nó sẽ có cộng đồng trung thành xung quanh nó trong một thời gian dài.
Scala có thể cạnh tranh trực tiếp với Java và giúp nó kiếm tiền trên hầu hết các khía cạnh. Tất nhiên, hiện tại nó không thể cạnh tranh về mức độ phổ biến và việc thiếu sự hậu thuẫn mạnh mẽ của công ty có thể cản trở sự chấp nhận của nó đối với môi trường công ty. Nó cũng là một ngôn ngữ năng động hơn nhiều so với Java, theo nghĩa là ngôn ngữ này phát triển như thế nào. Từ quan điểm của ngôn ngữ, đó là một điều tốt. Từ quan điểm của người dùng có kế hoạch có hàng ngàn dòng mã được viết trong đó, không phải như vậy.
Như một tiết lộ cuối cùng, tôi rất quen thuộc với Scala và chỉ làm quen với hai người kia.
Scala đã phát triển từ một ngôn ngữ chức năng thuần túy được gọi là Kênh và đại diện cho việc triển khai phòng sạch của hầu hết tất cả cú pháp của Java, chỉ khác nhau ở chỗ có thể cải thiện rõ ràng hoặc nơi nó sẽ làm tổn hại đến bản chất chức năng của ngôn ngữ. Sự khác biệt này bao gồm các đối tượng singleton thay vì các phương thức tĩnh và suy luận kiểu.
Phần lớn điều này dựa trên công việc trước đây của Martin Oderky với ngôn ngữ Pizza . Việc tích hợp OO / FP vượt xa các lần đóng cửa đơn thuần và dẫn đến ngôn ngữ được mô tả là hậu chức năng.
Mặc dù vậy, đây là cách gần nhất với Java theo nhiều cách. Chủ yếu là do sự kết hợp giữa hỗ trợ OO và gõ tĩnh, nhưng cũng do một mục tiêu rõ ràng trong thiết kế ngôn ngữ nên nó sẽ tích hợp rất chặt chẽ với Java.
Groovy rõ ràng đã giải quyết hai chỉ trích lớn nhất của Java bằng cách
Có lẽ về mặt cú pháp gần nhất với Java, không cung cấp một số cấu trúc chức năng phong phú hơn mà Clojure và Scala cung cấp, nhưng vẫn cung cấp một cải tiến tiến hóa rõ ràng - đặc biệt là để viết các chương trình syle script.
Groovy có sự hỗ trợ thương mại mạnh nhất của ba ngôn ngữ, chủ yếu thông qua các nguồn.
Clojure là một ngôn ngữ chức năng trong gia đình LISP, nó cũng được gõ một cách linh hoạt.
Các tính năng như hỗ trợ STM cung cấp cho nó một số hỗ trợ đồng thời tốt nhất, trong khi Scala yêu cầu thư viện của bên thứ 3 như Akka để sao chép này.
Về mặt cú pháp, đây cũng là ngôn ngữ xa nhất trong ba ngôn ngữ từ mã Java điển hình.
Tôi cũng phải tiết lộ rằng tôi quen thuộc nhất với Scala :)
Tôi không bao giờ có thời gian để chơi với clojure. Nhưng đối với scala vs Groovy, đây là lời của James Strachan - người tạo Groovy
"Mặc dù mẹo của tôi để thay thế javac lâu dài là Scala. Tôi rất ấn tượng với nó! Tôi có thể thành thật nói rằng nếu ai đó đã cho tôi xem cuốn sách Lập trình trong Scala của Martin Oderky, Lex Spoon & Bill Venners năm 2003 tôi Có lẽ chưa bao giờ tạo Groovy. "
Bạn có thể đọc toàn bộ câu chuyện ở đây
Chúng có thể được phân biệt với nơi chúng đến hoặc chủ yếu là nhà phát triển mà chúng nhắm mục tiêu.
Groovy giống như phiên bản kịch bản của Java. Các lập trình viên Java thời gian dài cảm thấy như ở nhà khi xây dựng các ứng dụng nhanh được hỗ trợ bởi các kiến trúc lớn. Groovy on Grails, như tên cho thấy tương tự như khung Rails. Đối với những người không muốn bận tâm đến tính dài dòng của Java mọi lúc.
Scala là một ngôn ngữ lập trình hướng đối tượng và chức năng và các lập trình viên Ruby hoặc Python có thể cảm thấy gần gũi hơn với ngôn ngữ này. Nó sử dụng khá nhiều ý tưởng tốt phổ biến được tìm thấy trong các ngôn ngữ lập trình này.
Clojure là một phương ngữ của ngôn ngữ lập trình Lisp, vì vậy các nhà phát triển Lisp, Scheme hoặc Haskell có thể cảm thấy như ở nhà trong khi phát triển với ngôn ngữ này.
Tôi đang đọc cuốn sách Lập trình viên thực dụng "Bí quyết Groovy: Mỡ bánh xe Java" của Scott Davis, Bản quyền 2008 và được in vào tháng Tư cùng năm.
Hơi lỗi thời nhưng cuốn sách cho thấy Groovy thực sự là một phần mở rộng của Java. Tôi có thể viết mã Java có chức năng chính xác như Java và đổi tên tệp * .groovy và nó hoạt động tốt. Theo cuốn sách, điều ngược lại là đúng nếu tôi bao gồm các thư viện cần thiết. Cho đến nay, thử nghiệm dường như chịu được điều này.
Rõ ràng, cú pháp hoàn toàn khác nhau (Groovy gần nhất với Java), nhưng tôi cho rằng đó không phải là điều bạn đang yêu cầu.
Nếu bạn quan tâm đến việc sử dụng chúng để tạo kịch bản cho một ứng dụng Java, Scala có lẽ không phải là một lựa chọn tốt, vì không có cách nào dễ dàng để đánh giá nó từ Java, trong khi Groovy đặc biệt phù hợp cho mục đích đó.
eval
yêu cầu