Friday, 12 December 2014

Phát hiện giật mình về GCC, gcj, g++...

=)) giật tít kênh14 phải gọi là thánh :3

compiler là gì? trình biên dịch là gì?
là một loại phần mềm biến code thành mã máy (thứ mã kỳ diệu để điều khiển máy tính).

Ngày xửa ngày xưa, thời học C, có dùng gcc để compile code C, và mình cứ nghĩ nó chỉ để compile C thôi (G là GNU , CC đoán là C compiler). Đến nay mới phát hiện ra bí mật diệu kỳ này:
GCC là viết tắt của GNU Compiler Collection - một tâp hợp nhiều compiler cho các ngôn ngữ khác nhau bao gồm: C, C++, Objective-C, Java, Fortran, Ada, golang.

Sự thật thì ngày xưa gcc là viết tắt của "GNU C compiler", nhưng đã từ rất lâu rồi, sau khi thêm các compiler khác vào project thì project GCC mới đổi ý nghĩa như vậy.

Java??? wth?
Chính xác là java, và compiler của nó có tên là GCJ , thế nhưng từ ngày Sun công khai mã nguồn của jdk, project GCJ đã chết và cơ bản giờ chỉ còn ở đó cho đẹp.  (tin update cuối cùng của project này check cách đấy 3 giây là "September 22, 2009")

C++? vậy G++ là cái gì?

gcc hoàn toàn có thể compile C++ nhưng nó không thể link được tới thư viện chuẩn của C++ , G++ giúp làm việc này. Tóm lại là nếu code C++ thì hãy dùng g++ cho khoẻ người.

gcc, hay g++ bản chất chỉ là các compiler-driver, chúng là những front-end (phần tiếp xúc với người dùng) và sẽ chọn back-end phù hợp (với C là cc1, với C++ là cc1plus...)

HÌnh vẽ này mô tả cơ chế hoạt động:


Tham khảo thêm ở : http://en.wikibooks.org/wiki/GNU_C_Compiler_Internals/GNU_C_Compiler_Architecture

Định nghĩa lấy từ trang chủ của GCC:
The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, Ada, and Go, as well as libraries for these languages (libstdc++, libgcj,...).
Tham khảo:
http://en.wikipedia.org/wiki/GNU_Compiler_Collection
http://vi.wikipedia.org/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch