Да, а наш продукт ведет родословную с турбо-паскаля, поэтому париться приходится, к сожалению.
Конвертацию строк ANSI-Unicode нужно ограничить именно на уровне ввода-вывода, тогда каждый разработчик будет уверен, что во всех остальных юнитах в проекте все строки только юникодовые
Да, это логичное решение, но траты памяти при их полной ненужности (только ASCII) огорчают.
Ну и при подсчёте места под строку не забывать домножать Size = Length(s) * SizeOf(Char)
И это проблема, которая требует ручного решения. Плюс еще при дальнейшем переходе на 64 разряда, придется руками же везде править cast'ы между указателем и 4 байтным целым…
Так и придется делать. Но, во-первых, наш продукт — чисто ASCII, поэтому на пустом месте потерять ОП не очень хорошо. Во-вторых, постоянная конвертация будет туда-сюда, арифметику указателей проверять и т.д.
Как вам будет угодно. Вы могли бы просто привести доводы в пользу своей точки зрения и мы бы мило побеседовали как инженер с инженером без эмоций и холиворов. Но надо быть готовым к тому, что в конкретном случае (том продукте, с которым я работаю) они могут быть неактуальны.
Но будьте готовы понести консеквенции, что уже происходит.
В то время, когда принимались решения, проблемы вида «в будущем будет жесткий юникод, без возможности выбора» не существовало.
Вы излишне драматизируете — никто не спорит с тем, что у Дельфи микроскопическая ниша. Спорят с «язык мертв».
Если зайти в практически любую тему про Дельфи, то комментарии хейтеров будут на первом уровне, т.е. это не ответы. И это реально странные комментарии, прочтя которые не понимаешь, зачем человек вообще зашел в этот хаб и комментирует эту статью.
Автоматическое управление и у array of bytes (сейчас TBytes), если что
Я не помню, есть ли у TBytes copy on write.
Использование строк в качестве буферов — более чем нормальное в условиях старого Delphi. Нет никакой технической разницы в той эпохе между набором байтов и набором символов. Тот же буфер в памяти с прямым к нему обращением.
Да и кроме того, учитывая, что код — очень-очень legacy, там и Pascal-строки есть в составе структур и т.п. весёлости.
Ну вот нам как раз предстоить переносить несколько млн строчные проекты, и переводится сложно. Начиная с того, что значительная часть кода привязана к строкам как буферам с предопределенной арифметикой вида 1 символ=1 байт и заканчивая сторонними библитеками, чисто ASCII строчными. То, что можно использовать псевдо ANSI строку не особо помогает, потому что весь RTL — уникодный, это приведет к постоянным преобразованиям туда сюда, плюс работа с WinAPI тоже на ANSI версии завязана и т.д. А уд сколько работы со строками как буферами…
… а нам пришлось это писать ручками. Потому что памяти тээмэска жрала как не в себя да висела дай боже. Они наверняка изменились — TMS компоненты — вполне себе хороший пакет.
Они не настолько отстали на сегодняшний день. Ключевое — не настолько.
Просто в сознании многих Дельфи остался на уровне D5-D7, когда они им пользовались, и сравнивают они ту память с другими современными языками. Аналогично люди, которые много лет назад ушли с платформы Windows зачастую склонны выдавать за недостатки Windows как таковой свои воспоминания о версиях W95-98.
Да, это логичное решение, но траты памяти при их полной ненужности (только ASCII) огорчают.
И это проблема, которая требует ручного решения. Плюс еще при дальнейшем переходе на 64 разряда, придется руками же везде править cast'ы между указателем и 4 байтным целым…
В то время, когда принимались решения, проблемы вида «в будущем будет жесткий юникод, без возможности выбора» не существовало.
Если зайти в практически любую тему про Дельфи, то комментарии хейтеров будут на первом уровне, т.е. это не ответы. И это реально странные комментарии, прочтя которые не понимаешь, зачем человек вообще зашел в этот хаб и комментирует эту статью.
Это связано со структурами данных, передаваемых и хранимых, так что не так просто.
Тот, кто нанимает. Это месяц-полтора затрат.
Я не помню, есть ли у TBytes copy on write.
Использование строк в качестве буферов — более чем нормальное в условиях старого Delphi. Нет никакой технической разницы в той эпохе между набором байтов и набором символов. Тот же буфер в памяти с прямым к нему обращением.
Да и кроме того, учитывая, что код — очень-очень legacy, там и Pascal-строки есть в составе структур и т.п. весёлости.
Просто в сознании многих Дельфи остался на уровне D5-D7, когда они им пользовались, и сравнивают они ту память с другими современными языками. Аналогично люди, которые много лет назад ушли с платформы Windows зачастую склонны выдавать за недостатки Windows как таковой свои воспоминания о версиях W95-98.