LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

ну проблема в том что если не прятать поля, то ими обязательно начнут пользоваться.

Проблема для кого? Для линукса? Ну может быть и проблема. Хотя с их stable api is nonsense и Линусом, матерящим всех, как будто бы и не проблема. Напиши в комментарии, что это поле внутреннее, назови его через подчёркивание или через internal_, вариантов на уровне соглашения придумать можно.

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

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

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

А если ты поле не выставляешь, то человек всё равно туда залезет. Через что-нибудь вроде (uint32_t)((char*)ptr + 12). Если уж ему приспичило. А бывает, что нужно, нельзя всё в API идеально продумать, а ждать новой версии можно долго. И вот такой код точно сломается очень неприятно.

Уж лучше залезать в кишки осознанно и типобезопасно.

сделать всё хедер онли.

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

PS почитать было в любом случае интересно, спасибо, может и пригодится

Исходная версия vbr, :

ну проблема в том что если не прятать поля, то ими обязательно начнут пользоваться.

Проблема для кого? Для линукса? Ну может быть и проблема. Хотя с их stable api is nonsense и Линусом, матерящим всех, как будто бы и не проблема. Напиши в комментарии, что это поле внутреннее, назови его через подчёркивание или через internal_, вариантов на уровне соглашения придумать можно.

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

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

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

А если ты поле не выставляешь, то человек всё равно туда залезет. Через что-нибудь вроде (uint32_t)((char*)ptr + 12). Если уж ему приспичило. А бывает, что нужно, нельзя всё в API идеально продумать, а ждать новой версии можно долго. И вот такой код точно сломается очень неприятно.

Уж лучше залезать в кишки осознанно и типобезопасно.

сделать всё хедер онли.

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