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: