Chính xác mục tiêu biên dịch là gì?


17

Tôi tiếp tục nghe thuật ngữ và tất cả các tìm kiếm google dẫn tôi đến các bài viết về trình biên dịch. Tôi chỉ muốn hiểu thuật ngữ biên dịch mục tiêu có nghĩa là gì: |

CẬP NHẬT: Để đưa ra một số bối cảnh: Tôi đã nghe nói rằng lắp ráp web là mục tiêu biên dịch cho các ngôn ngữ khác như C, C ++, Rust, v.v.


Tôi khuyên bạn nên đọc các bài viết về trình biên dịch.

4
Bài viết về trình biên dịch giả định bạn đã biết điều này rồi. Đó là một câu hỏi hợp lý.
Karl Bielefeldt

Tôi đã suy nghĩ nhiều hơn về các bài viết theo phong cách wikipedia. Và tôi đồng ý câu hỏi hợp lý. Đó chỉ là một lời đề nghị, không phải là một lời chỉ trích.

4
Câu hỏi là hợp lý, nhưng viết xấu. Thuật ngữ "mục tiêu" có thể có ý nghĩa khác nhau, vì vậy tôi khuyên bạn nên đưa ra một tài liệu tham khảo hoặc bối cảnh nhiều hơn nơi bạn nghe hoặc đọc về nó.
Doc Brown

@DocBrown Tôi đã nghe thấy nó trong nhiều ngữ cảnh, nhưng gần đây nhất trong bối cảnh lắp ráp web là mục tiêu biên dịch cho các ngôn ngữ khác.
ScionOfBytes

Câu trả lời:


17

Trình biên dịch về bản chất là các trình dịch lấy đầu vào bằng một ngôn ngữ và tạo đầu ra bằng ngôn ngữ khác. Ví dụ: trình biên dịch của Phần mềm Eiffel lấy đầu vào bằng ngôn ngữ Eiffel và tạo C. GCC cho Intel đọc đầu vào bằng ngôn ngữ C và tạo ra lắp ráp x86. Trình biên dịch GAS cho Intel lấy x86 lắp ráp và tạo mã đối tượng x86. Tất cả ba trong số này là trình biên dịch kỹ thuật.

Bất kể định dạng, đầu vào được đọc bởi trình biên dịch được gọi là nguồn và đầu ra được gọi là đích . Thuật ngữ sau được lấy từ một trong những định nghĩa của nó, "kết quả dự định."

Phần lớn các trình biên dịch được thiết kế để tạo mã lắp ráp hoặc mã đối tượng cho một bộ xử lý hoặc kiến ​​trúc cụ thể. Do đó, mục tiêu thường được sử dụng để chỉ kiến ​​trúc chứ không phải định dạng đầu ra.

Mục tiêu của trình biên dịch không cần giống với kiến ​​trúc nơi nó chạy và trong trường hợp xảy ra, chương trình được gọi là trình biên dịch chéo . (Ví dụ: GCC có thể được xây dựng để chạy trên các hệ thống x86 để biên dịch C thành lắp ráp ARM.)

Ngoài ra, có các trình biên dịch đơn có khả năng tạo đầu ra cho các mục tiêu khác nhau tùy thuộc vào đầu vào, chẳng hạn như các công tắc trên dòng lệnh. Chúng được gọi là trình biên dịch đa mục tiêu .


2
Một lưu ý phụ, có thể đáng nói là thuật ngữ này cũng được sử dụng ở dạng tổng quát hơn trong bối cảnh của các hệ thống xây dựng - mục tiêu là đầu ra từ bất kỳ bước xây dựng nào, không nhất thiết phải là một hành động biên dịch (ví dụ: tạo một trình cài đặt).
BartoszKP

2
trình biên dịch là dịch giả, không phải bộ lọc.

1
@Birfl. chắc chắn. "Tr" có nghĩa là dịch, không phải bộ lọc. bộ lọc không phải là dịch giả, điều này chỉ rõ ràng.

2
@Birfl: tôi không đi bằng wikipedia. chỉ tạo ra một luồng từ các ssys khác. sự khác biệt giữa các bộ lọc và dịch giả rất nổi tiếng. một bộ lọc bao gồm / loại trừ, dựa trên một vị ngữ. nó không biến đổi. lọc một danh sách các số nguyên bằng cách chẵn? và bạn nhận được số nguyên thậm chí không được truyền. dịch cùng một danh sách bằng cách sử dụng inc và bạn có được một phiên bản chuyển đổi của danh sách gốc.

1
tài khoản biên dịch của bạn vẫn ổn trừ thuật ngữ "bộ lọc".

4

Trong dịch thuật, dù ngôn ngữ là ngôn ngữ tự nhiên như tiếng Anh hay ngôn ngữ nhân tạo như C, chúng tôi sử dụng nguồn thuật ngữ và mục tiêu để nói về đầu vàođầu ra của hệ thống dịch thuật. Trong dịch thuật ngôn ngữ tự nhiên, hệ thống là bộ não con người có thẩm quyền có khả năng dịch giữa hai ngôn ngữ. Trong các ngôn ngữ lập trình, nó là một trình biên dịch.

Do đó, nguồn cho trình biên dịch là ngôn ngữ lập trình (C), trong khi mục tiêu là mã byte (hướng dẫn cấp độ máy). Chúng ta thường sử dụng đích trong quá trình biên dịch vì các hệ thống khác nhau (kiến trúc CPU) có các tập lệnh khác nhau, ví dụ ARM, MIPS, v.v ... Trình biên dịch cần biết tập lệnh nào là mục tiêu, để nó có thể tạo đầu ra chính xác (mã byte).


0

WebAssemby là một cái gì đó mới nhất và lớn nhất, giúp chuyển đổi mã c / c ++ ở định dạng nhị phân.

  • WebAssugging nhằm mục đích thực thi ở tốc độ gốc bằng cách tận dụng phần cứng thông thường. Nó được thiết kế để tích hợp với nền tảng web.

Đây là liên kết nơi một trong những ứng dụng bạn có thể thấy, tốc độ chuyển đổi chương trình giai thừa đơn giản trong mã máy.

Kiểm tra con thú này, https://godbolt.org/

Bạn có thể sử dụng chương trình mẫu này để chạy trong trang web đó để xem lắp ráp.

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Xác định định dạng nhị phân di động, kích thước và thời gian tải hiệu quả để phục vụ như một mục tiêu biên dịch có thể được biên dịch để thực thi ở tốc độ gốc bằng cách tận dụng các khả năng phần cứng phổ biến có sẵn trên nhiều nền tảng, bao gồm cả di động và IoT.

Một số thông tin cơ bản về máy chủ và mục tiêu, cách ngôn ngữ lập trình được dịch sang 10101010.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC chuyển đổi mã C / C ++ thành mã lắp ráp. Một công cụ gọi là "trình biên dịch mã" chuyển đổi mã lắp ráp thành mã máy và một công cụ có tên là "trình liên kết" kết nối nhiều tệp mã máy thành một tệp thực thi (.EXE trong Windows). Hầu hết các trình biên dịch này cho phép bạn viết mã trình biên dịch kết quả vào một tệp để bạn có thể xem mã trình biên dịch hoặc sửa đổi nó.

  2. Trình biên dịch và trình liên kết là một phần của chuỗi công cụ, có nghĩa là chúng thường được phân phối cùng với trình biên dịch.

  3. Tuy nhiên, một số trình biên dịch (như Microsoft) chuyển đổi trực tiếp mã C / C ++ sang ngôn ngữ máy để không cần trình biên dịch nữa. Nhiều trình biên dịch này không thể tạo mã trình biên dịch nên bạn không thể ghi mã trình biên dịch vào một tệp.

Nhân tiện: thậm chí còn có các trình biên dịch (không dành cho C / C ++, nhưng đối với các ngôn ngữ lập trình khác) trực tiếp tạo tệp .EXE để không cần trình liên kết.

WebAssugging: https://github.com/WebAssugging/design

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.