И снова АОП...
От: Зверёк Харьковский  
Дата: 20.11.04 12:25
Оценка: +2 -1
Кошмарно флеймообразная тема, ну да ладно.
Покопался с Aspect C++ и сложилось у меня два противоположных мнения одновременно.


1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает... То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.
Средство типа таких вот, как обсуждалось в этой теме (даже в синтаксисе есть нечто общее): C++ dreams
Автор: c-smile
Дата: 27.10.04


2. с другой стороны, я точно помню: Бьярне жаловался, что первые версии C++ тоже называли сверхинтеллектуальным препроцессором. Может, это тот же случай?


Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?
сам слушаю и вам рекомендую: 11 — Вместе теплей
FAQ — це мiй ай-кью!
Re: И снова АОП...
От: buriy Россия http://www.buriy.com/
Дата: 20.11.04 15:08
Оценка: 36 (1)
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Кошмарно флеймообразная тема, ну да ладно.

ЗХ>Покопался с Aspect C++ и сложилось у меня два противоположных мнения одновременно.
ЗХ>

ЗХ>1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает... То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.
Я нахожу две аналогии с АОП: препроцессор в C, шаблоны C++. Это явления одного порядка (разве что второе типонезависимо). Но препроцессор и шаблоны нужны были всего лишь как костыли в языках со статической типизацией С и C++:
1) для короткой записи повторяющегося кода (когда повторяющийся код не является функцией)
2) для статических проверок (вспомним generics и ужаснемся)
3) для создания специализированного кода
4) для расширения возможностей языка (через ж#пу)
5) для ускорения кода
Почему это костыли — потому что в языках с динамической типизацией таких костылей нет!
Впрочем, это само собой так складывается. В третий уже раз, с помощью АОП, захотелось одновременно добиться высокоуровневости кода, надежности и большой скорости работы. Как говорится, и рыбку съесть...

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

ЗХ>Средство типа таких вот, как обсуждалось в этой теме (даже в синтаксисе есть нечто общее): C++ dreams
Автор: c-smile
Дата: 27.10.04


ЗХ>Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?

Если было бы IDE, компилятор, и декларативная часть языка, которые позволяли бы добиться результатов АОП (комбинировать код), шаблонов(типизировать код), макросов(специализировать код), то эти хрени не были бы никому нужны. АОП — это метод решения проблем переиспользования уже написанного кода, не ломая его. АОП — это очередной серебряный костыль. Который пропадет, когда стандартная библиотека станет предоставлять как мелкие, так и крупные строительные блоки, программы будут верифицироваться по оставленным пользователем объявлениям, а компилироваться вообще не будут
Это должно быть языковое средство. Которое уже реализовано в языках, владеющих своей метаинформацией и умеющих изменять свой код.
/bur
Re[2]: И снова АОП...
От: Зверёк Харьковский  
Дата: 20.11.04 15:26
Оценка:
Здравствуйте, buriy, Вы писали:

B>Здравствуйте, Зверёк Харьковский, Вы писали:


ЗХ>>Кошмарно флеймообразная тема, ну да ладно.

ЗХ>>Покопался с Aspect C++ и сложилось у меня два противоположных мнения одновременно.
ЗХ>>

ЗХ>>1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает... То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.
B>Я нахожу две аналогии с АОП: препроцессор в C, шаблоны C++. Это явления одного порядка (разве что второе типонезависимо)...
ИМХО, вы не правы.
Разница препроцессора и шаблонов, в общем, фундаментальна: препроцессор суть надъязыковое средство, а шаблоны — внутриязыковое.
Обработка макросов идет перед компиляцией, препроцессор и компилятор ничего друг о друге не знают. Эти две программы можно безболезненно разделить.
Шаблоны же — это средство повышения выразительности языка (считаете, что через ж... — на здоровье), и средство весьма мощное.

Собственно, в этом контексте можно уточнить мой изначальный вопрос (и даже получить некоторые зачатки ответа): можно ли отделить средство АОП (АОП-процессор) от компилятора? Видимо, да.
С другой стороны, АОП-процессор должен "разбираться" в языке, для которого он предназначен (в отличие от С-препроцессора). И с этой точки зрения АОП-процессор является частью языка.
Что-то я запуталси....

B>Почему это костыли — потому что в языках с динамической типизацией таких костылей нет!

Опять статическое vs. динамическое? бэээээ

ЗХ>>Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?

B>Если было бы IDE, компилятор, и декларативная часть языка, которые позволяли бы добиться результатов АОП (комбинировать код), шаблонов(типизировать код), макросов(специализировать код), то эти хрени не были бы никому нужны.
почему?

B>АОП — это метод решения проблем переиспользования уже написанного кода, не ломая его. АОП — это очередной серебряный костыль. Который пропадет, когда стандартная библиотека станет предоставлять как мелкие, так и крупные строительные блоки, программы будут верифицироваться по оставленным пользователем объявлениям, а компилироваться вообще не будут



B>Это должно быть языковое средство. Которое уже реализовано в языках, владеющих своей метаинформацией и умеющих изменять свой код.

Вот.... так и знал.... Смолтолк?
сам слушаю и вам рекомендую: в тишине сижу
FAQ — це мiй ай-кью!
Re[3]: И снова АОП...
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.11.04 16:20
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Разница препроцессора и шаблонов, в общем, фундаментальна: препроцессор суть надъязыковое средство, а шаблоны — внутриязыковое.

ЗХ>Обработка макросов идет перед компиляцией, препроцессор и компилятор ничего друг о друге не знают. Эти две программы можно безболезненно разделить.
ЗХ>Шаблоны же — это средство повышения выразительности языка (считаете, что через ж... — на здоровье), и средство весьма мощное.
Это иллюзия. Теоретически можно натравить на искходный текст с шаблонами тул, который выплюнет валидный С++, но уже без шаблонов. Именно поэтому некоторые склонны называть шаблоны интеллектуальными макросами. С другой стороны, сделать это невозиможно без полнценного анализа кода. Поэтому все-таки макросами их называть нельзя .
ЗХ>Собственно, в этом контексте можно уточнить мой изначальный вопрос (и даже получить некоторые зачатки ответа): можно ли отделить средство АОП (АОП-процессор) от компилятора? Видимо, да.
ЗХ>С другой стороны, АОП-процессор должен "разбираться" в языке, для которого он предназначен (в отличие от С-препроцессора). И с этой точки зрения АОП-процессор является частью языка.
ЗХ>Что-то я запуталси....
Просто ты делаешь два непротиворечивых утверждения. И оба являются истинными. Да, АОП может функционировать как сторонний тул, после которого текст надо обрабатывать компилятором. Это техника, а техника может быть любой. Тебя же не смущает, что в VC нет отдельного препроцессора?
Да, тул таки должен выполнять часть работы компилятора. При этом в сам язык вносить специальные конструкции для применимости АОП не обязательно.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: И снова АОП...
От: Зверёк Харьковский  
Дата: 20.11.04 16:33
Оценка:
Здравствуйте, Sinclair, Вы писали:

ЗХ>>Разница препроцессора и шаблонов, в общем, фундаментальна: препроцессор суть надъязыковое средство, а шаблоны — внутриязыковое.

ЗХ>>Обработка макросов идет перед компиляцией, препроцессор и компилятор ничего друг о друге не знают. Эти две программы можно безболезненно разделить.
ЗХ>>Шаблоны же — это средство повышения выразительности языка (считаете, что через ж... — на здоровье), и средство весьма мощное.
S>Это иллюзия. Теоретически можно натравить на искходный текст с шаблонами тул, который выплюнет валидный С++, но уже без шаблонов.
...а так же тул, который выплюнет валидный C.
...а так же тул, который выплюнет валидный ассемблер.

Но:
S>...сделать это невозиможно без полнценного анализа кода.
— вот об этом я и говорил.

S> Поэтому все-таки макросами их называть нельзя .

Ура!

ЗХ>>Собственно, в этом контексте можно уточнить мой изначальный вопрос (и даже получить некоторые зачатки ответа): можно ли отделить средство АОП (АОП-процессор) от компилятора? Видимо, да.

ЗХ>>С другой стороны, АОП-процессор должен "разбираться" в языке, для которого он предназначен (в отличие от С-препроцессора). И с этой точки зрения АОП-процессор является частью языка.
ЗХ>>Что-то я запуталси....
S>Просто ты делаешь два непротиворечивых утверждения. И оба являются истинными. Да, АОП может функционировать как сторонний тул, после которого текст надо обрабатывать компилятором. Это техника, а техника может быть любой. Тебя же не смущает, что в VC нет отдельного препроцессора?
S>Да, тул таки должен выполнять часть работы компилятора. При этом в сам язык вносить специальные конструкции для применимости АОП не обязательно.
Меня просто смущает, что АОП называют парадигмой программирования.
Препроцессор же — не называют? И даже шаблоны — не называют? (то есть даже метапрограммирование — это вроде как не парадигма?)
сам слушаю и вам рекомендую: в тишине сижу
FAQ — це мiй ай-кью!
Re[3]: И снова АОП...
От: buriy Россия http://www.buriy.com/
Дата: 20.11.04 17:57
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Здравствуйте, buriy, Вы писали:


B>>Здравствуйте, Зверёк Харьковский, Вы писали:


ЗХ>>>1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает... То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.

B>>Я нахожу две аналогии с АОП: препроцессор в C, шаблоны C++. Это явления одного порядка (разве что второе типонезависимо)...
ЗХ>ИМХО, вы не правы.
ЗХ>Разница препроцессора и шаблонов, в общем, фундаментальна: препроцессор суть надъязыковое средство, а шаблоны — внутриязыковое.
Понятия надъязыковое и внутриязыковое искусственны. Потому что и там, и там что-то типа языка в языке, т.е. ситуация намного сложнее твоего деления. См. ниже.
ЗХ>Обработка макросов идет перед компиляцией, препроцессор и компилятор ничего друг о друге не знают. Эти две программы можно безболезненно разделить.
Знаем. Цена разделения — копаться в 50 метрах precompiled headers.
ЗХ>Шаблоны же — это средство повышения выразительности языка (считаете, что через ж... — на здоровье), и средство весьма мощное.
Значит, сначала понизили выразительность языка статической типизацией, ты не возражал (тебя никто не спросил, давно дело было) ).
Потом повысили эту выразительность шаблонами, что ты, инвалид по воспитанию (извини за мой тон), воспринял как что-то "новое". А что тебе мешает использовать вместо шаблонов тип object? Производительность и типобезопасность. О чем я и говорю. Идеалом было бы писать в методах пред- и постусловия... но не судьба, это слишком сложно для использования.

ЗХ>Собственно, в этом контексте можно уточнить мой изначальный вопрос (и даже получить некоторые зачатки ответа): можно ли отделить средство АОП (АОП-процессор) от компилятора? Видимо, да.

Да.
ЗХ>С другой стороны, АОП-процессор должен "разбираться" в языке, для которого он предназначен (в отличие от С-препроцессора). И с этой точки зрения АОП-процессор является частью языка.
АОП-процессор может разбираться не в исходниках, а в бинарниках с метаинформацией, как aspectJ
ЗХ>Что-то я запуталси....
Отделить АОП от языка можно (я уже указал когда), вопрос, нужно ли.

B>>Почему это костыли — потому что в языках с динамической типизацией таких костылей нет!

ЗХ>Опять статическое vs. динамическое? бэээээ
ЗХ>
Почему?

ЗХ>>>Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?

А вот так: АОП — не языковое средство. Это средство времени выполнения. Которое может быть частью библиотеки, но не языка или IDE.
B>>Если было бы IDE, компилятор, и декларативная часть языка, которые позволяли бы добиться результатов АОП (комбинировать код), шаблонов(типизировать код), макросов(специализировать код), то эти хрени не были бы никому нужны.
ЗХ> почему?
Программеру нужна понятность программ, защита от большинства ошибок в момент написания программы, высокая скорость исполнения, нетребовательность к ресурсам + некоторые еще нефункциональные требования. Коэффициенты могут варьироваться в зависимости от задач.

B>>АОП — это метод решения проблем переиспользования уже написанного кода, не ломая его. АОП — это очередной серебряный костыль. Который пропадет, когда стандартная библиотека станет предоставлять как мелкие, так и крупные строительные блоки, программы будут верифицироваться по оставленным пользователем объявлениям, а компилироваться вообще не будут

ЗХ>
Почему?
Последняя фраза — это наполовину шутка. С большой долей правды.

B>>Это должно быть языковое средство. Которое уже реализовано в языках, владеющих своей метаинформацией и умеющих изменять свой код.

ЗХ>Вот.... так и знал.... Смолтолк?
Пока не люблю. Он страшный.
Люблю Python, Perl, C#.NET.
С и C++ тоже люблю, но за скорость и типобезопасность.
/bur
Re[4]: И снова АОП...
От: Зверёк Харьковский  
Дата: 20.11.04 18:25
Оценка:
Здравствуйте, buriy, Вы писали...

Нет, ты меня, конечно, извини, но продолжать эту ветку я не стану.
У нас слишком разное мировосприятие, а возрождать классический флейм статика vs. динамика я не готов — это здесь неоднократно обсуждалось существенно более компетентными, чем я, людьми.
Так что — .
сам слушаю и вам рекомендую: в тишине сижу
FAQ — це мiй ай-кью!
Re: И снова АОП...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.04 21:47
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Покопался с Aspect C++ и сложилось у меня два противоположных мнения одновременно.

ЗХ>

ЗХ>1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает... То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.
ЗХ>Средство типа таких вот, как обсуждалось в этой теме (даже в синтаксисе есть нечто общее): C++ dreams
Автор: c-smile
Дата: 27.10.04


Это особенность конкретной реализации. А вот дотнетовские CBO реализованы совершенно по другому, при этом это очень близкая к АОП технология.

ЗХ>Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?


Языковое. В этом и проблема существующих реализаций.
... << RSDN@Home 1.1.4 beta 3 rev. 231>>
AVK Blog
Re[5]: И снова АОП...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.11.04 21:51
Оценка: +2
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Меня просто смущает, что АОП называют парадигмой программирования.

ЗХ>Препроцессор же — не называют? И даже шаблоны — не называют? (то есть даже метапрограммирование — это вроде как не парадигма?)

Ну вот к примеру С++ можно реализовать как препроцессор к компилятору С. При этом, надеюсь, то что ООП это парадигма у тебя сомнений нет? Вот так и с АОП — можно реализовать и ввиде препроцессора, но для нормальной реализации нужно менять язык.
... << RSDN@Home 1.1.4 beta 3 rev. 231>>
AVK Blog
Re[5]: И снова АОП...
От: buriy Россия http://www.buriy.com/
Дата: 21.11.04 12:57
Оценка: 18 (1) -1
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Здравствуйте, buriy, Вы писали...


ЗХ>Нет, ты меня, конечно, извини, но продолжать эту ветку я не стану.

ЗХ>У нас слишком разное мировосприятие, а возрождать классический флейм статика vs. динамика я не готов — это здесь неоднократно обсуждалось существенно более компетентными, чем я, людьми.
Ну и не надо. Я сказал про статику и динамику только в ответ на твое высказывание о том, что шаблоны тут, по твоему мнению, не причем. Я все же надеюсь, что ты понял то, что я хотел сказать. Потому что иначе получается, что флеймы иногда необходимы
Более того, у меня нет гордости, поэтому я не отвечаю на придирки, стало быть, флейма не получится.
/bur
Re: И снова АОП...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.04 01:51
Оценка: 30 (2) +2
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Кошмарно флеймообразная тема, ну да ладно.

ЗХ>Покопался с Aspect C++ и сложилось у меня два противоположных мнения одновременно.
ЗХ>

ЗХ>1. с одной стороны, вся эта ваша АОП сильно напоминает сверхинтеллектуальный препроцессор. Просто до боли напоминает...

Это потому-что ты на С++ зациклен. А ты покопайся с такими реализациями как Spring, AspectDNG, которые реализуют АОП динамически.

Там кросивейшие решения есть по динамической конфигурации графов объектов (прямо в ХМЛ-файлах).

Aspect C++ — это статическая реализация. Причем довольно приметивная.

ЗХ>То есть это как бы некоторое надъязыковое средство; скорее, не парадигма, а тул.


Aspect C++ — это тул реализующий АОП для С++. А какой-нить CGG — это тул реализующий компиляцию С++.

ЗХ>Средство типа таких вот, как обсуждалось в этой теме (даже в синтаксисе есть нечто общее): C++ dreams
Автор: c-smile
Дата: 27.10.04


Мета-программирование — это более широкая фича. При хорошей реализации без труда реализует все возможности АОП. Но вот на чистом С++ ничего хорошего не выйдет. Средства мета-программирования на этом языке слишком убоги.

ЗХ>2. с другой стороны, я точно помню: Бьярне жаловался, что первые версии C++ тоже называли сверхинтеллектуальным препроцессором. Может, это тот же случай?


Ага. Когда люди не могут отделить реализации от парадигмы. Вот и м и мерешится, что увидинная ими реализация парадигмы — это некий препроцессор или еще что-то.

ЗХ>

ЗХ>Внимание, вопрос: АОП это все же языковое средство, требующее реализации (и стандартизации) в самом языке, или все же надъязыковое, которое должна предоставлять IDE?

Это парадигма. И реализовать ее можно сотней разных способов. Можно интегрировать в язык, можно реализовать средствами генераторов кода или мета-проргаммирования. А можно реализовать динамически с помощью динамических прокси и фабрик классов (но тут нужны развитые системы с метаданными и кодогенерацией в рантайме).
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.