Nhập môn lập trình (2) - Chương trình dịch

Bài trước: Nhập môn lập trình (1) - Chương trình, mã máy, hợp ngữ

-----

[Video]

1.1       Chương trình dịch

Với hợp ngữ, chúng ta sẽ sử dụng trình hợp dịch để dịch từ mã hợp ngữ sang dạng mã máy. Tương tự, với ngôn ngữ cấp cao, chúng ta cũng phải sử dụng một chương trình để dịch từ ngôn ngữ cấp cao (thường gọi là chương trình nguồn – source code program hay mã nguồn - source code) sang dạng mã máy.

Tổng quát hơn, chương trình dịch là chương trình dùng để dịch mã nguồn từ dạng này sang dạng khác; có thể dịch từ ngôn ngữ cấp cao sang mã máy, từ ngôn ngữ cấp cao sang dạng mã đối tượng, từ ngôn ngữ cấp cao này sang dạng ngôn ngữ cấp cao khác, thậm chí từ ngôn ngữ cấp thấp thành ngôn ngữ cấp cao hơn.

Để đơn giản, ở đây chỉ xét đến chương trình dịch thực hiện chuyển từ ngôn ngữ cấp cao sang dạng mã máy hoặc dạng mã đối tượng. CPU hoặc máy ảo sẽ thực thi các chương trình mã máy hoặc mã đối tượng này (xem Hình 1.5).

Như vậy, để có thể điều khiển được máy tính, cần phải chuyển đổi ngôn ngữ lập trình sang dạng mã máy, khi đó CPU sẽ thực thi mã máy để thực hiện các công việc. Để chuyển từ ngôn ngữ lập trình sang mã máy cần có quá trình dịch ngôn ngữ, gồm quá trình thông dịch hoặc quá trình biên dịch, hoặc kết hợp cả hai quá trình này (xem Hình 1‑6).


Trình thông dịch

Trình thông dịch (interpreter) là một chương trình máy tính, giúp CPU thực thi trực tiếp các lệnh được viết bằng một ngôn ngữ lập trình hay ngôn ngữ kịch bản mà không yêu cầu phải biên dịch trước thành một chương trình ngôn ngữ máy (xem Hình 1‑7).


Với người lập trình, nếu lập trình bằng ngôn ngữ kiểu thông dịch sẽ không thấy tập tin kết quả của quá trình dịch, phần mềm sẽ gồm các tập tin mã nguồn ở dạng ngôn ngữ lập trình.

Ví dụ, bạn có thể viết một chương trình đơn giản bằng ngôn ngữ JavaScript để hiểu về quá trình thông dịch.

– Mở chương trình Notepad

– Nhập vào đoạn mã nguồn sau:

 

– Lưu tập tin với phần mở rộng là html (ví dụ testThongDich.html)

<script>

    alert('hi cu Teo');

</script>

– Mở tập tin vừa tạo bằng trình duyệt, sẽ thấy xuất hiện một cửa sổ với nội dung “hi cu Teo”.

– Trong trường hợp này, tạm hiểu Trình duyệt web chính là một Trình thông dịch, nó thực thi trực tiếp các dòng mã trong tập tin mã nguồn, và xuất ra kết quả. Bạn sẽ không thể tìm thấy tập tin thực thi dạng .EXE hoặc DLL.

Trình biên dịch

Trình biên dịch (compiler) là một chương trình máy tính, thực hiện dịch một chuỗi các câu lệnh của một ngôn ngữ lập trình (gọi là ngôn ngữ nguồn, mã nguồn) thành một chương trình tương đương nhưng ở dạng một ngôn ngữ máy tính mới (gọi là ngôn ngữ đích) và thường là ngôn ngữ cấp thấp hơn (dạng mã đối tượng, hoặc dạng mã máy).

CPU hoặc máy ảo sẽ thực thi mã đối tượng hoặc mã máy do trình biên dịch tạo ra.

Cũng có loại trình biên dịch chuyển đổi từ ngôn ngữ lập trình cấp thấp sang ngôn ngữ lập trình cấp cao gọi là bộ biên dịch ngược; cũng có trình biên dịch chuyển đổi từ ngôn ngữ cấp cao này sang ngôn ngữ cấp cao khác, hoặc sang một ngôn ngữ trung gian để xử lý tiếp về sau gọi là bộ biên dịch phân tầng (xem Hình 1‑8).


Với người lập trình, nếu lập trình bằng ngôn ngữ kiểu biên dịch sẽ thấy tập tin kết quả của quá trình dịch, phần mềm sẽ gồm các tập tin mã nguồn ở dạng ngôn ngữ lập trình, các tập tin mã trung gian, hoặc tập tin dạng mã máy.

Bạn sẽ hiểu rõ hơn về quá trình biên dịch khi lập trình bằng ngôn ngữ C, C++ hoặc C#.

Thông dịch hay biên dịch?

Bạn có thể chia ngôn ngữ lập trình thành các nhóm, như ngôn ngữ lập trình kiểu thông dịch, hay ngôn ngữ lập trình kiểu biên dịch. Tuy nhiên, việc phân chia này không thực sự rõ ràng, vì thực tế nhiều ngôn ngữ lập trình được thiết kế để chạy theo kiểu vừa thông dịch vừa biên dịch, tùy thuộc vào giai đoạn khác nhau của quá trình chuyển đổi và thực thi mã nguồn. Các ngôn ngữ lập trình hiện đại cũng được triển khai trên các nền tảng cho phép tùy chọn cả hai hình thức thông dịch và biên dịch.

Như vậy việc xác định một ngôn ngữ thuộc kiểu thông dịch hay biên dịch cũng không quá quan trọng. Điều quan trọng là bạn cần phải hiểu rõ các bước, các thành phần đã tham gia vào quá trình chuyển đổi từ ngôn ngữ lập trình sang dạng mã máy.

-----//2

[Video]

--------

Cập nhật: 4/7/2022

Bài tiếp theo: Nhập môn lập trình (3) - Ngôn ngữ và phần mềm lập trình