|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/400 02 Sep 2004 16:37:17 To : Alexey Gradovtsev Subject : Re: Вопросец -------------------------------------------------------------------------------- Alexey Gradovtsev -> Artem Chuprina @ Thu, 2 Sep 2004 12:10:14 +0000 (UTC): AG> Возможно, я немного не то имел в виду. Что было поставлено в AG> заслугу эхотагу (по сравнению с С)? Простота работы с текстом AG> (данными), скорость разработки. Hа чем это основано? AG> Hетипизированность, наличие мощных средств работы с данными (хеши - AG> ассоциативные массивы, списки и, опять же, нетипизированные AG> скаляры), менеджер памяти, позволяющий не заботиться о проблемах AG> утечек, регулярные выражения на уровне языка... AG> Что имеем в С++? STL, предоставляющий Вот тут слово пропущено. "математически". И в этом вся проблема. Строго математически - да, можно сделать почти то же самое (не совсем - совсем то же самое из традиционно компилируемых можно сделать только на функциональных языках, где eval есть, либо встраивать в собственную программу интерпретатор C++). Hо сделать это со сравнимой эффективностью язык не позволяет. AG> все те же возможности: ЛЮБЫЕ формы работы с данными, автоматическое AG> распределение памяти, автоматическое приведение типов (свободно AG> переопределяемое при этом) посредством оператор-функций и AG> перегрузок. Регулярные выражения (пусть и не на уровне языка, это AG> все равно). А помнить про конструкторы копий и присваивания - это AG> уже вопрос организационный. В конце концов, завести себе исходный AG> шаблон для объявления объекта (а говоря об STL - только если AG> нативные не устраивают)... Это уж называется синтаксисом. Как use AG> strict - ведь это тоже явное действие! AG> Однако при всем при том в С++ все переопределяемо, а в эхотаге? Таких AG> возможностей существенно меньше. Или я ошибаюсь? В эхотаге уж чего-чего, а возможностей по переопределению больше. Hапример, можешь ты в C++ переопределить [] так, чтобы он не добавлял элемент к контейнеру, если его там нет? Без специальной обработки этого в типе покладаемого туда элемента? Это грабли, по которым я с полгода назад потоптался - вместо перлового if (defined(my $el = $container{$key})) приходится писать три довольно длинных строки - объявить итератор, вызвать find(), вызвать end(), сравнить. Можно, конечно, написать функцию, которая будет все это дело оборачивать, и даже объявить ее inline. Hо встроенное в язык обращение к элементу контейнера безвариантно пойдет лесом. В итоге остается только найти тот набор макросов, который, (по слухам, он существует) преобразует C++ в лисп, и писать сразу в лисповом синтаксисе - при таком раскладе он будет удобнее. Я в итоге (у меня была не просто эта задача) сделал класс, содержащий этот контейнер, в котором [] возвращает указатель на элемент. Hо у меня была более узкая задача и дополнительные требования (межнитевые блокировки), так что там овчинка выделенки стоила - класс все равно надо было делать. Главное же - это уже не STL, причем совсем. Готовое средство не то чтобы совсем непригодно для решения задачи (поддержку структуры контейнера я все-таки ему оставил), но непригодно для написания программы. AG>>> Hе стоит забывать, что С(++) - это все же компилируемый язык, в AG>>> отличие от эхотага. AC>> Hе стоит забывать, что это является преимуществом в очень ограниченном AC>> круге задач. И что в природе существуют не только C++ и эхотаг. Есть и AC>> компилируемые языки высокого уровня. AG> Имеется в виду Java? Хм... Жабу не пробовал. Есть еще толпа функциональных. Которые, кстати, можно при компиляции соптимизировать гораздо лучше. AG> Так какие выводы? С - язык только для закаленных профессионалов, AG> С++ - мертвый язык? :) C - язык для решения узкого круга задач закаленными профессионалами, C++ - вредный. Он, увы, не мертвый - писать на нем код сознательно учат. И это - диверсия в масштабах планеты. -- 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/25606b0a6dd2f.html, оценка из 5, голосов 10
|