[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: What perl's bad for



On Thu, 26 Oct 2000, Greg Belenky wrote:

> #   Например, в Tcl нет встроенного unless, но я могу написать
> #   proc unless {condition args} {
> #     eval if [list !$condition] $args
> #   }
> #   и получить конструкцию неотличимую по использованию от стандартного if.
> 
> это не + Tcl. в Паскале, например, тоже нет unless.
> не думаю, что eval ускорит выполнение программы, легче if с ! написать.

На самом деле и не замедлит. args это уже список. Так что сливать/парсить
его не придется. Кстати, в perl есть конструкция 
eval {
};  которая тоже ничего не замедляет. Просто семантика у Tcl-евского
и перлового eval заметно разная.



 
> #   Благодаря этому в TclX есть такие симпатичные конструкции как
> #   for_recursive_glob file pattern {
> #      do_something with $file
> #   }
> #
> 
> ну и чего такого? насколько я понял - обработка файлов, удовлетворяющих
> паттерну? никогда про процедуру find в перле не слышали?

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

Это намного удобнее для конечного пользователя, если данный скриптовый
язык используется как макроязык встроенный в некоторое большое приложение.
   
> #   И еще я обожаю писать процедуры  нотификации об ошибке, которые
> #   по возвращении вызывают return из вызвавшей процедуры.
> 
> а если ошибка возникла на 666 рекурсивном вызове и повлияла на результат
> предыдущих 665? что будет тогда?

Тогда надо использовать нормальные exception.

А описанную конструкцию я обычно использую в обработчиках событий.
Кстати, посредством встроенного event-loop в Tcl  очень легко реализуется
хвостовая рекурсия, а также циклы работающие в фоновом режиме (без всяких
нитей).

> 
> die, warn, carp понятнее...

Привычнее. А у меня бывают ситуации когда мне нужно то то, то другое.
 
Ох, если бы я писал Communiware на tcl, не извращался бы я с парсерами,
а просто делал бы шаблонам eval в slave interpreter-е из которого
старательно удалены все потенциально-опасные команды.

Но, у perl есть и преимущества, и они в тот момент, когда принималось
решение, перевесили. 
-- 
Victor Wagner			vitus@ice.ru
Programmer			Office:7-(095)-785-09-72
Communiware.Net 		Home: 7-(095)-135-46-61
http://www.communiware.net      http://www.ice.ru/~vitus



Reply to: