Clang
Tập tin:LLVM Logo.svg | |
Clang đang được sử dụng để biên dịch Chicken | |
Thiết kế bởi | Chris Lattner |
---|---|
Phát triển bởi | LLVM Developer Group |
Phát hành lần đầu | 26 tháng 9 năm 2007[1] |
Phiên bản ổn định | 8.0.1[2]
/ 19 tháng 7 năm 2019 |
Bản xem thử | 10
|
Kho mã nguồn | |
Viết bằng | C++ |
Hệ điều hành | Giống Unix |
Nền tảng | LLVM (ARMv7, AArch64, IA-32, x64, ppc64le)[3] |
Thể loại | Trình biên dịch |
Giấy phép | UIUC (BSD-style); relicensing in progress to Apache License 2.0[4] |
Website | clang |
Clang /ˈklæŋ/ [5] là một front-end trình biên dịch (compiler front end) cho các ngôn ngữ lập trình C, C ++, Objective-C , cũng như khung OpenMP,[6] OpenCL, RenderScript và CUDA. Nó sử dụng cơ sở hạ tầng trình biên dịch LLVM làm mặt sau (back end) của nó và là một phần của chu trình phát hành LLVM kể từ LLVM 2.6.
Nó được thiết kế để hoạt động như một sự thay thế thả xuống cho Bộ trình dịch GNU (GNU Compiler Collection - GCC), hỗ trợ hầu hết các cờ biên dịch và các phần mở rộng ngôn ngữ không chính thức.[7] Những người đóng góp của nó bao gồm Apple, Microsoft, Google, ARM, Sony, Intel và Advanced Micro Devices (AMD). Đây là phần mềm nguồn mở, với mã nguồn được phát hành theo Giấy phép của Đại học Illinois / NCSA, là một giấy phép phần mềm miễn phí cho phép.
Dự án Clang bao gồm front-end Clang, máy phân tích tĩnh và một số công cụ phân tích mã.[8]
Nền tảng
[sửa | sửa mã nguồn]Bắt đầu từ năm 2005, Apple Inc. đã sử dụng rộng rãi LLVM trong một số sản phẩm thương mại,[9] bao gồm iOS SDK và Xcode 3.1.
Một trong những ứng dụng đầu tiên của LLVM là trình biên dịch mã OpenGL cho OS X, chuyển đổi các lời gọi hàm OpenGL thành các lời gọi hàm cơ bản hơn cho các bộ xử lý đồ họa (GPU) không hỗ trợ một số tính năng nhất định. Điều này cho phép Apple hỗ trợ OpenGL trên các máy tính sử dụng chipset Intel Graphics Media Accelerator (GMA), tăng hiệu suất trên các máy đó.[10] Đối với các GPU hỗ trợ nó, mã được biên dịch để khai thác triệt để phần cứng bên dưới, nhưng trên các máy GMA, LLVM biên dịch cùng mã OpenGL thành các chương trình con để đảm bảo tiếp tục hoạt động đúng chức năng.
LLVM ban đầu được dự định sử dụng cho front-end của GCC, nhưng GCC hóa ra lại gây ra một số vấn đề cho các nhà phát triển LLVM và tại Apple. Mã nguồn GCC là một hệ thống lớn và hơi cồng kềnh để các nhà phát triển làm việc với; như một nhà phát triển GCC lâu năm đã đề cập đến LLVM, "Cố gắng tạo ra điệu nhảy hà mã không thực sự thú vị lắm".[11]
Phần mềm của Apple sử dụng rất nhiều Objective-C, nhưng front-end Objective-C trong GCC là ưu tiên thấp đối với các nhà phát triển GCC. Ngoài ra, GCC không tích hợp trơn tru vào môi trường phát triển tích hợp (IDE) của Apple. Cuối cùng, GCC được cấp phép theo các điều khoản của Giấy phép Công cộng GNU (GPL) phiên bản 3, yêu cầu các nhà phát triển phân phối các tiện ích mở rộng hoặc các phiên bản sửa đổi của GCC để cung cấp mã nguồn của họ, trong khi LLVM có giấy phép giống BSD [12] mà không có yêu cầu như vậy.
Apple đã chọn phát triển một giao diện biên dịch mới từ đầu, hỗ trợ C, Objective-C và C ++. Dự án "clang" này đã được mở nguồn vào tháng 7 năm 2007
Thiết kế
[sửa | sửa mã nguồn]Lịch sử phát hành
[sửa | sửa mã nguồn]Bảng này chỉ trình bày các bước quan trọng và phát hành trong lịch sử Clang.
Ngày | Điểm nổi bật |
---|---|
11 tháng 7 năm 2007 | Clang frontend được phát hành theo giấy phép nguồn mở |
25 tháng 2 năm 2009 | Clang / LLVM có thể biên dịch kernel FreeBSD hoạt động.[13] |
16 tháng 3 năm 2009 | Clang / LLVM có thể biên dịch kernel BSD DragonFly hoạt động.[14] |
23 tháng 10 năm 2009 | Clang 1.0 được phát hành, với LLVM 2.6 lần đầu tiên. |
Tháng 12 năm 2009 | Tạo mã cho C và Objective-C đạt chất lượng sản xuất. Hỗ trợ cho C ++ và Objective-C ++ vẫn chưa hoàn thành. Clang C ++ có thể phân tích cú pháp GCC 4.2 libstdc ++ và tạo mã làm việc cho các chương trình không tầm thường,[12] và có thể tự biên dịch.[15] |
Ngày 2 tháng 2 năm 2010 | Clang tự lưu trữ.[16] |
20 tháng 5 năm 2010 | Phiên bản mới nhất của Clang đã xây dựng các thư viện Boost C ++ thành công và vượt qua gần như tất cả các bài kiểm tra.[17] |
Ngày 10 tháng 6 năm 2010 | Clang / LLVM trở thành một phần không thể thiếu của FreeBSD, nhưng trình biên dịch mặc định vẫn là GCC.[18] |
25 tháng 10 năm 2010 | Clang / LLVM có thể biên dịch một nhân Linux đã được sửa đổi. |
Tháng 1 năm 2011 | Công việc sơ bộ đã hoàn thành để hỗ trợ dự thảo tiêu chuẩn C ++ 0x, với một vài tính năng mới của dự thảo được hỗ trợ trong phiên bản phát triển Clang.[19][20] |
Ngày 10 tháng 2 năm 2011 | Clang có thể biên dịch một máy ảo Java HotSpot đang hoạt động.[21] |
Ngày 19 tháng 1 năm 2012 | Clang trở thành một thành phần tùy chọn trong hệ thống xây dựng đa nền tảng NetBSD, nhưng GCC vẫn được mặc định.[22] |
29 tháng 2 năm 2012 | Clang 3.0 có thể xây dựng lại 91,2% kho lưu trữ Debian.[23] |
29 tháng 2 năm 2012 | Clang trở thành trình biên dịch mặc định trong MINIX 3 [24] |
Ngày 12 tháng 5 năm 2012 | Clang / LLVM đã thông báo thay thế GCC trong FreeBSD.[25] |
Ngày 5 tháng 11 năm 2012 | Clang trở thành trình biên dịch mặc định trong FreeBSD 10.x.[26] |
18 tháng 2 năm 2013 | Clang / LLVM có thể biên dịch Kernel Android Linux được sửa đổi hoạt động cho Nexus 7.[27][28] |
Ngày 19 tháng 4 năm 2013 | Clang là tính năng C ++ 11 hoàn tất.[29] |
Ngày 6 tháng 11 năm 2013 | Clang là tính năng C ++ 14 hoàn tất.[30] |
Ngày 11 tháng 9 năm 2014 | Clang 3.5 có thể xây dựng lại 94,3% kho lưu trữ Debian. Tỷ lệ thất bại đã giảm 1,2% mỗi lần phát hành kể từ tháng 1 năm 2013, chủ yếu là do khả năng tương thích với cờ GCC tăng lên.[31] |
Tháng 10 năm 2016 | Clang trở thành trình biên dịch mặc định cho Android [32] (và sau này chỉ là trình biên dịch được Android NDK hỗ trợ [33]). |
Ngày 13 tháng 3 năm 2017 | Clang 4.0.0 được phát hành |
26 tháng 7 năm 2017 | Clang trở thành trình biên dịch mặc định trong OpenBSD 6.2.[34] |
Ngày 7 tháng 9 năm 2017 | Clang 5.0.0 được phát hành |
Ngày 5 tháng 3 năm 2018 | Clang hiện được sử dụng để xây dựng Google Chrome cho Windows.[35] Mozilla thực hiện thay đổi tương tự cho Firefox vào tháng 9 cùng năm.[36] |
Ngày 8 tháng 3 năm 2018 | Clang 6.0.0 được phát hành |
Ngày 19 tháng 9 năm 2018 | Clang 7.0.0 được phát hành |
Ngày 20 tháng 3 năm 2019 | Clang 8.0.0 được phát hành |
Xem thêm
[sửa | sửa mã nguồn]Tham khảo
[sửa | sửa mã nguồn]- ^ https://www.llvm.org/releases/2.1/docs/ReleaseNotes.html
- ^ https://llvm.org/releases/
- ^ http://releases.llvm.org/download.html
- ^ “License”, LLVM: Developer Policy, llvm.org, truy cập ngày 20 tháng 5 năm 2019
- ^ “simply wonder pronunciation of Clang” (Danh sách thư). Truy cập ngày 22 tháng 9 năm 2015.
- ^ “OpenMP Support”. LLVM Project Blog. Truy cập ngày 28 tháng 3 năm 2016.
- ^ “Clang Language Extensions”. Truy cập ngày 8 tháng 11 năm 2017.
In addition to the language extensions listed here, Clang aims to support a broad range of GCC extensions.
- ^ “Clang Static Analyzer”. LLVM. Truy cập ngày 3 tháng 9 năm 2009.
- ^
Treat, Adam (ngày 19 tháng 2 năm 2005). “mkspecs and patches for LLVM compile of Qt4” (Danh sách thư). Bản gốc lưu trữ ngày 4 tháng 10 năm 2011. Đã bỏ qua tham số không rõ
|mailinglist=
(trợ giúp) - ^ Lattner, Chris (ngày 25 tháng 5 năm 2007). LLVM for OpenGL and other stuff (Slides). LLVM Developers' Meeting.
- ^
Zadeck, Kenneth (ngày 19 tháng 11 năm 2005). “Re: LLVM/GCC Integration Proposal” (Danh sách thư). Đã bỏ qua tham số không rõ
|mailinglist=
(trợ giúp) - ^ a b Clang team, clang: a C language family frontend for LLVM
- ^ Divacky, Roman. “[Announce] clang/llvm can compile booting FreeBSD kernel on i386/amd64”.
- ^ Hornung, Alex. “llvm/clang once more”.
- ^ “Clang can compile LLVM and Clang”. LLVM Project Blog.
- ^ “Clang Successfully Self-Hosts”. LLVM Project Blog.
- ^ Gregor, Doug. “Clang++ Builds Boost!”. LLVM Project Blog.
- ^ Davis, Brad. “FreeBSD Status Reports April - June, 2010”.
- ^ Gregor, Douglas (ngày 26 tháng 1 năm 2011). “New C++0x feature support in Clang” (Danh sách thư). Bản gốc lưu trữ ngày 30 tháng 1 năm 2011. Truy cập ngày 18 tháng 9 năm 2019.
- ^ “C++ and C++'0x Support in Clang”. LLVM.
- ^ Simonis, Volker (ngày 10 tháng 2 năm 2011). “Compiling the HotSpot VM with Clang”. Bản gốc lưu trữ ngày 18 tháng 2 năm 2011. Truy cập ngày 13 tháng 2 năm 2011.
While the overall GCC compatibility is excellent and the compile times are impressive, the performance of the generated code is still lacking behind a recent GCC version.
- ^ Sonnenberger, Jörg (ngày 19 tháng 1 năm 2012). “Status of NetBSD and LLVM”. Bản gốc lưu trữ ngày 21 tháng 9 năm 2016. Truy cập ngày 26 tháng 2 năm 2014.
- ^ Ledru, Sylvestre. “Rebuild of the Debian archive with clang”.
- ^ “Official Minix 3 website: News”.
- ^ Gerzo, Daniel (ngày 12 tháng 5 năm 2012). “FreeBSD Quarterly Status Report January-March, 2012” (Danh sách thư).
- ^ Davis, Brooks (ngày 5 tháng 11 năm 2012). “Heads Up: Clang now the default on x86” (Danh sách thư).
- ^ Webster, Behan (ngày 18 tháng 2 năm 2013). “LLVMLinux: Compiling Android with LLVM” (PDF). Bản gốc (PDF) lưu trữ ngày 12 tháng 5 năm 2014. Truy cập ngày 11 tháng 5 năm 2013.
- ^ Tinti, Vinicius (ngày 17 tháng 3 năm 2013). “LLVMLinux: Nexus 7”. Bản gốc lưu trữ ngày 19 tháng 7 năm 2017. Truy cập ngày 11 tháng 5 năm 2013.
- ^ Du Toit, Stefanus. “Clang is C++11 feature complete as of *just now*!”.
- ^ “[llvm-project] Revision 194194”. Bản gốc lưu trữ ngày 18 tháng 11 năm 2018. Truy cập ngày 18 tháng 9 năm 2019.
- ^ Ledru, Sylvestre. “Rebuild of Debian using Clang 3.5.0”.
- ^ “NDK Revision History | Android Developers”. developer.android.com (bằng tiếng Anh). Truy cập ngày 6 tháng 3 năm 2018.
- ^ “NDK Revision History | Android NDK | Android Developers”. Android Developers (bằng tiếng Anh). Truy cập ngày 30 tháng 4 năm 2018.
- ^ Nagy, Robert (ngày 26 tháng 7 năm 2017). “switch the default compiler on amd64 and i386 to clang” (Danh sách thư).
- ^ “Clang is now used to build Chrome for Windows”. blog.llvm.org. Truy cập ngày 7 tháng 4 năm 2018.
- ^ “1443590 - Use clang-cl for Windows builds we ship to users”. bugzilla.mozilla.org (bằng tiếng Anh). Truy cập ngày 7 tháng 4 năm 2018.
Liên kết ngoài
[sửa | sửa mã nguồn]- Website chính thức
- LLVMdev: Giao diện LLVM C mới: "clang", thông báo (11 tháng 7 năm 2007)
- Bài trình bày: Ted Kremenek - Tìm kiếm lỗi với Máy phân tích tĩnh Clang Lưu trữ 2016-04-04 tại Wayback Machine, slide
- Trình bày: Steve Naroff - Clang Internals Lưu trữ 2016-04-04 tại Wayback Machine, Slides
- Trình bày DevMtg Clang 2009