LLVM 15.0-এ C/C++-এ বেশ কিছু আকর্ষণীয় আপডেটও রয়েছে।
উন্নয়নের ছয় মাস পরে, LLVM 15.0 প্রজেক্ট রিলিজ ঘোষণা করা হয়েছে, যা অনেক বড় পরিবর্তন করা হয়েছে, পাশাপাশি নতুন প্রসেসর, আর্কিটেকচার এবং আরও অনেক কিছুর জন্য সমর্থন যোগ করা হয়েছে।
যারা LLVM এর সাথে অপরিচিত তাদের জন্য, আপনার জানা উচিত যে এটি একটি GCC সামঞ্জস্যপূর্ণ কম্পাইলার (কম্পাইলার, অপ্টিমাইজার এবং কোড জেনারেটর) যেটি প্রোগ্রামগুলিকে RISC-এর মতো ভার্চুয়াল ইন্সট্রাকশন ইন্টারমিডিয়েট বিটকোড (একটি বহুস্তরীয় অপ্টিমাইজেশন সিস্টেম সহ একটি নিম্ন-স্তরের ভার্চুয়াল মেশিন) কম্পাইল করে।
জেনারেট করা সিউডোকোড JIT কম্পাইলার দ্বারা মেশিন নির্দেশাবলীতে রূপান্তরিত করা যেতে পারে প্রোগ্রাম নির্বাহের সময়।
এলএলভিএম 15.0 এর প্রধান নতুন বৈশিষ্ট্য
উপস্থাপিত এই নতুন সংস্করণে, এটি হাইলাইট করা হয়েছে যে Cortex-M85 প্রসেসরের জন্য সমর্থন, সেইসাথে Armv9-A, Armv9.1-A এবং Armv9.2-A আর্কিটেকচারের জন্য, Armv8.1-M PACBTI-M এক্সটেনশন।
আর একটি পরিবর্তন যে দাঁড়ায় তা হ'ল একটি পরীক্ষামূলক ডাইরেক্টএক্স ব্যাকএন্ড যোগ করা হয়েছে Que DXIL বিন্যাস সমর্থন করে (ডাইরেক্টএক্স ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ) ডাইরেক্টএক্স শেডারের জন্য ব্যবহৃত হয়। ব্যাকএন্ডটি "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" বিল্ড বিকল্পের মাধ্যমে সক্রিয় করা হয়েছে।
libc++ নতুন বৈশিষ্ট্যগুলি প্রয়োগ করে চলেছে C++20 এবং C++2b মান, যার মধ্যে "ফরম্যাট" লাইব্রেরি বাস্তবায়নের সমাপ্তি এবং "রেঞ্জ" লাইব্রেরির প্রস্তাবিত পরীক্ষামূলক সংস্করণ।
ক্ল্যাং 15.0 সম্পর্কিত পরিবর্তনের অংশের জন্য এটি উল্লেখ করা হয়েছে C-এর মতো ভাষা HLSL-এর জন্য পরীক্ষামূলক সমর্থন যোগ করা হয়েছে (হাই-লেভেল শেডিং ল্যাঙ্গুয়েজ), যা ডাইরেক্টএক্স 9 থেকে শুরু করে শেডার লেখার জন্য ব্যবহার করা হয়, সেইসাথে এইচএলএসএল শেডারকে ডাইরেক্টএক্স 12-সামঞ্জস্যপূর্ণ DXIL (ডাইরেক্টএক্স ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ) বাইনারি ফর্ম্যাটে অনুবাদ করার জন্য, সেইসাথে ভলকান দ্বারা ব্যবহৃত SPIR ফর্ম্যাট -V। ভবিষ্যতে, DXBC বিন্যাসের জন্য সমর্থন বাস্তবায়নের পরিকল্পনা (DirectX Bytecode) DirectX 9-11 এ ব্যবহৃত। বাস্তবায়নটি মাইক্রোসফ্ট দ্বারা সরবরাহ করা হয়েছে এবং LLVM 2017 এর ভিত্তিতে নির্মিত 3.7 সালে প্রকাশিত DirectX Shader কম্পাইলারের উপর ভিত্তি করে।
এটি দিয়ে অব্যাহত রয়েছে বলেও উল্লেখ করা হয় ভবিষ্যতের C2X এবং C++23 মানকে সমর্থন করার জন্য কাজ করুন। C ভাষার জন্য প্রয়োগ করা হয়েছে: noreturn বৈশিষ্ট্য, মিথ্যা এবং সত্য কীওয়ার্ড, একটি প্রদত্ত বিট গভীরতার পূর্ণসংখ্যার জন্য _BitInt(N) প্রকার, *_WIDTH ম্যাক্রো, UTF-8 অক্ষরের জন্য u8 উপসর্গ।
এটি ছাড়াও, C++ এর জন্য প্রয়োগ করা হয়েছে: মডিউল মার্জিং, ফাংশন সদস্যদের ABI বিচ্ছিন্নতা, মডিউলে অ-স্থানীয় ভেরিয়েবলের গতিশীল প্রাথমিককরণের আদেশ, বহুমাত্রিক সূচক অপারেটর, auto(x), অ-আক্ষরিক ভেরিয়েবল, goto এবং লেবেল ফাংশনে constexpr হিসাবে ঘোষিত, ডিলিমিটেড এস্কেপ সিকোয়েন্স, নাম এস্কেপ অক্ষর।
আর্কিটেকচারের উপর ভিত্তি করে সিস্টেমের জন্য x86, যোগ করা হয়েছে "-fzero-call-used-regs" পতাকা, যা ফাংশন থেকে নিয়ন্ত্রণ ফেরানোর আগে ফাংশনে ব্যবহৃত সমস্ত CPU রেজিস্টারের শূন্য প্রদান করে। এই বিকল্প ডেটা ফাঁস থেকে রক্ষা করে ফাংশন এবং ROP (রিটার্ন ওরিয়েন্টেড প্রোগ্রামিং) ডিভাইস তৈরির জন্য উপযুক্ত ব্লকের সংখ্যা প্রায় 20% কমিয়ে দেয়।
মেমরি অবস্থান র্যান্ডমাইজেশন প্রয়োগ করা হয়েছে সি কোডের কাঠামোর, যা দুর্বলতার শোষণের ক্ষেত্রে কাঠামো থেকে ডেটা নিষ্কাশনকে জটিল করে তোলে। র্যান্ডমাইজ_লেআউট এবং নো_র্যান্ডমাইজ_লেআউট বৈশিষ্ট্যগুলির সাথে র্যান্ডমাইজেশন চালু এবং বন্ধ করা হয় এবং পুনরাবৃত্তিযোগ্য বিল্ডগুলি নিশ্চিত করতে "-ফ্র্যান্ডমাইজ-লেআউট-সিড" বা "-ফ্র্যান্ডমাইজ-লেআউট-সিড-ফাইল" পতাকার সাথে বীজ সেট করতে হবে।
অন্যান্য পরিবর্তন যে দাঁড়ানো:
- OpenCL এবং OpenMP সমর্থন সম্পর্কিত প্রসারিত ক্ষমতা। OpenCL এক্সটেনশন cl_khr_subgroup_rotate-এর জন্য সমর্থন যোগ করা হয়েছে।
- x86, PowerPC, এবং RISC-V আর্কিটেকচারের জন্য উন্নত ব্যাকএন্ড।
উন্নত এলএলডি লিঙ্কার এবং এলএলডিবি ডিবাগার ক্ষমতা। - যোগ করা হয়েছে "-fstrict-flex-arrays=" পতাকা৷ » যার সাহায্যে আপনি কাঠামোর একটি নরম অ্যারে উপাদানের সীমা নিয়ন্ত্রণ করতে পারেন (সফ্ট অ্যারে সদস্য, কাঠামোর শেষে অনির্দিষ্ট আকারের একটি অ্যারে)।
- স্থির এবং পরিবর্তনশীল দৈর্ঘ্যের অ্যারেগুলির সাথে অমিলযুক্ত যুক্তি ঘোষণার সাথে ওভাররাইডিং ফাংশন সম্পর্কে সতর্ক করার জন্য "-ওয়ারে-প্যারামিটার" বিকল্প যুক্ত করা হয়েছে।
- MSVC এর সাথে উন্নত সামঞ্জস্য।
- MSVC-তে দেওয়া "#pragma ফাংশন এবং "#pragma alloc_text"-এর জন্য সমর্থন যোগ করা হয়েছে।
- MSVC-সামঞ্জস্যপূর্ণ /JMC এবং /JMC পতাকাগুলির জন্য সমর্থন যোগ করা হয়েছে।
- AMD Zen2 প্রসেসর থেকে সমর্থিত RDPRU নির্দেশের ব্যবহার নিয়ন্ত্রণ করতে "-m[no-]rdpru" পতাকা যোগ করা হয়েছে।
- RETBLEED দুর্বলতা থেকে রক্ষা করার জন্য "-mfunction-return=thunk-extern" পতাকা যোগ করা হয়েছে, যা পরোক্ষ জাম্পের জন্য অনুমানমূলক কার্যকরী প্রক্রিয়ার অংশগ্রহণ বাদ দেয় এমন নির্দেশাবলীর একটি ক্রম যুক্ত করে কাজ করে।
পরিশেষে আপনি যদি এটি সম্পর্কে আরও জানতে আগ্রহী হন, আপনি বিশদে পরীক্ষা করতে পারেন নিম্নলিখিত লিঙ্ক.