Здравствуйте, мыщъх, Вы писали:
М>давайте так. в си нет [нормальной] поддержки массивов. malloc вообще возвращает не массив, а указатель. если это чужой malloc, то за массивом может быть пустота, обращение к которой поимеет непредсказуемые последствия. если же это наш malloc, то мы гарантируем, что за массивом то, что нужно. грубо говоря, возвращаем структуру. кстати, в этой структуре явно прописан размер. М>это _сильно_ все упрощает. теперь не нужно передавать функциям указатель на данные и размер данных. скажу больше. если у нас есть функция поиска подстроки в строке и эта строка лежит где-то в середине большого блока данных, то мы передаем указатель на начало данных. да! на начало данных. там есть структура в которой размер данных и индекс строки. М>проблема переполняющихся буферов решается сама собой, т.к. любая функция на любом уровне вложенности может проверить что она не выходит за границы буфера, ибо имеет в своем распоряжении всю необходимую инфу. типа if (scb->idx > scb->len) return -1; какие у вас возражения против кастомного аллокатора?
Мне это дело представлялось не таким заурядным, я полагал, что все обращения к памяти за границами выделенного для функции буфера каким-то хитрым прерыванием автоматически докладывались менеджеру памяти. А описанное вами больше подходит на аллокатор с дополнительным address sanitaizer, доступным (или даже принудительно используемым) для обычных функций. Пусть даже и в виде некого мета надмножества "С с аллокатором и массивами", которое генерировало абсолютно корректно работающий на всех платформах код на С (сильное утверждение), да еще и с дополнительными оптимизациями.
То, что бизнес-дяди вечно торопят с релизами и вообще всячески мешают программировать, — не новость. Обычно они очень не любят выделять людей и время на всякий рефакторинг. Видать в данном случае где-то стало совсем худо, раз они стали так бросать людей на амбразуру, не так ли?
М>реально, дешевле написать с нуля с учетом новых требований чем задрачивать воду в ступе. я категорически против рефракторинга. когда мужикам делать нечего они яйца чешут. то есть рефракторят. что дает рефракторинг? зачем он? пишите сразу правильно. или переписывайте. а рефракторить это имитировать бурную деятельность ничего не делая по существу.
Откуда такая ненависть к рефакторингу? "пишите сразу правильно" — это что за ересь такая? Никто же с сходу не набирает весь код из головы, а сначала делают какие-то минимальные реализации методов, а потом дописывают, как-то упорядочивают абстракции. А это не что иное, как рефакторинг. Расстановка пробелов — это тоже вполне себе рефакторинг, хоть и поверхностный, однако он вытекает из-за отсутствия нормальных средств (и соглашений) форматирования. Плюс тут есть такая вещь, как синдром свежего взгляда. Даже просто беглый просмотр написанного пару месяцев назад кода может запросто привести к цепочке удивительных открытий.
А вот обеспечение возможности вносить изменения и доработки в соответствии с меняющимися требованиями — так это вообще первое дело. Когда этот процесс идет с умеренной скоростью, то количество необходимых изменений должно быть минимальным. Но даже когда shit happens, и требования вообще меняются на противоположные (или просто формулируются в неожиданно четкой форме), бывает вполне возможно переиспользовать уже имеющиеся наработки.
Что касается скрытия файлов, так там вроде как была задача просто исключать "." и ".." из листинга содержимого директорий. Достаточно тривиально, не правда ли?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.