[C++] чистка кода
А полную версию проги можешь пока продать конкурентам...
а это вроде как оптимизатор делает на стадии линковки... или тебе нужно сам код порезать?
но не нужно, чтобы он смог педали крутить
сырцы отдаются ;(
Модульность придумали более сорока лет тому назад.
---
...Я работаю антинаучным аферистом...
совсем тривиальным способом в любом случае не получится... вообще, можно было сразу с #ifdef USE_PEDALI писать, а потом просто дать выход препроцессора...
Соответственно на этом графе, можно увидеть, какие функции нужны для педалей, а какие для фильмов.
ps
Знаю, что этим в ispras-е занимались на заказ несколько лет назад, может сейчас есть системы и общего пользования.
Но там плюсов нет.
Основная проблема в том, что для C/C++ из-за сложности синтаксиса языка - нет дешевых качественных parser-ов/front-ендов.
я так понимаю, человека устроит дорогой, но хакнутый продукт
если этих педалей несколько сотен, то такую хуйню не делают ;(
просто известно, что в проекте принимают участие одни функции..и точно не будут участвовать другие
вот эти другие надо бы вырезать из кода
дык
вырезаешь, смотришь, что сломалось
повторять до готовности
Проблема в том, что они на столько дорогие, что фактически ими мало кто пользуется. Соответственно поэтому они и до Warez-а плохо доходят.
ps
Тем более в данном случае, нужен не сам frontend, а надстройка над ним (построитель зависимостей).
Хочешь сказать, что те кто, пишет такие настройки тоже пользуются warez-софтом?
ну допустим, человек для себя написал, а потом на warez-сайте выложил. По идее, если есть парсер, то такую штуку сделать не особо сложно
>>вырезаешь, смотришь, что сломалось
>>повторять до готовности
дык все к этому и идет....
учитывая, что прога работает несколько суток....
и для проверки корректности ее работы требуется еще больше времени
тебе компилятор скажет, где использовалась функция, если ты её удалишь
Проблема в том, что они на столько дорогие, что фактически ими мало кто пользуется.
Есть подозрения, что подобную категорию продуктов можно считать бесценными. То есть есть чуваки, которые могут тебе что-то сделать - проанализить код, почистить его, оптимизнуть, проверить на соответствие спецификациям и ффсе такое. При этом у них есть куча глючных утилиток (точнее, утилитищ) при помощи которых они это делают. Причем утилитищи пишутся прям в процессе, подгоняясь под конкретную задачу. Если чуваки принадлежат к опенсорс комьюнити, то у тебя даже есть шанс поффтыкать на код этих утилитищ, только пользы в этом никакой, потому что пользоваться ими умеют только эти чуваки.
Всё вышеизложенное является целиком и полностью плодом моего воображения и здравого смысла, бтв.
Так вот, а по теме: удаление функций наверное не сможет привести к появлению багов. Хотя тут тоже по разному может быть =) Типа оверлоадинг, неймспейсы и все такое. А если еще и классовая иерархия рассматривается... Тогда стало быть standalone функции комментишь, если компилится - то удаляешь. Очень аккуратно. Получится по минуте на функцию в среднем. Классы лучше удалять целиком или не трогать вообще. Переменные лучше не трогать, ибо никакой пользы чувакам они не принесут.
Перед началом процесса естественно все забэкапить раз наццать на разные компы. Еще очень неплохо все удаления и изменения фиксировать в текстовом файлике - пригодиццо.
А еще учитывай вот что: ты ж прогу суппортить будешь наверное, да? Баги там исправлять, все такое... Ну так вот, когда через годик у чуваков появятся деньги и они захотят свои педали обратно, то прикручивать старые педали к Новой и Улучшенной проге будет весьма непросто.
Так что лучше не пожалеть времени и произвести полноценный рефакторинг (о какое я слово знаю!) и отделить педали от фильмов в лучших традициях ООП. После чего педали заныкать.
Для других языков: в частности Java-ы и .Net-а - есть довольно много качественных утилит с аналогичным назначением.
Есть подозрения, что подобную категорию продуктов можно считать бесценными. То есть есть чуваки, которые могут тебе что-то сделать - проанализить код, почистить его, оптимизнуть, проверить на соответствие спецификациям и ффсе такое. При этом у них есть куча глючных утилиток (точнее, утилитищ) при помощи которых они это делают. Причем утилитищи пишутся прям в процессе, подгоняясь под конкретную задачу. Если чуваки принадлежат к опенсорс комьюнити, то у тебя даже есть шанс поффтыкать на код этих утилитищ, только пользы в этом никакой, потому что пользоваться ими умеют только эти чуваки.
Всё вышеизложенное является целиком и полностью плодом моего воображения и здравого смысла, бтв.
Абсолютно согласен.
Перед началом процесса естественно все забэкапить раз наццать на разные компы. Еще очень неплохо все удаления и изменения фиксировать в текстовом файлике - пригодиццо.
Для таких вещей есть CVS. Или subversion. Или arch.
А еще учитывай вот что: ты ж прогу суппортить будешь наверное, да? Баги там исправлять, все такое... Ну так вот, когда через годик у чуваков появятся деньги и они захотят свои педали обратно, то прикручивать старые педали к Новой и Улучшенной проге будет весьма непросто.
Так он им и продаст первоначальный вариант
Если вырезаемая функциональность не выполнена в виде модуля, то
автоматические методы уже скорее всего не помогут. Например, если в проге
несколько нетривиальных тредов, то граф их асинхронного
взаимодействия слишком сложен для рассмотрения, а если прост,
то и графы не нужны.
Либо вырезать ручками + используя что-нить из рефакторинга.
Либо забить и отдать как есть - дешевле выйдет, если вещь не тиражируемая
то вполне приемлимый вариант.
> несколько нетривиальных тредов, то граф их асинхронного
> взаимодействия слишком сложен для рассмотрения, а если прост,
> то и графы не нужны.
Если общение идет через сокеты -то да.
Если же через обычные переменные, то я не понял в чем проблема, автоматически отследить где и кем используется переменная.
Просто потому что даже если у тебя треды получаются форком, то чтобы понять, какая вилка у нас какая, тебе придется эмулировать код. Ну что типа от переменной в которой лежит пид что-то там зависит. Или паттерн какой-нить на эту тему вбить, после чего прогу написанную в другом стиле твоя тулза уже не поймет.
То есть наличие куска кода, в котором принадлежность какому-нибудь треду определяется переменной (и который, соответственно, может исполняться в разных тредах) приводит к тотальной неприменимости полностью автоматизированного анализа.
То есть рядом с тулзой сидит программер и ее подкручивает.
В общем случае это невозможно!
Ну, поскольку компьютер, - конечное устройство (для которых программа
эквивалентна конечной таблице соответствия входа выходам то заложившись
на максимальный размер используемой памяти программу сэмулировать
(т.е. вычислить эту таблицу заранее)
полностью можно, на еще большем компьютере, только там размеры
растут по экспоненте.
Вообще, преобразованием программ занимается наука
метапрограммирования, но реальных результатов в ней, на сколько
мне известно, пока немного.
все намного хуже
если на вход поступает фильм формата 1метр х 2 метра, то запускаются 8 екхешников этой проги, которые обрабатывают каждый свою часть фильма
при чем если фильм черно-белый, то в определенных случаях врубаются педали, которые следует отрубить
в общем, даже если я поставлю брекпойнты в каждую функцию (что само по себе нереально то я не смогу отловить все функции, которые вызываются без использования педалей, ибо существуют if-ы, которые выполняются в очень редких случаях (к примеру если в фильме есть субтитры с именем Джон Траволта, то сыграть траурную музыкуа для этого я на вход етой проги должен подать столько фильмов...что пипец
конечно, если бы можно было увидеть наглядное дерево вызовов, то это существенно облегчило бы перелопачивание всего кода
При этом, конечно, должны учитываться функции, которые вызываются неявно, например, конструкторы.
Предлагается ультрарешение задачи: продать заказчику неизменную версию программы, с фильмами и педалями "с надеждой на дальнейшее сотрудничество" Он ведь тебе не платил за лишнюю работу по удалению педалей.
gcc -fdump-ipa-cgraph -funit-at-a-time <FILE>
после чего будем иметь callgraph, но только в пределах одного файла, увы GСС должен быть 4.0.0.
Если общение идет через сокеты -то да.Через несколько уровней ссылок можно и обычные переменные запутать так, что враг не разберется.
Если же через обычные переменные, то я не понял в чем проблема, автоматически отследить где и кем используется переменная.
нужно почистить огромный код....По-моему рецепт один: садиться и хуярить. Волшебных утилит не существует.
В нее можно попробовать загрузить готовый проект и использовать диаграммы, которые она сгенерит, для отрезания лишнего.
Но если проект большой - времени на его загрузку может уйти прилично.
есть конкретная задача
хочется ее облегчить и не делать в лоб
вроде вполне нормальный вопрос
Находишь функцию, точно относящуюся исключительно к "педалям". Убиваешь ее. Компилятор тебе говорит в каких местах она вызывается. Проверяешь предположение о том, что она относится исключительно к педалям, убиваешь все вызовы.
Повторяешь Н раз.
Если Н велико, то никто и никогда не сможет восстановить тебе эти педали без больших затрат.
Более того, если код относящийся к педалям убирать не целиком, а выборочно, то это на самом деле затруднит работу того, кто попытается дописАть функциональность педалей =)
Чем тебе _существенно_ поможет граф вызовов - я не знаю.
Да, кстати. У МС СРР Компайлера (точнее даже у линкера) есть такая опция - generate map file. Так вот, в этом мап файле вроде как есть инфа о том, кто и откуда вызывает данную функцию. Инфа, конечно, в текстовом виде.
есть гцц
есть функции, которые критичны и которые точно надо удалить, а есть которые можно оставить, ибо используются и там и сям
к примеру, педали умеют крутить шарманку..и звучит музыка..согласитесь, для фильма это стоит оставить чтоб фоновую музыку пускать
а их кол-во очень велико...а уж кол-во вызовов еще больше
граф, я думаю, помог бы
метод запутывания, я думаю настолько напряжет мое воображение, что легче перебирать все функции в лоб и стер-скомпилил..стер-скомпилил хотя я уже грил, что стер-скомпилил не решает проблему...читать выше про параллельную версию
так что отпадает
эх вроде линуксоиды крутые должны...ядра патчат все же...цвс высрали..
а такую хреновину не сделали ;(
а то как чужим трудом для заработка пользоваться - все горазды
Оставить комментарий
Maurog
есть ли проги, которые могут убить в программе неиспользующиеся переменные и функции?нужно почистить огромный код....
скажем так: проект умеет показывать фильмы и крутить педали
у клиента не хватило денег на педали
нужно отдать ему проект, который не сможет крутить педали, но сможет показывать фильмы