د LLVM 9.0 کمپیلر سیټ خوشې کول

د شپږو میاشتو پراختیا وروسته وړاندې شوی د پروژې خوشې کول LLVM 9.0 - د GCC سره مطابقت لرونکي وسیلې (کمپیلر، اصلاح کونکي او کوډ جنریټرونه)، د RISC په څیر مجازی لارښوونو منځګړی بټکوډ کې د پروګرامونو تالیف کول (د څو کچې اصلاح کولو سیسټم سره د ټیټ کچې مجازی ماشین). تولید شوی سیډوکوډ د JIT کمپیلر په کارولو سره د ماشین لارښوونو ته مستقیم د برنامې اجرا کولو په وخت کې بدل کیدی شي.

د LLVM 9.0 نوې ب featuresې د هدف RISC-V پلیټ فارم څخه د تجربې ډیزاین ټاګ لرې کول ، د OpenCL لپاره C++ ملاتړ ، په LLD کې په متحرک ډول بار شوي برخو ته د برنامه ویشلو وړتیا ، او د "تطبیق" پلي کول شامل دي.asm لاړ"، د لینکس کرنل کوډ کې کارول کیږي. libc++ د WASI (WebAssembly System Interface) لپاره ملاتړ اضافه کړ، او LLD د WebAssembly متحرک لینک کولو لپاره لومړني ملاتړ اضافه کړ.

پرمختګونه په کلینګ 9.0 کې:

  • زیاته کړه د GCC ځانګړي بیان پلي کول "asm لاړ"، کوم چې تاسو ته اجازه درکوي د راټولونکي انلاین بلاک څخه په C کوډ کې لیبل ته لاړ شئ. دا فیچر د x86_64 جوړښت سره په سیسټمونو کې د کلینګ په کارولو سره په "CONFIG_JUMP_LABEL=y" حالت کې د لینکس کرنل جوړولو لپاره اړین دی. په تیرو ریلیزونو کې اضافه شوي بدلونونو په پام کې نیولو سره، د لینکس کرنل اوس د x86_64 معمارۍ لپاره په کلینګ کې جوړ کیدی شي (پخوا یوازې د بازو، aarch64، ppc32، ppc64le او mips آرکیټیکچرونو لپاره ودانۍ ملاتړ کیده). سربیره پردې ، د Android او ChromeOS پروژې دمخه د کرنل جوړولو لپاره د کلینګ کارولو لپاره بدل شوي ، او ګوګل د دې تولید لینکس سیسټمونو لپاره د کرنلونو جوړولو لپاره کلینګ د اصلي پلیټ فارم په توګه ازموي. په راتلونکي کې، د LLVM نورې برخې د کرنل جوړولو په پروسه کې کارول کیدی شي، په شمول د LLD، llvm-objcopy، llvm-ar، llvm-nm، او llvm-objdump؛
  • په OpenCL کې د C++17 کارولو لپاره تجربوي ملاتړ اضافه شوی. په ځانګړو ځانګړتیاو کې د پتې د ځای ځانګړتیاوو لپاره ملاتړ، د ډول کاسټینګ آپریټرانو لخوا د پته ځای تبادله بندول، د ویکتور ډولونو چمتو کول لکه د C لپاره په OpenCL کې، د انځورونو، پیښو، چینلونو او نورو لپاره د ځانګړي OpenCL ډولونو شتون.
  • د نوي تالیف کونکي بیرغونه "-ftime-trace" او "-ftime-trace-granularity = N" اضافه شوي ترڅو د مخکني پای (تحصیل کولو ، پیل کولو) او پس منظر (د اصلاح مرحلې) د مختلف مرحلو د اجرا کولو وخت په اړه راپور رامینځته کړي. راپور په json بڼه کې خوندي شوی، د کروم:://tracing او speedscope.app سره مطابقت لري؛
  • د "__declspec(مختص کونکی)" مشخص کونکي پروسس کول او د ورته ډیبګ کولو معلوماتو نسل اضافه کول چې تاسو ته اجازه درکوي د لید سټوډیو چاپیریال کې د حافظې مصرف وڅاري؛
  • د C ژبې لپاره، د "__FILE_NAME__" میکرو لپاره مالتړ اضافه شوی، کوم چې د "__FILE__" میکرو سره ورته دی، مګر د بشپړې لارې پرته یوازې د فایل نوم پکې شامل دی؛
  • C++ د مختلف C++ ب featuresو پوښلو لپاره د پتې ځای ځانګړتیاو لپاره ملاتړ پراخه کړی ، پشمول د پیرامیټر او دلیل نمونې ، د حوالې ډولونه ، د بیرته راستنیدو ډول انفرنس ، توکي ، اتومات تولید شوي افعال ، جوړ شوي آپریټرونه او نور ډیر څه.
  • د OpenCL، OpenMP او CUDA لپاره د ملاتړ سره تړلي وړتیاوې پراخې شوې. پدې کې د جوړ شوي OpenCL افعالونو ضمني شاملولو لپاره لومړني ملاتړ شامل دی (د "-fdeclare-opencl-builtins" بیرغ اضافه شوی)، د cl_arm_integer_dot_product توسیع پلي شوی، او د تشخیص وسایل پراخ شوي؛
  • د جامد شنونکي کار ښه شوی او د جامد تحلیل ترسره کولو اسناد اضافه شوي. د شته چیکر ماډلونو او ملاتړ شوي اختیارونو ښودلو لپاره بیرغونه اضافه شوي ("-تجزیه-چیکر[-اختیار]-مدد"، "-تجزیه-چیکر [-اختیار]-مدد-الفا" او "-تجزیه-چیکر [-اختیار] - مرسته " - پراختیا کونکی"). د اخطارونو سره د غلطیو په توګه چلند کولو لپاره د "-تجزیه - غلط" بیرغ اضافه شوی.
    د تایید نوي طریقې اضافه شوي:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling د بفرونو سره د کار کولو لپاره د ناامنه کړنو پیژندلو لپاره؛
    • osx.MIGChecker د MIG (Mach Interface جنریټر) د کال قواعدو څخه د سرغړونې لټون لپاره؛
    • optin.osx.OSObjectCStyleCast د غلط XNU libkern اعتراض تبادلې موندلو لپاره؛
    • apiModeling.llvm د LLVM کوډبیس کې د غلطیو موندلو لپاره د ماډلینګ چیک کولو دندو د سیټ سره؛
    • د غیر پیل شوي C++ شیانو چک کولو لپاره مستحکم کوډ (په optin.cplusplus بسته کې غیر ابتدایي شوی اعتراض)؛
  • د کلینګ فارمیټ استعمال په C# ژبه کې د کوډ فارمیټ کولو لپاره ملاتړ اضافه کړی او د مایکروسافټ لخوا کارول شوي کوډ فارمیټ سټایل لپاره ملاتړ چمتو کوي؛
  • clang-cl، یو بدیل کمانډ لاین انٹرفیس چې د ویژول سټوډیو کې شامل cl.exe کمپیلر سره د اختیار کچې مطابقت چمتو کوي ، هیوریسټیک اضافه کړی ترڅو غیر موجود فایلونه د کمانډ لاین اختیارونو په توګه چلند وکړي او ورته خبرداری ښکاره کړي (د مثال په توګه ، کله چې "clang-cl /diagnostic :caret /c test.cc" چلوي؛
  • د نویو چکونو لویه برخه د لینټ کلینګ پاکولو کې اضافه شوې، په شمول د OpenMP API ته ځانګړي شوي چکونه شامل دي؛
  • پراخ شوی د سرور وړتیاوې clangd (کلینګ سرور)، په کوم کې چې د شالید شاخص جوړونې حالت په ډیفالټ فعال شوی، د کوډ سره د متناسب کړنو لپاره ملاتړ اضافه شوی (متغیر ترلاسه کول، د اتوماتیک او میکرو تعریفونو پراخول، د تښتیدلو تارونو تبادله غیر خلاص شوي ته)، د ښودلو وړتیا د کلینګ - پاک څخه اخطارونه، د سرلیک فایلونو کې د غلطیو تشخیص پراخ شوی او د ډول درجه بندي په اړه د معلوماتو ښودلو وړتیا اضافه کړې؛

اصلي نوښتونه LLVM 9.0:

  • په LLD لینکر کې د تجربی تقسیم کولو خصوصیت اضافه شوی، کوم چې تاسو ته اجازه درکوي یو پروګرام په څو برخو وویشئ، چې هر یو یې په جلا ELF فایل کې موقعیت لري. دا ب featureه تاسو ته اجازه درکوي د برنامه اصلي برخه پیل کړئ ، کوم چې به د عملیاتو په جریان کې د اړتیا سره سم نور اجزاو بار کړي (د مثال په توګه ، تاسو کولی شئ جوړ شوي PDF لیدونکي په جلا فایل کې جلا کړئ ، کوم چې به یوازې هغه وخت لوډ شي کله چې کارونکي PDF خلاص کړي. دوتنه).

    د LLD لینکر مخې ته راوړل داسې حالت ته چې د arm32_7، arm64، ppc64le او x86_64 آرکیټیکچرونو لپاره د لینکس کرنل سره وصل کولو لپاره مناسب وي.
    نوي انتخابونه "-" (د stdout ته محصول)، "-[no-] اجازه ورکوونکي-شلیب-نا تعریف شوي"، "-نا تعریف شوي-ګلوب"، "-nmagic"، "-omagic"، "- انحصار-کتابتون"، "- z ifunc-noplt" او "-z common-page-size". د AArch64 جوړښت لپاره، د BTI (څانګې هدف شاخص) او PAC (د پوائنټر تصدیق کوډ) لارښوونې لپاره ملاتړ اضافه شوی. د MIPS، RISC-V او PowerPC پلیټ فارمونو ملاتړ د پام وړ ښه شوی. د WebAssembly لپاره د متحرک لینک کولو لپاره لومړني ملاتړ اضافه شوی؛

  • په libc++ کې پلي شوي د افعال اندازه، std::is_constant_evaluated، std::midpoint او std::lerp، میتودونه "مخکې" او "شاته" په std::span کې اضافه شوي، د ډولونو ځانګړتیاوې std::is_unbounded_array او std::is_bounded_array اضافه شوي , std ظرفیتونه پراخ شوي دي: : اټومي. د GCC 4.9 لپاره ملاتړ بند شوی دی (د GCC 5.1 او نوي ریلیزونو سره کارول کیدی شي). ملاتړ اضافه کړ واسي (WebAssembly System Interface، د براوزر څخه بهر د WebAssembly کارولو لپاره انٹرفیس)؛
  • نوي اصلاحونه اضافه شوي. په ځینو حاالتو کې bcmp ته د memcmp کالونو تبادله فعاله شوې. د کود جدولونو لپاره د رینج چیک کولو پلي کول په کوم کې چې د ټیټ سویچ بلاکونه د لاسرسي وړ ندي یا کله چې لارښوونې نه کارول کیږي ، د مثال په توګه ، کله چې د ډول باطل سره فنکشن زنګ وهل؛
  • د RISC-V معمارۍ لپاره پس منظر ثبات شوی، کوم چې نور د تجربې په توګه موقعیت نلري او د ډیفالټ لخوا جوړ شوی. د MAFDC توسیعونو سره د RV32I او RV64I لارښوونې سیټ ډولونو لپاره د بشپړ کوډ تولید ملاتړ چمتو کوي؛
  • د X86، AArch64، ARM، SystemZ، MIPS، AMDGPU او PowerPC آرکیټیکچرونو لپاره بیکینډونو کې ډیری پرمختګونه شوي دي. د مثال په توګه، د معمارۍ لپاره
    AArch64 د SVE2 (Scalable Vector Extension 2) او MTE (د حافظې ټاګ کولو توسیع) لارښوونو لپاره ملاتړ اضافه کړ؛ د ARM بیکینډ کې، د Armv8.1-M جوړښت او MVE (M-Profile ویکتور توسیع) توسیع لپاره ملاتړ اضافه شوی. د GFX10 (Navi) معمارۍ لپاره ملاتړ AMDGPU بیکینډ کې اضافه شوی ، د فنکشن زنګ وړتیاوې په ډیفالټ فعال شوي ، او یو ګډ پاس فعال شوی DPP (Data-Parallel Primitives).

  • د LLDB ډیبګر اوس د بیکټریس لپاره رنګ روښانه کول او د DWARF4 debug_types او DWARF5 debug_info بلاکونو لپاره اضافي ملاتړ لري؛
  • د COFF په شکل کې د اعتراض او اجرا وړ فایلونو ملاتړ په llvm-objcopy او llvm-strip یوټیلیټیز کې اضافه شوی.

سرچینه: opennet.ru

Add a comment