@Admin, похоже произошло недопонимание, из за того что вы не всё прочитали… Ниже идёт краткий обзор того о чём я говорил по этой теме. Постарайтесь в этот раз всё же прочитать всё, я и так сократил то что можно было, чтоб не терять смысла:
-
Я изначально считал
file of T
очередной старой плюшкой, которая в теперешних системах не даёт ничего, но после того как @RAlex объяснил мне для чего они и как работают - стало понятно что у них есть своя ниша из за скорости сохранения и загрузки (больше чем если черезSystem.IO
на прямую по 1 полю!), а так же того, что с ними сложнее сделать ошибку, чем если использоватьSystem.IO
на прямую.
Но только если они будут сохранять блоками. Так как они сейчас работают - у них нет ни 1 преимущества. Хотя и сохранение по 1 полю имеет свои преимущества, к примеру его можно было бы реализовать как метод безтипового файла (file
, безof T
) и расширить возможности. Потому что таким способом можно сохранять и загружать любые объекты, даже классы. Что касается преимуществ над другими типами сериализации - этот находится под носом, и прост в использовании, в отличии от всяких библиотек. Но опять же, так как реализовано сейчас - эти преимущества не вступают в силу. -
Сейчас
string[5]
при компиляции заменяется наstring
, которая класс, поэтому надо сделать свою строку наvalue
-типе, чтоб блочное сохранение было возможно. Это не сложно, у меня получилось сделать это без сильной костылезации: MyShortString.pas.
Увеличение размера исходников для коротких строк компенсируется уменьшением размера исходников типизированных файлов, которые будут с этими строками работать. И проблемы производительности с неэффективным доступом к символам - тоже компенсируется через скорость работы блочных типизированных файлов, ещё и с приростом скорости. -
Я реализовал сохранение блоками, успешно протестировал его на правильность записи и загрузки (в том числе и коротких строк) и увидел прирост скорости в
Release
версии в 5-6 раз, по отношение к вашимfile of T
. Это считая что сейчас короткие строки реализованы не идеально, как минимум перевод вstring
и назад можно и надо улучшить. Это должно дать ещё прирост скорости в несколько раз.
Я в любом случае буду встраивать подобный тип в свои программы, из за того на сколько он имбовый. Но я так же предложил добавить его как замену текущемуfile of T
, он больше совместим со старыми паскалями (а точнее на 100%, потому что реализован по тому же принципу), даже на уровне бинарного кода получаемых файлов + превосходит по скорости текущую реализацию.
Но вы ответили на это “нет, давайте сначала приделаем ещё несколько костылей к текущей реализации, чтоб этот мертвец, от которого ожидали человеческую речь, но пока что мог только мычать - смог ещё и гавкать. А потом уже, через несколько месяцев мыпросто забудем про этоподумаем, над тем чтоб полностью выкинуть текущие костыли (в том числе и те что сейчас добавляем) и заменить на реализацию у которой есть хоть какие то применения”.
Извиняюсь, за то что вставил кусок своих эмоций ближе к концу, но, по моему, моя мысль более понятна с ним, чем без него.
Я создал отдельную тему, чтоб то что идёт по этому поводу не смешивалось со всем остальным в теме под ошибки, потому что это уже произошло.
Ожидается, что тут будут сначала обсуждать чем блочное сохранение хуже чем по 1 полю (если такие пункты вообще можно найти, не высосав из пальца).
И потом, если всё же когда то дойдёт то того чтоб применить это как замену текущей реализации, обсуждать проблемы которые возникнут.