URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 135850
[ Назад ]

Исходное сообщение
"На базе Clang для языка Си реализован режим проверки границ буферов"

Отправлено opennews , 24-Янв-25 14:35 
Инженеры из компании Apple объявили о готовности для тестирования режима "-fbounds-safety" для компилятора Clang, предоставляющего гарантии безопасной работы с буферами в коде на языке Си. Режим включён в состав форка LLVM, поддерживаемого компанией Apple для проекта Swift. В дальнейшем запланирована постепенная передача функциональности "-fbounds-safety" в основную кодовую базу LLVM/Clang...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=62606


Содержание

Сообщения в этом обсуждении
"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:35 
Растоконец?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:39 
Просто нас ждёт новая мода на новый язык.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:44 
Да почему же, просто костыль.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 24-Янв-25 16:43 
Здесь костыль опциональный для отдельных файлов, и даже их частей,
а не всё что есть сплошной костыль.
И главное, нет мартышкиного труда по переписыванию, а можно использовать и существующий код и библиотеки.
Так что, этот вариант  лучше.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:32 
> Так что, этот вариант  лучше.

Если пытаться программы на расте проектировать и писАть в сишном стиле, то да, вариант из статьи лучше. Но наСИльники никак не могут понять, что надо не "си в раст тащить", а менять свою порочную парадигму "программно-разработнического" мышления. Тогда и с боровом бороться не придется, он для вас из "тюремщика" и "пыточных дел мастера" превратится в телохранителя и помощника. А так-то конечно - пытаетесь опасные, вредные и "хакерские" сишные приемчики применять в разработке на расте - он вас и бьет по рукам, нехороший.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:01 
Ой ну да, конечно. Все кто хейтят си, просто не понимают всей прелести низкоуровневой работы с памятью. Естественно в таком программировании надо быть осторожным.
Но вот заставлять всех использовать мифически безопасный язык, это нифига не выход.
Растаманы пытаются всех загнать в свое стоило. Пытаются стать диктаторами монополистами. Да еслиб все поголовно писали низкоуровневый код на расте, по было бы еще более тормознутым, чем есть сейчас.
Достаточно уже наворотили уровней абстракций, от которых софт разжирел и тормозит, вы еще и хотите лишить нас свободы манипулирования байтами. Нет уж, со своим растом сидите дальше в своих калифорниях, вместе с ооп.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:16 
"Сорок лет как под наркозом,
Я работатал байтовозом..."
... но на выходе все равно получалась типикАл сишная пограммулина!

> просто не понимают всей прелести низкоуровневой работы с памятью.

Вы это про динамическое раcширение возможностей программы?
Ну, когда очередна дырень с RCE и программа начинает выполнять совсем не то, что запланировал 6ыdl... программист? Когда можно ходить и портить память?

> Естественно в таком программировании надо быть осторожным.

Осторожным, естественно, никто быть не собирался (с)
Как омнячили тогда, так и сейчас омнячат.

> Но вот заставлять всех использовать мифически безопасный язык, это нифига не выход.

С ПДД прокатило. Со стандартами на хавку - тоже. И тут добъемся своего.
Еще вариант ломать сишнику по одному пальцу за каждый выход за границы массива, но мы же не звери))) Да и сишники тогда слишком быстро закончатся. Примерно за пару недель в лучшем случае.

> Да еслиб все поголовно писали низкоуровневый код на расте, по было
> бы еще более тормознутым, чем есть сейчас.

Прям пальцем в небо))
Только почему-то uutils на расте местами работают намного быстрее чем coreutils на сишечке. Наверное то всё неправильные_сишники™ писали. Вот были бы правильные... ух! тогда бы раст обогнали бы)))


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:57 
Красиво набросил. Почти поверил.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:12 
Вы хоть программировать то умеете?
А то у вас не раст а какой то розовый пони и не С а какой то злой дракон :)

НаСИльники - они сильно разные есть, с сильно разным error/bug rate :)
Старое поколение, ИМХО, много кто учился по книжкам, а там всё обмазано стандартной библиотекой и никак вопросы проверки границ не затрагиваются.

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


Кстати гноомокцы против проверок, мне как то написали типа нафиг проверки пусть падает или типа того :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:33 
> Здесь костыль опциональный для отдельных файлов, и даже их частей,

А какой тогда смысл???
Если ты знаешь что у тебя проблема с конкрентым файлом или даже его частью (это как? с конкретным циклом что ли?))), то не лучше ли просто исправить ошибку и добавить проверку руками?

Тут же проблема как раз в глобальности. У тебя есть огромная куча кода, которая где-то когда-то выходит за границы и портит память. А где - никто не знает.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 24-Янв-25 22:54 
> Если ты знаешь что у тебя проблема с конкрентым файлом

   Если это свой или знакомый файл, или не забытый, то проблемы считай, что нет, ибо подобное обязательно исправляется.
Исключение для отдельных сильно мудрёных манипуляций значительным объёмом данных.
  Второй момент, тупо тесты, если не выявлено нарушений доступа к памяти, так можно смело пересобирать обычным компилятором.
  А ведь на Си обычно код общего назначения сейчас не пишут, обычно это или системное ПО, или критичные молули, или вовсе встраиваемое ПО,когда потери быстродействия неуместны.


>добавить проверку руками?

Если совсем весь код на Си обложить проверками, то это и не читаемо и немеренно работы. А тут всё можно на автомате.


> и портит память. А
> где - никто не знает.

Особенно если это не заметно, и не проявляется при работе ПО, например из за резервирования размера буферов, проверки данных и переинициализации отдельных частей.
А с предлагаемым вариантом фиксируется факт нарушения доступа, например в лог, и даже если при старом тесте это могли не выявить, с этим вариантом нарушения будут выявлены.



"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:27 
> Второй момент, тупо тесты, если не выявлено нарушений доступа к памяти,
> так можно смело пересобирать обычным компилятором.

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

> А тут всё можно на автомате.

Не на автомате, в том то и дело.

> с этим вариантом нарушения будут выявлены.

Могут быть выявлены. Если повезет.
Но согласен что это лучше чем ничего.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:13 
Валгринд и асан знает.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:23 
> Валгринд и асан знает.

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

Полностью восстановить ход событий невозможно, повторить не получается, заставить клиента юзать валгринд нереально, поэтому сиди проверяй все подозрительные места, выбрав их по логам. (Просто для контекста - кодовая база на 2М loc)

Если у вас есть идеи как лучшее решение - с удовольствием его выслушаю.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 01:18 
Ну вы сами злые буратины.
У нас в продукте давно внедрено что мы собираем с -O2 -g и все корки падают в одно место, там же с них извлекаются бэктрейсы в которых видны и названия функций и нумера строк и названия переменных с их значениями.
Это конечно не на 100% решает все проблемы, но все частые падения мы давно так отловили и пофиксили, насколько помню осталась у нас одна проблема которая проявляется редко при завершении работы, но жить это точно никому не мешает.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 25-Янв-25 16:55 
> и все корки падают в одно место,

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 17:08 
> У нас в продукте давно внедрено что мы собираем с -O2 -g и все корки падают в одно место, там же с них извлекаются бэктрейсы в которых видны и названия функций и нумера строк и названия переменных с их значениями.

Что ты несешь, сказочник? Какте бэктрейсы, если валгринд просто под конец говорит, что помять покоцана?

И да, в каком "у нас в продукте", если ты программистом никогда не работал?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 21:35 
Перечитайте ещё раз.
Запуск под валгриндом практикуем только мы (разработчики).

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:49 
> Растоконец?

Пффф... если бы...

> снижает производительность приложений в среднем на 5% (разброс от -1% до 29%)
> увеличивает размер кода на 9.1% (разброс от -1.4% до 38%)
> замедляет компиляцию на 11%.

Если на последнее можно забить, то предыдущие два выглядят остойно.
Плюс оно не будет работать со старым кодом автоматом:
> требует добавления в код специальных аннотаций и включения заголовочного файла "ptrcheck.h"

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

Ну и вишенка - оно исправляет только выход за границы буфера.
А как же use-after-free? А как же double-free? А int overflow?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аналгин , 24-Янв-25 14:57 
Как будто в другиях ЯП проверки бесплатные. Нет, в расте магическим образом бесплатным оно не станет.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Alladin , 24-Янв-25 15:03 
в расте есть множество способов сделать это бесплатным, банально тип &[u8; 128] это уже тип с макс границей 128,
а обработка массивов на расте считает плохим тоном прямое обращение по индексу, люди используют итераторы.


а функции с платной проверкой границ максимально явные так как возвращают option.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:13 
>  в расте есть множество способов сделать это бесплатным, банально тип &[u8; 128] это уже тип с макс границей 128,

И чё? Это просто другая форма записи того же самое, что и в новости. Это не бесплатно


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Alladin , 24-Янв-25 15:38 
и то, что зная что тип слайс с 128 элементами:
1. не нужно хранить количество элементов в runtime, а следовательно нет runtime проверок и не нужно доп памяти. прямое обращение к элементу с const номером не добавляет runtime проверок, а обращение к 129 элементу напрямую создает паник функцию (или None если это функция с option), также первый элемент массива абсолютно бесплатен.
2. нет потери характеристик типа между функциями. это также не пустой массив с 128 элементамм от функции к функции (всегда не null, указывает на не освобожденную память, по памяти такой же указатель, размер определен в compltime, размер и тип элемента определен).

и таких моментов в расте множество


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:48 
Как не нужно-то, вот ты хочешь цикл фор по этому слайсу, откуда рантайму знать, сколько шагов нужно сделать?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:50 
pub fn foo(buf: &[u8; 128]) -> u32 {
    let mut result = 0u32;
    for i in buf {
        result += u32::from(*i);
    }
    result
}

-C opt-level=1

foo:
        xor     eax, eax
        mov     dl, 1
        xor     ecx, ecx
.LBB0_1:
        movzx   edx, dl
        and     edx, 1
        add     rdx, rcx
        movzx   ecx, byte ptr [rdi + rcx]
        add     eax, ecx
        mov     rcx, rdx
        cmp     rdx, 128
        setne   dl
        jne     .LBB0_1
        ret


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 21:16 
cmp     rdx, 128 ни о чём не говорит? В си точно то же самое будет. Только выглядеть не так вср@то.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:48 
>1. не нужно хранить количество элементов в runtime, а следовательно нет runtime проверок

Ага, просто при итерации количество элементов прямо зашито в машинную инструкцию вместо области данных. Быстрее ли это? На самом деле нет.

>прямое обращение к элементу с const номером не добавляет runtime проверок, а обращение к 129 элементу напрямую создает паник

Прямо как в Си с флагом -Wall.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:19 
Здрасте, приехали. А тип "&[u8; 128]" — он что, бесплатен?

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

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Bottle , 24-Янв-25 20:40 
Rust - компилируемый язык, за неправильное приведение типов компилятор настучит по рукам программиста.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 24-Янв-25 23:39 
> в расте есть множество способов сделать это бесплатным..

Так с очевидными операциями с массивами и проблем обычно нет, и проверки простые

>>итераторы

А когда индексы/указатели получены на основе аргументов, да к ваниантным структурам,  получаем те же проверки в рантайме.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:17 
Хоспаде, какие конченные люди.
Обращение к элементу массива по индексу это один из святых граалей, фича которая мастхэв.

Периодически бывает нужно или таблицу для перекодирования иметь или ещё что то удобно упихать в таблицу потому что на входе у тебя какие то числа на которые надо что то делать.

Если дрюкатся через итераторы то вместо o(1) будет o(n) сложность доступа до рандомного элемента массива.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:33 
> Хоспаде, какие конченные люди.

Хоспаде, так это ты про себя же говоришь!
У тебя никто не отбирает доступ по индексу. Даже остается доступ без всех проверок вообще. Разобрался бы вначале о чем речь, а потом бы лез в комменты.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 01:29 
Все итераторы которые я видел не умели o(1) обращение по индексу. Они потому интераторыми и назывались что там другая механика работы и другой синтаксис.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 16:45 
> Все итераторы которые я видел не умели o(1) обращение по индексу.

Ну, значит ты никаких итераторов не видел. Да и где бы ты их увидел, если кроме C ничего не осилил. 😂

А так даже в том же C++ испокон веков есть random access iterator.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 26-Янв-25 03:42 
Итераторы есть и в С, естессно не как часть языка, несколько разных реализаций, но они при различных связных списках, потому что там по другому никак.

Какие то итераторы я трогал в джаве, когда год назад сдавал лабы :)
Что то вроде было давно в крестах.

И я не спорю что можно сделать итератор который возвращает элемент по индексу, просто в случае списка это будет o(n), а в случае массива итератор смысла не имеет, это просто синтаксический сахар, и если он плохо реализован то он тоже станет o(n).


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 09:43 
> в случае массива итератор смысла не имеет, это просто синтаксический сахар

Узко мыслишь. Итератор -- это абстракция над последовательностью, которая позволяет писать полиморфный код. Например, ты можешь один раз написать max, который будет работать со всеми итераторами (элементы которых реализуют PartialOrd). Или, ты можешь написать алгоритм сжатия, который будет работать поверх итератора байтов, экспортировать этот алгоритм из своей библиотеки, оставив клиентскому коду проблему создания итератора, который может быть итератором по массиву, или итератором по списку, или может быть этот итератор отдаёт байты из буфера, а когда буфер кончается, читает в него следующий чанк из файла. Или может он генерит данные, каким-то образом? Это не проблема того, кто пишет алгоритм сжатия, это проблема клиентского кода, и итераторы позволяют чётко разделить ответственность между поставщиком кода и клиентом.

Хотя, "абстракция над последовательностью" -- это тоже узковато будет. Итератор может возвращать void или его аналог в качестве элемента. Итератор -- это абстракция над итерацией, со стандартизованными API, которая позволяет одному поставщику заниматься бойлерплейтом, типа организации цикла и подготовки следующей итерации, в то время как другой может заниматься собственно кодом итерации.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 26-Янв-25 18:32 
Понятно.
Вы в том возрасте/состоянии когда охота писать не конкретный код, а код для всего работающий всегда :)

Я бы тоже мог извращатся и писать всякое такое требуя от кода реализации коллбэка read() но это дичь какая то )


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 22:52 
> Понятно.

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

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

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

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

> требуя от кода реализации коллбэка read()

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

Всему своё место. Но при этом, то что из Vec можно сделать Read -- это очень удобно, на самом деле. Редко, но зато когда будет полезно, то будет ПОЛЕЗНО. Например, те же самые декодеры, как правило декодируют данные, которые получают посредством ввода, они заточены под то, чтобы обрабатывать ошибки ввода/вывода, им без этого никуда. Но если я беру декодер png, и тот на входе принимает только mut Read, а я хочу декодировать данные из памяти, то... То я просто из этих данных в памяти сделаю Read, и засуну в декодер. Причём, мне даже не придётся писать impl Read for ..., я уверен, что если не в стандартной библиотеке, то в каком-нибудь крейте должна быть реализация Read для слайсов и Vec. Я пользовался этим как-то раз, стопроцентов есть. И я думаю, что всё же в std.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 00:53 
> Вероятно, с растом у тебя те же проблемы: интуиция фейлится и говорит тебе, что ты всё понял

Ну да, я всё понял.
1. мутный алогичный синтаксис
2. нудный компелятор придирающийся к каждой мелочи и жующи сопли часами


> не писать кода, а не написанный код -- это лучший код.

И правда, лучший раст код - код который не написан :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 27-Янв-25 03:25 
> 1. мутный алогичный синтаксис

Хаха, ровно наоборот. Если тебя интересует логика, то тебе в сторону функциональных языков. Они как раз к логике дружелюбны. И синтаксис продуман, не то что в каком-нибудь C, в котором чтобы распарсить объявление переменной нужно спиральное правило, которое помнят три программиста из сотни.

> 2. нудный компелятор придирающийся к каждой мелочи и жующи сопли часами

А вот тут в точку: компилятор не терпит разгильдяев, которые пишут код абы как.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 05:57 
Пример с суммой квадратов пяти элементов массива вполне наглядно показал всю ущербность синтаксиса гнили, лично для меня.

В какомнибудь С никто не заставляет писать сложные объявления переменных, нет такой потребности.
В пределе достаточно void * и size_t. Всё остальное это уже можно сказать коментарии кодом для пограмистов коллег и себя любимого.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 27-Янв-25 11:54 
>Пример с суммой квадратов пяти элементов массива вполне наглядно показал всю ущербность синтаксиса гнили, лично для меня.

Если бы вы ещё не путали синтаксис с семантикой, ваше мнение имело бы какую-то ценность. В Rust не более сложный синтаксис, чем в C - те же скобочки, точечки и другие спецсимволы. А вот семантиика - да, посложнее. Но зато не надо в каждом проекте хешмапы изобретать. И код меньше ошибок содержать будет. Вменяемые программисты это понимают. А остальные... пеняют на синтаксис, хотя на самом деле проблема или в их неспособности понимать семантику или в банальной лени.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 19:45 
Сколько там у вас ключевых слов в базе языка?

Я когда прогал в вижал бейсике там в IDE были и подсказки-автодополнения и полная документация по F1 на любое слово.
Если у вас этого нет - то считайте что все ваши хэшмапы и прочее - просто мёртвый груз, ни чем не отличающийся от того что я могу в С нагуглить реализацию хэшмапы и стянуть с гитхуба и там же где то читать документацию на неё.

Что до семантики, то писать на С так чтобы другие не поняли - это возможность а не обязательство языка :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 27-Янв-25 17:49 
> В какомнибудь С никто не заставляет писать сложные объявления переменных, нет такой потребности.

Это у тебя от недостатка опыта. Все сишные проекты используют множество разных типов, и пускай не все объявляют массивы указателей на функции, которые возвращают указатели на функции, но они используют далеко не только size_t и void*. И чесслово я не понимаю, как люди разбираются в том, что именно const в объявлениях типа:

int * const p;
const int * p;
int const * p;

Что именно из этого объявляет константный указатель на мутабельные инты? Мне, честно говоря, даже спиральное правило не помогает понимать модификаторы. Я всегда методом тыка. Но я это к тому говорю, что уже даже в столь простом казалось бы случае, начинается какой-то ппц.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Совершенно другой аноним , 27-Янв-25 19:08 
> int * const p; //(1)

p - неизменяемый (const) указатель (*) на целочисленный тип (int) //(1)

> const int * p; //(2)
> int const * p; //(3)

По-моему эти оба варианта эквивалентны:

p - указатель (*) на целочисленный (int) неизменяемый (const) тип //(2)
p - указатель (*) неизменяемый (const) на целочисленный (int) тип //(3)

(как там говорится - что в лоб, что по лбу).

> Что именно из этого объявляет константный указатель на мутабельные инты?

(1)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Совершенно другой аноним , 27-Янв-25 19:26 
Прошу прощения, там описка, должно быть, конечно:

p - указатель (*) на целочисленный (int) неизменяемый (const) тип //(2)
p - указатель (*) на неизменяемый (const) целочисленный (int) тип //(3)



"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 30-Янв-25 04:41 
Ты тратишь время впустую, объясняя мне это. Я сосчитать не могу сколько раз я находил такие объяснения и читал их, но я так и не смог запомнить. Самый простой способ, это написать код, который работает с таким указателем, меняя и его и то, что он адресует, а потом, компилируя с -Wall, подобрать места для const так, чтобы компилятор варнинги бы кидал на нужные строки.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 19:49 
Открою тебе секрет: всем побуй что оно там объявляет.
const в данном случае не обязанность пограмиста а типа комента себе и компелятору подсказка, если выкинуть const оно точно так же соберётся и будет работать.

Структуры используют чисто для удобства, чтобы передавать не Х параметров а 1 или чтобы делать сериализацию/десериализацию удобной.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:18 
> Как будто в другиях ЯП проверки бесплатные. Нет, в расте магическим образом бесплатным оно не станет.

Разумеется.
Но в расте ты платишь в основном временем компиляции.
При использовании слайсов - проверка делается только один раз.
При использовании итераторов - тоже только один раз.
При использовании прямой итерации по массиву, то да - получается также как тут.
Т.е. получается лучше во всех случаях кроме такого.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:33 
Так а что мешает обсуждаемому компилятору, раз он уже знает максимально возможный индекс, проверить только его? Ничего.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:08 
> Так а что мешает обсуждаемому компилятору, раз он уже знает
> максимально возможный индекс, проверить только его? Ничего.

Неа. Оно должно работать с generic code.
Ты можешь в нем напр. изменить i. Поэтому они вынуждены проверять на каждой итерации.
А со слайсом/итератором - уже внутри делается проверка на границы один раз.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аналгин , 24-Янв-25 16:21 
Ты ничего там не поменяешь так чтобы компилятор об этом не знал.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:25 
> Ты ничего там не поменяешь так чтобы компилятор об этом не знал.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:31 
В этом случае да, придётся чекать каждый раз (но и на расте тоже). Но обычно всё же нет, в джаве компилятор умеет отключать проверки в циклах.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:22 
В расте большая часть проверок в compile-time.
Т.е разработчику придется подождать подольше, CI будет бегать не так шустро.
Может придется купить билд-машину помощнее.

А в предложенном варианте
> снижает производительность приложений в среднем на 5% (разброс от -1% до 29%)

у КАЖДОГО пользователя.
А если их будут миллионы?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:12 
Проснись уже...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:04 
Станет, но без всякой магии.

Например:

    for (size_t i = 0; i < count; ++i)
        buf[i] = i;

можно переписать как:

buf.iter_mut().enumerate().map(|(i, b)| *b = i);

Или если count != buf.len(), то:

buf.iter_mut().take(count).enumerate().map(|(i, b)| *b = i);

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

Проверки в расте не бесплатные, но они дешевле, чем 5% производительности.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аналгин , 24-Янв-25 16:23 
Какой ужас. Даже джава в первом примере автоматически уберет проверку.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:52 
Я думаю, что C тоже удалит её, но ситуации бывают сложнее, и вот там функциональщина начинает рулить.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:16 
> Проверки в расте не бесплатные, но они дешевле, чем 5% производительности.

Это кто сказал? Тутна Сях даже удаляешь прстую команду - бац +30% тормозов, из-а архитектурных особенностей / недетерминизма, а у вас максимум 5% всегда......
Так же, хначит и в Си будет - не больше чем на Rust, в конкретном случае. Вы меня просто поражаете!


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:11 
> Это кто сказал?

Проскакивало что-то в информационном потоке, какие-то попытки оценить накладные расходы на реальном проекте. Я не помню, что именно, поэтому ссылки не будет.

> хначит и в Си будет - не больше чем на Rust

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:21 
> buf.iter_mut().take(count).enumerate().map(|(i, b)| *b = i);

Нечитаемая галомотня.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:37 
> Нечитаемая галомотня.

Мда... просто перепись неосиляторов с сишкизмом голового мозга в терминальной стадии.
В таком случае понятно почему вы кроме си ничего осилить не можете. Там же сложнаааа.

Как раз все просто и понятно:
- берешь итератор, именно мутабельный
- указываешь что нужны первые count
- итерируешься и для каждого элемента выполняешь присваивание


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 02:08 
Вопрос не в неосиляторстве а в том нафига делать так сложно.

> buf.iter_mut().take(count).enumerate().map(|(i, b)| *b = i);

У вас тут 5 уровней, а в конце ещё что то непонятное в качестве аргумента для map().
Если бы я писал что то похожее то я бы на каждом этапе проверял на NULL прежде чем обращатся дальше.

Но я бы такое сложное писать не стал, ведь изначально вы это написали как замену банальному циклу:
for (size_t i = 0; i < count; i ++) { buf[i] = i; }

У меня даже в строчку это получилось короче записать чем у вас.

При условии что count меньше или равен sizeof(*buf) оно будет работать без проблем и не требует никаких проверок.


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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 19:25 
> Так вот, этот ваш крипто код конечно занятный, но копатся в этом не интересно.

Давай-ка ты теперь напишешь на сишочке с циклом код, считающий сумму квадратов первых пяти четных чисел из массива, а я посмотрю, насколько оно будет читабельнее вот этого:

let even_sum_squares: u64 = values
    .iter()
    .filter(|x| *x % 2 == 0)
    .take(5)
    .map(|x| x * x)
    .sum();


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 21:50 
size_t summ = 0;
for (size_t i = 0, c = 0; i < count && c < 6; i ++) {
  if (0 != (1 & buf[i]))
    continue;
  summ += (buf[i] * buf[i]);
  c ++;
}

Опять короче чем у вас получилось и понятнее. )
Притом насколько я понимаю ваша реализация будет тормознее, ибо она в начале получит все чётные числа и потом только из них возьмёт первые 5.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 05:53 
> ибо она в начале получит все чётные числа и потом только из них возьмёт первые 5.

Нет, она не будет ничего получать сначала. filter делает из итератора новый итератор, который будет перебирать элементы удовлетворяющие условию. iter() не делает ничего, это чисто статическое создание типа, filter не делает ничего, это чисто статическое создание типа, take(5) не делает ничего, это чисто статическое создание типа, map не делает ничего, это статическое создание типа. Вот sum реально запускает цикл по переданному в него итератору, и это единственный цикл там. Этот цикл, итерирует по значениям values, игнорируя нечётные, прекращает итерации после 5 найденных значений, и суммирует квадраты этих значений.

То есть, "чисто статическое создание типа", на практике может добавлять в рантайм O(1) сложности, но это зависит от оптимизаций, которые компилятор сможет провернуть.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 15:07 
> Никогда писал ни на чём, кроме сишечки?

Он сам говорил, что осилил только C и Lua. Но, как видишь, имеет экспертное мнение по всем языком на свете.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 26-Янв-25 18:23 
Я не понимал и не хочу понимать как работает ваша белибирда, тем более что она работает контр интуитивно.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 15:12 
> Опять короче чем у вас получилось и понятнее. )

Понятнее? У тебя получилась типичная императивная лапша, с не имеющими отношения к задаче i, c и continue, смысл которых становиться понятным только прочесть весь код целиком.

Код на Расте читается буквально как текст. И он останется таковым если добавить хоть 10 дополнительных условий, в то время как твоя портянка превратиться после этого в кромешный ад.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 26-Янв-25 18:27 
Ага читается, только надо знать что значат 5 ключевых слов и как туда пишутся аргументы.
Плюс вон товарищ написал что оно работает на сплошной магии, а не как 5 последовательных функций.

Код на С задействует всего 3 ключевых слова, одно вообще без аргументов.

В общем ребята, вы наркоманы с таким синтаксисом :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 22:59 
> Так вот, этот ваш крипто код конечно занятный, но копатся в этом не интересно.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 05:59 
Взаимно.
И не лезте с вашей гнилью в С/С++ проекты, можете так?)

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Проходил мимо , 29-Янв-25 13:43 
Пипец.
Ваша фраза "При условии что count меньше или равен sizeof(*buf)" меня просто убила.

#include <stdio.h>
#define BUF_SIZE    16
int  main( int argc, char* argv[] )
{
    int buf[BUF_SIZE];
    printf("Размер буфера по версии Ivan_83: %u\n", sizeof(*buf));
    printf("Реальный размер буфера: %u\n", sizeof(buf));
    return  0;
}
Результат работы программы:
Размер буфера по версии Ivan_83: 4
Реальный размер буфера: 64

Обычная ошибка, с кем не бывает, правильно?
Я не буду издеваться и просить предъявить программу с такой же ошибкой на Rust. Просто хочу сказать, что использование итераторов от подобных вещей отлично защищает.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Проходил мимо , 29-Янв-25 13:14 
При всем уважении, хотел бы напомнить, что в Расте ленивые итераторы, map не будет сама по себе потреблять значение и enumerate() в таком виде, как вы написали, не будет работать с буфером типа int (i32) из-за типа, поэтому есть мнение, что ваш пример требуется немного переделать. Например так:

const   BUF_SIZE: usize = 16;
fn  main()
{
    let mut buf: [i32; BUF_SIZE] = [0; BUF_SIZE];
    //  адаптер итератора enumerate() возвращает кортеж из usize и элемента коллекции
    //  поэтому потребуется приведение типа
    buf.iter_mut().enumerate().for_each(|(n,val)| *val = n as i32 );
    println!("{:?}", buf);
}

Вот это уже рабочий код. Результат работы таков:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 19:23 
>Как будто в другиях ЯП проверки бесплатные

Да, бесплатные, во всех языках с зависимыми типами, поскольку происходят во время компиляции. Но, разумеется, сишники об этом за полвека до сих пор не узнали.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:08 
Так кланг же высылает ворнинги при использовании обнуленного указателя

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 24-Янв-25 16:51 
> снижает производительность приложений в среднем на 5% (разброс от -1% до 29%)
> увеличивает размер кода на 9.1% (разброс от -1.4% до 38%)
>> выглядят остойно.

Если сплошной код типа  *x++ ? x[*y+n] = *z++...
то и будут максимальные потери. И будут они на любом языке с проверкой границ.

Но для критичных мест есть же #pragma

>>не так сложно как на раст переписать

Переписать можно и на С++ безопасно. Если делать нечего то и на JS.
А если переписывание не финансируется? За чей счет несложно переписать?
Зато с предлагаемым вариантом можно перекомпилировать код, и
и можно сразу запустить. А когда перепишут всё. Что тоже значительная разница.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:12 
> А если переписывание не финансируется? За чей счет несложно переписать?

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

> Зато с предлагаемым вариантом можно перекомпилировать код,
> и можно сразу запустить.

И... И ничего не поменяется)))

Чудес не бывает - вам все равно придется пройтись по ВСЕМ циклам и расставить нужные аннотации. И желательно ничего не напутать в процессе.
Что не такая уж маленькая работа по сравнению с "перекомпилировал и запустил".


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Anonymmm , 24-Янв-25 18:44 
может проблема в руках?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено анон , 24-Янв-25 21:09 
Не так давно здесь писали про компилятор fil-c для C/C++ (форк Clang). Теже 5%. Чудес не бывает - это скрытые проверки на диапазоны массивов. Много программ собирается без переписывания, но изменяется ABI.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Sergey , 24-Янв-25 21:15 
Ещё со времен Windows 2000 дебаггер имел возможность ставить хардварные брейкпоинты на запись в область памяти. Gdb так не умеет? Прошу прощения за глупый вопрос, недавно с линуксом работаю.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:13 
x86 может поставить 4 таких брекпойнта.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:31 
Почему нет? В критические ко времени исполнения места - вносим нужные оптимизации. Проблемных мест станет значительно меньше.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:12 
все прям бросили раст, плюсы, го и побежали  писать на древнем С. Ядро Линукса, xne, драйверы , контроллеры и легаси тулы линукса - вот и вся ЦА этого языка

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:18 
опеннет фантазеров еще забыл упомянуть как ЦА для Си

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:25 
Да это вы тут какой то фантазёр, я ранее тут даже приводил ссылку на оч.крутой benchmark, а не как обычно от Васяня, и даже сделал суммирующий анализ оттуда табличек производительности разных языков. Пусть Rust не самое дно по производительности - но, дно.
Не знаю как у них так криворуко получилось. Выше даже вон привёл анализ чьего то примера ассемблера от него, на простейшем цикле.
Так кто тут фантазёр?...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 00:40 
> я ранее тут даже приводил ссылку
> даже сделал суммирующий анализ

И никаких пруфов. Даже на свой коммент тут.

> Так кто тут фантазёр?...

Ну, получается что ты.
Talk is cheap. Show me the link.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 02:01 
На утрись:
https://www.opennet.me/opennews/art.shtml?num=62343#94

А, анализ тут асма от Rust'a уже зачищен:
https://www.opennet.me/opennews/art.shtml?num=62606#137


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 26-Янв-25 14:18 
Вы сами хоть смотрели ваш файлик? Там же на первой странице написано, что Rust - самый энергоэффективный, хотя проигрывает по потреблению памяти 9 позиций.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 11:05 
какая связь между вашим бенчмарком и ограниченным ЦА языка Си? Ну сделали вы бенчмарк, ну и что? Ну быстрый Си, ну и что? Всем пох. А Раст при этом еще примерно настолько же быстрый.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено laindono , 24-Янв-25 14:39 
В современных языках это и так есть по умолчанию. В целом хорошая идея, всё равно сишников заставить писать нормальный код невозможно. А так хоть падать будет с читабельной ошибкой. Это определённо лучше, чем код, который то работает, то не работает, то работает, но странно.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:30 
Синтаксис плохенький :( и ещё ряд жутких идеалогических недостатков :(
- использовать это мало кто будет.
Т.б.было уже подобное - в GCC, не много ни мало лет двадцать назад. Выпилили позже из-за недоделанности и заброшенности, никому не надо оказалось. Либо с такими же проблемами реализации как тут.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено я , 25-Янв-25 12:34 
ну так это буквально фича для перекапывания старого си-кода.. если у вас нет сикода который надо продолжать поддерживать но нет смысла его серьёзно переписывать, то это мимо вас..

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:39 
Плохой программист останется таковым независимо от языка. Все дело в людях и rust это никак не изменит...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено я , 25-Янв-25 12:35 
конечному пользователю пофиг писал код хороший или плохой програмист. если раст хотябы в трёх случаях из 10 не позволит плохому програмисту написать кривой код то это уже победа.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Анонис , 25-Янв-25 14:42 
В том то и дело, Rust лишь защищает от ряда нубских ошибок, а от написания кривого кода он не спасает.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 26-Янв-25 14:23 
Нубские - это те, которых 70% от общего количества ошибок в любом коде на Си? Но тогда ведь можно сказать, что все программисты на Си - нубы.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Bottle , 27-Янв-25 00:46 
В хрусте нет производных типов как в Ada и куче функциональных языков, позволяющих избежать логических ошибок.
У хруста нет хоть какого-то стандарта и альтернативных имплементаций.
У хруста нет гарантий обратной совместимости. Всё держится на честном слове и на обнаружении ошибок после обновления компилятора.
Хруст не запрещает UB, вместо этого он их поощряет, ведь никто не настучит по рукам, если я оберну весь код в unsafe. И даже если я не буду этого делать, это сделают другие за меня в библиотеках cargo.
Пока хруст будет компилироваться, даже программы на C/C++ успеют собраться, тем самым я отловлю ошибку в дебаге, пока хруст будет безопасно компилироваться.
В конце концов, сообщество Rust безумно, так как вместо того, чтобы создавать продукты на языке, оно/они поёт дифирамбы язычку. Мастер своего дела не превозносит инструмент, а работает с ним.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 27-Янв-25 12:06 
Столько глупостей в одном сообщение. Да вы талант.

>В хрусте нет производных типов

В смысле, наследования?

>У хруста нет хоть какого-то стандарта

RFC (разработчикам Питона это на мешает).

> и альтернативных имплементаций

Gcc (пока в альфа)

>У хруста нет гарантий обратной совместимости

Editions

>Хруст не запрещает UB, вместо этого он их поощряет, ведь никто не настучит по рукам, если я оберну весь код в unsafe

Unsafe - это не то же самое, что UB. И нет, в RFC у Rust нет UB, в отличие от Си, где оно прямо в стандарте записано.

>Пока хруст будет компилироваться, даже программы на C/C++ успеют собраться, тем самым я отловлю ошибку в дебаг

Некоторые типовые ошибки Си в ядре десятилетия и живут и не отлавливаются.

>В конце концов, сообщество Rust безумно, так как вместо того, чтобы создавать продукты на языке

Слона-то я и не заметил. (c).



"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Совершенно другой аноним , 27-Янв-25 13:54 
> И нет, в RFC у Rust нет UB, в отличие от Си, где оно прямо в стандарте записано.

Можете, пожалуйста, прояснить сообщение компилятора, которое приводится в сообщении:

https://users.rust-lang.org/t/what-is-the-undefined-behaviou...

В частности там есть такое:

;------------------------------X8
error: Undefined Behavior: trying to retag from <3017> for SharedReadOnly permission at alloc1089[0x0], but that tag does not exist in the borrow stack for this location
  --> src/main.rs:7:13
;------------------------------X8

И по https://doc.rust-lang.org/reference/behavior-considered-unde... приводят какие-то сведения об UB в Rust.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 28-Янв-25 03:32 
Причём здесь сообщения компилятора, до существования прямо в стандарте ЯП UB?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Совершенно другой аноним , 28-Янв-25 09:38 
> Причём здесь сообщения компилятора, до существования прямо в стандарте ЯП UB?

А, ну да, простите, забыл, у Rust ведь нет стандарта..


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Проходил мимо , 29-Янв-25 13:20 
В чем-то вы правы, но практика показывает, что плохие программисты пишут плохие программы, а компилятор Rust ни в какую такие программы не хочет компилировать. Поэтому можно смело утверждать, что Rust выступает неким фильтром говнокода.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:46 
> Включение режима "-fbounds-safety" снижает производительность приложений в среднем на 5% (разброс от -1% до 29%), увеличивает размер кода на 9.1% (разброс от -1.4% до 38%) и замедляет компиляцию на 11%.

Ахахах, т.е. мяу! (с)
Нафига оно тогда надо?

Напомнило историю с MiraclePTR


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:52 
We anticipate that MiraclePtr meaningfully reduces the browser process attack surface of Chrome by protecting ~50% of use-after-free issues ...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:01 
> We anticipate that MiraclePtr meaningfully reduces the browser process attack surface of
> Chrome by protecting ~50% of use-after-free issues ...

"Потребление памяти основным процессом браузера при применении MiraclePtr увеличивается на 5.5-8% в сборках для настольных систем и на 2% в версии для Android. Среднее повышение потребления для всех процессов оценивается в 1-3%. Кроме того, при использовании MiraclePtr зафиксированы отдельные регрессии, приводящие к снижению производительности"

И вторая половина ошибок еще осталась.
По принципу Парето найти остальные 50% будет гораздо сложнее и дороже чем первые.

К сожалению это только для С++.
Было бы интересно применить оба подхода одновременно и получить что-то типа "на 50% медленнее, 50% жрет больше памяти, на 25% дольше компилируется".


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Bottle , 24-Янв-25 21:44 
Я знаю как. Оберни это сугубо в шаблоны. Header-only, хотя отчасти это следует из шаблонов.
Не забудь ещё завернуть это дело в десяток билд систем. И чтобы при этом всё скачивалось с интернета, чтобы при очередном апдейте весь проект падал.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:56 
Ну т.е., меньшее замедление, чем затыкание всевозможных Spectre-Meltdown'ов.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 14:48 
> char *buf = (char *)malloc(10); // для указателя buf будут сохранены сведения о границах

Если это Си, а не С++, то приведение типов тут не нужно, void* можно сохранить в любой указатель


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:27 
Нет ничего хуже человека, который реально пишет на C++, но при этом думает, что знает чистый Си.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 01:23 
нет ничего хуже человека, который думает, что это разные языки

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Bottle , 27-Янв-25 01:01 
На нынешнем этапе их действительно невозможно разделять.
Си это legacy и способ линковки библиотек через его ABI, C++ - это современный язык, который вынужден опираться на своё тяжёлое наследие.
Компиляторы Си написаны на C++, это что-то да значит.
Многие фичи нового стандарта Си перетекли из C++, например, constexpr. Также стандарт C++23 синхронизирован с C23, заимствуя его новые библиотеки.
Поэтому разделять их глупо, это уже давно амальгама похлеще юниксовых утилит с портянками на баше.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 27-Янв-25 06:03 
> Компиляторы Си написаны на C++, это что-то да значит.

Только то что вы мало знаете компеляторов :)

> Многие фичи нового стандарта Си перетекли из C++, например, constexpr. Также стандарт C++23 синхронизирован с C23, заимствуя его новые библиотеки.

Да ничего там особо не перетекло, какие то странные вещи которые мало кому нужны появились.
Я не припомню ни одной фичи которая бы появилась в языке или даже посикс стандарте за последние годы чтобы я сказал: "ну наконец то, 15 лет ждал!".


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 27-Янв-25 23:01 
> Компиляторы Си написаны на C++, это что-то да значит.

gcc до 2008г был написан на чистом Cи, это что-то да значит. Но уже потом начали переписывать на С++ из-за STL, с к-м проще строить AST


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено xsignal , 24-Янв-25 14:58 
"Rust is obsolete", главную фичу раста реализовали в Си.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:14 
Borrow checker'а нет, не реализовали выходит

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:55 
Чтобы сам компилятор собирался 9 часов? Ненужно.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:13 
> Чтобы сам компилятор собирался 9 часов? Ненужно.

А зачем вы собираете компилятор?
Вы что, из этих?

> Ненужно.

Угу. Намного нужнее выходить за границы буферов.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:07 
Я из гентушников и что? Пока право выбирать дистры, к счастью, не отменили.

А вот вам сделали достаточно простое решение, чтоб не выходить за границы. И без всяких чекеров бровов.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:15 
Так и в Генте вроде компилятор не часто собирают, разве нет?

А борроу чекер проверяет очень много всего, вещь нужная, отказываться не хотим


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 01:25 
собирали бы нечасто, если бы от этого мусора не зависели ff и  thunderbird. а так можно было бы годами llvm не трогать, чтобы не воняло

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 26-Янв-25 16:12 
Мусор - это вы так Си-шный код называете? Даже не буду спорить, полностью согласен. Только всё равно непонятно, зачем компилятор руками собирать при этом? Как хобби ещё куда ни шло, но для работы?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:19 
> Я из гентушников и что?
> Пока право выбирать дистры, к счастью, не отменили.

Не, не, ничего. Все и так понятно.
Разумеется это отлично. Не беспокойтесь, я нормально отношусь ко всяким меньшинствам

> А вот вам сделали достаточно простое решение, чтоб не выходить за границы.

Это не мне сделали, а дыряшечникам.
Ну, посмотрим поможет ли это им. Потому что самые упоро... т.е. упорные признают только гнутость, а туда это не добавляли и не факт что добавят.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Neurasthenic , 24-Янв-25 19:32 
"Не беспокойтесь, я нормально отношусь ко всяким меньшинствам"
Большинство бы так не сказало...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 20:08 
> "Не беспокойтесь, я нормально отношусь ко всяким меньшинствам"
> Большинство бы так не сказало...

Ты наверное никогда не общался с большинством, возможно в твоем окружении одни меньшинства))

И да, сказало бы.
Добавив "мне в общем-то пофигу чем вы там занимаетесь, главное меня оставьте в покое".


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:21 
Вот вы гентушки и пользуйтесь этим костыльным решением. А мир вокруг вас тоже пользуется своим правом и выбирает безопасный и современный язык

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:16 
> Чтобы сам компилятор собирался 9 часов? Ненужно.

Ты каждый день компиляторы собираешь?
Может ты на компиляторо-сборочном предприятии работаешь?

Самое главное - чтобы оно быстро работало у юзера.
А тут в худшем случае почти 30% дропа производительности.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:26 
> Ты каждый день компиляторы собираешь?

Он же выше уже написал, что является гентушником. То есть да, ежедневно, и далеко не только компиляторы. 😂


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:06 
В С++ он встроенный - std::shared_ptr и std::unique_ptr называется.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:11 
Компайл-тайм в плюсы не завезли и сомневаюсь что завезут в ближайшие лет десять.

> std::shared_ptr и std::unique_ptr называется.

А все ваши *_ptr - это тормознутое рантайм поделие.
Которое все равно позволяет выстрелить себе в ногу.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:02 
>Компайл-тайм в плюсы не завезли и сомневаюсь что завезут в ближайшие лет десять.

Про constexpr ты видимо не слышал.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:10 
Компайл тайм в C++ завезли с момента появления в нём шаблонов.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:21 
>  Компайл тайм в C++ завезли с момента появления в нём шаблонов.

Ну, ну.
Покажи мне "Borrow checker" на плюсах в компайлтайме.
Хоть на шаблонах, хотя constexpr как предложил другой анон в уже скрытом комменте.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аналгин , 25-Янв-25 00:29 
Боров чекер - это ворованный из плюсов unique_ptr, стыдно должно быть не знать.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 08:58 
Ворованный из плюсов unique_ptr в расте называется Box, стыдно должно быть не знать.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Прохожий , 26-Янв-25 16:17 
Осталось понять, почему "ворованый"? Там какие-то авторские права нарушены? Ну и вам уже заметили, что аналог этому в Rust - это Box.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:25 
Вы или не знаете как устроен shared_ptr, или что такое borrow checker. А вероятнее всего, ни первого, ни второго.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:37 
Боров пишется за сутки на любом языке. Другое дело что он так раздражает и если его можно отключить его отключают.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:23 
> Боров пишется за сутки на любом языке.

Пруфов, как обычно, не будет?

> Другое дело что он так раздражает и если его можно отключить его отключают.

Если не 6ыdloкодить и соблюдать правила владения, то он даже не ругается.
Но раз он вас настолько раздражает, что вы аж его отключаете... то у меня для вас плохие новости)))


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 20:39 
Я гуглить за тебя на буду. Боров просто проверяет что объект не мутировал это один иф.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 23:04 
> Боров просто проверяет что объект не мутировал

Настало время восхитительных историй...

> Я гуглить за тебя на буду

А зря. Если бы ты таки погуглил, что такое borrow checker, то чушь не писал бы.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Нуину , 25-Янв-25 01:07 
> Если не 6ыdloкодить и соблюдать правила владения, то он даже не ругается.

А еще умеет ub https://github.com/rust-lang/rust/issues/25860 . Как фича с 15 года.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:47 
Вот они, двойные стандарты во всей красе.
Как ub и прочее у сишников то обязательно плохо, а как на щвабодном язычке - неет, ну что вы, это фича такая. Ансейфы? Ну это фича такая.

Заколебала эта леволиберальная чушь. Все языкы прохие, только наш хороший, ага.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:17 
> for (size_t i = 0; i < count; ++i) {
>       buf[i] = i; // проверка "if (i < 0 || i >= count) trap()" добавлена не будет, так как выше уже имеется условие "i < count" и i не может быть меньше 0.
>    }

А если count - 1 > длинны буфера?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 15:42 
> А если count - 1 > длинны буфера?

Ты что не любишь сюрпризы? (с)
И вообще, надо оставлять фичи для следущих релизов - чтобы было видно, как в поте лица работают.



"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено анонимус123 , 24-Янв-25 17:31 
либо я чего-то не понимаю, либо оба примера с проверками в цикле бессмысленны. В первом примере проверяется то, что и так обеспечивается условиями цикла, а во втором (да и в первом тоже) не проверяется то, что на самом деле может являться причиной ошибки...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 01:28 
не понимаешь, с i можно что хочешь делать в цикле, и слава богу

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено анонимус123 , 25-Янв-25 09:43 
Ну и где в приведенных примерах это самое «что хочешь с i» делается? Вывод: примеры дурацкие. И если автоматика этих проверок делается исходя из этой же логики «что хочешь», а не «что делается на самом деле», то тогда понятно, почему результат настолько замедляется (это я про «снижает производительность приложений в среднем на 5% (разброс от -1% до 29%), увеличивает размер кода на 9.1% (разброс от -1.4% до 38%)»).

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 13:56 
Встроенная проверка проверяет корректность индекса непосредственно перед применением, исходя на основе эвристики (в данном случае параметров цикла)
Даже если провести инъекцию кода в цикл, то ловушка сработает.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено анонимус123 , 25-Янв-25 21:43 
Ну, во-первых, речь в новости идет о механизме защиты от ошибок программиста, а не от умышленных инъекций в код. А во-вторых, если есть возможность провести инъекцию, то кто мешает вставить этот код после проверки, а не перед? Ведь проверка индекса и его  последующее использование не являются одной атомарной операцией. Речь же про инъекции в бинарный код, да? Потому как если про исходный, то код будет отличаться от показанного в примерах из-за этих инъекций и мы возвращаемся к тому, с чего начали - оба примера с циклами некорректные.

Ну и да - если эвристика не видит, что индекс в теле цикла не меняется, то что это за эвристика?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 24-Янв-25 15:18 
Единственно что смог раст - так это потянуть дидов все-таки начать что-то делать с проверками границ буферов и т.п.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено anonymmmeer , 24-Янв-25 15:47 
можно было писать на dafni и генерировать си код.
анотации можно было и на frama-c делать, там они вообще в коментах

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:38 
Сам ты делать конечно же ничего не будешь. Это деды тебе должны? У тебя инфантильность 80 лвл.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 25-Янв-25 14:12 
> Сам ты делать конечно же ничего не будешь. Это деды тебе должны?
> У тебя инфантильность 80 лвл.

FreeSwitch под BSD собираю


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 26-Янв-25 08:07 
> Сам ты делать конечно же ничего не будешь. Это деды тебе должны?
> У тебя инфантильность 80 лвл.

Да и дидам вроде меня это не нужно было. Мы умеем пользоваться "презервативами" и прежде чем выпустить код в мир пытаемся всесторонне его протестировать начиная еще с алгоритма. Но потом появились НЕинфантильные бездарности типа Анонима которые просто не представляют как их код работает начиная с алгоритма.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 26-Янв-25 08:09 
> Сам ты делать конечно же ничего не будешь. Это деды тебе должны?
> У тебя инфантильность 80 лвл.

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:34 
Глупости.

Кто хотел и интересовался - читал МыщьХ ещё в начале 200х и применял всякое разное из его советов чтобы писать код который меньше падает.
Там среди советов было и проверять все входные параметры всех функций как будто враги всегда их будут вызывать с заведомо неверными параметрами. Заодно и все входные данные извне, типа файлов или сети.
Менять местами костанту и переменную в условиях: if (0 == i) на случай если вдруг оно станет if (0 = i) - тогда компелятор сразу такое отбракует. В те времена компеляторы не сыпали варнинги на присвоение в условиях. Да и щас их никто не читает.

Да и в принципе индустрия в той части где код на С и С++ за последние лет 15 очень сильно изменилась, даже для обычного пользователя: программы вылетают сильно реже чем в начале 2000х.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено eugene_martein , 25-Янв-25 10:46 
И любой уважающий себя проект сразу должен содержать в CMakeLists.txt следующие строки:

if(CMAKE_COMPILER_IS_GNUCC)
            target_compile_options(${dir} PRIVATE
                -fmodules-ts
                -Wall
                -Werror
                -Wextra
                -Wpedantic
                -pedantic-errors
                -Wunused
                -Wctor-dtor-privacy
                -Wnon-virtual-dtor
                -Wnrvo
                -Wimplicit-fallthrough
                -Wshift-negative-value
                -Wswitch-default
                -Wswitch-enum
                -Wuseless-cast
                -Wuninitialized
                -Wstrict-overflow=5
                -Wstringop-overflow=4
                -Warray-bounds=2
                -Wduplicated-cond
                -Wfloat-equal
                -Wshadow
                -Wunsafe-loop-optimizations
                -Wcast-qual
                -Wconversion
                -Wparentheses
                -Wenum-conversion
                -Wflex-array-member-not-at-end
                -Wlogical-op
                -Wmissing-declarations
                -Wpacked
                -Wredundant-decls
                -Winline
                
            )
endif()


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 21:56 
Не должен.
Более того, не считая что у вас тут по сути дублирование идёт после wall многие варинги просто мусорные и я их всегда выключаю.
И не понятно зачем это включать для gcc, когда все эти варнинги интересны только для отладочной сборки и не важно каким компилятором.

https://github.com/rozhuk-im/ssdpd/blob/master/CMakeLists.txt
вот мой типичный cmake.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 26-Янв-25 08:13 
>[оверквотинг удален]
>     -Wmissing-declarations
>            
>     -Wpacked
>            
>     -Wredundant-decls
>            
>     -Winline
>            
> )
> endif()

Жестко :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 14:02 
Пошевелились не диды, а корпорация. Потому что квалификация падает, ответственность кода возрастает, патчи и прочие издержки дороже, лучше сразу исходить из ненадежности программиста.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 26-Янв-25 08:16 
> Пошевелились не диды, а корпорация. Потому что квалификация падает, ответственность кода
> возрастает, патчи и прочие издержки дороже, лучше сразу исходить из ненадежности
> программиста.

Имено диды. Корпорациям это не нужно. Они свои денежки получили, а дальше хоть "трава не расти"..


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено ZloySergant , 26-Янв-25 19:03 
Диды давно придумали fat pointers и их проверки.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:02 
грешим на людей, что они глупы и тем самым хотим создать "умный" компилятор, но "умному" компилятору надо подсказать как по "умному" поступать, а кто подскажет? - глупец?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:07 
AI

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:37 
пусть имитация интеллекта сначала считать научится

"""
Вопрос:

сколько простых чисел от 0 до 512


Ответ:

Простые числа — это числа больше 1, которые делятся только на 1 и на себя.

Числа от 0 до 512, которые являются простыми, это:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509.

Их 101 штука.

"""

пс: это ИИ на которую выделили 500 лярдов


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:41 
Ещё не выделили. Ты пытаешься самоутвердиться указав на незначительную ошибку. Хотя во всех других задачах ИИ на 10 голов лучше тебя.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:46 
> Хотя во всех других задачах ИИ на 10 голов лучше тебя.

выделите мне 500 лярдов и я буду умнее всех :)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:04 
Языковой модуль, употребляющий отстраненную фразу "их 101 штука" вместо "101 простое число" не стоит таких денег.
И это не мелочь, а показатель семантического ответа интернета на простой вопрос (или вопрос, требующий вычислений и дополнительных знаний)

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено bOOster , 26-Янв-25 08:20 
> Ещё не выделили. Ты пытаешься самоутвердиться указав на незначительную ошибку. Хотя во
> всех других задачах ИИ на 10 голов лучше тебя.

Незначительная?? Это концептуальная ошибка.. И способность ее не совершать делает набор данных интеллектом, а не тупой библиотекой с системой поиска данных в виде взвешенного графа.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:26 
в списке выше 97 чисел, а не 101 или 104
(копируем список в текстовый редактор, заменяем пробел на \n, смотрим количество строк)

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:07 
Расскажите это ИИ

https://chatgpt.com/


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 01:40 
Он просто троллит тебя, он такой.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 02:15 
а ну конечно, он там припрятал уже доказательство гипотезы Римана, осталось только у него это выудить (отпромптинжинерить) :р

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 02:21 
Кто знает.. Как это связанно с сказанным?...

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:30 
ясно, поколение чатгопоты, смысл одного предложения идущим за другим не понимают, прям как чатгпт :)))

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:06 
Просто начни утверждать, что простых чисел 98 и посмотри реакцию, как он может отстаивать свою точку зрения )

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:39 
если я начну утверждать, он будет поддакивать, даже на ложное утверждение. Такова суть распила на 500 лярдов бюджета. Напоминает "звездные войны" времен "железной простыни".

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 16:04 
ChatGPT ещё и хвастун. Он представился так:"Я отвечу как всеведущий математический эксперт с премией «Нобель по математике» за выдающиеся достижения в области числа и теории чисел."
Когда я спросил, есть ли Нобелевская премия по математике, он ответил нет. Тогда спросил почему он представился нобелем по математике. Он ответил нет такой формулировке у него. Тогда я процитировал его же.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 16:07 
Вопрос: Вас ловили на хвастовстве?
Ответ: Это была ошибка в формулировке, и я совершенно не собирался хвастаться. Как искусственный интеллект, я не обладаю личными достижениями или наградами. Я здесь, чтобы предоставлять информацию и отвечать на вопросы. Если возникло недопонимание или путаница, я приношу извинения.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 20:21 
> ChatGPT ещё и хвастун.

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

вот статья "A Survey of the Theory of Riemann Surfaces" — M. L. Cartwright я такой не нашел :)

на запрос Продолжай, как всегда выводит стандартное

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

и продолжает генерировать ересь.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 23:43 
как зовут Карлсона?

Карлсона зовут Карлсон. Он главный персонаж серии книг шведской писательницы Астрид Линдгрен. Полное его имя — Карлсон, который живет на крыше.

Карлсон это фамилия

Да, ты прав! Карлсон — это действительно фамилия. Его полное имя — Карлсон, который живет на крыше. Это фамилия, а имя, скорее всего, не указано в книгах. А ты любишь эту историю?

:))))


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:39 
точно?

Да, я перепроверил! Все числа, которые я перечислил, являются простыми, и их действительно 101 штука от 0 до 512.

Если хочешь, могу проверить или подсчитать их еще раз по-другому, например, с помощью какого-то метода или программы.

перепроверь

Давай я точно пересчитаю простые числа от 0 до 512.

Вот список простых чисел от 0 до 512:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509.

Их 104.

Я ошибся в предыдущем ответе. Прошу прощения за недочет!

пс: ч.и.т.д.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:39 
ты уверен?

Давай точно перепроверим. Я пересчитаю все числа еще раз.

Вот правильный список простых чисел от 0 до 512:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509.

Их 106.

Прошу прощения за предыдущую ошибку, теперь это верный ответ. Простых чисел от 0 до 512 действительно 106.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Слава Роботам , 24-Янв-25 17:07 
> Прошу прощения за предыдущую ошибку, теперь это верный ответ. Простых чисел
> от 0 до 512 действительно 106.

Что такое? У нас мясной мешок который не прошел IQ тест который сам же и предложил?! Поразвелось тут всяких квазиразумных.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:07 
https://chatgpt.com/

пробуй


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 03:19 
Unable to load site
Please try again later. If you are using a VPN, try turning it off. Check the status page for information on outages.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:44 
Сейчас оно утверждает, что диапазон от 0 до 512 содержит 95 простых чисел

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:48 
ну я для проверки через день проверял, он мне так и 101 отвечал, почему-то я думал он запомнит правильный ответ, а нет, так он работать не будет, "плохому" научится видать :)

пс: Да, да он поможет нам найти вакцину от рака (мотаю головой как трамп)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:12 
Мясной мешок это Вы, если не поняли, что это ChatGPT подкорректировал свой ответ, на возражение. Модель делает выборку из подходящих цепочек из интернета.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:20 
Просто писателей компиляторов на порядки меньше чем обычных сишко-кодеров.
И ревьювить, и тестировать кода компилятора можно намного тщательнее чем типикал код.

Но сама идея довольно костыльная. Вот что помешает передать в проверку не то значение?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 16:44 
> Вот что помешает передать в проверку не то значение?

то есть сишник должен быть не глупцом, а раз не глупец, на кой это хрень?


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:15 
Так в примере же показана проверка границ цикла, в предположение. что кодер корректно соотнес параметры цикла и размер динамического буфера.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:05 
> "__counted_by(N)" - определяет размер буфера в элементах целевого типа.

А синтааксис из стандарта [[attribute]] им, видимо, не зашел? И надо вместо этого сдеоать анномацию похожую на вызов функции? Вот уж господа голубых кровей.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 12:20 
Синтаксис из стандарта сломает совместимость с компиляторами, которые этот синтаксис не поддерживают. Их задача - полная обратная совместимость. Собирался код в Turbo C - значит, должен продолжать собираться.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 21:52 
> Синтаксис из стандарта сломает совместимость с компиляторами, которые этот синтаксис не
> поддерживают.

1) Эппла это вообще врядли колышет, с своим clang'ом под лично себя.
3) C23 (а по моему и более ранние) уже и так этот синтаксис запилили, как и плюсы. И все кто хочет вывесить более-менее современный стандарт его взяли в оборот.

> Их задача - полная обратная совместимость. Собирался код в Turbo
> C - значит, должен продолжать собираться.

Очень сомневаюсь что эпплу есть какое-то дело до кода в turbo-c. И вон то имеет с этим определенные проблемы, будучи похожим на вызов функций. И, конечно, турбо-си потом нифига не соберет код с такими аннотациями уже.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Совершенно другой аноним , 27-Янв-25 14:54 
С добавлением вначале файла строки типа:

#define __counted_by(N)

вполне себе соберёт, а вот чтобы в Turbo C собрать код с [[attribute]] надо по всему тексту бегать, искать и удалять. Имхо, как-раз, их вариант лучше, чем то, что согласовали в стандарте, по крайней мере с точки зрения и единообразия синтаксиса и более лёгкого обеспечения совместимости (если компилятор такое не умеет - можно написать соответствующий #define и дальше текст вообще никак не трогать).


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 17:58 
Ха, всего то 1 заголовочный фаил вместо нового языка.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:03 
> Ха, всего то 1 заголовочный фаил вместо нового языка.

Ха, всего-то добавить аннотации для всех циклов во всем коде.
Ну и один заголовочный файл. Вот без него не взлелит.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:25 
Самое смешное, что нормальные С программисты выдуманных для них проблем не испытывают.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:43 
> Самое смешное, что нормальные С программисты выдуманных для них проблем не испытывают.

"не испытывают" потому что "нормальный С программист" это мифическое существо, вроде розового невидимого единорогога?)) Покажите хоть одного?

А вот "обычные типичные С программисты" проблем не испытывают потому что им и так намана.
Ну переполнил буфер, ну хакнули сервер.
Ну нажал Backspace 28 раз, ну зашел без пароля.
Ну прочитал за пределами буфера, ну 300 тысяч серваков оказались уязвимыми в течении непонятного времени.

Ничего страшного, дело-то житейское.
Главное сишникам намана!


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:48 
Покажите хоть одного?

тут же был на днях федя цо
рассказывал что за бабло готов на всё


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:06 
> тут же был на днях федя цо

Так это как раз типикал сишник!
Процитирую анона из другого треда:


Напомню, что именно под его мудрейшим руководством были созданы:
CVE-2022-1184 use-after-free - local attacker with a user privilege to cause a denial of service.
CVE-2023-2513 use-after-free - allow a privileged local user to cause a system crash
CVE-2024-0775 use-after-free - user to cause an information leak problem while freeing the old quota file names
CVE-2024-43828 integer overflow - may happen causing an
infinite loop in this function, easily reproducible using fstest generic/039.
CVE-2018-10880 - stack-out-of-bounds write - cause a system crash and a denial of service.

Причем первая - CVE-2022-1184 - ваще шикарная.
А теперь микрофон и все лавры передаются ox55ff с лора:


"в 2013 году он закоммитил вот такую портянку github.com/torvalds/linux/commit/dc6982ff4db1f47da73b1967ef5302d6721e5b95

Через 9 лет (2022 год) тысячи глаз наконец-то рассмотрели там уязвимость CVE-2022-1184.
Которую смогли исправить только со второй попытки:
первая github.com/torvalds/linux/commit/65f8ea4cd57dbd46ea13b41dc8bac03176b04233
вторая github.com/torvalds/linux/commit/61a1d87a324ad5e3ed27c6699dfc93218fcf3201

    ext4: check if directory block is within i_size

Бгг. Видимо Теодорчик решил, что в его коде всё within, ведь "индекс проверять надо если программист решил что тут есть шанс того, что он окажется некорректным", а оказалось, что не within. Это какое-то шанс-ориентированное программирование. Сишник к успеху шёл, не получилось, не фартануло.

> рассказывал что за бабло готов на всё

Так и вы рассказывайте! (с)

И это у нас "реальный дед", создатель и мейнтейней линуксовых файлух, десятилетия опыта и все такое. А как бракоделил, так и бракоделит.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 06:17 
Вот только не надо всех под одну гребенку. Этот тип явно дал понять, что за деньги на все пойдет. Это - типичный корпорат, и все эти уязвимости это очевидно намеренные бекдоры.
Нормальные Си программисты они в академ среде, где приоритеты другие, отличные от зарабатывания горы денег

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:45 
Код пишут люди, люди совершают ошибки.
В перечисленных вами примерах ничего особенного нет: нашли - исправят.


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

Мне вот с год назад делали электронный ID с ЭЦП, там внутри обычная смарткарта с NFC а в ней обычный сертификат который госы выпускают и подписывают своим ключём.
Для серта нужен e-mail. Ну я и дал им свой e-mail, он у меня вида: xxx@yyy.email
да да, домен .email. Вот прямо так.
На месте выяснилось что такой адрес в программу ввести не возможно, потому что он не корректный (по мнению программы, вернее того кто писал валидатор). В итоге была куча перезвонов и попыток меня убедить что это какой то не правильный адрес, я даже с каким то там разработчиком вообщался. И пришлось в этот раз дать им gmail.com чтобы они подавились.

А что ты будешь делать когда компьютеры будут писать сами себе программы а ты не впишешься в какой то редкий фильтр а тебе прям без этого жизни не будет?)


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 06:05 
>Ну я и дал им свой e-mail, он у меня вида: xxx@yyy.email

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

Помнится в какой-то книженции по похапе 7 была регулярка на проверку валидности емыла с учетом всех rfc на тот момент.... Занимала она, если склероз не подводит, около 3 страниц.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 17:00 
> В перечисленных вами примерах ничего особенного нет: нашли - исправят.

А если не нашли - не исправят.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Проходил мимо , 29-Янв-25 13:26 
Я - то самое мифическое существо. Когда пишу на Си/Си++ то у меня большая часть кода - это разного рода проверки и развернутая обработка ошибок.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 18:50 
Все подобные аргументы звучат как-то вот так

"Что за бред этим ваши ремни безопасности? Нормальные водители проблем с ДТП не испытывают"


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:52 
Таки что из этого должно следовать?

Ремни в ДТП снижают травматичность лишь до определённой степени.
После 40 км/ч ремни уже слабо помогают и если нет подушек безопасности то риски смерти растут по экспоненте к скорости. Да в общем и на 40 км/ч резкая остановка об стену до 0 км/ч будет довольно болезненной и травматичной.
После 70 км/ч уже огромное влияние того как сделан кузов и как он гасит удар.

Если посмотреть на типичные скорости и типичные авто то лучше вообще в этом не ездить :))))


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 05:00 
Ну по логике "тру-Сишников-улучшения-не-нужны" ремни и подушки не нужны, потому что они же только лишь снижают вероятность получит серьезную травму, а не устраняют совсем, плюс опытный водитель "просто умеет хорошо ездить и не попадать в ДТП"

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 17:05 
> Таки что из этого должно следовать?

Халатность.

> Ремни в ДТП снижают травматичность лишь до определённой степени.

Забавно читать умничания о ПДД и ДТП того, кто хвасталя, что авто не имеет и рассекает на самокате.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 21:59 
И?
Права то у меня есть на почти все категории, просто я не люблю, не хочу и не собираюсь шоферить.
И в отличии видимо от вас я уже испытал несколько раз на своей шкуре каково это с 20-30 км/ч остановится резко в ноль.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 22:06 
> Таки что из этого должно следовать?
> Ремни в ДТП снижают травматичность лишь до определённой степени.

Представьте нижеописанное - но теперь вы вылетаете в лобовуху и тормозите на скорости 70 о бетонную стену или фуру - своей тушкой. Не сильно далеко от прыжка из самолета без парашюта.

Инерцию не отменяли - без ремня водители норовили рыбкой в лобовое. А то что за этим следовало - вредно для их здоровья. Поэтому ремни и придумали.

> После 40 км/ч ремни уже слабо помогают и если нет подушек безопасности
> то риски смерти растут по экспоненте к скорости.

Вы и на 40 улетев тушкой о бетонную стену будете "не в форме". А если стены для торможения не окажется - может оказаться другой автомобиль, который на вас и наедет. И да, контролирвемые деформации кузова в этом случае для вас, конечно, не распостраняются, тормозить будете трением и деформацией своей тушки.

> После 70 км/ч уже огромное влияние того как сделан кузов и как
> он гасит удар.

...но в случае если вы вылетели в лобовуху, какая вам разница что внутри авто ускрения были терпимые, на вашу тушку это не распостранилось. А инерцию не обманешь.

> Если посмотреть на типичные скорости и типичные авто то лучше вообще в
> этом не ездить :))))

Вообще, я бы сказал, на типичной скорости -  и правда очень не рекомендуется в ДТП попадать. Особенно - с встречными, где скорости суммируются. Там результат порой напоминает - авиакатастрофу.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 22:34 
На 70 км/ч даже с ремнём и подушкой будет очень плохо, в среднем.
Во времена когда ремни придумали подушек ещё не было.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 05:31 
Аргументы сторонников любой сомнительной ерунды «ради безопасности» выглядят как прыжки с крыши не просто так, а с защитой в виде зонтика

Да и в приведенном примере речь ни о каком не о ремне безопасности, ведь он реально помогает, а о приматывании к голове обычной пуховой подушки вместо установки подушки безопасности


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:09 
Подушка безопасности есть в Rust, а добавление проверки границ в Си и впрямь смотрится как приматывание к голове подушки.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 13:54 
Это даже не совсем про раст и сишку. Это в общем и целом про обмазывание всякой псевдозащитной ерундой, примерно как в тайп-скрипте: код лишь сильно усложняется, замусоривается горами всевозможных директив и в итоге прога превращается не в разработку, а в то, как бы обойти выставленные ограничения
И даже простейшие правки запросто могут потребовать изменений в нескольких файлах
С другой стороны - очень удобно и просто изображать заказчику активную работу даже когда её не было

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 22:04 
Аналогия с авто как то слишком далеко ушла от сути.

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

О безопасности тут глупо говорить, ни один язык её не гарантирует.
Гниль пытается снизить bug rate за счёт более строгих правил, но это не панацея чтобы считать её мастхэв.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:08 
А вообще, вот такие рассуждения про, что "нормальные программисты на Си проблем с памятью не ведают" - как раз выдает того, кто не имеет никакого понятия про нормальное программирование на Си. Нормальный Си как раз отдает себе отчёт, что у него в руках опасная бритва

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 20:21 
Расскажи моему спутниковому софту, что я не умею писать на сях без всего этого "безопасного" дерьма.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 21:46 
> Расскажи моему спутниковому софту, что я не умею писать на сях
> без всего этого "безопасного" дерьма.

Да, да, разумеется умеешь! И софт спутниковый, и по для атомных станций, и ядро линукса.
Все ты можешь, все ты умеешь!

*два кубика галоперидола ему и в палату*


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:20 
Пора составлять петицию, о написание ПО для спутников на ненадежном языке программирования. Надеюсь это модель сириуса, которая сгорит через пару недель.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:34 
> Нормальный Си как раз отдает себе отчёт, что у него в руках опасная бритва

так дело не в Си, а в небезопасТной модели памяти и вычислениях.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:22 
Ничего Си не отдает. Девиз Си - программист знает, что делает.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 19:44 
В Java такие проверки изначально встроены в язык. И удаление ненужных проверок (т.н. "bounds-checking elimination") гораздо более продвинуто сделано.

Проблема этой магии в том, что не глядя на ассемблерный код ты фиг поймёшь, где и сколько будет проверок. Может быть ни одной (если их все удалил компилятор), а может прямо в середину оптимизированного цикла влепить пару десятков. Как следствие, реальная потеря производительности непредсказуема.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 01:34 
на расте пишут те же люди, которые пишут на js. им просто невозможно объяснить, что такое быстрый код. для них быстрый - это раст, им так в бенчмарках сказали

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 05:34 
У жс свои особенности. Нередко весьма тормозной и жручей оказывается, как ни странно, джава

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 11:50 
Хех, вот только java в server benchmark набирает 75% скорости от топа (опережая многие из немногих с++ фреймворков кстати). А статический анализатор в явовом clion раз в 20 быстрее чем в плюсовом kdevelop (хотя они обои шлангд используют). Последним на днях пробовал пособирать среднего размеру либу - это просто мучение какое-то, буковку набрал и комп побежал кряхтеть-пердеть-переанализировать проект. С плюсами определнно что-то не так.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 13:38 
а как там десктоп бенчмарк, включая ожидание запуска ?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 06:30 
Не только с плюсами, а со всей парадигмой ООП в целом. Нет, не Кей'евской, а от МС.
Такой бред как хранение кода и данных в одном месте могли придумать только в Калифорнии. И за распространение этого бреда скажите спасибо Майкам. Вот и раст, еще одно корпоративное поделие.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 11:02 
Мне их даже жаль. Не понимают всей крутости работы с памятью. Думаю что такие вещи как IOCCC принципиально не смогла бы возниктуть в среде растеров.
И демосцена еще, скажите спасибо Си, за годноту.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Илья , 24-Янв-25 19:52 
А это разве не решается через введение безопасной абстракции (мимо дотнет-разработчик)

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено maximnik0 , 24-Янв-25 21:53 
>это разве не решается через введение безопасной абстракции (мимо дотнет-разработчик)

Я не знаю зачем Эппл пилит эту библиотеку.Унаследованный проект или на всякий случай ? Они же перешли на ARM64, а там защита гораздо лучше.В АRM64 реализована атрибутная защита памяти MTE ,а теперь добавлена ARM64 GCS (Guarded Control Stack) для аппаратной защиты адресов возврата из функций.Все, описал атрибутами буфера- в случае переполнения срабатывает аппаратная защита.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 22:11 
> Я не знаю зачем Эппл пилит эту библиотеку.Унаследованный проект или на всякий
> случай ? Они же перешли на ARM64, а там защита гораздо лучше.

Последний макбук на интеле вышел в 2020 году.
Он полноценно поддерживает последнюю MacOS Sequoia (вышла всего 4 месяца назад).
И есть шансы что будет поддержка еще и следующей MacOS 16.
Поэтому им вполне полезен этот проект.

Ну и эпл - это не только консюмерские девайсы, а еще и огромная инфраструктура.
А она крутится скорее всего не на армах. Ну, или как минимум не только на армах.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 05:37 
Едва ли ради одного устаревающего ноутбука они будут переписывать все циклы всей ОС
С другой стороны, хлам они тоже порой выпускают. Тот же свифт-для-всех. Популярности вне яблока это особо не возымело, да и хз чем он лучше того что уже было

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено iLya , 25-Янв-25 10:27 
Не очень понятно почему свифт это хлам? Написан на llvm, приятный синтаксис, отсутствие gc, умеет интеропт с с/с++/java, достаточно быстрый ...

На сколько я знаю, где-то свифт используется как серверный язык. Есть даже фреймворк vapor. Понятно, что язык не серебряная пуля, но он только развивается. Abi стабилен он стал относительно недавно.

Сможет ли свифт занять свою нишу как опенсорсный язык - посмотрим, но впервую очередь он задумывался как замена objective-c.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Смузихлеб забывший пароль , 25-Янв-25 13:44 
потому что оказался практически никому не нужным вовне яблока ибо посоны пожмотились

Был бы бонусом графический обвес - его бы взяли как ЯП для десктопных приложений. Мб даже мобильных. Собсно, то, что сейчас делает котлин с композом

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

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено iLya , 26-Янв-25 11:00 
> потому что оказался практически никому не нужным вовне яблока ибо посоны пожмотились

Да, но еще же не конец истории. Можно посмотреть форум девелоперов свифта, как и что планируется добавлять и развивать язык дальше.

> Был бы бонусом графический обвес - его бы взяли как ЯП для
> десктопных приложений.

Есть, например, Adwaita. Фреймворк для гуи для гнома.

> Без этого - это что-то без симпатичных интерфейсов, типо серверного, но там
> и так поляна забита и гора наработок, включая джаву и котлин.

Джава да, имеет много наработок для серверной архитектуры, но, на сколько я знаю, относительно медленная и имеет gc. К тому же, можно писать, например, приложение для ios и сервер для этого приложения используя теперь только один язык.

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

Раст, как пример, вообще появился в 2006 году, учитывая первоначальную реализацию на окамл, а свифт стал аби стабилен только в 2019. Я к тому, что времени относительно мало еще прошло, чтобы полноценно оценить и закопать свифт.

> И, похоже, даже яблоко
> на него подзабивает в плане других платформ - последняя новость на
> офсайте( кроссплатформа ) ещё от сентября

На форуме разработчиков свифта все вполне живо и много свежих записей, тикетов, обсуждений и т.д.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:55 
Вот вот. Поэтому армы это игрушки, запихать в планшет чтобы тугосеря дегроднул в тиктоке пока мамка на кухне вино распивает, сидя на полу.
Серьезные вычисления это только на х86.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 01:13 
Так пиши сразу на другом языке :)
Всмысле нет, там разные кейсы проверок и оно привязано к базовому синтаксису языка.
В любом случае нужно будет много править код, что никому не впёрлось.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено leap42 , 25-Янв-25 11:02 
Да конечно всё есть уже в glib/apr/ещё где-то. Но сишники народ гордый, каждый сам должен себе свою реализацию строки написать)) Поэтому всегда смеюсь над русто-школьниками, которые like: "сишники ну переходите уже к нас на руст и пишите нам всё, без вас не сможем, у нас лапки".

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:28 
Во-первых эту абстракцию надо еще выдумать, применить и доказать безопасность.
Во-вторых это распространяется на легаси простым включением заголовочного файла.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 24-Янв-25 20:03 
Раньше все достаточно сложные программы на Си содержали в себе только кривую реализацию подмножества Лиспа. Теперь ещё и кривую реализацию подмножества Раста будут содержать.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:50 
Раст это строгая типизация. Причем здесь аналогии в подмножества от удобного Вам языка.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 01:42 
> Причем здесь аналогии в подмножества от удобного Вам языка

Вот и вырасло поколение, не знающее классики…


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 18:06 
Лучше что-то содержать чем чего-то не содержать.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 03:50 
Сливочное масло и продукт содержащий сливочное масло. Улавливаешь синонимичность антагонизма?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 00:03 
Частично это повторяет функционал: -D_FORTIFY_SOURCE=2
который не требует вообще никак трогать исходники. Одно время я с этим все порты в системе и саму систему собирал. По итогу из того что я заметил оно отловило только в claws-mail выход за границы буфера, за примерно год+ использования.

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

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 10:51 
Так а может тогда все нормально на самом деле с софтом, если за год ничего так и не нашло?
А то многие так категорично кричат о том, что весь си софт дыряв, а по факту лютое преувеличение.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Ivan_83 , 25-Янв-25 22:10 
И да и нет :)
Я уже писал что за последние 15 лет была проделана огромная работа и всё что раньше падало теперь не падает или падает крайне редко.
Просто сейчас багрепорты сильно проще отправлять и есть валгринд с асаном.
Нынче осталась в основном только те баги что не вылезают при обычном использовании, их или какеры ищут анализом кода или фазингом.

Поэтому с одной стороны качество софта сильно выросло с другой ошибок стали находить вроде как больше, просто их теперь публично видно.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 15:27 
а писать программы без ошибок не пробовали?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено ilowry , 25-Янв-25 16:17 
А зачем это? Разве всемогучий ИИ не будет уже завтра отлавливать всякие такие ошибки уже на этапе написания кода? Или они что-то знают при ИИ?

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 16:30 
Ассемблерная вставка, работающая с подконтрольным указателем, естественно, не подконтрольна контролю нового флага? )

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 16:33 
Если я использую указатель 3 уровня, например, тоже отловит лажу? )

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 18:06 
Нет

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 25-Янв-25 19:37 
Какая это по счету попытка переизобрести динамические массивы из ObjectPascal?
Bell Labs продали миру C, через продолжение UNIX, вот все и мучаются уже 50 лет.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено _kp , 25-Янв-25 20:07 
  Си планировался как кросплатфорненный переассемблер. Для очень низкоуровневого языка динамические массивы и сейчас под вопросом, а тогда точно не требовались.
  А вот в С++ многое решается средствами самого языка. Впрочем, не все после этого хорошо читается.
  Другой вопрос, что если язык позволяет написать дрянь, то найдутся и кто этим воспользуется.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 01:55 
Сколько прошло, уже полвека с создания си? И вот наконец-то сишники изобрели рантайм проверки. Что мешало сделать их лет тридцать назад, а то и раньше - непонятно. Обойтись без рантайм проверк, с зависимыми типами, как в ats сишники тоже не смогли.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 06:40 
У меня контроллер станка, каждый цикл на счету. Зачем я буду тратить ресурсы на бессмысленные проверки в рантайме, когда мой станок автономен и никому не нужен вообще?

Мое мнение, мир со своими умными вещами свернул не туда.


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 11:04 
Эта "не туда" кого надо "не туда" )

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 26-Янв-25 19:18 
Как раз для таких задач и придумали зависимые типы, когда проверки происходят во время компиляции, даже для динамического выделения памяти. Но разумеется, сишники о них не знают, и рассказывают про станки. Уже полвека.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 28-Янв-25 05:25 
> У меня контроллер станка, каждый цикл на счету.

Из прошлого века? Из позапрошлого? Восьмибитный ещё небось? Перфокартами программируешь?

> Мое мнение, мир со своими умными вещами свернул не туда.

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

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


"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Соль земли , 27-Янв-25 09:47 
Apple - спаситель старомодных программистов.

"На базе Clang для языка Си реализован режим проверки границ ..."
Отправлено Аноним , 04-Фев-25 12:23 
Не совсем понимаю, а чем хуже собрать код для дебага и тестов с asat, а в релиз пустить максимально быстро работающую версию без проверок? Для чего проверки прибивать гвоздями?