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