Cơ bản ngôn ngữ Crystal cho dân Ruby - Phần 1
Không thể phủ nhận là trong 5 năm đổ lại đây ngôn ngữ Ruby với cú pháp dễ học, cộng đồng và thư viện đồ sộ đã giúp nó lên ngôi trong mảng ứng dụng web. Tôi cũng mong là Ruby có thể giải quyết hết mọi thứ một cách nhanh và hiệu quả nhưng tiếc là Ruby không phù hợp để giải quyết các tác vụ đòi ...
Không thể phủ nhận là trong 5 năm đổ lại đây ngôn ngữ Ruby với cú pháp dễ học, cộng đồng và thư viện đồ sộ đã giúp nó lên ngôi trong mảng ứng dụng web. Tôi cũng mong là Ruby có thể giải quyết hết mọi thứ một cách nhanh và hiệu quả nhưng tiếc là Ruby không phù hợp để giải quyết các tác vụ đòi hỏi. Các ứng dụng cần tốc độ siêu xử lý là thế mạnh của các giải pháp vd như Go, C, C++, Erlang, Elixir.
Tôi hiện đang bắt đầu mò mẫm học ngôn ngữ Go ngoài giờ làm nhưng thực sự là sau một vài ngày thì chữ nó lại trả thầy hết, thứ nhất là cú pháp của Go quá chi là xấu, thứ hai là thời gian và cơ hội thử nghiệm với ngôn ngữ này còn ít. Tôi cũng dãi bày với một đồng nghiệp và được anh ấy chỉ cho ngôn ngữ Crystal, thực sự là tôi khá là sốc bới vì chưa bao giờ tôi có thể đọc và viết một ngôn ngữ một cách thành thạo chỉ sau 1 ngày, vâng, tôi không nói quá tí nào bời vì tôi lúc đầu tôi cứ ngợ là mình vẫn đang viết Ruby.
Vậy nếu bạn không phải là dân cuồng Gopher và hiện đang tìm kiếm một ngôn ngữ tay trái để giải quyết các vấn đề tốc độ thì xin hãy đọc tiếp bài hướng dẫn nhiều phần về ngôn ngữ mới này
Theo lời giới thiệu của trang chủ thì tác giả ngôn ngữ mới này muốn tạo ra một ngôn ngữ:
- Cú pháp lai căng nhuốm màu Ruby
- Ngôn ngữ kiểu tĩnh (static typed) nhưng tự động hoá phần kiểm tra kiểu (không yêu cầu người dùng chỉ định kiểu thủ công)
- Có khả năng gọi mã C bằng cách viết binding cho Crystal
- Có chức năng đọc code theo thời gian biên dịch (compile-time evaluation) và tạo ra code, giúp giảm các bước tạo ra các code thường lặp đi lặp lại - nói nôm na là giống anh bạn generator mà Rails có
- Biên dịch ra mã máy tối ưu nhất
Nghe có vẻ hay nhỉ, tôi sẽ dẫn dắt các bạn qua các phần tiếp theo để kiểm chứng những gì tác giả nói ở trên. Sẵn tôi cũng muốn đính chính một số thứ tôi biết thêm về ngôn ngữ này:
- Là một ngôn ngữ hướng đối tượng (OOP)
- Ngôn ngữ còn mới và còn ít người áp dụng
- Cộng đồng của ngôn ngữ tuy bé nhưng chất lượng, đa số là dân Ruby chuyển ngang qua
- Có tài liệu API khá đầy đủ
- Có các framework tương tự như Rails, trong đó có Amethyst
- Crystal không phải kim cương, nếu bạn vào đây mong tôi chỉ cách dạy làm kim hoàn thì có lẽ bạn đã tìm đúng chỗ rồi :trollface
Cài đặt
Xin thêm chi tiết tại Installation Guides.
Tôi sử dụng OSX thì chỉ đơn giản chạy lệnh brew install crystal
Sau khi cài đặt, bạn có thể truy cập vào lệnh crystal.
Viết app Hello world
Thành thông lệ thì bất kì bạn học ngôn ngữ nào thì app đầu tiên thường là app in ra câu Hello world ra STDOUT.
Bắt đầu bằng việc tạo một file tên hello_world.cr, xin lưu ý là tên đuôi của file là cr, đây là tên thông lệ của mã Crystal. Nội dung của file như sau:
puts "Hello world"
Hàm puts của Crystal giống y hệt hàm cùng tên trên Ruby. Để xem cách chạy code ở trên ra sao, chúng ta chạy lệnh:
crystal run hello_world.cr
nếu không có gì sai thì thông điệp "Hello world" sẽ được hiển thị trên màn hình. Hãy nói một chút về code ở trên, các bạn có thể thấy là giống Ruby, chúng ta không cần khai báo hàm "main" như là với một số ngôn ngữ, vd Java. Code ở trên sẽ là code của chương trình (program), hay main routine. Lệnh crystal run được dùng để biên dịch và chạy code mới biên dịch, đây là điểm khác biệt lớn so với Ruby vì Crystal không phải là ngôn ngữ intepreter, tất cả mọi code đều dược phải biên dịch ra mã máy.
Chúng ta có thể biên dịch hàm trên ra binary với lệnh:
crystal build hello_world.cr
để tạo ra app hello_world ở dạng binary, app này có thể được chạy như các app trên OS:
./hello_world
Nhưng xin lưu ý mã biên dịch ở trên chưa được tối ưu hoá, và chỉ đc sử dụng cho môi trường phát triển, để tạo ra mã tối ưu thì chúng ta biên dịch với tham số --release:
crystal build hello_world.cr --release
Ngôn ngữ Crystal là một ngôn ngữ biên dịch mang ảnh hưởng của cú pháp ngôn ngữ Ruby. Trong phần sau tôi sẽ hướng dẫn các bạn về các kiểu đối tượng và cấu trúc lớp (class) và hàm (function) của ngôn ngữ này.