Tôi đang đọc cuốn sách Các yếu tố của hệ thống máy tính: Xây dựng một máy tính hiện đại từ các nguyên tắc đầu tiên , trong đó có các dự án bao gồm việc xây dựng một máy tính từ các cổng boolean cho đến các ứng dụng cấp cao (theo thứ tự đó). Dự án hiện tại tôi đang thực hiện là viết một trình biên dịch bằng ngôn ngữ cấp cao mà tôi chọn, để dịch từ mã lắp ráp Hack sang mã máy Hack (Hack là tên của nền tảng phần cứng được xây dựng trong các chương trước). Mặc dù phần cứng đã được xây dựng trong một trình giả lập, tôi đã cố gắng giả vờ rằng tôi thực sự xây dựng từng cấp độ chỉ sử dụng các công cụ có sẵn cho tôi tại thời điểm đó trong quy trình thực.
Điều đó nói rằng, nó làm tôi suy nghĩ. Sử dụng ngôn ngữ cấp cao để viết trình biên dịch chương trình của tôi chắc chắn rất tiện lợi, nhưng đối với trình biên dịch chương trình đầu tiên từng được viết (tức là trong lịch sử), có cần phải viết bằng mã máy không, vì đó có phải là tất cả những gì tồn tại vào thời điểm đó không?
Và một câu hỏi tương quan ... ngày hôm nay thì sao? Nếu một kiến trúc CPU hoàn toàn mới xuất hiện, với một tập lệnh hoàn toàn mới và một cú pháp lắp ráp hoàn toàn mới, trình biên dịch sẽ được xây dựng như thế nào? Tôi giả sử bạn vẫn có thể sử dụng ngôn ngữ cấp cao hiện có để tạo nhị phân cho chương trình biên dịch chương trình, vì nếu bạn biết cú pháp của cả ngôn ngữ lắp ráp và ngôn ngữ máy cho nền tảng mới của mình, thì nhiệm vụ viết trình biên dịch chương trình thực sự chỉ là một Nhiệm vụ phân tích văn bản và vốn không liên quan đến nền tảng đó (nghĩa là cần phải viết bằng ngôn ngữ máy của nền tảng đó) ... đó là lý do tôi có thể "gian lận" trong khi viết trình biên dịch Hack của mình vào năm 2012 và sử dụng một số từ trước ngôn ngữ cấp cao để giúp tôi ra.