Re[16]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.01.05 23:29
Оценка: :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Никакая это не метапрограмма, самая обычная абстракция. Давай выкинем шаблоны, но, скажем, оставим итератор для самописного контейнера VectorInt, повторяющего функциональность std::vector<int>. В этом случае его итератор по-прежнему VectorInt::Iterator является метапрограммой?


В этом случае все без особых проблем реализуется на шарпе.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[17]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 09.01.05 23:47
Оценка: :))
AndrewVK,

> ПК> Никакая это не метапрограмма, самая обычная абстракция. Давай выкинем шаблоны, но, скажем, оставим итератор для самописного контейнера VectorInt, повторяющего функциональность std::vector<int>. В этом случае его итератор по-прежнему VectorInt::Iterator является метапрограммой?


> В этом случае все без особых проблем реализуется на шарпе.


Ну и что? От этого действия, выполняемые итератором, равно как и вид результирующей программы ни на йоту не изменятся. Или все, что реализуемо на C++, но не реализуемо на C# является метапрограммированием?
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[18]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.01.05 23:55
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> В этом случае все без особых проблем реализуется на шарпе.


ПК>Ну и что?


А то, что исходная мысль была о том, что большинство отличий в возможностях шаблонов имеют практическое значение при метапрограммировании, а не при дженерик-программировании. Сам по себе итератор конечно не метапрограмма, но такой же итератор реализуется и на шарпе. Метачастью является функциональный стиль использования итератора — не выполняющий реальной работы, зато улучшающий синтаксис применения.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[19]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 10.01.05 00:56
Оценка: 3 (1)
AndrewVK,

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


Эта мысль не совсем верна. В том смысле, да некоторая часть отличий относится к метапрограммированию, но итераторы к этому никаким боком, пожалуй, как и очень многое из "большинства" отличий шаблонов С++ от C# generics.

> Сам по себе итератор конечно не метапрограмма, но такой же итератор реализуется и на шарпе. Метачастью является функциональный стиль использования итератора — не выполняющий реальной работы, зато улучшающий синтаксис применения.


Да, согласен, данный стиль Шарпом не поддерживается. Но это просто стиль, не метапрограмма. Если бы речь шла об итерации по списку типов во время компиляции, я бы, пожалуй, с тобой согласился.

Об улучшении же синтаксиса применения... Если пойти по этой дорожке достаточно далеко, то мы дойдем до того, что все языки программирования высокого уровня по большому счету являются не более чем syntactic sugar над ассемблером.

И, хотя по большому счету мне все равно, назовешь ли ты такой стиль программирования "улучшением синтаксиса применения", т.к. мне и другим, кто его предпочитает, это помогает быстрее и с большим удовольствием писать более понятные (*) и более легко сопровождаемые (**) программы, все же замечу, что грань между "улучшением синтаксиса" и "выполнением работы" на первый взгляд подчас бывает очень тонкой.

Например, for each в C# — это улучшение синтаксиса или не только? А перегрузка функций? А неявный боксинг? А операторы + — и т.п. вместо функций Add, Substract и т.п.? А properties? А enums? А цикл for (ведь достаточно while)? А оператор switch (ведь достаточно (if ... else if ...)? Если зайти достаточно далеко, то C# generics почти целиком можно списать на улучшение синтаксиса, т.к. значительная их часть сводится к автоматизации приведения типов.

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



(*) Возможно, не для всех.
(**) Наверняка, не всеми.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[7]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 10.01.05 01:15
Оценка: +2
_FRED_,

> Начал замечать за собой такую неприятную ( ) особенность — вместо того чтоб десятый раз пробежаться глазами по строкам, руки тянутся нажать Build и сразу получить все (ну конечно же не все, но...) ответы.


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

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

Возможно, это субъективно, но в последнем случае у меня доверие к коду намного выше, чем если он был получен ковырнадцатью циклами compile & fix.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[20]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.05 01:22
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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


ПК>Эта мысль не совсем верна. В том смысле, да некоторая часть отличий относится к метапрограммированию, но итераторы к этому никаким боком, пожалуй, как и очень многое из "большинства" отличий шаблонов С++ от C# generics.


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

ПК> Но это просто стиль, не метапрограмма.


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

ПК>Об улучшении же синтаксиса применения... Если пойти по этой дорожке достаточно далеко, то мы дойдем до того, что все языки программирования высокого уровня по большому счету являются не более чем syntactic sugar над ассемблером.


Если выкинуть рантайм. А так да — большинство фич С++ и многие фичи C# можно трактовать как "не более чем syntactic sugar над ассемблером".

ПК>И, хотя по большому счету мне все равно, назовешь ли ты такой стиль программирования "улучшением синтаксиса применения", т.к. мне и другим, кто его предпочитает, это помогает быстрее и с большим удовольствием писать более понятные (*) и более легко сопровождаемые (**) программы, все же замечу, что грань между "улучшением синтаксиса" и "выполнением работы" на первый взгляд подчас бывает очень тонкой.


Ты опять мою мысль не понял. Мне пофигу как это называть. Речь о другом — достижение подобного при помощи шаблонов очень фиговый способ. Более правильным было бы наличие чистых дженериков без побочных эффектов + специализированные средства метапрограммирования, как например в OpenC++, XC#, R# наконец. Вот только чтобы это была стандартная фича языка, а не стороннее средство.

ПК>Например, for each в C# — это улучшение синтаксиса или не только?


Улучшение синтаксиса.

ПК> А перегрузка функций?


Тут не понял. Перегрузка функций это скорее отсутствие запрета, нежели нарошная фича. Если же речь не о перегрузке как таковой, а о статическом полиморфизме, с этим связанном, то да, это именно что синтаксис.

ПК> А неявный боксинг?


А это уже фича рантайма.

ПК> А операторы + — и т.п. вместо функций Add, Substract и т.п.?


Чисто синтаксическая фича к сожалению.

ПК> А properties? А enums?


Поддерживается рантаймом.

ПК> А цикл for (ведь достаточно while)?


Тоже синтаксис. В IL никакого for нет. Офф: знаешь откуда синтаксис for взялся? Практически 1 в 1 скопированно с соответствующего макроса макроассемблеров.

ПК> А оператор switch (ведь достаточно (if ... else if ...)?


Смотря какой.

ПК> Если зайти достаточно далеко, то C# generics почти целиком можно списать на улучшение синтаксиса,


Дженерики нельзя — нужна довольно серьезная поддержка рантайма.

ПК> т.к. значительная их часть сводится к автоматизации приведения типов.


Не все так просто. Достаточно вспомнить к примеру о том что дотнет на 100% динамически типизированный.

А вобще я не понимаю к чему этот спор о терминах. Называй как хочешь — суть то от этого не меняется.

ПК>Имхо все это неверно, т.к. все эти вещи, равно как и многие отличия шаблонов C++ от C# generics, позволяют использовать какие-то новые идиомы, и, соответственно, просто к "улучшению синтаксиса применения" не сводятся. По-моему, грань, отделяющая "улучшение синтаксиса" от "выполнения работы" как раз и лежит там, где добавление новых выразительных средств приводит к качественному изменению языка, давая пространство для новых идиом и стилей программирования.


Я тебе даже больше скажу — улучшение синтаксиса это тоже выполнение работы, поскольку доля тривиального (в смысле слабо смыслонаполненного) кода в современных программах все еще довольно высока. Мне не нравится использование для этой работы шаблонов, как впрочем и рантайм фишек в случае дотнета, поскольку плюсовые шаблоны приводят к страшно мутному коду и отвратительной работе интеллисенса сотоварищи, а рантайм решения дотнета иногда заметно сказываются на производительности и посему требуют более сложных алгоритмов для сохранения приемлемой эффективности. Но в любом случае — от отсутсвия плюсовых вывертов в дотнетных дженериках я не страдаю и даже этому рад.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[11]: Экспорт шаблонов
От: alexeiz  
Дата: 10.01.05 01:22
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>Проблема только в том, что определить грань между generic программированием и метапрограммированием далеко не всегда легко.


MS>Точно! Может скажу и не в кассу, но слово "метапрограммирование" во мне до сих пор вызывает какой-то ступор, почти как "контрреволюция" — совершенно не понятно, что под ним скрывается. С этой точки зрения термин "generic" — гораздо более удачен. Есть сильное подозрение, что он рассчитан на профанов типа меня, не понимающих слова "метапрограммирование"


Купи книжку "C++ template metaprogramming", и всё поймёшь. Я недавно смотрел. Интереснейшая вещь. Там есть глава "Алгоритмы". Я думаю "ну, с алгоритмами я знаком". Не тут-то было. Там все те же концепции из STL, только ... в compile-time. Вектора, списки, итераторы, алгоритмы — всё над типами, всё в compile-time. Даже специальная глава про отладку есть... Мне теперь понятно стало, почему Александреску сейчас многопоточным программированием занимается.
Re[21]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.05 01:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:


ПК>> А неявный боксинг?


AVK>А это уже фича рантайма.



Тут наврал — неявный это именно что синтаксис. Для дотнета, как такового боксить надо явно.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[8]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.05 01:31
Оценка: +2 :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Возможно, это субъективно, но в последнем случае у меня доверие к коду намного выше, чем если он был получен ковырнадцатью циклами compile & fix.


Зависит от задачи. Если задача вобщем то ясна, то я могу день писать код без компиляции (раньше использовал изредко, просто чтобы проверить синтаксис, но решарпер позволяет обходится без). А вот если пишешь скажем плагин к студии, то там без массы компиляций и отладки не проживешь, поскольку никакие напряжения мысли не помогут проникнутся особенностями поведения студийного API.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[21]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 10.01.05 01:47
Оценка:
AndrewVK,

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

> ПК> А перегрузка функций?

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

Похоже, я понял; у тебя разделение между "улучшением синтаксиса" и "выполнением работы" проходит по грани: поддерживатся ли данная "фича" языком или средой исполнения. Мне с такой дихотомией согласиться сложно.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Экспорт шаблонов
От: Павел Кузнецов  
Дата: 10.01.05 01:50
Оценка:
alexeiz,

> Купи книжку "C++ template metaprogramming", и всё поймёшь. Я недавно смотрел. <...>


Ну просто чудеса! Автор еще свою книжку в напечатанном виде от издательства не получил, а народ уже обсуждает

P.S. Я верю, верю, просто забавно
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Экспорт шаблонов
От: McSeem2 США http://www.antigrain.com
Дата: 10.01.05 03:01
Оценка: :)
Здравствуйте, alexeiz, Вы писали:

A>Купи книжку "C++ template metaprogramming", и всё поймёшь. Я недавно смотрел. Интереснейшая вещь.


Верю. Я просто придираюсь к приставке "мета-". Метапрограммирование по большому счету означает "программирование программирования" и является оксимороном. На мой взгляд люди, оперирующие этим термином слишком много на себя берут, в то время как в реальности все гораздо проще. Вообще, за что я не люблю Алесандреску, Абрахамса и прочих (но уважаю!) — так это за стремление усложнять то, что на самом деле является простым. И еще — за попытки перепрыгнуть через голову C++. Я не против таких попыток и очень их уважаю, но не люблю, когда это все выдается за абсолютную истину. А у них — именно такой агрессивный стиль, типа если ты не можешь понять boost::iterator_adaptor или Loki, значит ты — лох и неуч. Но, думаю, что подобная агрессивность имеет смысл — она стимулирует.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[13]: Экспорт шаблонов
От: c-smile Канада http://terrainformatica.com
Дата: 10.01.05 03:52
Оценка: :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>alexeiz,


>> Купи книжку "C++ template metaprogramming", и всё поймёшь. Я недавно смотрел. <...>


ПК>Ну просто чудеса! Автор еще свою книжку в напечатанном виде от издательства не получил, а народ уже обсуждает


Тем не менее список errata уже успешно стартовал
http://boost-consulting.com/tmpbook/
Re[13]: Экспорт шаблонов
От: c-smile Канада http://terrainformatica.com
Дата: 10.01.05 04:43
Оценка: 73 (4) +3 :)))
Здравствуйте, McSeem2, Вы писали:

MS>Верю. Я просто придираюсь к приставке "мета-". Метапрограммирование по большому счету означает "программирование программирования" и является оксимороном. На мой взгляд люди, оперирующие этим термином слишком много на себя берут, в то время как в реальности все гораздо проще....


Есть сообщество людей которые в голове держат C++ template компилятор (у них там есть место свободное под него) и у которых есть время заниматься этим странным делом — программированием на фрагменте мета языка совершенно для того (программирования) не приспособленном.

На самом деле польза от этого есть — в борьбе со змием вырабатываются концепции и требования к будущей стройной концепции.
Хочется верить что творцы (в хорошом смысле) boost со товарищи не растратили себя до конца в героическом преодолении трудностей.
Хотелось бы чтобы они отдавали себе отчет что это не более как эксперимент к реальной
жизни пока не относящийся. И в книжках писали соответсвующим образом не дуря голову окружающим. Ни один нормальный практик не станет использовать мета конструкции поведение которых он не в состоянии предсказать за 10 минут чтения оных.

А так как мы с тобой "вышли из народа" — сиречь программисты-практики то:

"Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий "

Т.е. для тех задач которые мы пишем достаточно использования templates по их прямому назначению и в классической позе.
А мета генераторы в стиле HTML-generated-by-PHP мы и так себе можем сваять если нам надо (PHP с Апачем хотя бы варнинги на человеческом языке пишут). Не биг дил.

Правда хочется иногда прыстально так глянуть в лицо комитету и спросить "где например метафункция is_pod_type() или там type_info времени компиляции, господа писатели? Доколе в эмпиреях парить будем?" но это так, опционально, хотя тортик для встречи я уже припас.
Re[9]: Экспорт шаблонов
От: migel  
Дата: 10.01.05 07:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>Возможно, это субъективно, но в последнем случае у меня доверие к коду намного выше, чем если он был получен ковырнадцатью циклами compile & fix.


AVK>Зависит от задачи. Если задача вобщем то ясна, то я могу день писать код без компиляции (раньше использовал изредко, просто чтобы проверить синтаксис, но решарпер позволяет обходится без). А вот если пишешь скажем плагин к студии, то там без массы компиляций и отладки не проживешь, поскольку никакие напряжения мысли не помогут проникнутся особенностями поведения студийного API.

Не забудь добавить лом и такую-то матерь
... << RSDN@Home 1.1.4 beta 3 rev. 273>>
Re[22]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.05 11:57
Оценка: :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Похоже, я понял; у тебя разделение между "улучшением синтаксиса" и "выполнением работы" проходит по грани: поддерживатся ли данная "фича" языком или средой исполнения. Мне с такой дихотомией согласиться сложно.


Не соглашайся. Это что то меняет? На самом деле основные мысли были в конце сообщения, а что называть улучшением синтаксиса, а что нет мне вобщем то в контексте обсуждаемого вопроса все равно. Я просто предложил формальный признак.
... << RSDN@Home 1.1.4 beta 3 rev. 272>>
AVK Blog
Re[9]: Экспорт шаблонов
От: prVovik Россия  
Дата: 10.01.05 18:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Зависит от задачи. Если задача вобщем то ясна, то я могу день писать код без компиляции

ИМХО, это нехорошо, потому что трудно тогда баги искать.
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[10]: Экспорт шаблонов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.05 19:17
Оценка: +1 :)
Здравствуйте, prVovik, Вы писали:

AVK>>Зависит от задачи. Если задача вобщем то ясна, то я могу день писать код без компиляции

V>ИМХО, это нехорошо, потому что трудно тогда баги искать.

Какие баги? У меня никаких багов нет, все работает сразу
... << RSDN@Home 1.1.4 beta 3 rev. 274>>
AVK Blog
Re[11]: Экспорт шаблонов
От: prVovik Россия  
Дата: 10.01.05 19:34
Оценка: :))
Здравствуйте, AndrewVK, Вы писали:

AVK>Какие баги? У меня никаких багов нет, все работает сразу


Чую, чую! Оберона духом пахнет!
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[11]: Экспорт шаблонов
От: McSeem2 США http://www.antigrain.com
Дата: 10.01.05 20:11
Оценка: :)))
Здравствуйте, AndrewVK, Вы писали:

AVK>Какие баги? У меня никаких багов нет, все работает сразу




Навеяло диалог с нашим начальником по поводу утечек памяти:

Начальник:
— My code doesn't leak ever. Period.

Подчиненный:
— What code?

Дело в том, что был период, когда начальник не написал ни строчки кода в течение полугода...
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.