Tôi thường mơ tưởng về việc cố gắng xây dựng một ngôn ngữ máy tính cấp cao khác. Các đối tượng sẽ được cố gắng để đẩy phong bì của sự phát triển nhanh chóng, và hiệu suất của kết quả. Tôi sẽ cố gắng xây dựng các thư viện của các hoạt động tối thiểu, được tối ưu hóa khá cao và sau đó cố gắng phát triển các quy tắc ngôn ngữ theo cách mà bất kỳ câu lệnh hoặc biểu thức nào thể hiện được bằng ngôn ngữ sẽ dẫn đến mã tối ưu .. trừ khi những gì được thể hiện là chỉ vốn kém tối ưu.
Nó sẽ biên dịch thành mã byte, mã sẽ được phân phối và sau đó đến mã máy khi được cài đặt hoặc khi môi trường bộ xử lý thay đổi. Vì vậy, khi một tập tin thực thi được tải, sẽ có một bộ tải sẽ kiểm tra bộ xử lý và một vài byte dữ liệu điều khiển trong đối tượng, và nếu hai phần khớp nhau, thì phần thực thi của đối tượng có thể được tải ngay lập tức, nhưng nếu không , sau đó mã byte cho đối tượng đó sẽ phải được biên dịch lại và phần thực thi được cập nhật. (Vì vậy, nó không phải là chỉ trong thời gian biên dịch - đó là trên chương trình cài đặt hoặc trên CPU thay đổi biên dịch.) Phần tải sẽ rất ngắn và ngọt ngào, nó sẽ được trong '386 mã vì vậy nó sẽ không cần phải được biên dịch. Nó sẽ chỉ tải trình biên dịch mã byte nếu cần, và nếu như vậy, nó sẽ tải một đối tượng trình biên dịch nhỏ và chặt, và tối ưu hóa cho kiến trúc đã phát hiện. Lý tưởng nhất, bộ nạp và trình biên dịch sẽ ở lại thường trú, một khi được nạp, và sẽ chỉ có một ví dụ của cả hai.
Dù sao, tôi muốn trả lời ý tưởng rằng bạn phải có ít nhất hai lần chuyền - tôi không nghĩ rằng tôi hoàn toàn đồng ý. Có, tôi sẽ sử dụng một lần thứ hai thông qua mã được biên dịch, nhưng không phải thông qua mã nguồn.
Điều bạn làm là khi bạn bắt gặp biểu tượng, kiểm tra bảng băm biểu tượng của bạn và nếu không có mục nhập, hãy tạo một bảng và lưu trữ điểm đánh dấu 'chuyển tiếp' trong mã được biên dịch của bạn bằng con trỏ vào bảng mục nhập. Khi bạn đi qua các định nghĩa cho nhãn và biểu tượng, cập nhật (hoặc đưa dữ liệu mới vào) bảng biểu tượng của bạn.
Đối tượng được biên dịch riêng lẻ không bao giờ lớn đến mức chúng chiếm nhiều bộ nhớ, vì vậy, chắc chắn tất cả mã được biên dịch sẽ được giữ trong bộ nhớ cho đến khi toàn bộ nội dung sẵn sàng được viết ra. Cách bạn giữ chân bộ nhớ nhỏ của bạn chỉ đơn giản là bằng cách chỉ đối phó với một đối tượng tại một thời điểm, và bằng cách không bao giờ giữ nhiều hơn một bộ đệm nhỏ đầy đủ mã nguồn trong bộ nhớ tại một thời điểm. Có thể là 64k hay 128k hay gì đó. (Một cái gì đó đủ lớn mà các chi phí liên quan trong việc thực hiện cuộc gọi để tải bộ đệm từ đĩa là nhỏ so với thời gian cần để đọc dữ liệu từ đĩa, để streaming được tối ưu hóa.)
Vì vậy, một vượt qua thông qua luồng nguồn cho một đối tượng, sau đó bạn ghép các mảnh của bạn lại với nhau, thu thập thông tin tham chiếu cần thiết từ bảng băm khi bạn đi và nếu dữ liệu không có - đó là lỗi biên dịch. Đó là quá trình tôi sẽ bị cám dỗ để thử.
này nhắc nhở tôi về những thử nghiệm lập trình từ những năm 1980, cho một đĩa mềm với chỉ command.com và debug.com vào nó, những gì loại của một môi trường phát triển bạn sẽ tạo cho bản thân. Tôi biết làm thế nào những người Forth trả lời. – zumalifeguard