Вот недавно тут в комментариях увидел в очередной раз, что кто-то до сих пор пишет в Delphi 5. Что заставляет людей оставаться в столь старой версии среды разработки, когда появились на много более мощные версии? Мне кажется, что это несовместимость кода и в особенности компонентов. Когда я писал код на Delphi, то отказался от использования компонентов как раз по причине того, что при выходе новой версии постоянно возникали проблемы.
Один не очень разумный человек как-то выразил удивление, зачем я пишу сам такие вещи как передача данных посети, а не использую компоненты. Дело в том, что если знать, как работает протокол, а главное – понимать как он работает. Написать код не составляет труда. Зато я всегда пишу так, чтобы мой код не привязывался к определенной версии и можно было потом без проблем переходить на следующую. Не говоря уже о том, что передача данных по сети должна быть классом, а не компонентом.
Невидимые компоненты я вообще считаю не очень удачной идеей в программировании, если они не имеют никакого пользовательского интерфейса. В такой компонент можно засунуть например меню, потому что нужен вызов редактора меню (есть какое-то визуальное общение с пользователем). Ну а устанавливать простые свойства типа строка/число/адрес можно и без компоненты.
Но это уже отступление от основной мысли, и если кто-то все же реализовывает сеть через компонент, то ничего смертельного тут нет. Это не совсем удачно, но не смертельно.
Вернемся к совместимости между версиями. Я считаю, что вот это как раз самая главная проблема Delphi. Очень много людей застряло в Delphi 5, 6 или 7 только потому, что расходы на обновление до 2007 или более новых становятся нереально большими.
Это конечно же не единственная проблема, но достаточно серьезная, потому что если у вас приложение не из класса Hallo World, а использует сторонние компоненты, то вы обязательно столкнетесь с проблемами совместимости кода при переходе. Это проблема не столько Delphi, а столько того, как люди пишут компоненты для этой среды. А их пишут с использованием знака равенства.
Очень часто я видел в коде компонентов сравнения типа: если версия Delphi = 5, то использовать фишку версии 5. Например, допустим, что программист написал компонент для работы со строками в Delphi 6 c использованием Ansi строковых функций. Выходит Delphi 7 (номера версий взяты просто для примера и ничего общего с реальностью не имеют) с поддержкой Unicode и он изменяет компонент так:
Если версия = 7, то функция с использование Unicode Иначе без использования Unicode
Этот код работает прекрасно, до выхода версии 8, где снова нужно использовать Unicode, хотя по существующей логике будет использоваться более старая функция. Это и создает проблемы перехода. Должно быть что-то типа:
Если версия > 7, то функция с использование Unicode Иначе без использования Unicode
Обычно сохраняется обратная совместимость и поэтому новая функция, которая появляется в какой-то версии среды или SDK сохраняется и в последующих.
Я на C# сторонние компоненты не использую по привычке плохого опыта с Delphi, но интересно, там существуют такие проблемы?
Microsoft уже давно пришли к такому плохому выводу, что большинство программистов использует сравнение на равенство, поэтому очень часто возникали проблемы совместимости в софте, и MS тут не сильно были виноваты. Поэтому при переходе с Vista на Windows 7 они не поменяли номер версии, которые возвращает API функция, он остался 6-м.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Ну лицензии кажется никогда не были проблемой для СНГ
Помнится в коком то давнишнем посту ты ратовал ЗА использование компонентов. (Видимо когда продвигал свои). Теперь же говоришь, что это не слишком хорошо. Ты частенько меняешь мнение.
Нормальные программисты которые создают компоненты делают это для разных версии. Не давно я нашел один компонент в котором подробно написано как установить его на несколько версии и он мне помог при переходе на новую версию Delphi. Если человек создает компоненты то должен и дальше поддерживать его и я даже согласен платить за это ну конечно разумную цену. Но в прочем я согласен с вами такая проблема существует...
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.