خلاصه » کامپایلر ها

کامپایلر چیست ؟

 

مترجم یا همگردان یا کامپایلر (Compiler)  برنامه یا مجموعه‌ای از برنامه‌های کامپیوتری است که متنی از زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل می‌کند. خروجی این برنامه ممکن است برای پردازش شدن توسط برنامه دیگری مثل پیونددهنده مناسب باشد یا فایل متنی باشد که انسان نیز بتواند آنرا بخواند.

مهم‌ترین علت استفاده از ترجمه کد مبدا، ایجاد برنامه اجرایی می‌باشد. برعکس برنامه‌ای که زبان برنامه‌نویسی سطح پایین را به بالاتر تبدیل می‌کند را مترجم‌وارون گوییم. ترجمه کامل کد منبع برنامه‌ای از یک زبان سطح بالا به کد شیء، پیش از اجرای برنامه را همگردانی یا کامپایل می‌گویند به بیان ساده، کامپایلر برنامه‌ای است که یک برنامه نوشته شده در یک زبان خاص ساخت‌یافته را خوانده و آن را به یک برنامه مقصد (Target Language) تبدیل می‌نماید. در یکی از مهم‌ترین پروسه‌های این تبدیل، کامپایلر وجود خطا را در برنامه مبدأ اعلام می‌نماید.

انواع کامپایلر ها که از طرف شرکت های سازنده و توسعه دهنده ارائه شده به صورت زیر اومده و نسخهC++‎‎ 11  فقط روی کامپایلر های زیر قابل اجرا است.

MSVC-2012, 2013, 2015, Gcc 4.9, Clang 3.3, Intel 13.0

جدول زیر نشان دهنده وضعیت کامپایلر ها در رابطه با پشتیبانی از ویژگی های نسخه 11، 14 و 17 میباشد.

ویژگی های زبان صفحه ها ویرایش
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
alignas N2341 c++11 4.8 3.0 11.0*
14.0
4.8 15.0 13.1.2* 5.13 Yes 8.4 2015
alignof N2341 c++11 4.5 2.9 14.0 4.8 15.0 13.1.2* 5.13 Yes 8.4 2015
Atomic operations N2427 c++11 4.4 3.1 11.0 Yes 13.0 13.1.2* 5.14 Yes 8.4 2015
auto N1984(v1.0) c++11 4.4(v1.0) Yes 10.0(v0.9) 4.1(v0.9) 11.0(v0.9)
12.0(v1.0)
11.1(v1.0) 5.13 Yes 8.4 2015 A.06.25
C99 preprocessor N1653 4.3 Yes 14.0* 4.1 11.1 10.1 5.9 Yes 8.4 2015 A.06.25 Yes
constexpr N2235 c++11 4.6 3.1 14.0* 4.6 13.0*
14.0
12.1*
13.1
5.13 Yes 8.4 2015 A.06.28
decltype v1.0: N2343

v1.1: N3276

c++11 4.3(v1.0)
4.8.1(v1.1)
2.9 10.0(v1.0)
11.0(v1.1)
4.1(v1.0) 11.0(v1.0)
12.0(v1.1)
11.1(v1.0) 5.13 Yes 8.4 2015 A.06.25 8.52(v1.0)
Defaulted and deleted functions N2346 c++11 4.4 3.0 12.0 4.1 12.0 13.1 5.13 Yes 8.4 2015 A.06.25
Delegating constructors N1986 c++11 4.7 3.0 12.0 4.7 14.0 11.1 5.13 Yes 8.4 2015 A.06.28
Explicit conویرایش operators N2437 c++11 4.5 3.0 12.0 4.4 13.0 12.1 5.13 Yes 8.4 2015 A.06.27
Extended friend declarations N1791 c++11 4.7 2.9 10.0*
12.0
4.1 11.1*
12.0
11.1 5.13 Yes 8.4 2015 A.06.25
extern template N1987 c++11 3.3 Yes 6.0 3.9 9.0 11.1 5.13 Yes 8.4 2015 A.06.25
Forward enum declarations N2764 c++11 4.6 3.1 11.0 4.5 11.1*
14.0
12.1 5.13 Yes 8.4 2015
Inheriting constructors N2540 c++11 4.8 3.3 14.0 4.8 15.0 13.1.1* 5.13 Yes 8.4 2015
Initializer lists N2672 c++11 4.4 3.1 12.0 4.5 13.0*
14.0
13.1.2* 5.13 Yes 8.4 2015 A.06.28
Lambda expressions v0.9: N2550

v1.0: N2658
v1.1: N2927

c++11 4.5(v1.1) 3.1 10.0(v1.0)
11.0(v1.1)
4.1(v1.1) 12.0(v1.1) 13.1.2* 5.13 Yes 8.4 2015 A.06.25
Local and unnamed types as template parameters N2657 4.5 2.9 10.0 4.2 12.0 13.1.2* 5.13 Yes 8.4 2015 A.06.27
long long N1811 c++11 Yes Yes Yes Yes Yes Yes Yes Yes 8.4 2015 Yes Yes
Inline namespaces N2535 c++11 4.4 2.9 14.0 4.5 14.0 11.1 5.13 Yes 8.4 2015 A.06.28
New character types N2249 c++11 4.4 2.9 14.0 4.4 12.1*
14.0
13.1.1* 5.13 Yes 8.4 2015 A.06.27 8.52
Trailing function return types N2541 c++11 4.4 2.9 10.0 4.1 12.0 12.1 5.13 Yes 8.4 2015 A.06.27
nullptr N2431 c++11 4.6 2.9 10.0 4.2 12.1 13.1 5.13 Yes 8.4 2015 A.06.27 8.52
Unicode string literals N2442 c++11 4.4 3.0 14.0 4.7 11.0* 10.1*
13.1.1*
5.7 Yes 8.4 2015 A.06.28 8.52
Raw string literals N2442 c++11 4.5 Yes 12.0 4.7 14.0 13.1.1* 5.13 Yes 8.4 2015 A.06.28 8.52
User-defined literals N2765 c++11 4.7 3.1 14.0 4.8 15.0 13.1.2* 5.14 Yes 8.4 2015
Right angle brackets N1757 c++11 4.3 Yes 8.0 4.1 11.0 12.1 5.13 Yes 8.4 2015
R-value references v1.0: N2118

v2.0: N2844
v2.1: N2844+
v3.0: N3053

c++11 4.3(v1.0)
4.5(v2.1)
4.6(v3.0)
Yes 10.0(v2.0)
11.0(v2.1)
14.0(v3.0)
4.5(v3.0) 11.1(v1.0)
12.0(v2.0)
14.0(v3.0)
12.1(v2.1) 5.13 Yes 8.4 2015 A.06.25
static_assert N1720 c++11 4.3 2.9 10.0 4.1 11.0 11.1 5.13 Yes 8.4 2015 A.06.25 8.52
Strongly-typed enum N2347 c++11 4.4 2.9 11.0 4.0 13.0 12.1 5.13 Yes 8.4 2015 A.06.25
Template aliases N2258 c++11 4.7 3.0 12.0 4.2 12.1 13.1.1* 5.13 Yes 8.4 2015 A.06.27
Thread-local storage N2659 c++11 4.4*
4.8
3.3*
3.3
10.0*
14.0
4.8 11.1*
15.0*
10.1*
13.1.2*
5.9* Yes 8.4 2015 8.52*
Unrestricted unions N2544 c++11 4.6 3.0 14.0 4.6 14.0* 13.1.2* 5.13 Yes 8.4 2015 A.06.28
Type traits N1836 c++11 4.3 3.0 8.0 4.0 10.0 13.1.3 5.13 Yes 8.4 2015 6.16
Variadic templates v0.9: N2242

v1.0: N2555

c++11 4.3(v0.9)
4.4(v1.0)
2.9(v1.0) 12.0 4.1(v0.9) 12.1(v1.0) 11.1(v0.9) 5.13 Yes 8.4 2015 A.06.27
Range-for loop N2930 c++11 4.6 3.0 11.0 4.5 13.0 13.1.2* 5.13 Yes 8.4 2015 A.06.28
override and final v0.8: N2928

v0.9: N3206
v1.0: N3272

c++11 4.7 2.9 8.0(v0.8)
11.0(v1.0)
4.8(v1.0) 12.0(v0.8)
14.0(v1.0)
13.1.1* 5.13 Yes 8.4 2015
Attributes N2761 c++11 4.8 3.3 14.0 4.2 12.1 13.1.1* 5.13 Yes 8.4 2015 A.06.27
ref-qualifiers N2439 c++11 4.8.1 2.9 14.0 4.7 14.0 13.1.2* 5.13 Yes 8.4 2015 A.06.28
Non-static data member initializers N2756 c++11 4.7 3.0 12.0 4.6 14.0 13.1.2* 5.13 Yes 8.4 2015 A.06.28
Dynamic initialization and destruction with concurrency (magic statics) N2660 c++11 4.3 2.9 14.0 Yes 11.1* 13.1.2* 5.13 Yes 8.4 2015 A.06.25
noexcept N3050 c++11 4.6 3.0 14.0 4.5 14.0 13.1.1* 5.13 Yes 8.4 2015 A.06.28
ویژگی های زبان صفحه ها ویرایش
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
Tweaked wording for contextual conویرایشs N3323 c++14-lang 4.9 3.4 12.0 4.9 16.0 13.1.2*
Binary literals N3472 c++14-lang 4.3/4.9 2.9 14.0 4.10 11.0 13.1.2* 5.14 2015
decltype(auto), Return type deduction for normal functions N3638 c++14-lang 4.8/4.9 3.3/3.4 14.0 4.9 15.0 13.1.2*
Initialized/Generalized lambda captures (init-capture) N3648 c++14-lang 4.5/4.9 3.4 14.0 4.10 15.0  ?
Generic (polymorphic) lambda expressions N3649 c++14-lang 4.9 3.4 14.0 4.10 16.0 13.1.2*  ?
Variable templates N3651 c++14-lang 5.0 3.4 14.2 4.11 13.1.2*
Extended constexpr N3652 c++14-lang 5 3.4 4.11 13.1.2*
Member initializers and aggregates (NSDMI) N3653 c++14-lang 5 3.3 4.9 16.0 5.14
Clarifying memory allocation (avoiding/fusing allocations) N3664 c++14-lang N/A 3.4 N/A N/A
Deprecated attribute N3760 c++14-lang 4.9 3.4 14.0 4.9 15.0* 13.1.2* 5.14
Sized deallocation N3778 c++14-lang 5 3.4 14.0 4.10.1 17.0 5.14
Single quote as digit separator N3781 c++14-lang 4.9 3.4 14.0 4.10 16.0 13.1.2* 5.14 2015
std::result_of and SFINAE N3462 c++14 5.0 Yes 14.2 N/A N/A Yes
constexpr for <complex> N3302 c++14 5.0 3.4 14.0 N/A N/A
constexpr for <chrono> N3469 c++14 5.0 3.4 14.0 N/A N/A
constexpr for <array> N3470 c++14 5.0 3.4 14.0 N/A N/A
constexpr for <initializer_list>, <utility> and <tuple> N3471 c++14 5.0 3.4 14.0 N/A N/A
Improved std::integral_constant N3545 c++14 5.0 3.4 14.0 N/A N/A
User-defined literals for <chrono> and <string> N3642 c++14 5.0 3.4 14.0 N/A N/A
Null forward iterators N3644 c++14 5.0* 3.4 14.0 N/A N/A
std::quoted N3654 c++14 5.0 3.4 14.0 N/A N/A
Heterogeneous associative lookup N3657 c++14 5.0 3.4 14.0 N/A N/A
std::integer_sequence N3658 c++14 5.0 3.4 14.0 N/A N/A
std::shared_mutex (timed) N3659 c++14 5.0 3.4 14.0 N/A N/A
std::exchange N3668 c++14 5.0 3.4 14.0 N/A N/A
fixing constexpr member functions without const N3669 c++14 5.0 3.4 14.0 N/A N/A
std::get<T>() N3670 c++14 5.0 3.4 14.0 N/A N/A
Dual-Range std::equal, std::is_permutation, std::mismatch N3671 c++14 5.0 3.4 14.0 N/A N/A
ویژگی های زبان صفحه ها ویرایش
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
New auto rules for direct-list-initialization N3922 c++17-lang 3.8 14.0 4.10.1 17.0
static_assert with no message N3928 c++17-lang 6 2.5 4.12
typename in a template template parameter N4051 c++17-lang 5.0 3.5 14.0 4.10.1 17.0
std::uncaught_exceptions() N4152 c++17-lang 6 3.7 14.0
Nested namespace definition N4230 c++17-lang 6 3.6 14.3 4.12 17.0
Attributes for namespaces and enumerators N4266 c++17-lang 4.9 (namespaces) / 6 (enumerators) 3.6 14.0 4.11
u8 character literals N4267 c++17-lang 6 3.6 14.0 4.11 17.0
Allow constant evaluation for all non-type template arguments N4268 c++17-lang 6 3.6
Fold Expressions N4295 c++17-lang 6 3.6
Aggregate initialization of classes with base classes P0017R1 c++17-lang 3.9
Lambda capture of *this P0018R3 c++17-lang 3.9
Using attribute namespaces without repetition P0028R4 c++17-lang 3.9
Unary fold expressions and empty parameter packs P0036R0 c++17-lang 6 3.9
__has_include in preprocessor conditionals P0061R1 c++17-lang 5.0 Yes
New specification for inheriting constructors (DR1941 et al) P0136R1 c++17-lang 3.9
Direct-list-initialization of enumerations P0138R2 c++17-lang 3.9
Differing begin and end types in range-based for P0184 c++17-lang 6 3.9 14.3
[[fallthrough]] attribute P0188 c++17-lang No 3.9
[[nodiscard]] attribute P0189 c++17-lang 7 3.9
[[maybe_unused]] attribute P0212 c++17-lang 7 3.9
Ignore unknown attributes P0283R2 c++17-lang 3.9
Hexadecimal floating-point literals P0245 c++17-lang 3.0 Yes
constexpr if statements P0292R2 c++17-lang 3.9
init-statements for if and switch P0305R1 c++17-lang 3.9
Inline variables P0386R2 c++17-lang 3.9
Improving std::pair and std::tuple N4387 c++17 Yes 14.2 N/A N/A
std::shared_mutex (untimed) N4508 c++17 6.0 3.7 14.2* N/A N/A
ویژگی های زبان صفحه ها ویرایش
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++