2.8 Ngôn ngữ lập trình hàm OCaml
2.8.1 Đặc trưng của OCaml
Trình biên dịch của OCaml [14] gán kiểu tĩnh cho dữ liệu trong chương trình và kiểm tra tại thời điểm biên dịch để đảm bảo rằng lỗi không xuất hiện . Kiểu của biến được suy diễn tự động trong suốt quá trình dịch bởi ngữ cảnh mà chúng xuất hiện trong chương trình. Vì vậy, kiểu của giá trị và kiểu trả về của hàm trong ngôn ngữ OCaml không cần đặc tả rõ, điều này sẽ làm cho dung lượng mã nguồn giảm xuống. Mã nguồn OCaml cũng có thể kiểm chứng được. Cơng cụ kiểm chứng tự động có thể kiểm tra mã nguồn OCaml và chứng thực rằng các kiểu được sử dụng hợp lệ. Công cụ kiểm tra sẽ đi sâu vào phân tích tĩnh chương trình ở một mức độ nào đó mà các ngơn ngữ lập trình khác (trừ Ada) hiện này chưa thể thực hiện được. Bên cạnh tính năng an tồn thì OCaml cịn có tốc độ thực thi nhanh. Trình biên dịch có khả năng tối ưu hóa mã nguồn nên sinh ra mã thực thi nhanh. OCaml đã phát triển hệ thống Module và thư viện chuẩn. Hệ thống Module cho phép lập trình viên viết các ứng dụng lớn. Một chương trình được viết bằng OCaml thường có kích thước bé hơn chính nó được viết bằng các ngơn ngữ khác. OCaml là một ngôn ngữ hết sức ngắn gọn, với các ngoại lệ và so khớp mẫu thì lập trình viên thường khơng phải viết nhiều mã nguồn như đã làm với các ngơn lập trình khác. Việc rút ngắn khối lượng mã nguồn sẽ giúp lập trình viên làm việc hiệu quả hơn, nhanh hơn và ít lỗi hơn. OCaml là một ngơn ngữ lập trình hàm nên việc học nhanh chóng OCaml là một điều khó khăn. Thơng thường, để rút ngắn gọn mã nguồn trong OCaml và để làm cho chương trình phát huy được hết sức mạnh của OCaml thì lập trình viên được khuyên nên sử dụng đệ quy, so khớp mẫu trong chương trình của mình. OCaml thừa hưởng phong cách lập trình của Meta Language. Vì vậy, người dùng phải mất một thời gian khá dài để hiểu được ngơn ngữ. Bên cạnh đó, cần có một số kiến thức lập trình và tư duy làm nền tảng.
Chương 2.Kiến thức cơ bản
ProgressDef:
progressProgressIdent Rangesopt=Set
progressProgressIdent Rangesopt=ifSetthenSet
Hình 2.23: Định nghĩa Progress.
MenuDef:
menuMenuIdent=Set
Hình 2.24: Định nghĩa Menu.
2.8.2 Cú pháp và ngữ nghĩa2.8.2.1 Biến