Re[10]: Сложный язык для сложных срограмм.
От: jazzer Россия Skype: enerjazzer
Дата: 30.01.07 15:10
Оценка: -1 :)
Здравствуйте, dmz, Вы писали:

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


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



J>>>>Когда метапрограммирование начало использоваться промышленно?



J>>Ну, я не помню там особого метапрограммирования. Рефлексия — да, была.


dmz>Согласно источникам, там еще были метаклассы.

Насколько я помню, они ничего не умели. В основном их функция сводилось к созданию новых объектов классов. Но могу и ошибаться.

J>>И потом, ну какой это промышленный язык? Когда количество проектов на нем хотя бы приближалось к количеству J>ООП-проектов на других ООП-языках?


dmz>А какие еще в 80-х были ООП языки? И каково было вообще количество проектов? Есть подозрение, что

dmz>сильно меньше, чем сейчас.

А причем тут сейчас? Вспомни, на какой тезис я отвечал. Короче, см. ответ Трурлю рядом

dmz>>>В принципе, кодогенерация это тоже, в некотором роде, метапрограммирование. А лет кодогенерации лет наверное немногим меньше, чем программированию.


J>>Метапрограммирование — это руление кодом программы из самого кода на этом же языке в той же самой программе.

J>>А кодогенерация — это кодогенерация, у нее свое место.

dmz>С тобой согласны не все:


dmz>

Metaprogramming is the writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at runtime during compile time. This allows programmers to produce a larger amount of code and get more done in the same amount of time as they would take to write all the code manually.


dmz>Да и из практических соображений, велика ли разница — сам язык предоставляет средства манипулирования порождаемым кодом, или внешний тул? Вот взять С — препроцессор, там, конечно, часть языка — но больших проблемах написать препроцессоров на чем угодно и использовать их — нет. Какая разница при этом? Родной препроцессор в принципе, сильно отличается от языка в целом. То же можно и сказать о шаблонах — они, согласно стандарту, часть языка — но при этом сильно отличаются от остального языка. Это целая новая концепция, с другими выразительными средствами и даже подходом.


Я объясню, в чем разница.
Препроцессор был тыщу лет, еще в Си.
Шаблоны — не тыщу, но для чего они использовались (и для чего были созданы)? Правильно, для обобщенных контейнеров и функций типа min/max. И не были они никакой "новой концепцией, с другими выразительными средствами и даже подходом".

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

Скажем, метапрограммирование с использованием препроцессора (Boost.Preprocessor) было возможно еще в Си.
И что, кто-то озаботился этим? Нет. Только в последнее время. Или, ты думаешь, шаблоны сразу разрабатывались как полный по Тьюрингу язык времени компиляции? Естественно, нет. Так почему же _сейчас_ все бросились использовать шаблоны и препроцессор для вещей, на которые они изначально не были рассчитаны? Ответ простой: потому что _сейчас_ стало ясно, что без этого не жить.

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

J>>А какая разница? И там, и там метапрограммирование.

J>>И Александреску совсем не был первым извращенцем, кстати

dmz>Ну разница где-то в том, что вычисление факториала числа в компайл-тайме

dmz>практически бесполезно, несмотря на то, что реализовано при помощи "метапрограммирования".

Это просто proof of concept. Поскольку вычисления ведутся на уровне типов, то результатом обычно являюются тоже типы.
Факториал — это просто демонстрация для тех, кто в жизни функционального программирования не видел. Сглаживание кривой обучения, так сказать — факториал рекурсивно считать умеют все. Реальное же использование всего этого дела — Boost.MPL.

J>>По количеству часов, отводимых на него, и количеству программистов, выпускавшихся специалистами по метаязыкам — J>что ,столько же ,сколько по С/С++/VB?


dmz>По количеству часов, честно говоря, не знаю. Знаю только, что в MIT CS учили с чего-то вроде схемы, по пути реализовав ее интерпретатор в рамках курса. А VB в штатах учат таксистов, на недельных курсах.

Я тоже видел пост об этом, но у меня сложилось впечатление, что речь шла о нынешнем времени, а не о времени создания С++. Опять же, могу ошибаться.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.