Bạn đang xem : Clojure là gì
Xu hướng lúc bấy giờ là đa lõi, hiện có 2 ngôn từ điển hình nổi bật trên JVM tương hỗ đa lõi là Scala và Clojure. Bài Khủng hoảng đa lõi : Scala vs Erlang đã đề cập Scala, bài này trình làng Clojure bằng cách so sánh với Scala và Erlang, sau đó hướng dẫn cách thiết lập môi trường học .
So sánh với Scala và Erlang
Đa nhiệm có 2 mục tiêu: tận dụng hiệu quả sức mạnh xử lí của 1 máy và của nhiều máy. Do hạn chế của JVM nên Clojure và Scala chỉ làm tốt mục tiêu đầu, còn Erlang làm tốt cả 2. JVM dùng native thread của hệ điều hành nên Clojure và Scala chỉ chạy song song hiệu quả chừng vài ngàn công việc, vì các hệ điều hành chỉ chạy hiệu quả tối đa chừng vài ngàn thread, hơn nữa thì hệ điều hành sẽ không ổn định thậm chí treo máy. Erlang dùng green thread nên tốc độ tạo thread cực nhanh cỡ nano giây và số lượng thread tạo ra có thể lên đến cả triệu. Khi tải lên cao (nhiều công việc đến dồn dập cùng lúc), chương trình Erlang chỉ chạy chậm lại chứ ít có khả năng chết vì hệ thống hết tài nguyên (CPU và bộ nhớ) như chương trình Clojure và Scala. Tuy vậy với loại chương trình chuyên về tính toán số học thì Clojure và Scala nhanh hơn Erlang, do đó:
Bạn đang đọc : Làm Quen Với Clojure Là Gì ? Ngôn Ngữ Lập Trình Hàm Bạn Nên Biết
Nên dùng Clojure hoặc Scala nếu chương trình thiên về đo lường và thống kê chỉ cần chạy tốt trên 1 máy, mỗi máy chỉ cần chạy song song chừng vài ngàn việc làm, và ít cần truyền thông tin giữa nhiều máy. Nên dùng Erlang khi chương trình cần độ song song cao trên 1 máy và nhiều máy, chịu được tải và độ đáng tin cậy cao. Nên dùng Clojure hoặc Scala nếu chương trình thiên về giám sát chỉ cần chạy tốt trên 1 máy, mỗi máy chỉ cần chạy song song chừng vài ngàn việc làm, và ít cần truyền thông tin giữa nhiều máy. Nên dùng Erlang khi chương trình cần độ song song cao trên 1 máy và nhiều máy, chịu được tải và độ đáng an toàn và đáng tin cậy cao. Erlang ra năm 1986, Scala ra năm 2003, Clojure ra sau Scala 4 năm nên chưa tăng trưởng bằng. Tuy vậy hiện Clojure có động lực tăng trưởng mạnh hơn Scala vì 1 số ít ít lí do : Scala phối hợp cả lập trình hướng đối tượng người tiêu dùng ( OOP ) và lập trình hàm ( FP ), cú pháp phức tạp còn hơn cả Java. Trong khi đó Clojure chỉ là một biến thể ( dialect ) của Lisp, thuần FP nên cú pháp đơn thuần hơn rất nhiều. Scala là ngôn từ tĩnh, phải dịch rồi mới chạy được. Clojure là ngôn từ động, không cần dịch trước khi chạy ( Ruby cũng động như cú pháp phức tạp hơn Clojure nhiều nên JRuby chậm hơn Clojure do mã Ruby khó dịch hiệu suất cao ra mã JVM hơn Clojure ). Yếu tố lai giữa OOP và FP của Scala vừa là ưu và là điểm yếu kém. Ưu vì cú pháp giống Java nên dễ học với người đã biết Java, nhược vì người trước nay chỉ quen viết OOP sẽ có xu thế viết Scala theo kiểu OOP, ít tận dụng được tính năng xử lí đa lõi của Scala. Clojure là biến thể của Lisp, mà số người biết tối thiểu một trong những biến thể của Lisp ( vì được dạy ở trường ) rất phần đông, nhất là trong giới nghiên cứu và điều tra khoa học máy tính. Scala phối hợp cả lập trình hướng đối tượng người dùng người dùng ( OOP ) và lập trình hàm ( FP ), cú pháp phức tạp còn hơn cả Java. Trong khi đó Clojure chỉ là một biến thể ( dialect ) của Lisp, thuần FP nên cú pháp đơn thuần hơn rất nhiều. Scala là ngôn từ tĩnh, phải dịch rồi mới chạy được. Clojure là ngôn từ động, không cần dịch trước khi chạy ( Ruby cũng động như cú pháp phức tạp hơn Clojure nhiều nên JRuby chậm hơn Clojure do mã Ruby khó dịch hiệu suất cao ra mã JVM hơn Clojure ). Yếu tố lai giữa OOP và FP của Scala vừa là ưu và là điểm yếu kém. Ưu vì cú pháp giống Java nên dễ học với người đã biết Java, nhược vì người trước nay chỉ quen viết OOP sẽ có khuynh hướng viết Scala theo kiểu OOP, ít tận dụng được tính năng xử lí đa lõi của Scala. Clojure là biến thể của Lisp, mà số người biết tối thiểu một trong những biến thể của Lisp ( vì được dạy ở trường ) rất phần đông, nhất là trong giới tìm hiểu và điều tra và nghiên cứu khoa học máy tính. Cả Clojure và Scala đều trọn vẹn hoàn toàn có thể gọi trực tiếp thư viện viết bằng Java và ngược lại ( tuy nhiên cú pháp gọi Java của Clojure tốt hơn ). Nếu phải chọn học 1 trong 2 ngôn từ để học, thì có lẽ rằng rằng nên : Chọn Scala nếu cần làm gấp project gì đó vì Scala nhiều tài liệu hơn, cú pháp giống những ngôn từ thông dụng như Java, C #, Ruby nên khi mới khởi đầu học thì vận tốc học nhanh hơn Clojure. Ví dụ Twitter trong thời hạn ngắn đã hoàn toàn có thể chuyển từ Ruby sang Scala. Nên chọn Clojure nếu chưa biết FP là gì. Người ta bảo ngôn từ nếu không làm đổi khác tâm lý của mình thì không đáng học. Clojure dựa trên Lisp mà Lisp là ngôn từ FP cổ xưa thứ 2 ( sau Forth ) và có lẽ rằng là duy nhất còn sống khoẻ đến ngày này. Scala lai giữa OOP và FP nên mặc dầu dễ làm quen hơn nhưng nếu trước giờ chỉ quen mỗi OOP thì khi viết chương trình bạn sẽ có khuynh hướng viết theo kiểu OOP ( vậy thì dùng Java quách cho xong ), không tạo được biến hóa gì trong tâm lý cho cái đầu của mình. Chọn Scala nếu cần làm gấp project gì đó vì Scala nhiều tài liệu hơn, cú pháp giống những ngôn từ phổ cập như Java, C #, Ruby nên khi mới khởi đầu học thì tốc độ học nhanh hơn Clojure. Ví dụ Twitter trong thời hạn ngắn đã trọn vẹn hoàn toàn có thể chuyển từ Ruby sang Scala. Nên chọn Clojure nếu chưa biết FP là gì. Người ta bảo ngôn từ nếu không làm đổi khác tâm ý của mình thì không đáng học. Clojure dựa trên Lisp mà Lisp là ngôn từ FP cổ xưa thứ 2 ( sau Forth ) và có lẽ rằng rằng là duy nhất còn sống khoẻ đến ngày này. Scala lai giữa OOP và FP nên mặc dầu dễ làm quen hơn nhưng nếu trước giờ chỉ quen mỗi OOP thì khi viết chương trình bạn sẽ có khuynh hướng viết theo kiểu OOP ( vậy thì dùng Java quách cho xong ), không tạo được đổi khác gì trong tâm ý cho cái đầu của mình .
2 mô hình xử lí song song được hiệu quả nhất hiện nay là
. Erlang và Scala theo mô hình actor, Clojure theo mô hình STM. Actor giải quyết được vấn đề xử lí song song ở cả 2 trường hợp trên cùng một máy và trên nhiều máy khác nhau. STM thì chỉ giải quyết được vấn đề trên một máy. Tuy vậy, chủ trương của Clojure là dùng STM để tận dụng tối đa đặc tính của việc việc chạy trên một máy là bộ nhớ có thể dùng chung, giải quyết thật tốt vấn đề một máy trước, rồi trong tương lai mới tìm cách giải quyết vấn đề nhiều máy sau (dùng JMS chẳng hạn).
Xem thêm: VốN Oda Lã Gã¬? ÄÁº·C Ä‘IểM, ưU Ä‘IểM Vã Nhæ°Á»£C Ä‘IểM Cá»§A NguồN VốN Oda?
Xem thêm: Nhân CPU, luồng CPU là gì? Nên chọn máy tính có bao nhiêu nhân, luồng? – https://swing.com.vn
Học Scala sẽ có cảm hứng nó tham lam tích hợp đủ thứ tính năng hầm bà lằng. Học Clojure sẽ có xúc cảm nó đẹp .
Cách học
Nên biết Java trước khi học Clojure. Nếu đã biết Lisp rồi thì quá khoẻ vì Clojure chỉ là một phiên bản của Lisp, giống JRuby so với Ruby. Cần khám phá và mày mò kĩ những chủ để sau khi học Clojure : Cú pháp ngoặc ( ) Các form cơ bản như def, defn, fn, ifSequence và list, vector, hash, setLập trình concurrent và var, atom, ref, và agentCách link với JavaCú pháp ngoặc ( ) Các form cơ bản như def, defn, fn, ifSequence và list, vector, hash, setLập trình concurrent và var, atom, ref, và agentCách link với Java
Nắm kĩ được các chủ đề trên là yếu tố quyết định để có căn bản Clojure vững chắc. Ở đây ta chỉ bàn thêm về chủ đề căn bản nhất là cú pháp ngoặc, các chủ đề khác trên mạng có đầy.
Xem thêm: Nhân CPU, luồng CPU là gì? Nên chọn máy tính có bao nhiêu nhân, luồng? – https://swing.com.vn
Cú pháp ngoặc có 3 điểm quan trọng : Khi list được quote thì nó chỉ là giá trị literal ( khối tài liệu ). Khi list không được quote thì nó là lời gọi hàm : ( 1 ) list sẽ được evaluate và ( 2 ) thành phần tiên phong gọi là form sẽ quyết định hành động list sẽ được evaluate ra giá trị gì. ( a b c d ) thì hoàn toàn có thể coi a là tên hàm, những cái còn lại là tham số. Để dễ hiểu thường phải đọc theo thứ tự từ phải sang trái : khám phá xem d là gì trước, sau đó đến c v.v.
Xem thêm :
Khi list được quote thì nó chỉ là giá trị literal ( khối tài liệu ). Khi list không được quote thì nó là lời gọi hàm : ( 1 ) list sẽ được evaluate và ( 2 ) thành phần tiên phong gọi là form sẽ quyết định hành động hành vi list sẽ được evaluate ra giá trị gì. ( a b c d ) thì trọn vẹn hoàn toàn có thể coi a là tên hàm, những cái còn lại là tham số. Để dễ hiểu thường phải đọc theo thứ tự từ phải sang trái : tò mò xem d là gì trước, sau đó đến c v.v. Xem thêm : Theme Park Là Gì ? Nghĩa Của Từ Theme Park Trong Tiếng Việt Theme Park Là GìClojure gồm phần core ngôn từ ( giống corelib của Ruby ) và phần contrib gồm những thư viện phong phú và đa dạng ( giống stdlib của Ruby ). Thư viện contrib nào đối sánh tương quan nhiều đến bản thân ngôn từ thì sẽ được đưa vào core dần. Thư viện nào tốt được xử dụng nhiều thì sẽ được đưa vào contrib. Hãy chú ý quan tâm tập dùng được càng nhiều thư viện trong contrib càng tốt .
Source: https://swing.com.vn
Category: Wiki