Làm Quen Với Clojure Là Gì ? Ngôn Ngữ Lập Trình Hàm Bạn Nên Biết

JVM (Java Virtual Machine) là nền tảng hấp dẫn vì có nhiều thư viện nhất trong các loại nền tảng và có tốc độ nhanh. Ngôn ngữ chỉ là tập hợp các qui luật logic, bất kì ngôn ngữ nào cũng chỉ cần dịch sang byte code theo đúng chuẩn JVM là chạy được trên nó, nên ngoài Java trên JVM hiện có cả trăm ngôn ngữ.

Đang xem: Clojure là gì

Xu hướng hiện nay là đa lõi, hiện có 2 ngôn ngữ nổi bật trên JVM hỗ trợ đ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 giới thiệu 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 đó:

Tham khảo ngay  Danh Sách Full Các Tập Phim Và Khách Mời Trong Running Man, Xem Phim Running Man

Nên dùng Clojure hoặc Scala nếu chương trình thiên về tính toán 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 công việc, 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à độ 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 phát triển bằng. Tuy vậy hiện Clojure có động lực phát triển mạnh hơn Scala vì một số lí do:

Scala kết hợp cả lập trình hướng đối tượ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 giản hơn rất nhiều.Scala là ngôn ngữ tĩnh, phải dịch rồi mới chạy được. Clojure là ngôn ngữ độ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 quả ra mã JVM hơn Clojure).Yếu tố lai giữa OOP và FP của Scala vừa là ưu và là nhược điể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 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 nhất một trong những biến thể của Lisp (vì được dạy ở trường) rất đông đảo, nhất là trong giới nghiên cứu khoa học máy tính.

Cả Clojure và Scala đều có thể gọi trực tiếp thư viện viết bằng Java và ngược lại (tuy vậy 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 ngữ để học, thì có lẽ nên:

Tham khảo ngay  Bị Vảy Nến Kiêng Ăn Gì, Kiêng Gì? Chế Độ Ăn Uống Cho Người Bệnh Vảy 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 ngữ phổ biến như Java, C#, Ruby nên khi mới bắt đầu học thì tốc độ học nhanh hơn Clojure. Ví dụ Twitter trong thời gian ngắ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 ngữ nếu không làm thay đổi suy nghĩ của mình thì không đáng học. Clojure dựa trên Lisp mà Lisp là ngôn ngữ FP cổ xưa thứ 2 (sau Forth) và có lẽ là duy nhất còn sống khoẻ đến ngày nay. Scala lai giữa OOP và FP nên mặc dù 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ó xu hướng viết theo kiểu OOP (vậy thì dùng Java quách cho xong), không tạo được thay đổi gì trong suy nghĩ 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:

Học Scala sẽ có cảm giác nó tham lam tích hợp đủ thứ tính năng hầm bà lằng. Học Clojure sẽ có cảm giác nó đẹp.

Tham khảo ngay  Gia Đình Phép Thuật - Dàn Diễn Viên Nhí &Apos&Apos Giờ Ra Sao

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 tìm hiểu kĩ các chủ để sau khi học Clojure:

Cú pháp ngoặc ()Các form căn bản như def, defn, fn, ifSequence và list, vector, hash, setLập trình concurrent và var, atom, ref, và agentCách liên kết 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.

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 dữ liệu).Khi list không được quote thì nó là lời gọi hàm: (1) list sẽ được evaluate và (2) phần tử đầu tiên gọi là form sẽ quyết định list sẽ được evaluate ra giá trị gì.(a b c d) thì 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 hiểu 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 ngữ (giống corelib của Ruby) và phần contrib gồm các thư viện đa dạng (giống stdlib của Ruby). Thư viện contrib nào liên quan nhiều đến bản thân ngôn ngữ 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 để ý tập dùng được càng nhiều thư viện trong contrib càng tốt.

1.5/5 - (59 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button