Проблема Delphi – несовместимость версий


6 0

Вот недавно тут в комментариях увидел в очередной раз, что кто-то до сих пор пишет в 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-м.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Vlad B.

15 Июля 2012

Что заставляет людей оставаться в столь старой версии среды разработки, когда появились на много более мощные версии?

Заставляет писать на этом то, что институты стран СНГ не могут купить более новую версию ПО т.к. это не по карману государству или просто от жадности. Хотя это не только институты, а так же государственные предприятия.


Михаил Фленов

15 Июля 2012

Ну лицензии кажется никогда не были проблемой для СНГ


sergey

15 Июля 2012

Помнится в коком то давнишнем посту ты ратовал ЗА использование компонентов. (Видимо когда продвигал свои). Теперь же говоришь, что это не слишком хорошо. Ты частенько меняешь мнение.


Темирхан

15 Июля 2012

Нормальные программисты которые создают компоненты делают это для разных версии. Не давно я нашел один компонент в котором подробно написано как установить его на несколько версии и он мне помог при переходе на новую версию Delphi. Если человек создает компоненты то должен и дальше поддерживать его и я даже согласен платить за это ну конечно разумную цену. Но в прочем я согласен с вами такая проблема существует...


Михаил Фленов

15 Июля 2012

Помнится в коком то давнишнем посту ты ратовал ЗА использование компонентов.


Я подозреваю ты не понял сути ни того ни этого поста. И сейчас я ЗА использование хорошо написанных ВИЗУАЛЬНЫХ компонентов. Невизуальные компоненты которые не имеют визуального взаимодействия с пользователем должны быть выполнены в виде библиотек классов и происходить от TObject или от нужного объекта, но не от TComponent.


XHelp

16 Июля 2012

Поэтому при переходе с Vista на Windows 7 они не поменяли номер версии, которые возвращает API функция, он остался 6-м

По моему это не правильный подход. Что-то типо:
При переходе с ручной коробки на автомат много людей нажимают тормаз и думаю что это сцепление. Поэтому производители машин сделали педаль тормоза "просто так педалькой" без функций, а тормозить теперь нужно клаксоном... что бы люди, которые просто не умеют пользоватся машиной чувствовали себя уютно.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне