The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Проект LLVM развивает средства для безопасной работы с буферами в C++

06.10.2022 10:54

Разработчики проекта LLVM предложили ряд изменений, направленных на усиление безопасности критически важных проектов на языке C++ и предоставление средств для исключения ошибок, вызванных выходом за допустимые границы буферов. Работа сосредоточена в двух направлениях: предоставление модели разработки, позволяющей безопасно работать с буферами, и проведение работы по усилению защиты стандартной библиотеки функций libc++.

Предлагаемая модель безопасного программирования для C++ предполагает использование предоставляемых стандартной библиотекой классов при работе с буферами вместо манипуляций с голыми указателями. Например, предлагается использовать классы std::array, std::vector и std::span, в которые будет добавлена проверка выхода за границы выделенной памяти, производимая во время выполнения.

Для борьбы с опасными приёмами программирования в clang предлагается выводить предупреждения компилятора для всех арифметических операций с указателями, похожие на предупреждения linter-а clang-tidy, выводимые при использовании флага "cppcoreguidelines-pro-bounds-pointer-arithmetic", поддержка которого появится в выпуске LLVM 16. Для включения подобных предупреждений в clang будет добавлен отдельный флаг, неактивный по умолчанию.

В libc++ планируется реализовать опциональный режим усиленной защиты, при включении которого во время выполнения будут отлавливаться некоторые ситуации, приводящие к неопределённому поведению. Например, в классах std::span и std::vector будет отслеживаться обращение за пределы выделенной области памяти, в случае выявления которого программа будет аварийно завершаться. Разработчики считают, что добавление подобных изменений сохранит соответствие libc++ стандартам C++, так как выбор метода обработки случаев неопределённого поведения лежит на разработчиках библиотеки, которые могут в том числе трактовать неопределённое поведение как сбой, требующий завершения работы программы.

Производимые во время выполнения проверки в libc++ планируют разделить на категории, которые можно будет включать по отдельности. Некоторые из предложенных проверок, которые не приводят к усложнению операций или изменению ABI, уже реализованы в рамках безопасного режима libc++ (safe mode).

Дополнительно планируется подготовить инструментарий для корректировки кода, позволяющий заменять переменные с голыми указателями на контейнеры и применять альтернативные обработчики в ситуациях, когда контейнер не может напрямую заменить указатель (например, конструкция "if(array_pointer)" может быть преобразована в "if(span.data()"). Корректировки могут применяться не только к локальным переменным, но и к параметрам типов с указателями.

  1. Главная ссылка к новости (https://discourse.llvm.org/t/r...)
  2. OpenNews: Google занялся продвижением средств безопасной работы с памятью в открытом ПО
  3. OpenNews: 70% проблем с безопасностью в Chromium вызваны ошибками при работе с памятью
  4. OpenNews: Компания Akamai предложила безопасную систему распределения памяти для OpenSSL
  5. OpenNews: Повышение безопасности Linux-ядра через использование страниц памяти, доступных только для чтения
  6. OpenNews: Кейс Кук из Google призвал модернизировать процесс работы над ошибками в ядре Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57876-llvm
Ключевые слова: llvm, buffer, cpp
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (224) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 11:07, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > std::vector будет отслеживаться обращение за пределы выделенной области памяти, в случае выявления которого программа будет аварийно завершаться.

    Это ещё зачем, глупых растоманов наслушались? vector и так кидает экспешон при выходе за допустимый диапазон индексов.

     
     
  • 2.3, Аноним (3), 11:08, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +12 +/
    На этапе компиляции.
     
     
  • 3.46, bOOster (ok), 13:05, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И после таких вот заявлений растоманы хотят кого-то уверить что у них код быстрее чем сишный работает? При наличии постоянных проверок в рантайме.
    Не смешите.
     
     
  • 4.59, анонимус (??), 13:40, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так проверки в дебаге. Код может быть местми быстрее из-за большего скоупа для анализа конпелятором. Синтетика иногда тоже такие результаты показывает. Тут главное что есть гарантии валидности
     
     
  • 5.129, Аноним (129), 19:15, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Так проверки в дебаге

    Когда индекс массива зависит от внешних данных (а это чуть менее, чем всегда), предлагаешь пользователям поставлять только дебаг-версии?!

     
     
  • 6.135, Tita_M (ok), 19:59, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Comdiv, предлагает такое решение этой проблемы для будущих языков
    http://safe-prog-lang.blogspot.com/2016/12/correctness-state.html
     
     
  • 7.175, bOOster (ok), 08:10, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Костыль на костыле, костылем погоняет.
    А по факту - опыт и чуть больше внимательности.
     
     
  • 8.181, Брат Анон (ok), 08:34, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Понятно Ответить нечего Правда, там его вариант Оберона по скорости почти не п... текст свёрнут, показать
     
     
  • 9.188, bOOster (ok), 09:23, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Где это в повседневной эксплуатации Кнут тоже аналитику алгоритмов проводил - т... большой текст свёрнут, показать
     
     
  • 10.227, Прохожий (??), 08:29, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У тебя с логическим мышлением явные проблемы Причём здесь алгоритмы, до ошибок ... текст свёрнут, показать
     
  • 9.189, bOOster (ok), 09:40, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Кстати, С в силу своей специфики конструктор деструктор много безопаснее чем ч... текст свёрнут, показать
     
     
  • 10.255, Брат Анон (ok), 08:24, 10/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Программист вообще не должен думать, когда бы ему память получить, а когда освоб... текст свёрнут, показать
     
     
  • 11.256, bOOster (ok), 09:32, 10/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вот это бреднятина, если ты работаешь в 1C, и всяким фронтендом тогда да, но это... текст свёрнут, показать
     
  • 11.262, Аноним (-), 12:47, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    И ножи запретить, ими же порезаться можно ... текст свёрнут, показать
     
  • 4.80, YetAnotherOnanym (ok), 15:03, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Лучше постоянные проверки в рантайме, чем крвх или взлом.
     
     
  • 5.88, bOOster (ok), 15:55, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Лучше постоянные проверки в рантайме, чем крвх или взлом.

    Насмешил - имхо rust будут ломать чаще.

     
     
  • 6.123, Аноним (123), 17:47, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Он для этого и создан если кто не понял. Притянул из интернета пару гигабайт зависимостей для сборки и вуаля. А синтаксис и уровень программистов как-раз распологает к быстрому и незатруднительному ознакомлению со сторонним кодом. Для дураков безопасТно вобщем, в лучших традициях стадостроения.
     
     
  • 7.130, Аноним (130), 19:19, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >Притянул из интернета пару гигабайт зависимостей для сборки и вуаля

    Можно притянуть локально. Кто мешает?

    >Для дураков безопасТно вобщем, в лучших традициях стадостроения.

    А мне кажется, что у вас приступ "НИНУЖНА", ибо в плюсах нет нормального менеджера, а значит и у других не должно быть.

     
     
  • 8.180, bOOster (ok), 08:23, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты давно из исходников собирал что-то, изучая перед этим код - дабы быть уверенн... текст свёрнут, показать
     
     
  • 9.212, Аноним (212), 16:32, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Даже если это так, то какая претензия тогда к расту Скачав библиотеку для крест... текст свёрнут, показать
     
     
  • 10.215, bOOster (ok), 16:57, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да дело в том что раст ремесленники сродни 1С программистам - зачастую не знают ... текст свёрнут, показать
     
     
  • 11.229, Прохожий (??), 08:33, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Исходя из чего это следует, о Великий воин супротив Раста ... текст свёрнут, показать
     
  • 6.228, Прохожий (??), 08:30, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    На основе чего ты пришёл к такому туповатому выводу?
     
  • 5.133, eganru (?), 19:52, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    К большому сожалению будут постоянные ошибки в алгоримах, которые точно также приводят к печальным последствиям.

    В реальном мире жестко заданная учетка встречается чаще чем переполнение буфера.

    А что методы для проверки в рантайме добавили - ничего плохого в этом нет. Хочешь попроще? - пишешь с проверками.

     
     
  • 6.138, Аноним (130), 20:17, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >В реальном мире жестко заданная учетка встречается чаще чем переполнение буфера.

    А можно какие-нибудь цифры или исследования? Просто анализ от Майкрософта показал, что около 70% уязвимостей происходят из-за проблем с памятью, в том числе и с переполнением буфера.

     
     
  • 7.176, bOOster (ok), 08:12, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Майкрософт это не про программирование - это про бизнес. И применять эти сведения к open-source программированию вообще никак нельзя.
     
     
  • 8.213, Аноним (212), 16:35, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А в open source какие-то особенные люди, которые не допускают ошибок с памятью и... текст свёрнут, показать
     
     
  • 9.214, bOOster (ok), 16:49, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А серое вещество включить Или на Майкрософт работаешь Open source - майнтейнер... текст свёрнут, показать
     
     
  • 10.226, Прохожий (??), 08:26, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тебе бы самому не помешало включать серое вещество Что МС, что другие корпораци... текст свёрнут, показать
     
  • 5.183, Брат Анон (ok), 08:38, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Лучше постоянные проверки в рантайме, чем крвх или взлом.

    А ещё лучше -- железо спроектированное под эти проверки, и язык, который на 146% использует эти проверки. Например, Оберон.

     
     
  • 6.263, Аноним (-), 14:20, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А ещё лучше -- железо спроектированное под эти проверки,

    Осталось придумать где его такое взять. Интел вообще пытался, но - не зашло.

    > и язык, который на 146% использует эти проверки. Например, Оберон.

    Rust с другого бока зашел, ему особое железо толком и не надо, просто компил тайм проверки всего чего можно да разумная аннотация намерений кодера. В целом достаточно разумное сочетание. Синтаксис конечно с закорючками но тут уж аннотация намерений програмера компилеру и анализатору либо есть либо нет.

     
     
  • 7.278, Брат Анон (ok), 08:28, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, Интел даже не пытался За тебя уже всё придумали Просто бери и пользуйся ... большой текст свёрнут, показать
     
  • 7.279, alexhz (?), 00:38, 26/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Железо такое есть, эльбрус называется. Там есть специальный режим, в котором процессор изображает из себя виртуальную машину, работающую по спецификации языка C. Прощай выход за границы буферов, приведение несовместимых типов и прочее-прочее. Недостаток - даже в железном исполнении есть потеря производительности, местами более 40%.
     
     
  • 8.280, alexhz (?), 00:43, 26/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Хотя чаще до 20 Ну и ещё проблема, код с хаками не работает В итоге, только с... текст свёрнут, показать
     
  • 3.221, anonimous (?), 22:18, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >vector
    >На этапе компиляции.

    std::vector<T,Allocator>::at
    Returns a reference to the element at specified location pos , with bounds checking.

     
  • 2.4, topin89 (ok), 11:10, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Только по '.at(i)', и этой функцией мало кто пользуется.
     
     
  • 3.6, null (??), 11:14, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а вы берете указатель от .data() и дальше используете арифметику с указателем?
     
     
  • 4.8, anonymous (??), 11:20, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +12 +/
    operator[] вам о чем-нибудь говорит?
     
     
  • 5.12, null (??), 11:24, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    зачем, если есть at?
     
     
  • 6.19, Аноним (19), 11:38, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +13 +/
    зачем нужен ты, если есть GPT-3?
     
     
  • 7.41, trolleybus (?), 12:41, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен. Null не нужен, столько багов из-за него.
     
     
  • 8.84, Аноним (84), 15:41, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Давайте разыминуем анона выше ... текст свёрнут, показать
     
     
  • 9.264, Аноним (-), 14:41, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем тебе разыменованный троллейбус И что это делает ... текст свёрнут, показать
     

     ....большая нить свёрнута, показать (42)

  • 1.5, pashev.ru (?), 11:13, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Gfortran: -fcheck=all
     
     
  • 2.128, qetuo (?), 18:55, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Собственно, уже давно есть GLIBCXX_HARDENED, по умолчанию включенный в Федоре и ряде других дистров. Добавляет примерно то, о чем новость для libc++.
     

  • 1.7, Бывалый смузихлёб (?), 11:14, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Предлагаемая модель безопасного программирования для C++ предполагает  
    > использование предоставляемых стандартной библиотекой классов
    > при работе с буферами вместо манипуляций с голыми указателями.
    > Например, предлагается использовать классы std::array, std::vector и std::span,
    > в которые будет добавлена проверка выхода за границы выделенной памяти,
    > производимая во время выполнения

    Одна небольшая доработка, а целый ЯП, придуманный только для безопасной работы с памятью, уже может лететь на помойку

     
     
  • 2.9, гость (?), 11:22, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    А что, LLVM в кресты встраивают борроу чекер? Проблем с лайфтаймами больше не будет?
     
     
  • 3.18, Аноним (18), 11:37, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если тебе нужен боров в чекере ты его можешь сам присобачить в любой момент. https://www.youtube.com/watch?v=Lj1GppqNr8c
     
     
  • 4.74, анон (?), 14:56, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ща начнется визг, что ваш 6Ч, не тот бЧ.
     
  • 3.40, Аноним (40), 12:38, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > боров чекер

    Давно есть, std::unique_ptr называется.

     
  • 2.11, Шарп (ok), 11:23, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >производимая во время выполнения

    Закатывай губу назад.

     
     
  • 3.30, Man11300 (?), 12:14, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В том языке аналогичная проверка тоже происходит во время выполнения
     

  • 1.10, Аноним (10), 11:23, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Будет короче тормозить еще больше из за постоянных проверок. Голые указатели придумали не просто так. А потому, что проги на асме работали в 10 раз быстрее, чем всякие проги на басике, но хотелось же писать на ЯВУ, а не убивать мозг проблемами аллокешена регистров. Есть простая и тупая вещь. В других языках типа Delphi/Lazarus можно включить проверку границ в отладочном режиме. Есть так же клевые менеджеры памяти типа FastMM, которые в FullDebugMode отслеживают все возможные проблемы с утечками памяти и use-after-free. Это просто Сишники привыкли страдать. А еще говорят, что их язык лучший в мире, ога.
     
     
  • 2.16, Анусимус (?), 11:37, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    сиплюсплюсовцы же
     
     
  • 3.21, Аноним (10), 11:49, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А еще ассерты есть. И вообще работать с буфферами неявного размера, как это принято в Сях - это плохая идея. Короче это называется культура программирования. Если нанимать индусов на аутсорсе за копейки, то никакие ухищрения не помогут. А в итоге ради так называемой безопасности производительность нативного кода опустят до уровня скряптов. Ну и зачем тогда вообще нужен нативный код? Давайте всех посадим на питон.
     
     
  • 4.23, Аноним (23), 11:54, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    C и C++ это разные языки.
     
     
  • 5.131, Аноним (129), 19:20, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не может быть!
     
  • 4.265, Аноним (265), 14:52, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Си разный бывает В каком-нибудь MISRA например много чего НЕ принято И это как... большой текст свёрнут, показать
     
  • 2.25, _kp (ok), 12:03, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Проверка диапазона не ресурсоёмкая, и на некоторых платформах даже аппаратная.

    Возможность писать особо быстрый код ни куда не исчезает.
    Но и у системных программистов не во всяком месте нужен особо быстрый код, в ущерб безопасности или времени его написания.
    Просто по умолчанию предлагается чуть более безопасный подход.
      

     
     
  • 3.67, none7 (ok), 14:30, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не бывает бесплатных проверок, даже за защищённый режим процессора с его виртуал... большой текст свёрнут, показать
     
     
  • 4.73, n00by (ok), 14:52, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > даже за защищённый режим процессора с его виртуальной
    > памятью приходится платить свою цену, реальный режим реально быстрее.

    Столько нового и интересного узнаёшь на Опеннете. То есть виртуальная память иногда медленнее, поскольку её размер больше физической и страницы иногда гоняются на медленный накопитель и обратно? На самом деле, в этом случае система работает быстрее - потому что в реальном режиме она бы вообще не работала из-за нехватки памяти.

     
     
  • 5.79, none7 (ok), 15:03, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет, процессору же приходится гонять виртуальные адреса через таблицу страниц дл... большой текст свёрнут, показать
     
     
  • 6.95, n00by (ok), 16:21, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Исключение потому так и называется, что генерируется в исключительных случаях. Так то да, если запретить ещё и прерывания, то система будет работать «быстрее», не прерываясь на чтение с накопителя и приём пакетов. А если обрабатывать только 64 байта, то не придётся читать из медленного ОЗУ, поскольку хватит линейки кеша. Только почему-то мало кому приходит в голову «оптимизировать» всё это.
     
     
  • 7.102, Аноним (102), 16:34, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Так то да, если запретить ещё и прерывания, то система будет работать «быстрее»,
    > не прерываясь на чтение с накопителя и приём пакетов.

    Вот кстати в голодные времена провайдеры вместо Cisco использовали ПК с Linux
    и отключали прерывания, чтобы увеличить число пакетов перевариваемых роутером за секунду.

    > А если обрабатывать только 64 байта, то не придётся читать из медленного ОЗУ,
    > поскольку хватит линейки кеша. Только почему-то мало кому приходит в голову
    > «оптимизировать» всё это.

    Те кто воюют за оптимизацию работы процессорного кеша в природе водятся это факт.
    К сожалению немногим программистам вообще в голову приходит мысль хоть как-то оптимизировать
    свои программы. Компилятор сам по их мнению справится, а код они пишут для людей, а не машин.

     
     
  • 8.241, n00by (ok), 16:01, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось написать дату тех времён и характеристики железа - что бы можно было пр... большой текст свёрнут, показать
     
  • 4.78, n00by (ok), 15:00, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > У x86
    > так же есть инструкция bound для проверки соответствия указателя определённому диапазону,
    > но естественно времени она занимает столько же как и пара cmp+j[ab],
    > хотя реализована аппаратнее некуда.

    А если посмотреть талмуд, то она делает совсем другое - генерирует исключение #BR — BOUND Range Exceeded. Время её выполнения, надо полагать, Вы дадите в ответе на моё сообщение?

     
     
  • 5.81, none7 (ok), 15:06, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А если посмотреть талмуд, то она делает совсем другое - генерирует исключение
    > #BR — BOUND Range Exceeded. Время её выполнения, надо полагать, Вы
    > дадите в ответе на моё сообщение?

    Она даёт исключение при выходе за границы проверки, а не всегда.

     
     
  • 6.93, n00by (ok), 16:14, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что бы «естественно времени она занимает столько же как и пара cmp+j[ab]» имело силу, хорошо бы написать времена для обоих случаев. А эти команды даже делают разное.
     
     
  • 7.96, Аноним (102), 16:25, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что бы «естественно времени она занимает столько же как и пара cmp+j[ab]»
    > имело силу, хорошо бы написать времена для обоих случаев. А эти
    > команды даже делают разное.

    Естественно ситуация выхода за пределы массива является серьёзной ошибкой и не так уж и важно сколько времени уйдёт на её обработку. В худшем случае она даже может привести к завершению программы. Так, что сравнивать нужно ситуации когда выхода за пределы массива нет.

     
     
  • 8.101, n00by (ok), 16:33, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так для этого надо найти старый тадмуд, где указано время исполнения BOUND Я см... текст свёрнут, показать
     
     
  • 9.105, Аноним (102), 16:42, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Этот талмуд идёт в комплекте с masm32 и он у меня под рукой bound - 7 тактов на ... текст свёрнут, показать
     
     
  • 10.164, Аноним (129), 02:37, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сейчас какой год идёт Не, не так Какой сейчас век ... текст свёрнут, показать
     
     
  • 11.170, none7 (ok), 04:18, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да без разницы какой год Основа вычислительного блока в процессорах Intel не ме... текст свёрнут, показать
     
     
  • 12.242, n00by (ok), 16:05, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Откат будет, внезапно, в случае ошибки в программе Что Вы там собрались оптимиз... текст свёрнут, показать
     
  • 12.269, Аноним (-), 15:46, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, конечно Интел не настолько дно в разработках ... текст свёрнут, показать
     
     
  • 13.274, none7 (ok), 16:32, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    У них есть специальная инструкция rdtsc которой можно узнать, сколько тактов зан... большой текст свёрнут, показать
     
     
  • 14.275, n00by (ok), 10:27, 13/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В действительности rdtsc читает time stamp counter, и есть нюанс The RDTSC inst... большой текст свёрнут, показать
     
  • 11.243, n00by (ok), 16:23, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да даже для того времени утверждение 171 времени она занимает столько же 187 ... текст свёрнут, показать
     
  • 10.240, n00by (ok), 15:51, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Данные по cmp и Jxx неактуальны для современного железа У cmp латентность 1, а ... большой текст свёрнут, показать
     
  • 4.89, Аноним (89), 15:56, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В защищенном режиме много всякой мути, которая в теории должна жутко тормозить. Виртуальная память, переключение контекстов и т.д. В современных процах все это решается за счет распараллеливания. Т.е. проблему по сути закидывают шапками. Это когда тебе тех процесс позволяет клепать сколько угодно транзисторов, так что можно параллельно просчитывать 100500 инструкций вперед при over9000 ветвлениях. Другое дело, что расплатой за это является возможность атак по сторонним каналам. Так что, как сказал Мэт Дэймон, да, да...
     
     
  • 5.98, Аноним (98), 16:29, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так чтож, теперь отказаться от защищённого режима? Привет, эпоха DOS! Сторонние каналы не требуются, получай достпуп к любым соседним процессам сколько хочешь!
     
     
  • 6.103, n00by (ok), 16:35, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Привет, эпоха DOS! Сторонние каналы
    > не требуются, получай достпуп к любым соседним процессам сколько хочешь!

    И правда, быстрее же. =)

     
     
  • 7.136, Tita_M (ok), 20:08, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Существует архитектура Mill в которой нет виртуальной памяти и много чего другого, что есть в классических процессорах усложняющих их и тем не менее многие FLOSS программы и операционки корректно работают на ней после компиляции и  практически без изменений.
     
     
  • 8.218, Аноним (218), 18:11, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Но в реальном мире, кроме FOSS, ещё браузер загружает страницы с тоннами сторонн... текст свёрнут, показать
     
     
  • 9.272, Аноним (-), 16:10, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И при всем этом там приколы типа ROWHAMMER могут работать Даже оттуда Который ... текст свёрнут, показать
     
  • 8.244, n00by (ok), 16:33, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё есть компьютер Спектрум Самый быстрый там вариант - самомодифицирующийся ... текст свёрнут, показать
     
     
  • 9.270, Аноним (-), 15:47, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В реальном мире вооон те игроделы бьют рекорды по скорости декомпресии vs плотно... текст свёрнут, показать
     
     
  • 10.276, n00by (ok), 10:54, 13/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Можно было, конечно, осталось посчитать, сколько играли в тот 171 Дум 187 на... текст свёрнут, показать
     
  • 5.192, _kp (ok), 11:00, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    На счёт жутко тормозить это уже слишком безграмотно Если писать эмулятор 386 ... большой текст свёрнут, показать
     
     
  • 6.245, n00by (ok), 16:40, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Пристномамятная фича - в z80 добавили инструкцию копирования памяти, стало быстрее, чем
    > на 8080, но с учетом специфики z80 применяли програмное копирование, ибо
    > на 90%(!) быстрее работало, чем аппаратное.

    Ну про 90% Вы загнули. LDIR - 21 такт на 1 байт. LDI - 16. Серия последних немного выигрывала по скорости за счёт раздутия кода. Быстрое копирование, насколько помню, выполнялось сериями POP+PUSH - 10+11 на 2 байта. Где-то вдвое быстрее, без учёта дополнительных инструкций. Хотя, может я что-то забыл, да и вариант с генерацией 100 Кб кода для заполнения 6 Кб экрана не рассматриваю.

    Кстати, в IA32 с была похожая ситуация rep movs, но ныне она ускорена аппаратно с учётом нюансов работы с кешем.

     
     
  • 7.252, _kp (ok), 00:23, 09/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Верно.
    Вдвое быстрее, плюс издержки, это и есть примерно на 90% быстрее. Прирост зависит от размеров портянки из push/pop в реализации memcpy(). Больше 32..64 пар редкость.

    Про rep movs тоже в курсе.
    Я как коллекционер старого железа, сконен и что под них иногда написать, и эмуляторы пишу тоже.

    Удивлен грамотному комментарию, по столь экзотической теме.

     
     
  • 8.254, n00by (ok), 15:58, 09/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Действительно Как обычно, я налажал с арифметикой Довелось когда-то покодить д... большой текст свёрнут, показать
     
     
  • 9.257, _kp (ok), 10:46, 10/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю Взял в коллекцию Смотрю А на Гитхабе меня уже забанили, поэтому ссы... текст свёрнут, показать
     
     
  • 10.258, n00by (ok), 16:34, 10/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как забанили Это надо в новости Тут публика любит, когда кого-то банят Ну и в... текст свёрнут, показать
     
     
  • 11.259, _kp (ok), 10:34, 11/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Уже писали про это Хотя, банили якобы сотрудничавших с подсанкционными организа... текст свёрнут, показать
     
     
  • 12.261, n00by (ok), 14:41, 11/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если забанили на основании решения властей США - тогда им ничего не стоит указат... текст свёрнут, показать
     
  • 4.266, Аноним (-), 15:05, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Не бывает бесплатных проверок,

    Вообще в компилтайм они условно бесплатные. В том плане что это время потратит компилер 1 раз, при сборке, а не софт в рантайм. Проблема в том что в полном случае это решение нерешаемой задачи. Но в многих частных случаях это все же можно свести к доказуемым на автомате вещам. Что и дает возможность потрепыхаться на тему влезания на елку не обдирая зад.

     
  • 3.195, yet another anonymous (?), 11:12, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Проверка диапазона не ресурсоёмкая, и на некоторых платформах даже аппаратная.

    Звон-то конечно слышали, но откуда он, не разобрались.

    Заканчивайте уже тащить слухи про Рабиновича, выигравшего на бегах два миллиона.

     

     ....большая нить свёрнута, показать (45)

  • 1.24, Аноним (24), 12:02, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    что за буфера такие? массивы имелись ввиду?
     
     
  • 2.29, Аноним (98), 12:12, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    https://ru.wikipedia.org/wiki/Буфер
     

  • 1.31, Аноним (31), 12:16, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В заголовке LLVM, а новость про clang.

    Непорядок.

     
  • 1.35, darkshvein (ok), 12:24, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    почему бы сразу не писать на чистом Си?
     
     
  • 2.37, Аноним (37), 12:29, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    есть же чистый углерод
     
     
  • 3.267, Аноним (-), 15:06, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > есть же чистый углерод

    Он невкусный.

     
  • 2.45, bOOster (ok), 13:02, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем? Если например от C++ можно использовать только классы/структуры - и код получается более читаемым. И не лезть в шаблоны и иже с ними.
     
     
  • 3.47, Аноним (37), 13:05, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вся мощь в шаблонах, а ты их не осилил :\
     
     
  • 4.48, bOOster (ok), 13:08, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Вся мощь в шаблонах, а ты их не осилил :\

    Я их просто не использую. Если в большинстве случаев профессионалу хватает обычного C, то и шаблоны не нужны. Чем и пользуюсь. Но от C++ структур/классов не откажусь.

     
     
  • 5.61, Аноним (61), 13:43, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сразу и видно, какой ты профессионал, раз шаблоны не осилил
     
     
  • 6.196, _kp (ok), 11:13, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Сразу и видно, какой ты профессионал, раз шаблоны не осилил

    Есть знакомые, которые пишут довольно небольшое ПО, ну скажем под встраиваемые устроства. Код у них на 95% тот же Си, но с небольшим количеством плюшек из С++. Ну и есть положительные особенности компилятора, который больше ругается на сомнительный код.

    В принципе, от неиспользования шаблонов  подобные и не потеряют ничего, им их часто и применить некуда. Но несмотря, что таки профессионалами в С++ их назвать нельзя, программистами они бывают вполне годными.

     
  • 6.248, Neon (??), 18:26, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зато я много видел таких профессионалов любителей шаблонов, ваявших такую хрень, что никто потом не мог понять, как оно работает, даже сами авторы шедевров. С километровыми сообщениями об ошибках. Таких любителей шаблонов надо в детстве компов лишать.)))
     
  • 6.249, Neon (??), 18:28, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Любители шаблонов обычно пишут совершенно неподдерживаемый код, который трудно отлаживать и сопровождать. Называется - горе от ума.
     
  • 3.51, Аноним (40), 13:15, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Как раз таки классы самое ненужное в цпп. Когнитивная нагрузка раза в 1.5 снижается, когда не нужно думать об иерархиях классов и связях между ними. Бессмысленная вещь, только отнимающая время.
     
     
  • 4.62, Аноним (61), 13:44, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Классы позволяют перегружать операторы например и писать vec1 + vec2 + vec3 вместо add_vec(add_vec(vec1, vec2), vec3). А ненужное - это твое никчемное мнение
     
     
  • 5.63, Аноним (-), 14:08, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    В нормальных языках пишут vec1.add(vec2).add(vec3)
    И редактор кода сможет указать где этот метод реализован, а не просто + какой-то
     
     
  • 6.154, ndshu (?), 22:56, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    У вас синтаксис подразумевает vec1 += vec2 + vec3 или vec1 + vec2 + vec3
    ???

     
     
  • 7.273, Аноним (-), 16:12, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > У вас синтаксис подразумевает vec1 += vec2 + vec3 или vec1 +
    > vec2 + vec3
    > ???

    А у вас сложение не коммутативное чтоли? Когда оно именно так - это всяко отдельный случай требующий отдельного внимания.

     
  • 5.70, Аноним (70), 14:41, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Перегрузка операторов как раз самая отвратительная вещь в плюсах.
     
     
  • 6.72, Аноним (98), 14:51, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ничё, что эта вещь не только в Плюсах имеется? Значит, востребована.
     
  • 6.197, _kp (ok), 11:17, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Перегрузка операторов как раз самая отвратительная вещь в плюсах.

    Это если применять куда попало, что бы было.
    А бывает, что и необходимо, и при этом ещё и изящно.

     
  • 5.76, Аноним (40), 14:56, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Типичный ответ приплюснутой макаки. Ровный пацан для математики оптимизированный код на интрисинках напишет, а не вот это вот.
     
     
  • 6.250, Neon (??), 18:30, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зато потом ровного пацана забивают лопатой, когда код нужно будет перенести на другую архитектуру процессора)))
     
  • 4.71, Аноним (98), 14:49, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я бы, наоборот, хотел бы найти утилитку, которая анализирует плоскосишный код и строит квази-UML диаграммы.
     
  • 4.190, bOOster (ok), 10:28, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Как раз таки классы самое ненужное в цпп. Когнитивная нагрузка раза в
    > 1.5 снижается, когда не нужно думать об иерархиях классов и связях
    > между ними. Бессмысленная вещь, только отнимающая время.

    А как-же конструкторы/деструкторы - которые, заставляя программиста возвращаться к написанию данных функций - четко понимают что где выделять и что где удалять? На порядок уменьшая количество ошибок с выделением/освобождением памяти и удалением нулевых поинтеров.

     
  • 4.253, Аноним (253), 04:05, 09/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Классы очень полезны, когда они изолированы и не связаны с остальным кодом (как vector или string, илм complex и даже элементы графического интерфейса в какой-то степени).

    Когда классы проникают в ЛОГИКУ работы прогаммы (в какой-нибудь основной цикл приложения/потока/сервера tcp) - это очень и очень плохо. Нужно от такого избавляться!!! Вынуждает использовать всякие inversion of control (и прочую лабуду), как следствие - логика работы программы разбросана по нескольким разным модулям и работать с таким кодом становится невозможно.

     
  • 2.69, Аноним (69), 14:37, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну напиши, скажем, игровой движок на чистом Си. Кармак не просто так к третьему квейку сдался и перешёл на C++.
     
     
  • 3.75, Аноним (75), 14:56, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ваще-то просто так.
     
  • 3.85, Аноним (-), 15:45, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    просто так. и кармак живой пример что на си можно творить чудеса. досихпор фиг кто понимает его квадратичную ф-ю, не говоря о гениальности остальных решений. ты вообще кармака читал, дитё ? какие могут быть кресты с этим ООП уродством после божественного си кодинга.
     
     
  • 4.97, Аноним (69), 16:28, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Просто так, по доброй воле, на плюсы не переходят.
    Про быстрый обратный корень — вы серьёзно считаете, что Кармак его изобрёл?
     
     
  • 5.104, Аноним (98), 16:39, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, Кармак изобрёл разложение функции в ряд Тейлора :)
     
     
  • 6.108, Аноним (69), 16:49, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну тут немного другая математика, но весьма тривиальная. Но дело не в этом, а в том, что компьютерная реализация уже давно существовала, Кармак лишь позаимствовал её (и комментарий даже оставил  — «Я ХЗ КАК, но оно работает»).
     
     
  • 7.122, Аноним (-), 17:43, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не важно. Поговаривают что комментанрий кстати не его (это про тот что рядом со сдвигом ?). Посмотрите другие файлики, это же гениально ! Но да, послушать тридстартера так перейдя на ООП все станут писать как Кармак. Ну что за бред.
     
  • 7.125, Аноним (125), 18:06, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А вообще, Анон, приятно видет что есть еще интересующиеся вопросом. Заходи на офтц в x86, по фану покодим фигню всякую
     
     
  • 8.144, Аноним (69), 21:11, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Увы, нет, фан кодинга в прошлом Да и в прошлом гораздо интереснее был реверсинг... текст свёрнут, показать
     
  • 5.246, n00by (ok), 17:10, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если речь про т.н. «аппаратный алгоритм», то описал его Джон Фон Нейман в First Draft of a Report on the EDVAC в 1945-м году.
     
  • 4.230, Онанистмус (?), 13:11, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Кармак сказал что квадратичную функцию списал из какого то журнала по программированию графики а не придумал её. И он часто говорит что не придумывает алгоритмы а сводит воедино то что известно из чужих научных работ по алгоритмам.
     
  • 3.124, Владимир (??), 17:57, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Держи - https://www.youtube.com/watch?v=LR3THwlv_r4. Не закончено еще, но процесс идет. 663 серии по 2 часа, если осилишь.
     
     
  • 4.127, Аноним (69), 18:54, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И прямо в первом кадре видео — файлы .cpp. Ну ок.
     
     
  • 5.217, Владимир (??), 17:29, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > И прямо в первом кадре видео — файлы .cpp. Ну ок.

    Какой еще срр? Там фильм про любовь должен быть ... Или не та ссылка ...


     
  • 2.134, eganru (?), 19:55, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    По моему опыту на С++ быстрее писать.
     
     
  • 3.139, Аноним (129), 20:33, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > на С++ быстрее писать

    на С++ быстрее писать ошибки.

     
  • 2.150, Cooler (??), 21:51, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Можно увидеть вашу реализацию быстрой сортировки на чистом Си?
     
     
  • 3.160, Аноним (160), 01:51, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Все есть на github
     
  • 2.238, Аноним (238), 15:23, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Современные программисты не могут в Си. Они способны максимум верстать медленные веб-страницы на java на фреймворках фреймворков
     

     ....большая нить свёрнута, показать (41)

  • 1.39, Аноним (39), 12:35, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Например, предлагается использовать классы std::array, std::vector и std::span, в которые будет добавлена проверка выхода за границы выделенной памяти, производимая во время выполнения.

    Кому надо - тот давно их использует.

     
  • 1.49, Skullnet (ok), 13:11, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Тормозной C++ компилятор будет ещё тормознее.
     
     
  • 2.86, Аноним (-), 15:47, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ах, тормознутая сборка на крестах всегда вызывет боль.
     
     
  • 3.132, Аноним (129), 19:43, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Какой молоток - такой и Qt :)
     
  • 2.147, darkshvein (ok), 21:33, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    вы не понимаете, это другое111
    шланг всё исправит, и можно будет использовать много шаблонов 111
     
  • 2.198, Аноним (198), 11:21, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Интересно, чего все так наяривают на скорость компиляции?

    Это вы так черезжoпно код пишете, что после каждой строки проверяет "сейчас скомпилилось? а сейчас? а сейчас?".
    Или вы из гентушников, для которых компилять это смысл существования?

    Какая разница сколько оно компилится? Вы делаете это один раз, а запускаете тысячи. И намного важнее насколько будет оптимизирован и быстр код полученный код.

     
     
  • 3.203, Аноним (203), 12:05, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как бе дааа 8230 Если ли бы ты написал хоть одну строчку кода в жизни, то знал... большой текст свёрнут, показать
     
     
  • 4.206, Аноним (198), 12:58, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну так ты пишешь все что нужно проверить - функцию, класс, модуль, хз на чем ты пишешь - и один раз запускаешь компиляцию! Зачем ее дергать каждый раз?

    > А ещё часто бывает доработка на месте, когда ты не знаешь, что нужно дописать...

    Хе, вот тут у тебя проблема в компетенции или у проекта вообще. Вот тебе варианты:
    - Заглянул в доку и прочитал что нужно
    - Поставил breakpoint и посмотрел что нужно

    Ну а если ситуация "мне бекенд что-то должен ответить, но хз что..." то это проблема явно не компилятора.

    Тривиальные опечатки исправляются тривиально.
    А нетривиальные - покрываются тестами (напр. ты не ту переменную на вход послал и оно все скомпилилось)
    Плюс этот пример вообще не в тему - инкрементальная компиляция решает 99% таких ситуаций.

     
     
  • 5.260, Аноним (260), 10:56, 11/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема в компетенции тут у тебя. Просто ты манякодер, который не делал никогда, например, промышленные системы.
     
  • 4.207, Аноним (198), 13:03, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > оптимизированность и скорость не такое и высокое значение имеют, главное -- это способен ли код решать задачу, корректно ли он это делает

    Это абсолютно несвязанные задачи. Любой код должен решать поставленную задачу и делать это корректно, иначе это какой-то говнокoд.
    Если компилятор смог оптимизировать без твоей работы - это только плюс.

    > никто никогда в своём уме не будет об этом думать раньше времени

    Неправда. Ты всегда должен заранее оценивать сложность тех или иных алгоритмов, по имеющимся данным подбирать структуры данных и тд.
    То что в итоге что-то может быть не учтено - это да, но оставлять все на "а... потом профильну и исправлю" это бред.

     
     
  • 5.208, Аноним (203), 13:32, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот так выберешь быструю сортировку вместо сортировки пузырьком, а потом окажется, что пузырьком быстрее и эффективнее (в частности, для gpgpu). Можно делать только равновероятно неверные предположения. Если какой-то код постоянно бесцельно исполняется, то это конечно лишнее. Всё остальное можно узнать только при реальном применении на платформе (и после достаточного увеличения нагрузки). А вот тратить время на, вполне вероятно, бесцельные или ошибочные оптимизации, вот это максимально не эффективно.
     

  • 1.60, Аноним (61), 13:42, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Легче оставить дебаг сборку
     
     
  • 2.141, Аноним (129), 20:39, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Чтобы тормозило, как в расте?
     
     
  • 3.168, Аноним (168), 02:59, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Всего лишь как в спарке.
     

  • 1.65, Alexey Torgashin (?), 14:25, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Как только этого плешивого старичка не вытаскивают. И один тул напишут к нему. И другой. И третий.

    И все равно С++ отвратителен. Своим синтаксисом в первую очередь. Эти гении даже не додумались сделать keyword для функции. Блин.

     
     
  • 2.68, Аноним (70), 14:36, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А зачем нужен keyword для функции? После пистоновских отступов теряетесь в коде?
     
     
  • 3.137, Tita_M (ok), 20:17, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как минимум это позволяет упростить компилятор. Н. Вирт не зря использовал procedure и function как минимум с паскаля. В Обероне вообще  только procedure осталась.
     
     
  • 4.140, U202204161753 (?), 20:38, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Про вместо Function пишут PROCEDURE.

      Функции остались ;-)

     
     
  • 5.169, Аноним (168), 03:01, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Про пишут procedure вместо view. А на функции даже смотреть нет смысла.
     
  • 4.247, Аноним (247), 17:58, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так они же ненавидят паскаль и Вирта.
     
  • 4.251, Neon (??), 18:32, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В результате творения Вирта используют лишь для обучения. Для реальной работы его творения использовать невозможно. Задолбаешься элементарно постоянно писать procedure и function.
     
  • 3.151, Alexey Torgashin (?), 22:18, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1) Для выхватывания глазом функций. 2) для парсеров у всяких редакторов кода. Там УЖАС КАК СЛОЖНО СДЕЛАТЬ НАСТРОЙКУ ФУНКЦИЙ ДЛЯ С.
     
     
  • 4.167, Аноним (168), 02:57, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вам гнутые подогнали целый компилятор, а вас парсеры не работают?
     
  • 4.271, Аноним (-), 16:06, 12/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > 1) Для выхватывания глазом функций. 2) для парсеров у всяких редакторов кода.
    > Там УЖАС КАК СЛОЖНО СДЕЛАТЬ НАСТРОЙКУ ФУНКЦИЙ ДЛЯ С.

    Настолько сложно что компилер с сделали в 4 функицях, C4 называется.

     
     
  • 5.277, n00by (ok), 10:59, 13/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >> 1) Для выхватывания глазом функций. 2) для парсеров у всяких редакторов кода.
    >> Там УЖАС КАК СЛОЖНО СДЕЛАТЬ НАСТРОЙКУ ФУНКЦИЙ ДЛЯ С.
    > Настолько сложно что компилер с сделали в 4 функицях, C4 называется.

    Ну вот, сложно же. Для простых языков хватает одной.

     
  • 2.77, ХрюХрю (?), 14:59, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +7 +/
    >:Как только этого плешивого старичка не вытаскивают. И один тул напишут к нему. И другой. И третий.
    >:И все равно С++ отвратителен. Своим синтаксисом в первую очередь. Эти гении даже не додумались сделать keyword для функции. Блин.

    Так в расте он еще отвратительней раза в 2))))

     

  • 1.82, хрю (?), 15:33, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>производимая во время выполнения.

    Шикарно! я считаю. Даже судя по тутошнему вою "медленно, медленно" прогеры станут ещё меньше использовать стандартные контейнеры в угоды указательной арифметике. Быстро же!

    Тем кому надо и так уже at() используют, а все остальные оптимизаторы убегут от этих рантайм проверок, так что багов меньше не будет. Разруха же не в языке. :D :D :D

     
     
  • 2.87, Аноним (-), 15:50, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А где ? Если разработчикам надо знать все тонкости вроде не вызываем at() - там нет проверки, в стандарте ничего не сказано, но это же все знают.
     

  • 1.90, РастаГангста (?), 16:07, 06/10/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –3 +/
     

     ....ответы скрыты (2)

  • 1.92, Аноним (92), 16:12, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Десятое правило Гринспена вас пожрёт.
     
  • 1.116, Чел на 939 сокете (?), 17:11, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Зачем оно нужно когда есть нативные компиляторы под любую платформу.
     
     
  • 2.186, Аноним (186), 09:14, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Всегда так делаю. Исходный код тот же. Сборку делаю под конкретную платформу на ней же. Три компьютера рядом стоят.
     
  • 2.237, Аноним (238), 15:15, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Любой настоящий программист понимает что оно на самом деле бесполезно
     

  • 1.142, Чел на 939 сокете (?), 20:47, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > исключения ошибок, вызванных выходом за допустимые границы буферов

    Совсем деградировали современные погромисты. Помню как в своё время на ассемблере в отладчике оптимизировал и экономил каждый такт, каждый байт.

     
     
  • 2.143, Аноним (69), 21:09, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Никто не мешает вам и сейчас этим заниматься. Думаю, с руками такого специалиста оторвут, который полдня оптимизирует такт, а оставшиеся полдня байт.
     
     
  • 3.145, Аноним (98), 21:12, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, а в Вилабаджио просто поставят 32-битный микроконтроллер и будут праздновать.
     
     
  • 4.163, Аноним (129), 02:29, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > и будут праздновать

    ...очередную дыру в проекте.

     
  • 3.146, Чел на 939 сокете (?), 21:31, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я уже старый, мне 78, и давно на пенсии, все мои знания устарели, в мире "бизнесменов" и "маркетологов" не востребованы. Максимум с чем имел дело, так это 8086 процессор, 386 и выше уже не застал.
     
     
  • 4.194, Анонн (?), 11:11, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А какой самый большой проект вы тогда писали?
    Не знаю какую метрику предложить, пусть будут LoC (ну или предложите свою)

    Поясню к чему это спрашиваю:
    Целое ядро линукса версии 1.0.0 содержало 176250 строк кода.
    Версии 5.11 - 30.34 миллионов строк вообще и из них около 14% само ядро, 60% - дрова. Т.е. "чистое ядро" - больше 4 млн. строк кода.
    Не задумывались ли вы что это не погромисты деградировали, а кодовая база стала настолько, что охватить ее взглядом не может практически никто, даже при мелком дроблении на проекты, подпроекты и тд?
    И чтобы хоть как-то заставить это работать приходится делать фреймворки, уровни абстраций и тд?

     
     
  • 5.200, Аноним (160), 11:35, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Надо было делать микроядро.
    Тогда бы это был не один монолитный bloat на 30000000 строк, а 300 неблоатов по 100000
     
  • 4.202, Аноним (218), 12:00, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Чел на 939 сокете
    >386 и выше уже не застал

    Лукавит дедуля

     
     
  • 5.204, Аноним (198), 12:07, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так может он на 939 только в зуму и солитер играет.
     
  • 3.187, Аноним (186), 09:17, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут недавно информация прошла. Одна команда что-то там изучала и упростила задачу со 100 тысяч уравнений до четырех (не тысяч - просто до 4-х). Считаете, они даром потратили время?
     
     
  • 4.201, Аноним (160), 11:37, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Современным программистам не понять что такое оптимизировать каждый байт и каждый такт
     
     
  • 5.211, Аноним (69), 14:25, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Любой каприз за ваши деньги.
     
     
  • 6.236, Аноним (238), 15:13, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Любой настоящий программист в первую очередь думает об оптимизации
     
  • 4.216, Аноним (69), 17:15, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Они — нет, а оптимизатор байта — да.
     
  • 2.152, Аноним (152), 22:20, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Раньше время работы компьютера было дороже, чем время работы программиста, да и программы меньше.
     
     
  • 3.153, Дональд Кнут (?), 22:54, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Л - Логика, сынок а ты не думаешь что программы были меньше именно потому что все писали с "головой", а не качали кучу зависимостей и фреймворков чтобы вывести хеллоу ворд
     
     
  • 4.157, Аноним (157), 23:10, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Л - Лениво думать.
     
     
  • 5.161, Аноним (160), 02:16, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Описание современных так называемых программистов
     
     
  • 6.166, Аноним (168), 02:55, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну дык некогда думать, смузи ждёт.
     
     
  • 7.173, Аноним (173), 07:51, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    любители смузи совсем разучились думать.
    думать могут только нелюбитили смузи с опеннет.
     
  • 4.205, Аноним (69), 12:57, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Программы были не только меньше, они были ПРОЩЕ. Не все современные программы ограничиваются «hello world», знаете ли.
     
     
  • 5.223, Аноним (223), 04:46, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Простота залог надёжности. Гуманитарии, палитесь же, сразу видно человек написавший это не имеет технического образования и соответствующего склада ума.
     
     
  • 6.235, Аноним (238), 15:11, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Что ещё ожидать от растоманов
     
  • 2.172, Аноним (173), 07:49, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что еще ожидать от современных диградирующих погромистов?
    Наизобретали всяких там rust, java и других скриптовых языков с проверками границ массива, а теперь и из С делают скриптовый язык. Позор!
    Настоящим экспертам-программистам с опеннет достаточно только нескритового С и ассемблера чтобы написать всё что угодно.
     

  • 1.148, Аноним (148), 21:36, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ввести массивы на уровне языка? Нееее, мы всё в рантайме проверять будем!
     
     
  • 2.158, Аноним (158), 23:17, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Уточните пожалуйста что это за конструкция языка С++?
    int notArray[] = {1, 2, 3};

     
     
  • 3.162, Аноним (129), 02:27, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не поверишь... Это указатель с гранулярностью размера int.
     
     
  • 4.171, Аноним (173), 07:37, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/



    #include <iostream>

    using namespace std;

    int main()
    {
        int notArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int* pointer = notArray;
        cout<<"not array size: "<<sizeof(notArray)<<endl<<"pointer size: "<<sizeof(pointer)<<endl;

        return 0;
    }



    not array size: 40
    pointer size: 8

    Если [] указатель, то почему он такой большой?

     
     
  • 5.177, Аноним (173), 08:13, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/


    #include <iostream>

    using namespace std;

    int main()
    {
        auto pointerAtNotArray = new int[15];
        cout<<"not array size: "<<sizeof(*pointerAtNotArray)<<" :-("<<endl;
        delete pointerAtNotArray;
        return 0;
    }


    [b]not array size: 4 :-([/b]

     
     
  • 6.178, Аноним (173), 08:16, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И это при том что размер массива сохраняется для оператора delete
     
  • 6.193, 0x04070407 (?), 11:09, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +7 +/
    delete[], учитель
     
  • 5.184, ХрюХрю (?), 08:52, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +33 +/
    int notArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int* pointer = notArray;
    std::cout<<"not array size: " <<sizeof(notArray) << "\n"; // тут в sizeof передан адрес первого элемента массива и sizeof будет считать размер всех элементов массива: 10 элементов по 4 байта == 40 байт
    std::cout<<"not array size: " <<sizeof(*notArray) << std::endl; // тут в sizeof передано значение первого элемента массива со значением 1 типа int и размером 4 байта (размер именно элемента массива, а не указателя) (тоже самое что: sizeof(notArray[0]; sizeof(*(notArray+0))
    cout<<"pointer size: "<<sizeof(pointer)<<endl; размер указателя в зависимости от битности ОС
     
  • 3.209, minonA (?), 14:12, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    int notArray[] = {1, 2, 3} - это статический массив. std::vector - разновидность динамического. И там всё но указателях. Если бы была сущность на уровне языка, да, можно было бы в ряде случаев определять выход за границы статически, или минимизировать количество динамических проверок.
     
     
  • 4.232, Аноним (232), 13:46, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Опеннет эксперт утверждает что в Си++ нет массивов. На опеннет настоящие программисты и они врать не будут.
     
     
  • 5.239, Аноним (-), 15:25, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не будут. Анон сказал же что это указатель с гранулярностью в int (про гранулярность красиво сказано). Спор ниачем развели тут. Да у язык не проверяет границы массива, о чувак но язык же не проверяет выход за границы, хахаха аноны такие эксперты и врать не будут . Это новый уровень дизонанса ?
     

  • 1.155, Аноним (158), 23:04, 06/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Настоящим экспертам-программистам с опеннет проверки не нужны.
     
     
  • 2.156, Интеллект (?), 23:06, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Причем тут эксперты, зачем перекладывать на ресурсы процессора то что ты можешь сделать головой зарананее, хотя судя по сутации в мире, думать головой не умеют
     
     
  • 3.159, Аноним (158), 23:26, 06/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Интеллект с опеннет тут же подтвердил это утверждение.
    Настоящие программисты осталось только здесь
     
  • 3.191, Аноним (198), 10:40, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ахаха, мы все прекрасно видим как эти головы работают))
     
  • 3.199, Аноним (160), 11:26, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Судя по ситуации на опеннет думать головой здесь умеют 3-4 человека
     
     
  • 4.224, Аноним (223), 04:49, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Шиз, как ты этих 3-4 чела вычислил на анонимной борде
     
     
  • 5.231, Аноним (232), 13:31, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дурачку, тут регистрация есть и они зарегистрированы
     
  • 3.219, CVE (?), 18:26, 07/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зашёл CVE на сайт, на котором постят часто новости про CVE, чтобы напомнить, что CVE никуда не денутся из-за языка, который спроектирован так, чтобы человеческий фактор формировать CVE был всю жизнь, а любые методы предотвращения CVE критиковались такими же CVE-создателями.
     
     
  • 4.234, Аноним (238), 15:10, 08/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Растоманы и прочие считающие себя программистами персонажи этого не понимают
     

  • 1.220, истина в последней инстанции (?), 18:33, 07/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > предлагается использовать классы std::array, std::vector и std::span

    Сто лет в обед работает. Но да, тем кто не читает про обновление в  стандартах лишний раз ткнуть носом не помешает. Сюда ещё range based loop добавить надо.

    > корректировки кода, позволяющий заменять переменные с голыми указателями на контейнеры

    А вот это молодца

     
  • 1.233, Аноним (238), 15:08, 08/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем добавлять в компилятор лишние проверки замедляющие сбору программ если настоящим программистам они не нужны?
    Не кому нужны проверки не программисты и должны уйти из профессии.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру