[Góc học cùng mình]
Chắc hẳn chúng ta đã quen với rất nhiều ngôn ngữ như C, C++, Java, Python, Ruby, JavaScript, PHP, Swift, Kotlin điểm chung chúng là đều là ví dụ cho "High-level programming language" (Ngôn ngữ lập trình bậc cao)
Nhắc đến "Ngôn ngữ lập trình bậc cao" chắc các bạn cũng suy đoán được sẽ còn những "Low-level programming language" (Ngôn ngữ lập trình bậc thấp) đôi khi được gọi là "Machine language" (Ngôn ngữ máy) hay "Assembly language" (hợp ngữ) Một cách đơn giản, chúng ta có thể hiểu rằng máy tính chỉ có thể thực hiện các chương trình được viết bằng ngôn ngữ bậc thấp. Do đó, các chương trình viết bằng ngôn ngữ bậc cao cần được xử lý trước khi chạy. Bước này tốn thêm thời gian và là một hạn chế nhỏ của các ngôn ngữ bậc cao.
Tuy nhiên, lợi ích lại rất lớn:
-
"Dễ lập trình" việc lập trình bằng ngôn ngữ bậc cao dễ hơn nhiều Chương trình được viết bằng ngôn ngữ bậc cao được viết "Nhanh hơn", nội dung chương trình "ngắn hơn" dễ "đọc" hơn và nhiều khả năng "chính xác hơn"
-
"Khả Chuyển" các ngôn ngữ bậc cao có tính "portability" (khả chuyển) được hiểu theo nghĩa chạy được trên nhiều hệ máy tính khác nhau mà ít hoặc không cần phải sửa đổi (trong khi đó các ngôn ngữ bậc thấp chỉ có thể chạy trên một loại máy tính và phải được viết lại nếu muốn chạy trên các hệ máy khác)
Vì những lợi ích này, hầu hết các chương trình được viết bằng ngôn ngữ bậc cao. Ngôn ngữ bậc thấp được sử dụng chỉ cho các ứng dụng đặc biệt.
Ví dụ, trong lĩnh vực phát triển phần mềm nhúng, lập trình viên có thể sử dụng "ngôn ngữ hợp ngữ" để viết mã cho các vi điều khiển nhúng trong các thiết bị điện tử như ô tô, thiết bị y tế hoặc thiết bị gia dụng thông minh.
Vậy làm sao để máy tính hiểu các ngôn ngữ bậc cao ?
Có hai loại chương trình có nhiệm vụ chuyển đổi ngôn ngữ bậc cao thành dạng ngôn ngữ bậc thấp: "Trình thông dịch" và "Trình biên dịch."
- "Trình thông dịch" (Interpreter) là một chương trình máy tính, có nhiệm vụ đọc một chương trình bậc cao và thực hiện nó theo đúng những gì chương trình chỉ định. Nó xử lý chương trình một cách "dần dần" theo "tuần tự", nghĩa là đọc câu lệnh đến đâu thì thực hiện đến tính toán tới đó
- "Trình biên dịch" (Compiler) : là chương trình máy tính , có nhiệm vụ đọc chương trình và dịch nó "hoàn toàn" trước khi thực hiện bất kì một câu lệnh nào trong chương trình chương trình sau khi được dịch sẽ gọi là "Object code" (mã đối tượng) hoặc "Executable program"(chương trình chạy)
Thông thường máy sẽ thực hiện biên dịch trước sau đó mới chạy mã lênh đã biên dịch. Khi đó, trương trình bậc cao sẽ được gọi là "Source Code" (Mã nguồn)
Mình sẽ lấy ví dụ về ngôn ngữ Java. Chương trình java vừa được biên dịch lẫn thông dịch. Thay vì chuyển trương trình sang ngôn ngữ máy, trình biên dịch Java phát sinh ra "Java bytecode" "mã byte". Mã byte dễ thông dịch (và thông dịch cũng nhanh), giống như mã máy, song nó còn "khả chuyển", như một ngôn ngữ bậc cao . Vì vậy ta có thể biên dịch một chương trình trên máy này, đưa mã byte sang máy khác, sau đó thông dịch mã byte này trên máy mới. ('write once and run anywhere')
Thực tế trong nhập môn java ta có thể thấy file "mã nguồn" x.java Trình biên dịch đọc mã lệnh rồi phát sinh byte code Java file x.class. Quá trình biên dịch này sẽ kiểm tra cú pháp và kiểm tra lỗi trong mã nguồn ,lúc này trình thông dịch java sẽ đọc byte code này và đưa ra kết quả trên màn hình console hoặc ghi vào một tệp nếu bạn đã cài đặt mã để làm như vậy.
Mặc dù quá trình này có vẻ phức tạp, nhưng đa số các môi trường phát triển chương trình đều giúp bạn tự động thực hiện các bước kể trên. Thông thường bạn sẽ chỉ phải viết một chương trình rồi ấn nút hoặc gõ vào một câu lệnh để biên dịch và chạy. Tuy nhiên, Ta vẫn cần biết những bước nào đang được máy thực hiện ngầm, để ngỡ có trục trặc thì ta có thể hình dung ra sai ở khấu nào
Nguồn thao khảo "Think Java: How to think like a computer scientist" "www.javatpoint.com"