Vladimir
это честно говоря бред
Vladimir
и тому кто будет потом твой код читать резонно захочется дать тебе в морду за такое
Vladimir
И хорошо если это будешь ты через 2-3 года
Andrew
есть жесткий контракт - posix называется.
но посикс ничего не говорит про cow
Andrew
посикс описывает поведение fork, в ограниченном виде
Andrew
это классика для мира unix программирования. Кошка бросила котят, пусть ебуться как хотят :)
Andrew
если бы была дока, где написанно, что дочерний процесс ДОЛЖЕН содержать побитовую копию образа виртуальной памяти основного процесса — базар был бы нулевой
Andrew
а так линукс cow придумал. plan9 вводит rfork() который тоже по-своему себя ведёт
Vladimir
@abagrintsev ок, делай как считаешь нужным, но то что ты делаешь - дебилизм с моей точки зрения
Andrew
ну смотри
Andrew
давай со своей колокольни объясню. Не обязательно считать, что моя точка зрения истина в последней инстанции
Vladimir
ну давай
Andrew
вот ты написал программу, её приняли, протестировали всячески (иногда бывает, что некоторые баги можно поймать только под нагрузками) и вдруг кто-то из админов решил, что линукс говно, надо срочно ставить plan9, потому, что модно, молодёжно и т.д.
Andrew
вообще, у нас, на уровне cmake и либ такое пресекается
Andrew
но речь не об этом
Andrew
не всё так просто
Andrew
по причинам изменичовсти того же fork() в завимисоти от окружения, хорошим тоном было бы такие вызовы писать под #ifdef
Andrew
причём, под #else лучше вообще писать abort() :)
Andrew
потому что ты уволишься, программу поддерживать не будут, а вспоминать будут именно тебя :)
Vladimir
по причинам изменичовсти того же fork() в завимисоти от окружения, хорошим тоном было бы такие вызовы писать под #ifdef
поэтому вместо проверки на уровне окруждения сборке ты хочешь городить какую-то заведомо платформозависимую херню, так?
Vladimir
притом взамен того что в 100% реальных случаях на ближайшие 5 лет будет работать нормально?
Vladimir
твое право, но я увидев бы такой код очень долго вспоминал нехорошими словами его автора
Andrew
ты бы вспоминал не в этом случае
Vladimir
куда дольше и жирнее чем если бы твоя софтина криво работала бы на план9
Andrew
а вспоминал бы, когда засетапил сервак, приложение запустилось и из техсаппорта пошли бы непонятные жалобы
Andrew
а дело в том, что компилируется — ещё не значит, что работает
Vladimir
функциональное и нагрузочное тестирование как минимум
Andrew
cmake могут поравить, он может найти нужный libc, который на самом деле glibc или uclibc (обе имеют "обратную совместимость" с мелкими подписями под звёздочками), но этого не узнаешь. В твоём доме будет играть музыка, но ты ещё не услышешь :)
Vladimir
cmake могут поравить, он может найти нужный libc, который на самом деле glibc или uclibc (обе имеют "обратную совместимость" с мелкими подписями под звёздочками), но этого не узнаешь. В твоём доме будет играть музыка, но ты ещё не услышешь :)
вот зато если ты начнешь собирать такой код и какой-нибудь дебил напишет clone вместо fork, то первое что я скажу это "что за чудак (на букву м) написал в этом месте clone без нужды?"
Vladimir
притом что если на моем условном план9 софтина соберется но будет тормозить - я полезу смотреть почему, дебажить, оптимизировать
Vladimir
понимая что писалась она под линукс
Vladimir
и еще подумаю что разраб был молодцом, писал сразу портируемый код
Andrew
таковы большие париложения на С\С++
Vladimir
вот на это ты можешь потратить полгода, а автор софтины 30 минут
если автора нет под боком, то как бы что поделать, раз есть задача и нет вариантов
Andrew
вообще, есть такая книжка "совершенный код". Вот там всяко объясняется, зачем проге прятать секреты. (в данном случае дефайнить системные вызовы)
Andrew
советую почитать
Vladimir
ты в момент написания своего кода знаешь требования?
Andrew
конечно
Andrew
но даже если в той же очередной реализации libc что-то сломают — виноват буду я
Vladimir
а зачем ты закладываешься на не требования?
Vladimir
2. CoW никуда не уйдет
Andrew
libc это сферический пример
Andrew
я могу тебе пример из своей практики с cow рассказать )
Andrew
дело было в memset() который оптимизируется
Andrew
добавили форк. Без него оптимизация не роляла )
Andrew
ну и потом дружно искали )
Andrew
тоесть, я хотел копию памяти процесса и я писал в память, чтобы её получить
Andrew
но получал не всегда )
Andrew
примерно на миллионый раз, я оказывался не в том месте и не в то время )
Andrew
и самое смешное было, что gcc данные кейс не оптимизировал! умничала опять таки glibc )
Andrew
а там где была другая реализация, было всё ок
Vladimir
честно я не понял что конкретно ты сделал
Andrew
это не суть
Andrew
есть такой кейс, достаточно редкий. В основном используется для пробуждения ООМ киллера. Вроде там надо в обязательном порядке, сначала прочитать память, потом записать в неё и так далее в цикле, иначе glibc решит, что ты занимаешься бесполезной энтропией и будет скипать вызовы
Andrew
и вот какая-то подобная кара пришла в мой код
Andrew
к сожалению, уже точно не помню
Andrew
чтобы симулировать случаи не боевом сервере. Например будет ли это всё работотать, если я настрою оверкоммит
Andrew
кстати ты писал про тестирование. Как по мне — всё это полная хрень. Говоришь тестировщику как тестировать, он в точности повторяет твои действия. Почти всегда
Andrew
просто потому, что не понимает, что происходит
Andrew
лучшие тестировщики — таки админы :)
Andrew
я бы сказал не так
Vladimir
@abagrintsev у тебя раз ты говоришь что есть тз, значит есть понимание где должна быть твоя софтина запущена
Vladimir
и поэтому ни о каких uclibc, plan9 и пр херне речи не идет
Andrew
отцы сервисодержатели
Vladimir
в общем это твоя проблема как разработчика сделать пакеты (или бинарники) для целевой штуки
Andrew
пока ты ищешь багу, они ночами с телефона перезапускают твой говносервис, который плодит коры )
Александр
отцы сервисодержатели
Да я про тестирование продукта
Александр
В каждую дырку лезут
Александр
😄
Александр
А потом выясняется, это забыл, там не до делал и т.п
Vladimir
пока ты ищешь багу, они ночами с телефона перезапускают твой говносервис, который плодит коры )
как часто у вас софт написанный под linux + glibc запускали на plan9 или хотя бы uclibc?
Andrew
в общем это твоя проблема как разработчика сделать пакеты (или бинарники) для целевой штуки
слушай, я уже писал, что всё не так просто. Многие либы не стесняются работать в терминах ABI. Тоесть либа, под которую я писал, может в новой версии убунты сменится, но моей проге представиться иначе, на манер своего предшественника