Ruby đang ngày càng trở nên phổ biến hơn, Robert Armstrong, giám đốc điều hành của Appstem, một công ty chuyên thiết kế và phát triển ứng dụng di động ở San Francisco cho biết. Chúng tôi sử dụng Ruby cho phần backend của rất nhiều dự án phát triển ứng dụng di động. Ruby là một ngôn ngữ tuyệt vời để học, đặc biệt là đối với các lập trình viên mới. Nó được thiết kế gần với suy nghĩ của con người, chứ không phải là máy tính, vì vậy sẽ dễ dàng hơn để hoàn thành một số công việc bằng Ruby so với các ngôn ngữ khác.
Trang 1Ngôn ngữ lập trình Ruby nâng cao
Trình bày: QuanBH
Trang 31 Giới thiệu về ruby
● Ruby là ngôn ngữ lập trình hướng đối tượng (object oriented)
Trang 41 Giới thiệu về ruby
1.2 Ưu, nhược điểm và so sánh ruby với các ngôn ngữ khác.
● Ưu điểm:
○ Mã nguồn mở
○ Hoạt động trên nhiều nền tảng
○ Có thể nhúng vào HTML
○ Cung cấp các phương pháp đóng gói dữ liệu trong các đối tượng
○ Có thể dễ dàng kết nối với NoSQL, MySQL, Oracle
○ Các chương trình lớn và mở rộng cao dễ dàng được bảo trì
○ Cú pháp rõ ràng, giúp người mới tìm hiểu Ruby rất nhanh chóng và dễ dàng
Trang 51 Giới thiệu về ruby
● Nhược điểm
○ Thời gian xử lý chậm hơn (thời gian CPU) so với các ngôn ngữ lập trình khác
Trang 61 Giới thiệu về ruby
● Nhược điểm
○ Có ít server hỗ trợ việc deploy bằng Ruby
○ Có ít IDE hỗ trợ cho công việc
Trang 71 Giới thiệu về ruby
1.3 Ứng dụng của Ruby
● Sử dụng:
○ Web development framework Các frameworks phổ biến: Rails, Sinatra,
● Những website đang sử dụng framework của Ruby
Trang 8● Normal deleting: Trình Garbage Collector sẽ xóa các Objects không còn sử dụng.
● Deletion with Compacting: Sau khi những Object không còn được sử dụng bị xóa,
những Object còn được sử dụng sẽ được "gom" lại gần nhau Điều đó làm tăng hiệu suất sử dụng bộ nhớ trống để cấp phát cho những Object mới
Trang 92 Cách ruby quản lý bộ nhớ
Trang 10Ruby sử dụng gabage collector để quản lý bộ nhớ
Trang 113 Cách ruby thực thi code
Chúng ta có thể xem một ví dụ như sau:
Với một phép toán đơn giản như trên hay những app phức tạp code đều được Ruby tách thành những phần nhỏ và chuyển hóa vào những format khác nhau tổng cộng 3 lần.Có khá nhiều công nghệ cũng như thuật toán được dùng đến để xuất ra kết quả “5” cho đoạn code phía trên
Trang 133.1 Tokenizer
Quay lại với ruby
Trước tiên chúng ta xem đoạn code file mẫu simple.rb
Xem sơ đồ để sau:
Trang 153.1 Tokenizer
● Đầu tiên Ruby sẽ đọc file simple.rb và split nó thành những kí tự
● Có một con trỏ đọc từng kí tự của hàng đầu tiên.Ruby nhận ra rằng số 1 là bắt đầu của một
số, nó sẽ tiếp tục đọc cho đến khi trỏ đến một kí tự không phải số
● Tiếp theo con trỏ đến số 0, vẫn là một con số, nên nó nhảy đến kí tự tiếp theo
● Ruby nhận ra rằng vẫn có thể là một phần của số thực và nhảy đến kí tự tiếp theo
● Đến khi gặp kí tự t, đây không phải là một phần của một con số, đồng thời kết luận không còn con số nào sau dấu lúc nãy nữa, Ruby nhận thấy rằng dấu đó là thể là một phần của token khác, nên trỏ ngược về thêm một kí tự
● Lúc này Ruby sẽ convert những kí tự số nó đã đi qua thành (tINTERGER) token
● Ruby trỏ tiếp đến kí tự tiếp theo và convert kí tự nó vừa đi qua dấu thành token(.)
● Và như thế Ruby lướt qua times, và convert nó thành token (tIDENTIFIER)
● Và rồi, Ruby cũng token xong hàng thứ nhất của đoạn code Ruby của chúng ta
Trang 163.1 Tokenizer
Thực ra để Tokenizer code thì ở nhiều ngôn ngữ thông dịch đều có công cụ để Tokenizer code thành các tokens
Demo tạo ra một Tokenizer đơn giản bằng ngôn ngữ js:
Muốn tìm hiểu thêm về ruby tokenizer chúng ta có thể sử dụng tool ripple để tìm hiểu
Trang 173.2 Parsing
Trang 18● Sau khi biến đổi code thành các token quá trình parsing sẽ diễn ra tiếp theo.
● Ruby sử dụng một parser generator gọi là Bison.Về bản chất, Ruby không sử dụng Bison để phân tích các token, thay vào đó nó chạy Bison ngay ở bước đầu tiên, khi build code
● Tại thời điểm chạy process build, Bison được chạy để tạo ra parser code (parse.c) từ các quy tắc được định nghĩa trong file parse.y
● Sau đó parse.c sẽ thực hiện parse code Ruby thành các AST Nodes và biên dịch nó thành byte code, để máy ảo Ruby có thể thực thi
Trang 193.2 Parsing
Để tìm hiểu ruby parsing tokens như thế nào.Sử công cụ Ripple để cho ra kết quả parsing code của chúng ta như hình dưới
Trang 203.2 Parsing
Cây cú pháp trừu tượng
Trang 213.3 Compilation
Trang 22● Ruby compile code Ruby thành bytecode, còn gọi là YARV (Yet Another Ruby VM) instructions, và được thực thi ở YARV
● YARV bản chất là một Stack-oriented VM, nói một cách khác YARV nó sử dụng một value stack để thực thi các "YARV instructions”
● Quá trình complile code tạo thành YARK instructions tuân theo nguyên tắc sau:
○ Đẩy receiver vào stack
○ Đẩy arguments vào stack
○ Đẩy method vào stack
Ví dụ: puts 2+ 2 => Yark instructions
Trang 233.3 Compilation
Local table
● Khi ruby compiler chạy, thông tin về các biến, tham số được Ruby lưu ở một nơi khác gọi là Local Table.Để sử dụng local table Ruby dùng hai lệnh setlocal (dùng để gán) và getlocal (dùng để tham chiếu)
Trang 243.3 Compilation
Trang 25Tài liệu tham khảo
1.Ruby Under a Microscope: An Illustrated Guide to Ruby Internals 1st Edition.
2.http://www.gnu.org/software/bison/manual/bison.ht ml
3.http://www.atdot.net/yarv/yarvarch.en.html
Trang 26Thanks for listen!