Извините, но вы не просто нашли отличный новый способ ведения дел;) Есть несколько огромных проблем с этим подходом.
Как это можно сделать, не требуя от программистов массового (и нетривиального) перезаписи тонн кода, как только количество разрешенных элементов изменяется? Даже когда вам нужно исправить размеры структуры данных во время компиляции (например, массивы в C), вы можете использовать константу. Затем для изменения этого размера достаточно изменить одну константу и перекомпилировать (если код был написан с учетом этого). При вашем подходе нам придется печатать сотни или даже тысячи строк каждый раз, когда изменяется размер. Не говоря уже о том, что весь этот код будет невероятно трудным для чтения, записи, обслуживания и проверки. Старый трюизм «больше строк кода = больше места для ошибок» в такой настройке занимал до одиннадцати.
Тогда есть тот факт, что число почти никогда не устанавливается в камне. Даже если это постоянная времени компиляции, изменения все еще вероятны. Написание сотен строк кода для незначительного (если оно вообще существует) выигрыша в производительности вряд ли когда-либо стоит. Это происходит трижды, если вам придется выполнять одно и то же количество работы каждый раз, когда вы хотите что-то изменить. Не говоря уже о том, что вообще невозможно , если есть какой-либо удаленно динамический компонент в размере структур данных. То есть это очень редко возможно.
Также рассмотрим концепцию неявных и кратких структур данных. Если вы используете набор жестко закодированных переменных вместо абстрагирования от размера, вы все равно получите структуру данных . Вы просто сделали это неявным, развернули алгоритмы, работающие на нем, и установили его размер в камне. Философски, вы ничего не изменили.
Но, безусловно, он имеет выигрыш в производительности? Ну, возможно, хотя это будет крошечным. Но это не гарантировано, чтобы быть там. Вы бы сэкономили место на данных, но размер кода увеличился бы. И как все знают о встраивании, небольшие размеры кода очень полезны для производительности, чтобы позволить коду быть в кеше. Кроме того, передача аргументов приведет к чрезмерному копированию, если только вы не придумали хитрость для получения местоположения большинства переменных из нескольких указателей. Само собой разумеется, это было бы непереносимо, очень сложно получить правильное решение даже на одной платформе и могло быть нарушено при любых изменениях кода или при вызове компилятора.
Наконец, обратите внимание, что более слабая форма иногда делается . На странице Википедии о неявных и сжатых структурах данных есть несколько примеров. В меньшем масштабе некоторые структуры данных хранят много данных в одном месте, так что к ним можно обращаться с меньшей погоней за указателями, и, скорее всего, они находятся в кеше (например, структурах данных, учитывающих кэш и не учитывающих кэш). Это просто не жизнеспособно для 99% всего кода, и доведение его до крайности добавляет лишь крошечное преимущество, если таковое имеется.