LLVM เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ C++ เชฎเชพเช‚ เชฌเชซเชฐ เชธเชฒเชพเชฎเชค เชนเซ‡เชจเซเชกเชฒเชฟเช‚เช— เชตเชฟเช•เชธเชพเชตเซ‡ เช›เซ‡

LLVM เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชกเซ‡เชตเชฒเชชเชฐเซเชธเซ‡ เชฎเชฟเชถเชจ-เช•เซเชฐเชฟเชŸเซ€เช•เชฒ C++ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซ€ เชธเซเชฐเช•เซเชทเชพเชจเซ‡ เชฎเชœเชฌเซ‚เชค เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชฌเชซเชฐ เช“เชตเชฐเชฐเชจเซเชธเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชฅเชคเซ€ เชญเซ‚เชฒเซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเชพ เชฎเชพเชงเซเชฏเชฎ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชจเชพ เชนเซ‡เชคเซเชฅเซ€ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชฆเชฐเช–เชพเชธเซเชค เช•เชฐเซ€ เช›เซ‡. เช•เชพเชฐเซเชฏ เชฌเซ‡ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชชเชฐ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช›เซ‡: เชตเชฟเช•เชพเชธ เชฎเซ‹เชกเซ‡เชฒ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซเช‚ เชœเซ‡ เชคเชฎเชจเซ‡ เชฌเชซเชฐเซเชธ เชธเชพเชฅเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เช…เชจเซ‡ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ libc++ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ€ เชธเซเชฐเช•เซเชทเชพเชจเซ‡ เชธเช–เชค เชฌเชจเชพเชตเชตเชพ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡.

C++ เชฎเชพเชŸเซ‡ เชธเซ‚เชšเชฟเชค เชธเชฒเชพเชฎเชค เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชฎเซ‹เชกเชฒ เช เช›เซ‡ เช•เซ‡ เชฌเซ‡เชฐ เชชเซ‹เช‡เชจเซเชŸเชฐ เชธเชพเชฅเซ‡ เชšเซ‡เชกเชพเช‚ เช•เชฐเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เชฌเชซเชฐเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชฆเซเชตเชพเชฐเชพ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชตเชฐเซเช—เซ‹ std::array, std::vector เช…เชจเซ‡ std::span เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฆเชฐเช–เชพเชธเซเชค เช›เซ‡, เชœเซ‡ เช†เช‰เชŸ เช“เชซ เชฌเชพเช‰เชจเซเชกเซเชธ เชซเชพเชณเชตเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€ เชฎเชพเชŸเซ‡ เชฐเชจ-เชŸเชพเช‡เชฎ เชšเซ‡เช• เชธเชพเชฅเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชฐเชฃเช•เชพเชฐเชฎเชพเช‚ เช–เชคเชฐเชจเชพเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชชเซเชฐเชฅเชพเช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, "cppcoreguidelines-pro-bounds-pointer-Arithmetic" เชซเซเชฒเซ‡เช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช•เซเชฒเซ‡เช‚เช—-เชŸเชฟเชกเซ€เชจเซ€ เชฒเชฟเชจเซเชŸเชฐ เชšเซ‡เชคเชตเชฃเซ€เช“ เชœเซ‡เชตเซ€ เชœ เชคเชฎเชพเชฎ เชชเซ‹เช‡เชจเซเชŸเชฐ เช…เช‚เช•เช—เชฃเชฟเชค เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เช•เชฎเซเชชเชพเช‡เชฒเชฐ เชšเซ‡เชคเชตเชฃเซ€เช“ เชœเชพเชฐเซ€ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชธเซเชคเชพเชต เช›เซ‡, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชฎเชพเช‚ เชฆเซ‡เช–เชพเชถเซ‡. เชชเซเชฐเช•เชพเชถเชจ LLVM 16. เช†เชตเซ€ เชšเซ‡เชคเชตเชฃเซ€เช“เชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฐเชฃเช•เชพเชฐเชฎเชพเช‚ เชเช• เช…เชฒเช— เชงเซเชตเชœ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชธเช•เซเชฐเชฟเชฏ เชจเชฅเซ€.

libc++ เชฎเชพเช‚ เชตเซˆเช•เชฒเซเชชเชฟเช• เช•เช เชฃ เชธเช‚เชฐเช•เซเชทเชฃ เชฎเซ‹เชกเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซเช‚ เช†เชฏเซ‹เชœเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เชœเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเช•เซเชทเชฎ เชนเชถเซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชจเซ‡ เชชเช•เชกเซ€ เชฒเซ‡เชถเซ‡ เชœเซ‡ เชฐเชจ เชธเชฎเชฏเซ‡ เช…เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชตเชฐเซเชคเชจ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, std::span เช…เชจเซ‡ std::vector เชตเชฐเซเช—เซ‹เชฎเชพเช‚, เชธเซ€เชฎเชพเชจเซ€ เชฌเชนเชพเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เซเชฐเซ‡เชถ เชฅเชถเซ‡. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฎเชพเชจเซ‡ เช›เซ‡ เช•เซ‡ เช†เชตเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช‰เชฎเซ‡เชฐเชตเชพเชฅเซ€ libc++ C++ เชงเซ‹เชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชฐเชนเซ‡เชถเซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชตเชฐเซเชคเชฃเซ‚เช•เชจเชพ เช•เซ‡เชธเซ‹เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชคเซ‡เชจเซ€ เชชเชธเช‚เชฆเช—เซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชชเชพเชธเซ‡ เช›เซ‡, เชœเซ‡ เช…เชจเซเชฏ เชฌเชพเชฌเชคเซ‹เชจเซ€ เชธเชพเชฅเซ‡, เช…เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชตเชฐเซเชคเชจเชจเซ‡ เช•เซเชฐเซ‡เชถ เชคเชฐเซ€เช•เซ‡ เช…เชฐเซเชฅเช˜เชŸเชจ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชตเชพเชจเซ‹ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎ.

libc++ เชฎเชพเช‚ เชฐเชจเชŸเชพเช‡เชฎ เชคเชชเชพเชธเซ‹เชจเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡ เชธเชฎเชพเชตเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชถเซเชฐเซ‡เชฃเซ€เช“เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เช›เซ‡. เช•เซ‡เชŸเชฒเชพเช• เชธเซ‚เชšเชตเซ‡เชฒ เชคเชชเชพเชธเซ‹ เช•เซ‡ เชœเซ‡ เชตเชงเซ เชœเชŸเชฟเชฒ เช•เชพเชฎเช—เซ€เชฐเซ€เชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเชคเชพ เชจเชฅเซ€ เช…เชฅเชตเชพ ABI เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ libc++ เชจเชพ เชธเชฒเชพเชฎเชค เชฎเซ‹เชกเชฎเชพเช‚ เช…เชฎเชฒเชฎเชพเช‚ เช›เซ‡.

เชตเชงเซเชฎเชพเช‚, เช•เซ‹เชกเชจเซ‡ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชŸเซ‚เชฒเช•เซ€เชŸ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เช›เซ‡, เชœเซ‡เชจเชพเชฅเซ€ เชคเชฎเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชชเชฐ เชฌเซ‡เชฐ เชชเซ‹เชˆเชจเซเชŸเชฐเซเชธ เชธเชพเชฅเซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒเซเชธเชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชธเซ€เชงเชพ เชœ เชชเซ‹เชˆเชจเซเชŸเชฐเชจเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เชคเซ‡เชตเชพ เชธเช‚เชœเซ‹เช—เซ‹เชฎเชพเช‚ เชตเซˆเช•เชฒเซเชชเชฟเช• เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, "if (array_pointer)" construct เชจเซ‡ "if (span.data ()" เชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชเชกเชœเชธเซเชŸเชฎเซ‡เชจเซเชŸ เชฎเชพเชคเซเชฐ เชธเซเชฅเชพเชจเชฟเช• เชšเชฒเซ‹เชจเซ‡ เชœ เชจเชนเซ€เช‚, เชชเชฃ เชชเซ‹เช‡เชจเซเชŸเชฐ เชธเชพเชฅเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชŸเชพเช‡เชช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: opennet.ru

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹