Trang chủ Development

Thử tìm động lực học Scala

Thử tìm động lực học Scala

Thử tìm động lực để học Scala

Ở cấp độ máy ảo, nằm giữa chương trình được dịch sang bytecode và hệ điều hành, có 2 loại đa nhiệm: local concurrency là đa nhiệm trên một máy và distributed concurrency (parallel) là đa nhiệm trên nhiều máy. Loại đầu nổi nhất là JVM, loại sau nổi nhất là Erlang. 2 tiêu chí quan trọng khi đánh giá công cụ giúp lập trình đa nhiệm là độ dễ sử dụng và tốc độ (càng tận dụng được CPU đa lõi tốc độ càng nhanh).

2 ngôn ngữ nổi bật nhất trên JVM để lập trình concurrency là Clojure và Scala. Clojure cú pháp cực đơn giản vì phái sinh từ Lisp, Scala cú pháp phức tạp hơn nhiều vì ai đã học Java, Ruby, Erlang, Haskell v.v. sẽ thấy nó giống tất cả. Tuy Scala phức tạp hơn nhưng vì đa số lập trình viên đều bắt đầu sự nghiệp bằng ngôn ngữ họ C nào đó như Pascal, C, C , C#, Java, PHP v.v. nên đối với đa số nó lại dễ học hơn vì dù sao thì trông cú pháp Scala cũng quen quen. Hơn nữa sử dụng thư viện Java trong chương trình Scala tự nhiên hơn hẳn so với sử dụng trong chương trình Clojure, nhất là khi Clojure chưa hỗ trợ annotation, nên Scala có động lực học mạnh mẽ hơn Clojure.

Về mặt ngôn ngữ, có thể coi Scala = Ruby Java Erlang. Về mặt tính năng, có thể coi Scala = OOP functional event-driven.

Để cụ thể, giả sử ta định thuyết phục công ty chuyên làm web cỡ trăm lập trình viên đang sử dụng Perl tìm hiểu Scala.

Perl có nhiều vấn đề, ví dụ:

• Khó develop

• Khó maintenance

Công nghệ thay thế cần:

• Có tốc độ chạy ngang ngửa hoặc hơn Perl, cụ thể tỉ lệ request web trên lượng CPU và RAM bị ăn phải ngang ngửa hoặc hơn Perl

• Nhiều thư viện

• Dễ develop, dễ maintenance, dễ áp dụng các chiêu thức software engineering

• Dễ scale ra vài trăm server

Ruby đạt những tiêu chí trên và rất dễ học với lập trình viên Perl, nhưng Scala cú pháp giống Ruby. Erlang dễ scale vì tính năng lập trình mạng rất tốt, nhưng ít thư viện hơn Scala. Scala tốc độ hơn Erlang, Ruby, và Perl, tỉ lệ request web trên lượng CPU và RAM bị ăn rất tốt (ví dụ với 1 request thì Perl tốn ít tài nguyên hơn Scala, nhưng với 1000 request thì Scala tốn ít hơn).

JVM có Clojure và Scala, xét yếu tố nhiều thư viện và dễ Develop:

• Phải dễ gọi thư viện Java. Java thư viện vô số kể, gì cũng có, nhưng khó gọi thì cũng phí cơm. Tất nhiên không dùng chính ngôn ngữ Java rồi để gọi thư viện Java rồi. Java khó develop vì khả năng diễn đạt kém, học Ruby rồi thì thấy khả năng diễn đạt của Java kém thế nào. <-- Scala thắng Clojure

• Phải dễ học cho người bình thường. Dễ học đối với ai đó nhưng cả trăm người học không trôi thì cũng phí cơm. Hãy tìm xem video tổng giám đốc FPT nói về công nghiệp phần mềm, sẽ thấy Scala thắng Clojure.

Nét tương đồng giữa Scala và Java, Ruby, và Erlang:

• Scala có tính năng hướng đối tượng giống Java và Ruby. Do tương đồng về cú pháp nên có thể viết chương trình Scala để tương tác với thư viện Java rất thoải mái. Điểm thu hút lập trình viên đến với máy ảo Java chính là việc có thể dùng ké vô số thư viện Java sẵn có.

• Scala giống Ruby ở chỗ cú pháp rất uyển chuyển, mọi thứ đều là object kể cả hàm. Người ta hay nói viết chương trình bằng Scala dễ hơn viết bằng Java, dễ ở đây không nói về cú pháp vì cú pháp Scala phức tạp hơn Java, mà nói về sự uyển chuyển, khả năng diễn đạt ngắn gọn, dễ viết dễ hiểu. Scala là static typed, nên phù hợp để làm project đông người hơn. Nếu bạn rất thích Ruby, thì không nên dùng JRuby mà nên dùng Scala.

• Scala giống Erlang ở chỗ có actor và pattern matching. Ai đã dùng qua tính năng pattern matching rồi thì chắc chắn không muốn dùng ngôn ngữ không có tính năng này nữa.

Scala kết hợp được cái hay của cả 3, có thể nói sức mạnh Scala = thư viện của Java OOP và tính uyển chuyển của Ruby actor và pattern matching của Erlang.

Tóm lại, tổng hợp nhiều yếu tố thì Scala rất đáng học.

>> Xem thêm: Scala: Type Parameter