среда, 29 мая 2013 г.

Объекты "старого стиля" в XE4

Нет, я конечно "уважаю Остап Ибрагимыча". И читал в программном документе (http://18delphi.blogspot.ru/2013/04/delphi-language.html) постулат об отказе от object.

Но то, что "сотворили" в XE4 с object'ами (по сравнению с record'ами с методами) - выглядит скорее как ОШИБКА, нежели чем ЧЁТКО СПЛАНИРОВАННОЕ действо. Это - грустно.

Методы на record'ах, которые возвращаются из property - МОЖНО звать, а на object'ах, который возвращаются, через property - НЕЛЬЗЯ. Глупо имхо. Тем более, что пишут "var reference required". Ну ГЛУПО! Про property и var - я давно кстати пост хочу написать. НАПИШУ.

P.S. Embarcadero (нашему надёжному "причалу") тут ТВЁРДАЯ "двойка" (учитывая ещё и вот это - http://18delphi.blogspot.com/2013/05/xe4.html). ИМХО. НЕЛЬЗЯ выпускать НОВЫЙ компилятор в течении полу-года от старого. Тем более с ТАКИМИ различиями. Я бы СЕБЕ этого не позволил бы. Но я надеюсь, что "парни учтут ошибки и постараются так больше не делать".

Я то конечно - "выкрутился". Но только то, что ВЕСЬ интересующий код был нарисован в UML и то, что была возможность поправить ШАБЛОНЫ КОДОГЕНЕРАЦИИ - позволило решить проблему за ОДИН РАБОЧИЙ ДЕНЬ. Object я теперь генерирую в record, наследование в агрегацию, а методы, где не срасталось с наследованием сгенерировал в overload-Stub'ы. Если бы этого не было бы - думаю разборки затянулись бы на неделю.

Правда IfDef XE4 повсеместно это - УЖАС. Но по-другому - пока не так. Ведь существует масса проектов, которые пока на Delphi 7 приходится собирать.

Я бы на месте Embarcadero подумал бы о возвращении полноценного object. Хотя бы под директивой компилятора. Тем более, что отмазка "в LLVM такого нет" - не катит. Всё там есть. Достаточно на xCode посмотреть.

Теперь осталось дождаться момента - когда Embarcadero поправит ошибку с "открытыми массивами".

Комментариев нет:

Отправить комментарий