1.1.3 So sánh ngôn ngữ tự nhiên với ngôn ngữ lập trình (3)

Việc dịch ngôn ngữ lập trình bậc cao thành ngôn ngữ máy chúng tôi đang đề cập ở phần trước được thực hiện mởi một chương trình máy tính đặc biệt gọi là trình biên dịch (compiler). Quá trình dịch được goi là biên dịch (compilation).

Bây giờ chúng ta sẽ trở lại với vấn đề thú vị hơn liên quan đến việc tạo ra một chương trình mới. Chúng ta đã biết rằng nhiệm vụ chính của chúng ta là viết ra những chương trình phù hợp với các quy tắc của ngôn ngữ lập trình được lựa chọn. Chương trình này (trên thực tế chỉ là văn bản) được gọi là mã nguồn (source code), hoặc đơn giản là source, trong khi đó file chứa source được gọi là source file.

Để viết source code, bạn sẽ cần một chương trình soạn thảo văn bản (text editor), nó cho phép bạn tạo mới hoặc chỉnh sửa text mà không cần thông tin về định dạng (vì lý do này nên Microsoft Word không phải là lựa chọn hay – Notepad là lựa chọn tốt hơn). Code được đặt trong một file và tên file thì nên bao hàm nội dung của nó. Ví dụ: Điều phổ biến cho một file chứa source code C++ là tên của nó sẽ kết thúc với đuôi .cpp. Vì vậy nếu bạn viết một chương trình máy tính và quyết định đặt tên cho nó là hello thì việc đặt source code trong một file có tên là hello.cpp là một ý tưởng tốt. Một số trình biên dịch cho phép đặt đuôi file khác như .cc.cp, .cxx Hãy tham khảo tài liệu về trình biên dịch của bạn để rõ hơn.

Tiếp theo, source code của bạn cần phải được biên dịch. Để thực hiện việc này bạn cần phải chạy một compiler thích hợp và chỉ cho compiler đó biết bạn để source code ở đâu. Compiler sẽ đọc code của bạn, thực hiện một số phân tích khá phức tạp, và sau đó xác định xem có lỗi xảy ra hay không. Nếu có, nó sẽ thông báo cho bạn, những phân tích này sẽ rất hữu ích. Nhưng hãy nhớ rằng nó được tạo ra bởi máy tính, không phải con người, vì vậy bạn đừng kỳ vọng quá nhiều vào nó. OK, nếu lỗi của bạn là do việc bạn cố gắng cộng hai số sử dụng # thay vì +, compiler sẽ vui lòng thông báo lỗi cho bạn. Tuy nhiên nếu bạn dùng  thay vì +, compiler không thể đoán được ý định của bạn là cộng hai số chứ không phải trừ hai số. Compiler sẽ không nghĩ thay cho bạn đâu. Nhưng không sao, vì nếu compiler làm được mọi thứ thì cần developers làm méo gì nữa :v

Nếu compiler không tìm thấy lỗi nào trong source của bạn, kết quả sẽ là một file chứa chương trình của bạn đã được dịch sang mã máy. File này thường được gọi là “file chạy” (executable file). Tên file chạy sẽ phụ thuộc vào compiler và hệ điều hành mà bạn đang sử dụng. Ví dụ, nếu chương trình của bạn được viết với một file .cpp, hầu hết các compilers được thiết kế cho hệ thống Unix/Linux sẽ mặc định tạo ra file “a.out”. Compilers được thiết kế cho MS Windows® có thể đặt tên file chạy trùng với source file, và chỉ đổi đuôi từ .cpp thành .exe.

Tất nhiên là toàn bộ quá trình này trên thực tế là khá phức tạp. Source code của bạn có thể lớn và được chia thành một vài hay thậm chí hàng tá source files. Cũng có thể là không chỉ mình bạn viết chương trình mà là một team, trong trường hợp đó thì việc chia source code thành các file là bắt buộc. Khi đó, quá trình biên dịch sẽ được chia thành hai quá trình nhỏ: đầu tiên là biên dịch các source file sang ngôn ngữ máy, sau đó nối chúng lại với nhau tạo thành file chạy – quá trình này được gọi là linking, và chương trình thực hiện quá trình này được gọi là linker.