
Roman
18.07.2018
17:28:16
В общем я писал чекеры для tidy, так что спор чисто терминлоголический

Alexander
18.07.2018
17:28:19
ой, извините, фронтенд

Roman
18.07.2018
17:29:38
В случае с обработкой атрибута сложность будет равна. Плагин для clang, или чекер для tidy, код будет почти тот же самый

Google

Roman
18.07.2018
17:30:41
тот же самый frontend action можно прикрутить плагином к компилятору

Alexander
18.07.2018
17:30:46
и нафига это пихать в сам компилятор, если есть уже специальное место, которое для этого предназанчено?

Roman
18.07.2018
17:30:50
так что проверка будет выполняться всегда при компиляции

Alexey
18.07.2018
17:30:58
а чтобы чекер собрать и подключить - нужно ли собирать руками clang и всё остальное?

Roman
18.07.2018
17:31:00
проще интегрировать в билд

Alexander
18.07.2018
17:31:14
проще интегрировать в билд
запуск clang-tidy добавить в билд может быть и сложно, если у вас к этому моменту ничего не настроено. Для меня монопенисуальная сложность

Roman
18.07.2018
17:32:18
В общем спор бессмысленный, продолжать не буду

Alexander
18.07.2018
17:32:42
ок \thread

Roman
18.07.2018
17:35:40
но можно и отдельным проектом, примерно так https://heejune.me/2016/08/17/build-your-own-clang-example-outside-of-the-llvm-source-tree/comment-page-1/

Alexey
18.07.2018
17:37:34
я просто пытаюсь понять - что проще сделать, чекер на для tidy или плагин к clang, при условии что на машине clang установлен тупо из репозитория скажем убунты, и никто никогда clang не собирал.
ну и понятно, что используемый clang древний как какаха мамонта

Google

Roman
18.07.2018
17:38:36
имхо, лучше взять свежий clang и собрать из исходников

Alexey
18.07.2018
17:39:26

Alexander
18.07.2018
17:40:15

Roman
18.07.2018
17:40:46

Alexander
18.07.2018
17:41:00
просто взять и апдейтнуть компилятор

Roman
18.07.2018
17:41:52

Alexey
18.07.2018
17:41:55

Alexander
18.07.2018
17:42:19

Alexey
18.07.2018
17:42:34

Roman
18.07.2018
17:42:52

Alexander
18.07.2018
17:44:05
проблема не только в сборке. Проблема в выплывании новых UB, например

Alexey
18.07.2018
17:44:24

Alexander
18.07.2018
17:44:40
Ваш код как-то работал на старом компиляторе, потому что спрятанное UB не стреляло просто. а тут вы апдейтнули компилятор и код начал стрелять. И вот такие вещи очень дорого фиксить

Alexey
18.07.2018
17:44:47

Alexander
18.07.2018
17:45:31

Roman
18.07.2018
17:46:05
в принципе коллега соббирает свежий clang с помощью лохматого gcc 5.3 , так что никаких проблем

Alexander
18.07.2018
17:46:39
1) Это совсем отдельная тема
2) Кто-то сказал, что у поциента всё это есть?
3) Не пойму, как CI и кроссбилд спасёт от описанной мною проблемы. Уменьшить шансы - пожалуй, спасти - нет

Google

Constantine
18.07.2018
17:48:05

Alexander
18.07.2018
17:48:21
это всё круто, но далеко не везде так настроено (к сожалению). И это всё равно не спасает от опасности апгрейда на новый компилятор.
Здесь проблемы не портируемости, а что код у тебя с UB. и когда он рванёт, ты не знаешь. А при смене компилятора (в том числе и версии) шанс взрыва увеличивается

Constantine
18.07.2018
17:49:18
?
ну смотри, концептуально если эта проверка работает, что нужен вспомогательный класс std::scope_mark<T = /*unspecified local type*/>, пушо объявлять структуру на входе каждой функции это ппц наркомания

Alexander
18.07.2018
17:53:15
код с UB - для бизнеса не проблема. А вот нерабочая прграмма - проблема ?

Alexey
18.07.2018
17:54:16
если у вас несколько сот тысяч строк кода, UB там где-то точно есть.

Igor
18.07.2018
17:55:47

Alexander
18.07.2018
17:56:26

Alexey
18.07.2018
17:56:40
если вспомнить все особенности С++ от MS, то тут будет больно не только от UB
очень больно

Alexander
18.07.2018
17:57:24
это который clang/c2 ?

Alexey
18.07.2018
17:57:58
ну, собственно полно проектов где так и делают. один компилятор, одна система, одна вижуалстудия!

Alexander
18.07.2018
17:58:21
https://twitter.com/stephantlavavej/status/871861920315211776?lang=ru

Constantine
18.07.2018
17:58:39

Alexander
18.07.2018
17:59:19
да, про лису и хромиум знаю, но я лично никогда под виндой не билдил шлангом, так что мне сказать нечего

Igor
18.07.2018
17:59:51

Constantine
18.07.2018
18:00:15
^
и половина кода сломается, если это будет

Google

Constantine
18.07.2018
18:01:54
потому что весь dependency injection работает через синглтоны в статических переменных

Alexey
18.07.2018
18:04:01

Igor
18.07.2018
18:04:04

Constantine
18.07.2018
18:04:12
на тему?
я вам популярно объясню, почему я так делаю
например, что я в кино водил писать код без __super или делать гениальные workaround, ставить макросы вместо pragma once и так далее

A.D.
18.07.2018
18:09:22
*_r-варианты на той же странице описаны...

Igor
18.07.2018
18:10:27
не исключаю, что десять лет назад, когда всё это писалось, про _r варианты вижак и слыхом не слыхивал)

Alexey
18.07.2018
18:10:57

A.D.
18.07.2018
18:11:12
а, тогда пардон. я программирую вдвое короче )

Egor
18.07.2018
18:21:35
в catch[2] можно тесты поместить в произвольную функцию? вместо
TEST_CASE( "Factorials are computed", "[factorial]" ){...}
сделать
void x()
{
CHECK(1 == 1);
}

Kirill
18.07.2018
18:21:56
Это закос под Беркуса?)

Igor
18.07.2018
18:23:21

super
18.07.2018
18:23:22

Constantine
18.07.2018
18:46:34

Kitsu
18.07.2018
19:01:40
А где pragma once не поддерживается? Недавно наткнулся на это и немног удивился
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbcdg01/msg-CCN8735.htm

Крис
18.07.2018
19:24:35

Alexander
18.07.2018
19:30:10


Max
18.07.2018
20:04:56
Всем привет! Народ, подскажите, я сам javascript-разработчик и в js автоматическая сборка мусора но мне стало интересно - как в языках в частности в плюсах с этой ручной сборкой мусора решается проблема аллокации нового объекта и фрагментации памяти? Я тут немного представил как мог бы работать механизм аллокации - подскажите прав я или нет?
Я правильно понимаю что для того чтобы с каждым вызовом new не делать медленный системный вызов аллокации происходит одноразовая аллокация большого участка памяти а удаление объекта приводит к просто пометке как "свободный" конкретного участка памяти и происходит хранение таких участков в связанном списке - указатель на голову и хвост хранятся в глобальных переменных, новый удаленный участок добавляется к хвосту связанного списка а когда нужно аллоцировать новый объект то просто берем новый свободный участок из глобальной переменной указывающую на голову связанного списка? А как тогда происходит аллокация объектов разного размера - будет создан отдельный связанный список свободных участков памяти для каждого размера объекта? Или объекты разного размера будут храниться в участках памяти с кратными между собой размерами чтобы на свободном участке большого размера можно было аллоцировать много объектов меньшего размера?
И неясно как решается проблема фрагментации памяти - что если например есть приложение где можно создавать и удалять сущности разного размера - получается рано или поздно появится ситуация когда новый объект создать невозможно потому что непрерывного участка такого размера нет зато более мелких участков памяти достаточно. Как вы в плюсах решаете такую проблему?

Google

Egor
18.07.2018
20:05:58
ос внизу может дефрагментировать участки

Побитый
18.07.2018
20:06:32

Anton
18.07.2018
20:06:56


A.D.
18.07.2018
20:08:06
ну, и за ним следом тогда: https://www.youtube.com/watch?v=dFquxC6qTSA

Matway
18.07.2018
20:08:53
Ещё можно почитать, как винда пытается с этим бороться: https://docs.microsoft.com/en-us/windows/desktop/memory/low-fragmentation-heap

Constantine
18.07.2018
20:10:35