LINUX.ORG.RU

Релиз Clang с новой технологией проверки безопасности кода

 , ,


0

2

Увидел свет новый выпуск являющегося частью проекта LLVM компилятора Clang с технологией SAFECode.

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

  • более информативные сообщения об ошибках;
  • возможность оптимизации некоторых run-time проверок;
  • отсутствие динамической трансляции как у Valgrind;
  • более точно определяет структуру программы, так как знает расположение границ отдельного стека и глобальных объектов (для поиска данных границ Valgrind использует эвристические методы).

Сейчас технология позволяет отслеживать разыменования указателей, которые могут спровоцировать переполнение буфера. В дальнейшем планируется внести из проекта SAFECode в Clang:

  • выявление некорректного доступа к памяти (указатели на несуществующий или удаленный объект);
  • определение неправильных вызовов функции free(), например, двойное освобождение выделенной памяти;
  • определение использования неинициализированных указателей;
  • выявление ошибок при работе с памятью, вызванных неправильным использованием функций стандартной библиотеки;
  • дополнительные оптимизации, включая удаление проверок корректности типов на этапе загрузки/сохранения и вынос за пределы циклов.

Clang это фронт-энд компиляторов С/С++, Objective-C, который разрабатывается на замену GCC в BSD-системах. Интересен может быть также крупным корпорациям благодаря лицензии BSD. При помощи Clang уже удалось собрать ядро Linux и фреймворк Qt.

Исходный код

Страница проекта

>>> Подробности

★★★★★

Проверено: JB ()

clang становится все вкуснее и вкуснее

aho ()

Вот и возникает вопрос, а есть такие плюшки в GCC или баланс силы очень резко нарушается?

pylin ★★★★★ ()

А как насчёт совместимости, в плане того, можно ли линковать друг с другом библиотеки, если одна из них собрана gcc, а другая — clang?

Ttt ☆☆☆☆☆ ()

>Интересен может быть также крупным корпорациям благодаря лицензии BSD.

крупным корпорациям

Как много ошибок в слове «копирастам»!

Ttt ☆☆☆☆☆ ()
Ответ на: комментарий от Ttt

Ни разу проблем не возникало) И в одну и в другую сторону.

Gorthauer ★★★★★ ()

Эта штука анализирует статически или в рантайме, как и valgrind?

Yareg ★★★ ()
Ответ на: комментарий от pylin

Да он давно нарушен. GCC плох не потому, что там чего-то нет, а потому, что туда что-то новое запилить почти невозможно.

Deleted ()
Ответ на: комментарий от Yareg

В рантайме. Хотя у них есть и статический анализатор.

Deleted ()
Ответ на: комментарий от Deleted

Лол. Интел или гугл, например, так не считают и вполне себе регулярно добавляют фичи. А каждый релиз clang'a демонстрирует только «более информативные сообщения об ошибках», очень нужна весч, ага.

anonymous ()
Ответ на: комментарий от anonymous

Поизучайте ченджлоги clang-а. В 2.6 он был в совсем зачаточном состоянии, в 2.7 уже успешно собирал себя и много софта, в 2.8 умел C++ без никаких ограничений, в 2.9 пофиксили кучу багов и он стал немного быстрее (собирает все быстрее GCC в разы). Вон в 3.0 будет если не весь, то почти весь C++0x и этот SAFECode. В GCC же изменения идут намного медленнее, архитектура намного запутанее, что усложняет внесение изменений.

Deleted ()
Ответ на: комментарий от Deleted

по всем пунктам 4.2, но развивается быстро - да

hizel ★★★★★ ()
Ответ на: комментарий от Deleted

> В GCC же изменения идут намного медленнее.

В гцц это все уже давно есть. А по производительности кода clang еще даже не догнал гцц.

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

Полнейший бред. Те, кто хотят спокойно пишут как бекенды, так и фронтенды, да еще и всякие фичи типа клик плюс. Те, кто ничего не писал и не собирается, рассуждают об архитектуре. Логично, чо.

anonymous ()

>С++ /лениво/ Рассказать им, что-ли, про современные языки программирования? C++ не нужен.

anonymous ()
Ответ на: комментарий от anonymous

>>Рассказать им, что-ли, про современные языки программирования

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

anonymous ()
Ответ на: комментарий от anonymous

В гцц это все уже давно есть. А по производительности кода clang еще даже не догнал гцц.

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

Deleted ()

Это просто охренительная новость!

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

Common Lisp, Scheme, Haskell Есть все необходимые инструменты для создания пользовательских интерфейсов и прикладного программирования. При этом код в десятки раз более компактный и эффективный. С++ уже давно перешёл в категорию legacy языков программирования. Никто в здравом уме не начнёт писать на нём новый проект (по крайней мене, в цивилизованном мире).

anonymous ()
Ответ на: комментарий от anonymous

А какие там есть «инструменты для создания пользовательских интерфейсов»? Биндинги к тулкитам на других языка не предлагать.

SSZB ()
Ответ на: комментарий от Deleted

Да нет. Просто Apple видит в GCC один единственный критический недостаток: GCC написан не Apple.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

The development of a new front-end was started out of a need — a need for a compiler that allows better diagnostics, better integration with IDEs, a license that is compatible with commercial products, and a nimble compiler that is easy to develop and maintain. All of these were motivations for starting work on a new front-end that could meet these needs.

Официальная версия.

Опровергай и доказывай свою.

AST-PM-105 ()
Ответ на: комментарий от AST-PM-105

Вот именно то, что я кратко написал, в цитате, которую ты привёл, и написано. Apple очень не понравилось то, что она не имеет серьёзного влияния на разработку GCC, чтобы теснее интегрировать с XCode (форкнуть и поддерживать такой крупный проект дороговато), поэтому решила кинуть кость бздунам, попутно поднасрав линуксу и СПО вообще.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

Точнее, GCC перешел на неудобный для Apple GPL3.

Deleted ()
Ответ на: комментарий от Quasar

>попутно поднасрав линуксу и СПО вообще

Еще один свободный компилятор — это «поднасрав»?

AST-PM-105 ()
Ответ на: комментарий от AST-PM-105

> Еще один свободный компилятор — это «поднасрав»?

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

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

anonymous ()
Ответ на: комментарий от anonymous

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

Во-первых форкнуть никто не мешает (и не такие проекты форкали). Во-вторых слово «поднасрав» тут все равно не к месту.

AST-PM-105 ()

[offtop]
Кто-нибудь пользовался плагином для Vim'а «clang_complete»?
Там вроде всё само должно заводиться с пол пинка - даже тэги не нужны, оно видимо само индексирует файлы, питоновый обвес к *.vim присутствует. В итоге работает как-то не очень - методы, поля классов в самых простых ситуациях оно не дополняет. Подсказка вызова функции тем более, хотя вроде должен уметь. Не видно отличий от встроенного вимовского автодолнения. Скрипт инициализируется, это точно. И еще в вимовском командной строке время от времени выводится «Нет подходящих автокоманд» (чертова локализация). Похоже это от него.
[/offtop]

anonymous ()
Ответ на: комментарий от Deleted

> В гцц есть статический анализ кода?

Смотря что называть «статическим анализом». В GCC есть механизм плагинов, есть MELT.

Или возможность создать аналог валгринда?

mudflap? Я сам им не пользовался, но выглядит довольно близко.

Или возможность запилить автодополнение без наложения левых патчей?

Это вообще о чем?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

> > Или возможность запилить автодополнение без наложения левых патчей?

Это вообще о чем?

Ну как же. Фича такая: написал инт мэйн и запустил компиляцию, а оно уже само туда весь код добавит и всё...

mine ()
Ответ на: комментарий от mine

>Фича такая: написал инт мэйн и запустил компиляцию, а оно уже само туда весь код добавит и всё...

у меня для Вас новость - autogen...

anonymous ()
Ответ на: комментарий от anonymous

У меня для вас шокирующие подробности: для генератора всё равно нужна информация, что именно генерировать. И эта информация должна быть точна (а не «автодополнение»).

mine ()
Ответ на: комментарий от AST-PM-105

Просто он обычно используется в связке с автолулзами. И всё это превращается в большую-пребольшую кашу.

arknir ()
Ответ на: комментарий от Deleted

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

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

anonymous ()

Опять предатели дела свободы подножки подставляют? Не GPLv3, или пока GPLv2? Нет пути!

alx_me ★★☆ ()
Ответ на: комментарий от anonymous

А пацаны то и не знали, что этим должен компилятор заниматься.

У компилятора есть такая очень полезная часть - называется парсер. В GCC он практически неотделим от самого gcc, в отличии от clang.

Deleted ()
Ответ на: комментарий от Quasar

> чтобы теснее интегрировать с XCode (форкнуть и поддерживать такой крупный проект дороговато), поэтому решила кинуть кость бздунам, попутно поднасрав линуксу и СПО вообще.

Стоит читать - Столман в припадке паранои и белой горячки перевел gcc на GPL v3 не разрешив сразу linking expections - что автоматически поставило все СПО раком. И боясь что бы эта белая горячка не повторилась - решили делать что-то свое, не полагаясь на подачки от Intel или google.

anonymous ()
Ответ на: комментарий от AST-PM-105

> Во-первых форкнуть никто не мешает (и не такие проекты форкали). Во-вторых слово «поднасрав» тут все равно не к месту.

Это адептов поконника педофилии колбасит что кто-то делает что-то не под GPL лицензией. И они считают что их правда всегда лучше других.

anonymous ()
Ответ на: комментарий от alx_me

> Опять предатели дела свободы подножки подставляют? Не GPLv3, или пока GPLv2? Нет пути!

GPL must dead. Как предаюшая свободу.

anonymous ()
Ответ на: комментарий от anonymous

> перевел gcc на GPL v3 не разрешив сразу linking expections - что автоматически поставило все СПО раком

не СПО, а проприетарщину.

anonymous ()
Ответ на: комментарий от Deleted

> Точнее, GCC перешел на неудобный для Apple GPL3.

Не только для apple, как пользователь freebsd так же не одобряю gpl3.

На домашнем сервере уже отказался от gcc, все собирает clang. Прирост скорости сборки заметен даже визуально. Я уже молчу о том что gcc каждый рас при перекомпиляции около полу часа сам себя пересобирает.

paranormal ★★ ()
Ответ на: комментарий от alx_me

> Опять предатели дела свободы подножки подставляют?

У тебя странные понятия о свободе...

paranormal ★★ ()
Ответ на: комментарий от AST-PM-105

> Во-первых форкнуть никто не мешает

Правильно. Но пока имхо рано. Пусть развивается.

Buy ★★★★★ ()
Ответ на: комментарий от Quasar

>попутно поднасрав линуксу и СПО вообще.

С дуба рухнул?

r ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.