Công cụ dịch ngôn ngữ và IDEs
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| compiler/kəmˈpaɪlə/ | trình biên dịch |
| source code/sɔːs kəʊd/ | nguồn mã |
| translator/trænˈsleɪtə/ | trình dịch |
| machine code/məˈʃiːn kəʊd/ | mã máy |
| assembler/əˈsemblə/ | Trình biên dịch assembly |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | ngôn ngữIOException |
| object code/ˈɒbdʒekt kəʊd/ | mã mục tiêu |
| executable/ɪɡˈzekjʊtəbl/ | tập tin thực thi |
| interpreter/ɪnˈtɜːprɪtə/ | trình giải thích |
| bytecode/ˈbaɪtkəʊd/ | mã byte |
| portable/ˈpɔːtəbl/ | di chuyển được |
| virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ | máy ảo |
| just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ | biên dịch tức thì |
| integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ | môi trường phát triển tích hợp |
| context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ | gợi ý có ngữ cảnh |
| auto-complete/ˈɔːtəʊ kəmˈpliːt/ | tự động hoàn tất |
| dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ | kiểm tra cú pháp động |
| prettyprint/ˈpretɪprɪnt/ | trình trình bày mã |
| breakpoints/ˈbreɪkpɔɪnts/ | điểm dừng |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | thực hiện từng bước |
| report window/rɪˈpɔːt ˈwɪndəʊ/ | Cửa sổ báo cáo |
Không ai tin rằng máy tính có thể tự viết chương trình của nó
- Năm 1952, Grace Hopper đã tạo ra trình biên dịch đầu tiên, một chương trình biến ký hiệu của lập trình viên thành lệnh máy. "Không ai tin điều đó," bà nói sau này. "Tôi có một trình biên dịch đang chạy và không ai dám chạm vào nó. Họ bảo tôi rằng máy tính chỉ có thể làm toán học."
- Mọi ngôn ngữ bạn đã sử dụng kể từ đó đều dựa trên ý tưởng đó: bạn viết mã nguồn cho con người, và một trình dịch tạo ra mã máy mà bộ xử lý thực thi.
- Có ba loại trình dịch và một loại lai nổi tiếng, và đề thi muốn bạn nói rõ khi nào thì dùng cái nào, và tại sao.
- Bài học này nói về các trình dịch, sự đánh đổi giữa biên dịch và diễn giải, sự kết hợp của cả hai trong Java, và các công cụ mà IDE cung cấp xung quanh chúng.
Mã nguồn, mã máy và trình tổng hợp
- Bộ xử lý chỉ thực thi mã máy. Một trình dịch chuyển đổi một chương trình viết cho con người thành mã đó.
- Một trình tổng hợp dịch ngôn ngữ assembly sang mã máy: mỗi hướng dẫn mnemonic,
LDD,ADD,JMP, trở thành đúng một hướng dẫn mã máy, và các nhãn cũng như địa chỉ biểu tượng được thay thế bằng địa chỉ thực. - Assembly được sử dụng nơi lập trình viên cần kiểm soát trực tiếp phần cứng: trình điều khiển thiết bị, hệ thống nhúng, các vòng lặp bên trong của trò chơi.
Gán mỗi công cụ dịch cho chức năng của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
TrìnhIOException: assembly→mã máy; trình biên dịch: tất cả cùng lúc thành tập tin thực thi; trình giải thích: từng dòng tại thời điểm chạy.
Trình biên dịch
- Một trình biên dịch chuyển đổi toàn bộ chương trình cấp cao thành mã máy, mã đối tượng, trước khi chương trình được chạy. Nó tạo ra một tệp thực thi và báo cáo tất cả các lỗi cú pháp cùng lúc, dưới dạng danh sách, vào cuối quá trình chuyển đổi.
- Nó không chạy chương trình. Khi mã đã sạch (không còn lỗi), tệp thực thi có thể chạy mà không cần cài đặt trình biên dịch, bao nhiêu lần tùy thích.
- Chạy nhanh vì không có quá trình nào được chuyển đổi trong lúc thực thi; nhưng mã máy bị giới hạn ở một bộ xử lý và hệ điều hành cụ thể.
Quá trình biên dịch: từ nguồn đến chương trình đang chạy
Trình bày cách trình biên dịch hoạt động — dịch toàn bộ chương trình một lần trước khi chạy. So sánh với trình giải thích, người dịch và chạy từng dòng một.
Trình biên dịch khác với trình giải thích vì nó:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trình biên dịch dịch tất cả cùng lúc thành tập tin thực thi chạy mà không cần trình biên dịch. Trình giải thích chạy từng dòng.
Sắp xếp quá trình biên dịch theo thứ tự, từ viết code đến chạy.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Trình biên dịch dịch toàn bộ chương trình một lần thành tập tin thực thi; tập tin đó sau đó chạy mà không cần trình biên dịch.
Trình giải thích
- Một trình giải thích chuyển đổi một câu lệnh của chương trình cấp cao tại một thời điểm và thực thi nó ngay lập tức trước khi chuyển sang câu lệnh tiếp theo.
- Không tạo ra tệp thực thi. Nó dừng lại tại lỗi đầu tiên gặp phải và báo cáo lỗi đó kèm theo dòng code, giúp bạn sửa lỗi và chạy lại.
- Cả mã nguồn và trình giải thích đều phải có mặt mỗi lần chương trình chạy, và mỗi lần chạy lại sẽ thực hiện chuyển đổi, nên tốc độ thực thi chậm hơn; nhưng cùng một mã nguồn có thể chạy ở bất cứ đâu có trình giải thích.

Chuyển đổi một lần và phân phối, hoặc chuyển đổi dần dần
Khi nào trình giải thích báo lỗi?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trình giải thích chạy từng dòng, nên nó báo lỗi ngay khi chạm đến dòng đó — hữu ích trong quá trình phát triển.
Trình giải thích không tạo ra tập tin thực thi độc lập, nên bản thân trình giải thích phải được cài đặt để chạy chương trình.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trình giải thích dịch và chạy từng dòng mỗi lần — không có tập tin thực thi riêng biệt để phân phối, khác với trình biên dịch.
Lợi ích và nhược điểm, như được liệt kê trong bảng chấm điểm
| Trình biên dịch | Trình giải thích | |
|---|---|---|
| Tốc độ thực thi | Nhanh, đã là mã máy | Chậm hơn, được chuyển đổi ở mỗi lần chạy |
| Những gì người dùng cần | Chỉ cần tệp thực thi; mã nguồn giữ bí mật | Mã nguồn và trình giải thích |
| Tìm lỗi | Tất cả được liệt kê cùng nhau sau khi chuyển đổi | Mỗi lỗi được báo cáo tại dòng tương ứng, trong quá trình phát triển |
| Thay đổi mã | Biên dịch lại toàn bộ chương trình | Chỉnh sửa và chạy lại ngay lập tức |
| Khả năng di chuyển | Một nền tảng; cần biên dịch lại cho mỗi nền tảng | Chạy được ở bất cứ nơi nào có trình giải thích |
Bạn nên chọn trình biên dịch khi:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Các tập tin thực thi đã biên dịch thì nhanh và độc lập. Trình giải thích phù hợp với phát triển nhanh và script di động.
Điểm nào ủng hộ việc sử dụng trình giải thích trong quá trình phát triển một chương trình? Chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Chu kỳ sửa-chạy nhanh và lỗi được báo đúng dòng là thế mạnh của trình giải thích. Tốc độ chạy là thế mạnh của trình biên dịch.
Ví dụ minh họa: trình giải thích trong lúc viết, trình biên dịch khi hoàn tất
- Một nhà phát triển sử dụng trình giải thích trong lúc viết chương trình và trình biên dịch khi chương trình hoàn tất. Giải thích cách sử dụng từng công cụ. [4]
- Trong quá trình phát triển, trình giải thích chạy ngay chương trình chưa hoàn chỉnh, không chờ đợi quá trình chuyển đổi đầy đủ. Khi gặp lỗi, nó báo cáo dòng code, giúp nhà phát triển sửa lỗi và chạy lại ngay lập tức: chu kỳ chỉnh sửa-chạy nhanh giúp việc gỡ lỗi dễ dàng hơn.
- Khi chương trình hoàn tất, trình biên dịch chuyển đổi toàn bộ chương trình thành tệp thực thi chạy nhanh hơn, không cần trình chuyển đổi trên máy tính của người dùng, và giữ bí mật mã nguồn.
- Hai điểm cho mỗi công cụ: những gì nó làm và tại sao phù hợp với giai đoạn đó.
Java: một phần được biên dịch, một phần được giải thích
- Mã nguồn Java được biên dịch thành bytecode, một dạng trung gian nhỏ gọn, di động mà không phải là mã máy cho bất kỳ bộ xử lý thực tế nào.
- Một máy ảo, JVM, sau đó giải thích bytecode trên mọi máy tính nó chạy trên đó, hoặc sử dụng biên dịch tức thì (just-in-time compilation) để biến các phần hoạt động nhiều nhất thành mã gốc trong khi chương trình đang chạy.
- Giai đoạn biên dịch bắt lỗi cú pháp sớm; giai đoạn giải thích cho phép một tệp bytecode chạy ở bất cứ đâu có JVM. Java ở chế độ console, một chương trình văn bản chạy từ dòng lệnh, là ví dụ trong chương trình học.

Viết một lần, chạy mọi nơi: một tệp bytecode, một JVM cho mỗi nền tảng
Java biên dịch thành bytecode chạy trên JVM. Lợi ích chính là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Bytecode độc lập với nền tảng; bất kỳ JVM nào cũng có thể chạy nó (với JIT mang lại tốc độ gần như native cho đoạn mã nóng).
Trình biên dịch của Java tạo ra ____ độc lập nền tảng, mà sau đó máy ảo sẽ giải thích.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Bytecode là dạng trung gian: được biên dịch một lần, sau đó chạy bởi JVM trên bất kỳ nền tảng nào. Đó là lý do Java vừa được biên dịch một phần, vừa được giải thích một phần.
Ví dụ minh họa: tại sao biên dịch sang bytecode rồi mới giải thích?
- Giải thích tại sao Java được biên dịch sang bytecode thay vì trực tiếp sang mã máy.
- Trình biên dịch tạo ra mã máy cho một bộ xử lý và hệ điều hành cụ thể, do đó một chương trình được biên dịch trên một máy sẽ không chạy được trên máy khác.
- Trình biên dịch của Java nhắm đến máy ảo thay vì vậy, nên bytecode giống hệt nhau ở mọi nơi. Mỗi nền tảng cung cấp JVM riêng của nó để giải thích bytecode đó.
- Giá phải trả là tốc độ: giải thích bytecode chậm hơn chạy mã gốc, đó là lý do JVM thêm biên dịch tức thì cho các phần 'nóng' (hoạt động thường xuyên).
Môi trường phát triển tích hợp (IDE) và bốn nhóm tính năng của nó
- Một môi trường phát triển tích hợp (IDE) là một ứng dụng duy nhất để viết, chuyển đổi, chạy và gỡ lỗi chương trình. Chương trình học nhóm các tính năng của nó thành bốn nhóm.
- Dành cho việc viết mã: nhắc nhở liên quan ngữ cảnh xuất hiện các định danh, từ khóa hoặc tham số phù hợp tại vị trí đó; tự động điền hoàn thành tên gọi.
- Dành cho phát hiện lỗi ban đầu: kiểm tra cú pháp động gạch chân sai sót khi bạn gõ, trước khi chuyển đổi. Dành cho hiển thị: prettyprint hiển thị từ khóa, định danh, chuỗi và bình luận bằng các màu sắc khác nhau với khoảng cách đồng nhất; mở rộng và thu gọn ẩn phần thân của khối code để bạn thấy sơ đồ tổng quan.
- Dành cho gỡ lỗi: điểm dừng tạm dừng chương trình tại một dòng được đánh dấu; bước đơn chạy từng dòng một; cửa sổ hiển thị giá trị của biến và biểu thức; cửa sổ báo cáo liệt kê lỗi, cảnh báo và đầu ra.

Viết mã, phát hiện lỗi, hiển thị, gỡ lỗi
Tính năng nào là một phần của trình kiểm tra lỗi (debugger) trong IDE?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trình kiểm tra lỗi cho phép bạn đặt điểm dừng, bước qua code từng dòng, và kiểm tra giá trị biến.
Gán mỗi tính năng IDE với nhóm chương trình học tương ứng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Lập trình, phát hiện lỗi ban đầu, trình bày, kiểm tra lỗi: bốn nhóm mà chương trình học nêu tên, mỗi nhóm một tính năng ở đây.
Ví dụ minh họa: tìm lỗi trong Calculate()
- Hàm
Calculate()trả về một giá trị không mong muốn. Mô tả cách các tính năng gỡ lỗi của IDE giúp tìm ra nguyên nhân. [4] - Đặt điểm dừng ở dòng đầu tiên của
Calculate(), để chương trình tạm dừng ở đó thay vì chạy qua. - Bước đơn qua hàm từng dòng một. Sau mỗi bước, đọc giá trị của các biến và của bất kỳ biểu thức nào bạn yêu cầu IDE theo dõi, và so sánh chúng với những gì bạn dự kiến.
- Dòng đầu tiên sau đó có giá trị sai chính là nơi xảy ra lỗi logic. Cửa sổ báo cáo hiển thị bất kỳ thông báo lỗi thời gian chạy và đầu ra nào dọc đường.

Tạm dừng, bước, kiểm tra
Sắp xếp các bước tìm kiếm lỗi logic với trình kiểm tra lỗi theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Tạm dừng, bước, kiểm tra, so sánh, xác định vị trí. Mỗi cái là một trong các tính năng kiểm tra lỗi mà chương trình học liệt kê.
Điểm số dễ mất
- Trình biên dịch không chạy chương trình. Nó dịch toàn bộ sang ngôn ngữ máy và tạo ra một tập tin thực thi.
- Trình giải thích dừng lại ở lỗi đầu tiên; trình biên dịch liệt kê tất cả. Đừng hoán đổi hai khái niệm này.
- "Nhanh hơn" cần "tại thời gian chạy", và "di động" cần "cùng nguồn code chạy được ở bất cứ đâu có trình giải thích".
- Phân loại các tính năng IDE vào bốn nhóm của chương trình: điểm ngắt là gỡ lỗi, căn chỉnh đẹp là trình bày, yêu cầu gợi ý theo ngữ cảnh là lập trình. Mã byte không phải là mã máy.
Bạn đã nắm vững
- Assembler: một lệnh assembly tương ứng với một lệnh mã máy · Compiler: toàn bộ chương trình, trước khi chạy, tạo ra file thực thi, liệt kê tất cả lỗi · Interpreter: từng câu lệnh một, thực thi ngay, dừng tại lỗi đầu tiên, không tạo file thực thi
- Compiler để tốc độ, phân phối và bảo mật source code; Interpreter cho chu kỳ sửa-chạy nhanh, tính di động và người mới bắt đầu
- Java biên dịch sang mã byte di động mà JVM sẽ giải thích hoặc JIT-compile: một phần đã编译, một phần đang được giải thích
- Tính năng IDE trong bốn nhóm: lập trình (gợi ý theo ngữ cảnh), phát hiện lỗi ban đầu (kiểm tra cú pháp động), trình bày (căn chỉnh đẹp, mở rộng và thu gọn), gỡ lỗi (điểm ngắt, bước đơn, biến, cửa sổ báo cáo)