Thử tìm động lực học Scala
Scala
50
Clojure
12
White

Ngoc Dao viết ngày 20/03/2016

Máy tính ngày càng có nhiều lõi. Do đó tìm cách lập trình đa nhiệm sao cho sử dụng tối ưu hết các lõi là xu hướng tất yếu.

Ở 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.

Đọc thêm

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
252 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
56 6
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết 2 năm trước
56 6
White
32 0
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết gần 2 năm trước
32 0
White
28 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết gần 2 năm trước
28 1
Bài viết liên quan
White
10 0
Kí tự Regex cơ bản Về cơ bản thì các sử lý matching của scala.util.matching.Regex sẽ được "phó thác" (delegate) cho java Regex. Bạn có thể tạo một ...
huydx viết hơn 2 năm trước
10 0
White
7 1
Trong scala kí tự _ được dùng với khá nhiều mục đích .. không liên quan đến nhau. Tạm note lại cái đã khi nào có time sẽ quay lại viết cẩn thận sa...
huydx viết hơn 2 năm trước
7 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
252 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!