Сообщение Сквозная архитектура или 30000 строк функции от 12.11.2022 10:40
Изменено 12.11.2022 23:52 ботаныч
Сквозная архитектура
думал писать в философию, но передумал. Все ж таки архитектура.
Итак, если вы не сталкивались с легаси кодом, честь вам и хвала (может быть). Но реалии (плюсовика (в базе)), таковы, что ... да, собственно, давайте без кривляний, из практики можно сказать смело, легаси..., в нем собственно и есть активность в достаточно серьезных проектах. Во всяком случае мы тут обсудим именно это
Нет стартапов, что опираются исключительно на свой самописный с нуля код. Будь вы имплементером фреймворков или же новой идеи вы столкнетесь с подавляющим большинством (по объему) легаси. Устаревшие технологии, в свое время поражающих умы своими передовыми идеями, .. не спешите смеяться с них, в свое время будут смеяться с ваших идей.
Но разговор пойдет о поведении модерновых имплементоров в языках\средах способных на метапрограммирование в легаси кодах.
Итак шашки наголо, поехали.
Изначально, дай Бог вам везения попасть на проект с модерновыми оттенками мышления, и компайл-тайм там отнюдь не последнее в языковедении, последние нотки говорят о том, что времен может быть множество, и мыслить надо во всех, да во всех временах, как пересекающихся, так и в пересекающихся в одну (и более) сторон, так и не перескающихся. Даже в плюсах — препроцессор — компайлтайм — компилятор. Уже — три времени. Ооох сколько копий сломано за исключение препроцессора, дабы снабдиь синтаксис трии всем, и логикой препроцессора тоже — бред. Давайте внедрим препроцессор в три ... ладно, это уже философия. Итак .. давайте дальнейшее назовем 30 000 строк кода в одной функции. Да это пока максимум, в легаси. Это характеризует тот проект в котором бла применена стратегия, которую я назвал сквозная архитектура.
П.С. пока не описано, боюсь снесут эккаунт.
Итак, если вы не сталкивались с легаси кодом, честь вам и хвала (может быть). Но реалии (плюсовика (в базе)), таковы, что ... да, собственно, давайте без кривляний, из практики можно сказать смело, легаси..., в нем собственно и есть активность в достаточно серьезных проектах. Во всяком случае мы тут обсудим именно это
Нет стартапов, что опираются исключительно на свой самописный с нуля код. Будь вы имплементером фреймворков или же новой идеи вы столкнетесь с подавляющим большинством (по объему) легаси. Устаревшие технологии, в свое время поражающих умы своими передовыми идеями, .. не спешите смеяться с них, в свое время будут смеяться с ваших идей.
Но разговор пойдет о поведении модерновых имплементоров в языках\средах способных на метапрограммирование в легаси кодах.
Итак шашки наголо, поехали.
Изначально, дай Бог вам везения попасть на проект с модерновыми оттенками мышления, и компайл-тайм там отнюдь не последнее в языковедении, последние нотки говорят о том, что времен может быть множество, и мыслить надо во всех, да во всех временах, как пересекающихся, так и в пересекающихся в одну (и более) сторон, так и не перескающихся. Даже в плюсах — препроцессор — компайлтайм — компилятор. Уже — три времени. Ооох сколько копий сломано за исключение препроцессора, дабы снабдиь синтаксис трии всем, и логикой препроцессора тоже — бред. Давайте внедрим препроцессор в три ... ладно, это уже философия. Итак .. давайте дальнейшее назовем 30 000 строк кода в одной функции. Да это пока максимум, в легаси. Это характеризует тот проект в котором бла применена стратегия, которую я назвал сквозная архитектура.
П.С. пока не описано, боюсь снесут эккаунт.
Сквозная архитектура, или как спасти проект от экспоненциаль
предисловие.
коллеги дабы не смущаяся натуры ваша скажу, я пишу это, т.е. пытаюсь несколько формализовать здесь мой боевой опыт, может он и не весть какой (хотя 30 000 строк одна функция должно характеризовать природу этого прецедента) но сквозная архитектура сработала, были выдержаны все параметры (я продолжал там работать на нехилой ЗП, были вопли коллег, "Я не могу читать эти шаблоны", .. рванье мозгов и шаблонов их, пока не смыслся на архитехта в файнанас мешинлернинг.. ) просто пытаюсь рассказать, чтобы может кто потом, также попав в такую западню решил ее
как волк жежь ищущий добычу ...
как рысь кидающаяся в тьму ..
но архитект взрывающий на тине,
рутину... метапрограммингом .. всем "ку ..."
экспоненциально разбухающий проект может лечиться по разному. а может и не лечиться вовсе, и тоже по разному. Но при встрече с задачами в проектах с разбросанными по скоупам или растянутыми с избыточной терминологией логиками имплементор сталкивается с необходимостью транслировать сущности при переходе из скоупа в скоуп. Обычно смена словаря может быть оправдана при использовании технологий разной природы. К примеру из С++ в пайтон, или С++-C# еtс.. Но встречаются проекты с наличием таких переходов безо всякой на то причины, а в следствии наличия таких переходов в отношении один ко многим, и что еще интереснее многие ко многим, при наращивании функционала код обречен на экспоненциальное разбухание. И тривиальные задачи будут требовать участия квалифицированных кадров, с увеличением человекочасов со сложностью увелничения e^k*n где n — количество архитектурных скоупов и k — количество отношений многие ко многим в поставленной задаче.
Глобально для избегания часто пользуются
1 — нормализация в рефакторинге, что несет за собой трудовые затраты
2 — переход на автоматизацию + генераторы\парсеры, аля шарпового роcлина, что приведет так же к непредвиденным, часто и сильно вероятно уже технологическим затратам
а может и вовсе не лечиться.
Но не всем везет на выделенное время для подобных преобразований на проектах. Часто вам просто скидывают задачу на решить.
модерновыми оттенками мышления, и компайл-тайм там отнюдь не последнее в языковедении, последние нотки говорят о том, что времен может быть множество, и мыслить надо во всех. Да во всех временах, как пересекающихся, так и в пересекающихся в одну (и более) сторон, так и не перескающихся вовсе. Даже в плюсах — препроцессор — компайлтайм — рантайм. Уже — три времени. сколько копий сломано за исключение препроцессора дабы снабдить синтаксис-три всем тем, что содержит препроцессор. (внедрить препроцессор в три?) ладно, это уже философия. Итак .. дальнейшее назовем 30 000 строк кода в одной функции.
Если говорить приближенно к реалиям, в этом конкретном случае были использованы несколько особенностей инженерии
1. теория трансляции (распределение информационных потоков по терминам в пределах скоупа и поведение их при выходе из него, с трансляцией оных из одного в другой), причем С++ позволил делать это в декларативном виде из скоупа решаемой задачи. разумеется это делалось в компайл тайме, и составные типы генерирующиеся из одних в другие.
2. метапрограмминг, что тоже вполне неплохое подспорье при пронзании разбухающего в экспоненциальной форме кода.
П.С. пока не описано, боюсь снесут эккаунт.
коллеги дабы не смущаяся натуры ваша скажу, я пишу это, т.е. пытаюсь несколько формализовать здесь мой боевой опыт, может он и не весть какой (хотя 30 000 строк одна функция должно характеризовать природу этого прецедента) но сквозная архитектура сработала, были выдержаны все параметры (я продолжал там работать на нехилой ЗП, были вопли коллег, "Я не могу читать эти шаблоны", .. рванье мозгов и шаблонов их, пока не смыслся на архитехта в файнанас мешинлернинг.. ) просто пытаюсь рассказать, чтобы может кто потом, также попав в такую западню решил ее
как волк жежь ищущий добычу ...
как рысь кидающаяся в тьму ..
но архитект взрывающий на тине,
рутину... метапрограммингом .. всем "ку ..."
экспоненциально разбухающий проект может лечиться по разному. а может и не лечиться вовсе, и тоже по разному. Но при встрече с задачами в проектах с разбросанными по скоупам или растянутыми с избыточной терминологией логиками имплементор сталкивается с необходимостью транслировать сущности при переходе из скоупа в скоуп. Обычно смена словаря может быть оправдана при использовании технологий разной природы. К примеру из С++ в пайтон, или С++-C# еtс.. Но встречаются проекты с наличием таких переходов безо всякой на то причины, а в следствии наличия таких переходов в отношении один ко многим, и что еще интереснее многие ко многим, при наращивании функционала код обречен на экспоненциальное разбухание. И тривиальные задачи будут требовать участия квалифицированных кадров, с увеличением человекочасов со сложностью увелничения e^k*n где n — количество архитектурных скоупов и k — количество отношений многие ко многим в поставленной задаче.
Глобально для избегания часто пользуются
1 — нормализация в рефакторинге, что несет за собой трудовые затраты
2 — переход на автоматизацию + генераторы\парсеры, аля шарпового роcлина, что приведет так же к непредвиденным, часто и сильно вероятно уже технологическим затратам
а может и вовсе не лечиться.
Но не всем везет на выделенное время для подобных преобразований на проектах. Часто вам просто скидывают задачу на решить.
модерновыми оттенками мышления, и компайл-тайм там отнюдь не последнее в языковедении, последние нотки говорят о том, что времен может быть множество, и мыслить надо во всех. Да во всех временах, как пересекающихся, так и в пересекающихся в одну (и более) сторон, так и не перескающихся вовсе. Даже в плюсах — препроцессор — компайлтайм — рантайм. Уже — три времени. сколько копий сломано за исключение препроцессора дабы снабдить синтаксис-три всем тем, что содержит препроцессор. (внедрить препроцессор в три?) ладно, это уже философия. Итак .. дальнейшее назовем 30 000 строк кода в одной функции.
Если говорить приближенно к реалиям, в этом конкретном случае были использованы несколько особенностей инженерии
1. теория трансляции (распределение информационных потоков по терминам в пределах скоупа и поведение их при выходе из него, с трансляцией оных из одного в другой), причем С++ позволил делать это в декларативном виде из скоупа решаемой задачи. разумеется это делалось в компайл тайме, и составные типы генерирующиеся из одних в другие.
2. метапрограмминг, что тоже вполне неплохое подспорье при пронзании разбухающего в экспоненциальной форме кода.
П.С. пока не описано, боюсь снесут эккаунт.