Apollo-11: Sử dụng bao gồm thay vì một trình liên kết


9

Gần đây đã được số hóa và biến thành repo, mã nguồn máy tính hướng dẫn Apollo 11 ban đầu đã được cung cấp để xem trên Github .

Trong MAIN.agc , tác giả repo nhận xét rằng họ

chia mã nguồn nguyên khối khổng lồ thành các phần nhỏ hơn, dễ quản lý hơn - tức là, thành các tệp # nguồn riêng lẻ.

Một lát sau, tác giả tuyên bố

Có thể được hỏi một cách hợp lý tại sao hàng chục ngàn dòng nguồn được nối bằng phương thức đưa vào, thay vì chỉ đơn giản là lắp ráp các tệp nguồn riêng lẻ và sau đó liên kết chúng để tạo thành tệp thực thi. Câu trả lời là nhóm phát triển ban đầu không có trình liên kết.

Tôi biết các trình liên kết là gì và tôi hiểu quan điểm của chúng - nhưng tôi chưa bao giờ nghe thấy cụm từ (theo như ASM đi) "tham gia bằng phương tiện đưa vào".

Điều đó có nghĩa là gì? Xem xét rằng các trình liên kết là một vấn đề lớn trong lập trình, tôi tò mò không biết sự thay thế của các trình liên kết này bằng "phương tiện bao gồm" là gì và cách thức hoạt động của nó.


7
Một ví dụ về "tham gia bằng phương tiện hòa nhập" sẽ là #includechỉ thị trong C. Nói cách khác, thay vì mã bing được biên dịch trên các thành phần được liên kết với nhau, có vẻ như $ký hiệu bao gồm nội dung của tệp đó, để tạo một tệp nguồn lớn. Một tệp nguồn lớn đó sau đó được biên dịch thành một thực thể duy nhất.
David Arno

1
@DavidArno bình luận của bạn có vẻ như là một câu trả lời tốt hơn so với một trong hai câu trả lời hiện có trên diễn đàn.
Ross Presser

Câu trả lời:


18

Chúng dường như có nghĩa là ghép / chèn văn bản đơn giản. Nói cách khác, mặc dù văn bản nguồn được chia thành các tệp riêng lẻ , chương trình không được chia thành các mô-đun .


-2

Làm thế nào để bao gồm đơn giản so với liên kết?

Vì vậy, việc đưa vào đơn giản được thực hiện bằng cách sử dụng #include "someCFile.c".

Theo mặc định, các trình liên kết sẽ thêm một thư viện thời gian chạy. Với sự bao gồm, điều này sẽ phải được bao gồm.

Tôi nghi ngờ rằng việc bao gồm sẽ chiếm ít không gian hơn vì các đối tượng sẽ không cần phải có các bảng chứa điểm nhập cảnh và các biến có khả năng có tên. Trong liên kết động, bảng điểm nhập phải ở đó. Tôi không chắc chắn nếu liên kết tĩnh sẽ loại bỏ nó hay không, tôi nghi ngờ rằng nó không.

Về tốc độ xử lý, việc đưa vào có thể nhanh hơn một chút (chắc chắn trong trường hợp các thư viện được liên kết động), tuy nhiên nó không linh hoạt, chúng là nhiều ứng dụng không thể chia sẻ cùng một thư viện.

Xem xét kích thước nhị phân, bao gồm sẽ lớn hơn.

Xem xét thời gian biên dịch, bao gồm sẽ mất nhiều thời gian hơn.

Đối với máy tính điều hướng của NASA, việc đưa vào đơn giản là ổn vì máy tính điều hướng chỉ chạy một chương trình.


2
Tôi không nghĩ rằng điều này trả lời câu hỏi "nó là gì và nó hoạt động như thế nào".
tofro

tofro: Tôi đã giải thích "Nó có nghĩa là gì?" như những gì nó có nghĩa từ một quan điểm thực tế về kích thước nhị phân và tốc độ thực hiện.
Robert Baron

"Bao gồm sẽ lớn hơn" - Đừng hiểu điều này. Nếu mã nằm trong, nó ở trong và sử dụng không gian - bất kể nó đi vào nhị phân như thế nào. Thậm chí không đồng ý về thời gian biên dịch - một bản dựng hoàn chỉnh sẽ mất thời gian giống hệt nhau. Bạn chỉ đạt được tốc độ khi thực hiện các bản dựng gia tăng và tôi nghi ngờ điều này đã được thực hiện trong thập niên 60
tofro

Tốc độ thực thi sẽ nhanh hơn vì tất cả các chức năng của một hệ điều hành tối thiểu đều nằm trong khả năng thực thi, vì vậy đây chỉ là các cuộc gọi trái ngược với việc sử dụng các ngắt (Tôi đang xem xét một hệ điều hành tối thiểu như DOS, nơi nó sử dụng các ngắt của 8086 để thực hiện các cuộc gọi hệ thống). Ngoài ra, vì toàn bộ hệ điều hành sẽ được bao gồm, điều này sẽ tiêu tốn nhiều dung lượng hơn so với khi không và sẽ thêm vào thời gian biên dịch.
Robert Baron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.