Кіріспе

Microsoft-тың C++ тілінің 2004 жылы қолданудан шығарылған кеңейтулері

C++ үшін басқарылатын кеңейтулер немесе Басқарылатын C++ – C++ тіліне грамматикалық және синтаксистік өзгерістер, кілт сөздер мен атрибуттар сияқты кеңейтулер жиынтығы болып табылады. Бұл кеңейтулер C++ синтаксисі мен тілін .NET Framework-ке үйлестіру мақсатымен жасалған. Microsoft компаниясы осы кеңейтулерді C++ кодын Common Language Runtime (CLR) ортасында басқарылатын код ретінде пайдалануға және оны жергілікті кодпен өзара әрекеттестіруге мүмкіндік беру үшін құшқан. 2004 жылы Басқарылатын C++ кеңейтулері синтаксисті нақтылау және жеңілдету, сондай-ақ басқарылатын жалпыламаларды қосу үшін функционалдығын кеңейту мақсатында қайта қарастырылды. Бұл жаңа кеңейтулер C++/CLI деп аталды және Microsoft Visual Studio 2005 құрамына енгізілді. Осылайша, Басқарылатын C++ термині және оған қатысты кеңейтулер ескірген және жаңа кеңейтулермен алмастырылды.

Тарих

Microsoft Visual C++ 2002 (MSVC++) бағдарламасында C++ үшін басқарылатын кеңейтулерді енгізді. Microsoft стандартты C++ және C++ үшін басқарылатын кеңейтулер арасындағы айырмашылықтарды барынша азайтуға тырысты, нәтижесінде екеуінің арасындағы маңызды өзгешеліктер синтаксистік тұрғыдан жасырылды. MSVC++ 2003 және 2005 жылдары да басқарылатын C++ тілінде бағдарлама жазуға қолдау көрсетілді. 2004 жылы C++ үшін басқарылатын кеңейтулерге қолдау тоқтатылып, оның орнына C++/CLI ұсынылды, бұл Microsoft-тің C++ тілін пайдаланып ортақ тілдік инфрақұрылым үшін бағдарламалауды қолдауға жасаған екінші әрекеті болды.

Дизайн

Басқарылатын код – бұл NET виртуалды машинасының ішінде орындалатын немесе оған басшылық ететін код. Бұл виртуалды машина, буфер асып кету тексерулері сияқты, орындалу кезіндегі қосымша тексерулер арқылы қауіпсіздікті арттыратын құмдық қоршау ретінде жұмыс істейді. Сонымен қатар, басқарылатын C++ тілінде жазылған қолданбалар CIL – Common Intermediate Language-қа компиляцияланады, ал стандартты C++ қолданбалары сияқты тікелей процессордың машиналық нұсқауларына емес. Басқарылатын C++ коды CLR-ге бағытталған кез келген басқа тілмен, мысалы C# және Visual Basic NET тілдерімен өзара әрекеттесе алады, сондай-ақ CLR ұсынатын қоқыс жинау сияқты мүмкіндіктерді пайдалана алады. Бұл басқарылатын C++ тілінің NET тілдері қатарында ерекше орын алатынын білдіреді. Бұл тіл NET тілдерімен (C#, VB NET сияқты) және жергілікті C++ тілімен тікелей байланыс жасай алатын жалғыз тіл. Басқа NET тілдері C++ кодымен тек PInvoke немесе COM арқылы ғана байланыса алады. Бірақ басқарылатын C++ басқарылатын және стандартты C++ орталарында тікелей байланыс жасай алатындықтан, ол көбінесе «көпір» ретінде қолданылады.

Жергілікті кодқа қарағанда артықшылықтары

Басқарылатын және басқарылмаған кодты бір CLI жинастыруында үздіксіз араластыруға болады. Бұл бағдарламашыға толығымен қайта жазбастан, .NET Framework-ке көшіруге болмайтын басқарылмаған кодты сақтап қалуға мүмкіндік береді. Дегенмен, осы гибридтік тәсілді қолданудың кейбір салдары бар. Басқарылатын C++ – басқарылмаған кодты қамтитын және барлық басқа .NET тілдерімен тікелей байланыса алатын жалғыз тіл. Сондықтан, басқарылатын C++ әртүрлі тілдерді пайдаланатын бағдарламашылар арасындағы өзара әрекеттесу үшін өте қолайлы, оның ішінде .NET және стандартты C++ қолданушылар үшін де.

Басқарылмаған кодпен салыстырғанда кемшіліктері

Басқарылатын C++ көптеген жаңа кілт сөздер мен синтаксистік ережелерді енгізеді, бұл кодты оқуды қиындатуы мүмкін, әсіресе егер C++ коды тікелей қосылып, бір құрастыруда Басқарылатын C++ кодымен тікелей өзара әрекеттессе. Басқарылатын C++ енді C++/CLI-мен алмастырылды және C++/CLI стандартталғандықтан қолданыстан шықты.

Толық басқарылатын кодпен салыстырғанда кемшіліктері

Басқарылатын C++ басқа .NET тілдеріне қарағанда сәл ұзақ даму уақытын қажет етеді, бірақ олар бірдей нәтижелер беретін жобаларға қолданылуы мүмкін. Пойнтерлерді пайдалану міндетті болуы да, болмауы да мүмкін, себебі басқарылатын C++ құндылық типтері (құндылық құрылымы және құндылық класы) мен сілтеме типтерін (gc struct және gc класы) қамтиды. Басқарылатын C++ ASP.NET веб-қосымшаларын толық қолдайды, әлдебір қиындықтарға қарамастан, басқа .NET тілдерімен және тіпті кейбір үшінші тарап тілдерімен салыстырғанда дамуы күрделірек. Басқарылатын C++ тек шаблондарды (туған C++-пен өзара әрекеттесу үшін) қолдайды, бірақ жалпыламаларды (барлық басқа .NET тілдерімен өзара әрекеттесу үшін) қолдамайды. C++/CLI үлгілерді (компиляция кезінде) және жалпыламаларды (орындалу кезінде) қолдайды.

Басқа тілдермен салыстыру

Келесі мәтінде басқарылатын C++ және ұқсас тұжырымдамаға ие басқа белгілі бағдарламалау тілдері арасындағы негізгі айырмашылықтар мен бағдарламалық стандарттар келтірілген.