|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/400 03 Sep 2004 11:38:54 To : Alexey Gradovtsev Subject : Re: Вопросец -------------------------------------------------------------------------------- Alexey Gradovtsev -> Artem Chuprina @ Fri, 03 Sep 2004 00:00:07 +0400: AG>>> Что имеем в С++? STL, предоставляющий AC>> функциональных языках, где eval есть, либо встраивать в собственную AC>> программу интерпретатор C++). Hо сделать это со сравнимой AC>> эффективностью язык не позволяет. AG> Итак, основное преимущество интерпретируемых языков - это eval? :) Да. AG>>> Однако при всем при том в С++ все переопределяемо, а в эхотаге? Таких AG>>> возможностей существенно меньше. Или я ошибаюсь? AC>> В эхотаге уж чего-чего, а возможностей по переопределению больше. AC>> Hапример, можешь ты в C++ переопределить [] так, чтобы он не добавлял AC>> элемент к контейнеру, если его там нет? Без специальной обработки этого AC>> в типе покладаемого туда элемента? AC>> Это грабли, по которым я с полгода назад потоптался - вместо перлового AC>> if (defined(my $el = $container{$key})) AC>> приходится писать три довольно длинных строки - объявить итератор, AC>> вызвать find(), вызвать end(), сравнить. Можно, конечно, написать AC>> функцию, которая будет все это дело оборачивать, и даже объявить ее AG> [... Дальше неразборчиво ...] AG> Упс. И где тут переопределение [] ? if (defined (container[key])) - AG> это вовсе не переопределение, а вызов функции, как ты и AG> написал. Вся проблема в том, что сделать эту функцию в С++ нужно AG> самому, ну так и что с того??? В перле это переопределение обычно просто не требуется (что уже большое преимущество), а если требуется, то можно и переопределить. AG> А вот переопределить [] в С++ всегда запросто (контейнер ведь AG> всегда можно и самому сконструировать при желании!) Так, а вот этого не надо. Да, я могу сам сконструировать контейнер. Hо мы говорили о наличии уже готовых средств. AG> , и тогда запись: container[key] = "value"; будет иметь разные AG> последствия, определяемые программистом! А в перле? А в перле AG> остается только вызов функции if (defined ($container[$key])). Так мне не надо container[key] = "value". Мне надо if (Type value = container[key]). Ошибки в количестве знаков равенства нет. В C++ при этом автомагически будет создан container[key], что мне совсем не надо. AG> Впрочем, нет смысла сравнивать, что там в С и что в перле. Просто AG> факт есть факт: возможности одного языка ничуть не уступают AG> возможностям другого. Повторяю: теоретически. AC>> Главное же - это уже не STL, причем совсем. Готовое средство не то AC>> чтобы совсем непригодно для решения задачи (поддержку структуры AC>> контейнера я все-таки ему оставил), но непригодно для написания AC>> программы. AG> С чего это? Тебе дают готовые средства. Хочешь - пользуйся, а хочешь - AG> переписывай самостоятельно. Хочешь пользоваться - пользуйся. Хочешь, чтоб удобно было пользоваться - переписывай самостоятельно. Всё. AG> В перле второе просто отсутствует. Да ну!? И давно ты в последний раз perl видел? Hе меньше 10 лет назад, факт. AC>> C - язык для решения узкого круга задач закаленными профессионалами, C++ AC>> - вредный. Он, увы, не мертвый - писать на нем код сознательно учат. И AC>> это - диверсия в масштабах планеты. AG> :)) Ортодоксы были и есть везде и всегда. Интересно, что на эти AG> слова говорят в сишных эхах ;) Это я про С++, про С AG> согласен. Вопрос ведь не в языке, а в том, КОГДА удобнее на нем AG> писать. Так вот, во всех случаях, когда применяется C++, всегда найдется язык, на котором данную задачу решать более правильно. Причем я бы сказал, что можно сделать полное покрытие в этом смысле тремя языками - C, Lisp и Tcl. Хотя совсем не обязательно они будут наилучшими выборами. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/256060f25bf01.html, оценка из 5, голосов 10
|