Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Вниз

Обновился Delphi RoadMap   Найти похожие ветки 

 
PEAKTOP ©   (2009-05-16 11:48) [0]

На блоге Марко Кэнту появился отчет о конференции Embarcadero об Delphi RaodMap

Из интересных новшевств:
1) компилятор для Win64
2) возрождение Kylix в виде проекта DelphiX для компиляции под LINUX и MacOS
3) ориентация на Windows7 и новые устройства ввода данных (например, TouchScreen)

В общем, читаем сами
http://blog.marcocantu.com/blog/delphi_live_2009_2_roadmap.html


 
speller ©   (2009-05-16 12:33) [1]

Давно пора ) Только бы еще старые баги поправили )


 
Рамиль ©   (2009-05-16 12:33) [2]


> компилятор для Win64

У меня такое чувство, что когда делфи научится компилировать под x64, уже появится x128.


 
oxffff ©   (2009-05-16 12:49) [3]


> PEAKTOP ©   (16.05.09 11:48)  


Самое интересное extended RTTI.


 
Григорьев Антон ©   (2009-05-16 14:03) [4]


> PEAKTOP ©   (16.05.09 11:48)  
> 2) возрождение Kylix в виде проекта DelphiX для компиляции
> под LINUX и MacOS

Ну вот, опять путаница будет. Имя DelphiX уже занято.


 
oxffff ©   (2009-05-16 15:52) [5]

Можно еще здесь посмотреть картинки. Более информативно

http://robstechcorner.blogspot.com/2009/05/delphilive-pictures.html


 
Pavia ©   (2009-05-16 16:09) [6]


> > компилятор для Win64У меня такое чувство, что когда делфи
> научится компилировать под x64, уже появится x128.

По плану в конце текущего года должны.Если планы неменяли.


 
Кто б сомневался ©   (2009-05-16 16:38) [7]


> Давно пора ) Только бы еще старые баги поправили )


во - во. Баги хоть бы поправили. Из за некоторых трудно работать под 150% dpi, а в некоторых случаях даже нереально.


 
Кто б сомневался ©   (2009-05-16 16:42) [8]

а это сейчас мода такая, пальцами тыкать на большом экране с презентацией? указки (втч и лазерные) уже не рулят?


 
ZeroDivide ©   (2009-05-17 01:51) [9]

В целом, мне показалось, что новый Project Manager трезвый и ненакуренный. А именно из-за ошибок в проджект менеджменте, кастомеры с недоумением смотрели на все, что происходило с Delphi в последние годы.

Надежда есть. Я доволен. Думаю, сделают все что обещали, с учетом того что инвестиции в R&D по Delphi теперь в несколько раз больше. В общем, Delphi - forever, однозначно.


 
Eraser ©   (2009-05-17 02:50) [10]

> В целом, мне показалось, что новый Project Manager трезвый
> и ненакуренный.

да уж! радует, что последние несколько лет свернули они на праведный путь, подальше от .net и прочих ECO )


 
тимохов ©   (2009-05-17 12:31) [11]

планы наполеоновские. Они по сути хотят из нейтив языка сделать как бы язык с байт кодом - я про расширенный РТТИ и аспекто-оринетированное программирование. Последнее меня, кстати, очень привлекает, ибо я активно им пользуюсь, посредством самописного его подобия.


 
pasha_golub ©   (2009-05-17 17:49) [12]


> тимохов ©   (17.05.09 12:31) [11]


> аспекто-оринетированное программирование

Шо це?


 
тимохов ©   (2009-05-17 19:22) [13]

2Павел.

Начни с этого http://ru.wikipedia.org/wiki/%D0%90%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Я перечитал, в общем-то близко к моему пониманию АОС.
Вопросы будут, спрашивай.


 
T&F   (2009-05-19 05:00) [14]

Планы конечно радуют, как минимум 25% должно быть реализовано уже в этом году (хочется надеяться)

* Delphi Weaver – основной целью которого является улучшение юзабилити IDE, поддержка командной разработки(интеграция с SVN), DataSnap с поддержкой http, поддержка touchscreen-ов, поддержка Firebird-a в DbExpress, Soap 1.2, поддержка Windows 7 и кое-что ещё.
* Delphi “X” – кроссплатформенность(Linux + MacOs)
* Project Chromium – Pascal Code Formatter, документация по OpenToolsApi, новая модель привязки к данным(не через датасеты), более тесная интеграция с БД-тулзами от Embarcadero.
* Project Commodore – долгожданные 64-бита, поддержка многопоточности в RTL.


 
tesseract ©   (2009-05-19 09:56) [15]


> 2) возрождение Kylix в виде проекта DelphiX для компиляции
> под LINUX и MacOS


Надеюсь будет получше, чем в Kylix. И для маков Cocoa сделают. А то LCL пока не слишком-то под Cocoa собирается, да и сам лазер  не фонтан.


 
pasha_golub ©   (2009-05-19 16:44) [16]


> Я перечитал, в общем-то близко к моему пониманию АОС.

Херь какая-то. На кошках есть пример?


 
Тимохов_   (2009-05-19 17:00) [17]

2Павел

Вот статья вроде неплохая.
http://www.ibm.com/developerworks/ru/library/pollice/index.html
Их много в интернете.

Цитата оттуда:
Аспекты - это пересекающиеся (crosscutting) отношения. Поэтому аспекты непросто инкапсулировать в отдельный класс. Кроме того, если строго следовать объектно-ориентированной парадигме, необходимо представить такие отношения в единой, удобной для сопровождения форме.

Собственно здесь вся идея изложена. Тут надо почитать, подумать. Я не сразу понял, но сейчас активно пользую методологию АОП.


 
test ©   (2009-05-19 17:02) [18]

тимохов ©   (17.05.09 19:22) [13]
Ссылки на книги есть?


 
Юрий Зотов ©   (2009-05-19 17:06) [19]

> pasha_golub ©   (19.05.09 16:44) [16]

> На кошках есть пример?

Есть.

Пусть имеется здоровенная программа, работающая с БД. В ней куча классов, которые пишут данные в кучу таблиц. Все отлажено, все работает, но в один прекрасный день потребовалось ввсти логирование - что, куда и когда было в БД записано.

Что делать? Перекапывать здоровенные исходники и добавлять в кучу мест запись в лог? Это долго и чревато ошибками (что-нибудь обязательно будет упущено).

Пусть, к примеру, мы знаем, что реальные изменения в БД вносит метод Exec класса TQuery. Можно было бы переписать только его (добавив логирование), но портить генофонд не имеем права. Тогда используем АОП.

Пишем еще один класс и некий дескриптор к нему. Смысл этого действа заключается в том, что теперь, когда бы и откуда бы ни был вызван метод TQuery.Exec, этот вызов будет перехвачен и управление попадет в заранее определенный метод X нашего нового класса, а уж из этого метода X мы можем вызвать метод TQuery.Exec.

Поэтому добавляем в наш метод X ведение лога - и задача решена.


 
Тимохов_   (2009-05-19 17:15) [20]

2Павел. На пальцах.

Самый стандартный пример - это проверка прав доступа и логирование.

Вот представь, что у тебя есть программа в которой есть много-много методов, в которых нужно проверять права доступа, а в конце писать в лог. Каждый из этих методов состоит (допустим) из трех кусков:

1. Проверка прав.
2. Бизнес-логика.
3. Логирование.

1 и 3 - это паразиты, которые есть в каждом методе и которые есно, хочется обобщить и автоматизировать - т.е. чтобы они по факту были, но чтобы не болела голова об их добавлении в код.

Для подобного рода обобщений есть масса методологий. Например, можно методы засунуть в супер-класс, в нем сделать виртуальные методы для бизне-логики, а п.п. 1 и 3 вызывать в супер-классе. Можно еще как-то.

АОП предлагает методологию указания управляющих команд компилятору, в результате чего он сам при сборке добавит необходимые вызовы в методы, а ты сможешь полностью сосредоточится на своей бизнес-логике.

Например (это только пример!) в Delphi код может выглядеть так:


{$method_type "business"}
procedure PayMoney(...);
begin
  // только бизнес-логика
end;


при этом где-то для типа "business" описано, что нужно добавлять в конец и начало метода.

Текущие реализации есть в Java. Вроде JAspect называется штука.

Что это тебе даст? Посредством АОП ты сможешь сконцентрировать определенный *распределенный* по коду функционал в одно место. Вот, проверка прав и логирование хороший тому пример. Т.е.ты сплошные макароны разнопланового кода сможешь разделить по типам, а вместе тебе это все соберет компилятор.

АОП можно рассматривать шире, не только как указание компилятору (это, согласись, детали реализации). Как и ООП АОП - это философия классификации исходного кода в целях его дальнейшего повтороного использования. Причем АОП не исключает ООП (последний, всяко мощней), но однозначно имеет свое применение в определенной ситуации.


 
Sergey Masloff   (2009-05-19 17:23) [21]

Тимохов_
 Эта фигня (не в плохом смысле) была известна задолго до придумавания слов АОП ;-)
 А вот с отладкой этого дела проблемы не возникают?


 
tesseract ©   (2009-05-19 17:42) [22]


> Смысл этого действа заключается в том, что теперь, когда
> бы и откуда бы ни был вызван метод TQuery.Exec, этот вызов
> будет перехвачен и управление попадет в заранее определенный
> метод X нашего нового класса, а уж из этого метода X мы
> можем вызвать метод TQuery.Exec.


Шуточки Smalltalk / Objective-C лохматых годов ?


 
Тимохов_   (2009-05-19 17:43) [23]

2Сергей.

Сам понимаешь, что программируя на дельфи я не могу давать директивы компилятору, какие аспекты куда вставлять, ибо таких директив таких пока нет.

У меня есть свое преломление данной методологии. В моем представлении АОП проблем с отладкой нет. Даже есть достоинства.

Если интересно, то могу поделиться своим подходом.

Представь, что есть некий самописный фреймворк для работы с БД в объектом стиле. Т.е. в памяти объекты, на диске реляционка. Фреймворк берет на себя все проблемы с мепингом, транзакциями и пр. Не сказать, что очень это производительно, но для задач построения систем бух. и фин. учета вполне хватает.

Объекты имеют супер-класс. В нем есть виртуальные методы: после_создания, перед_сохранением, после_ввода_значения и т.д. - штук 20.

Для прописывания конкретной логики я наследую от супер-класса, переопределяю нужные события и т.д.

Так я писал долгое время. Но со временем я понял, что простым наследованием для реализации парадигмы повторного использования кода не обойтись. Я пришел к выводу, что нужна какая-то смешанная методология, когда вроде бы разным классам можно прививать общую функциональность.

В результате искания в интернете (где-то 2005 год) я нашел АОП. Мне очень понравилась идеология разделения макаронного кода на аспекты (темы, точки зрения, как угодно :) ). В итоге я реализовал технологию, при которой каждому классу можно было приписывать один или более спец. классов, которых я назвал аспектами. Эти классы реализуют одну конкретную тему - будь то безопасность, или реализация конкретного бизнес-правила.

Все не так, конечно, просто. Но идейно получилась так, что теперь повторное использование кода в рамках моего фреймворка оказывается существенно упрощенным. К тому же чувствуешь себя спокойней - не забудешь что-то важное прописать: это за тебя сделает аспект. К тому же можно добиться того, чтобы сложные классы (более 100 полей, гора взаимосвязей и бизнес-правил) реализуются в декларативном стиле - набрал аспектов в класс, задал им параметры, прописал чуточку специальной логики и все. К тому же упрощяется тестирование: можно понять, какие аспекты привязаны к классу, посмотреть их описание и тестить именно по темам.

Конечно, это не совсем АОП, но с идейной точки зрения, ИМХО, это очень похоже на АОП. В зависимости от того, что эти ребята придумают в Delphi я может быть перееду на их АОП.


 
Игорь Шевченко ©   (2009-05-19 19:54) [24]

А в C++ примерно тем же самым занимается множественное наследование...На которое так долго ругались программисты на Паскале. Ан нет, идея-то жива, только очередные яйцеголовые ее по-другому обозвали - точки зрения там всякие и прочее словофлудие.


 
jack128_   (2009-05-19 22:29) [25]


> {$method_type "business"}
> procedure PayMoney(...);
> begin
>   // только бизнес-логика
> end;


насколько я понимаю технически такие вещи можно реализовать макросами LISP"а или например Nemerle.  Но в дельфи таких возможностей нет и не будет. Если CodeGear дженереки не осилил, то о таких продвинутых фишках можно и не мечтать.


 
jack128_   (2009-05-19 22:40) [26]

2 Тимохов
> Ан нет, идея-то жива, только очередные яйцеголовые ее по-
> другому обозвали - точки зрения там всякие и прочее словофлудие.
>

А как в той же задаче логирования вызовов тучи методов как те поможет множ. насл-ние - я не очень понимаю.


 
DVM ©   (2009-05-19 22:42) [27]


> Юрий Зотов ©   (19.05.09 17:06) [19]

На мой взгляд, это все выгладит как костыль. Если, конечно, только очень быстро надо - то это выход.


 
тимохов ©   (2009-05-19 22:43) [28]

2Женя

Я так понимаю, что Игорь говорил про мою интерпретацию АОП, а не про исходные примеры. В целом я с ним согласен. АОП и его интерпретации не панацея, а одна из методологий.

И вообще, задача с логированием - это частный случай. Просто он для примера хорош. Применений подхода много больше, нежели одно логирование.


 
Игорь Шевченко ©   (2009-05-19 22:46) [29]

jack128_   (19.05.09 22:40) [26]

Ты наверное ко мне хотел обратиться ? :)

Как в Turbo Vision на C++, где классы с какого-то момента в иерархии обладают свойством сериализации себя - подмешивается дополнительный предок, который умеет сериализовать.

Не думаешь же ты, что написание какого-то атрибута перед методом класса волшебным образом изменяет его поведение во всех языках программирования (насколько я слышал, в Java для этого изменяется byte-код)

На мой взгляд - это еще одна разновидность множественного наследования, только обозванная аспектно-ориентированным программированием.


 
Игорь Шевченко ©   (2009-05-19 22:50) [30]

тимохов ©   (19.05.09 22:43) [28]


> Я так понимаю, что Игорь говорил про мою интерпретацию АОП,
>  а не про исходные примеры


А иначе как сделать ? Механизм остается один - внедряется набор дополнительных функций, вероятно, еще одна таблица виртуальных методов, исправляется основная таблица, чтобы ее вызовы перенаправлялись во вновь созданную, там вокруг основных вызовов делаются обертки (before/after) - и вуаля.

Если ты это делал вручную, то понимаешь, насколько это выглядит в исходном коде.


 
Eraser ©   (2009-05-20 02:22) [31]

> [19] Юрий Зотов ©   (19.05.09 17:06)

хелперы, отчасти, решают эту проблему.


 
Псалтырь ©   (2009-05-20 08:25) [32]


> Игорь Шевченко ©   (19.05.09 19:54) [24]
>
> А в C++ примерно тем же самым занимается множественное наследование.
> ..На которое так долго ругались программисты на Паскале.
>  Ан нет, идея-то жива, только очередные яйцеголовые ее по-
> другому обозвали - точки зрения там всякие и прочее словофлудие.
>

+100


 
test ©   (2009-05-20 08:49) [33]

Игорь Шевченко ©   (19.05.09 22:46) [29]
А как же конечные автоматы? Там выставление состояний может менять поведение.


 
jack128_   (2009-05-20 10:05) [34]

2 Игорь
> Ты наверное ко мне хотел обратиться ? :)

Да такие философские темы идут, пока пост пишешь мысль так далеко ускачет, что забудешь с чего начинал и кому хотел ответить :-)


> Как в Turbo Vision на C++, где классы с какого-то момента
> в иерархии обладают свойством сериализации себя - подмешивается
> дополнительный предок, который умеет сериализовать.

таки нужно было просто добавить дополнительного предка и класс стал уметь себя стримить?? Или кроме собственно наследования нуно было было еще реализовать пару (десятков) виртуальных методов??  Если второе - то этот "доп. предок, который умеет сериализовать" - фактически всего лишь интерфейс. ничего более. А если второе - то тут конечно другое дело -)  
Но я се не представляю, как это было реализовано :-)


> Не думаешь же ты, что написание какого-то атрибута перед
> методом класса волшебным образом изменяет его поведение
> во всех языках программирования (насколько я слышал, в Java
> для этого изменяется byte-код)

Зависит от языка. В Java - не знаю, что там намутили, а например в Nemerle макросы - это процедуры, которые на вход получают AST и могут менять его. То есть банально вставить в в начало каждого метода, помечанного конкретным атрибутом, код:  Log.Write("<<<< " + AST.CurrentMethodName);


> Eraser ©   (20.05.09 02:22) [31]
>
> > [19] Юрий Зотов ©   (19.05.09 17:06)
>
> хелперы, отчасти, решают эту проблему.

Хм.  Единственный вариант с хелпером, который я вижу - это реализовать TQueryHelper.Exec и подключить модуль с этим хелпером в каждый модуль проэкта. Но это решение - суть макроподстановка. Некрасиво.. Или у тя другой вариант решения?


 
Игорь Шевченко ©   (2009-05-20 10:52) [35]

test ©   (20.05.09 08:49) [33]


> А как же конечные автоматы? Там выставление состояний может
> менять поведение.


Также, как конечные пулеметы

jack128_   (20.05.09 10:05) [34]


> а например в Nemerle макросы - это процедуры, которые на
> вход получают AST и могут менять его


Афигеть. То есть, программист пишет одно, а потом легким движением руки код превращается в вовсе не то, что кодом хотели сказать.

Удачи в сопровождении:)


 
Petr V. Abramov ©   (2009-05-20 11:12) [36]


> новая модель привязки к данным(не через датасеты)

а через, пардон, что?


 
Polevi ©   (2009-05-20 11:27) [37]

>Игорь Шевченко ©   (20.05.09 10:52) [35]

АОП и множественное наследование пересекаются только в случае implemetation injection.. когда хочется наделить объект уже готовой реализацией интерфейса. Но АОП на этом не заканчивается, достоинства его в декларативности, например заставляем метод работать в транзакции, проверяем права доступа и при этом ведем лог

[Transactional]
[Log]
[CheckPermission]
public void ChangeDocumentState(int id)
{
//business logic
}

такого эффекта невозможно достичь существующими средствами языка


 
Игорь Шевченко ©   (2009-05-20 11:30) [38]

Polevi ©   (20.05.09 11:27) [37]


> такого эффекта невозможно достичь существующими средствами
> языка


Пардон, какого языка ?


 
Polevi ©   (2009-05-20 11:35) [39]

Delphi, C#


 
Polevi ©   (2009-05-20 11:37) [40]

вот еще пример - кеширование вызовов метода

[Cachable]
public string SelectSomeData(int p1, int p2)
{
...
}

много можно придумать полезного...



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.008 c
11-1204046814
andreil
2008-02-26 20:26
2009.07.26
Как быстро сравнить два файла?


4-1213170511
Игорь Х
2008-06-11 11:48
2009.07.26
Как получить информацию о памяти запущенного процесса?


15-1243109560
Tornado
2009-05-24 00:12
2009.07.26
Вопрос по вебу


2-1243510092
b/@.
2009-05-28 15:28
2009.07.26
Где задаётся порядок создания компонент ?


15-1242860892
Иксик
2009-05-21 03:08
2009.07.26
Как зарегистрировать торговую марку в России?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский