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 [EMAIL PROTECTED] Programmer Office:7-(095)-785-09-72 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus
RE: What perl's bad for
# # Сравните это с # return "Form begins [cgi startmultipartform] form ends" # Речь -то идет, естественно, именно о return а не о print. # А смысл такой # print
RE: What perl's bad for
# # Ðе каÑиÑ. ÐопÑобÑй пÑоделаÑÑ Ñо же Ñамое Ñо ÑÑÑокой. Я Ñж не говоÑÑ # о более ÑложнÑÑ ÑлÑÑаÑÑ , Ñипа $cgi->start_multipart_form(). ÐÑк-бÑк ÑиÑали? $string = "...${\($cgi->start_multipart_form())}..."; или ÑеÑÑ Ð½Ðµ об Ñом? ÐÐХРне Ð´Ð»Ñ ÑÑого лиÑÑа ÑазговоÑ... --- Greg Belenky WebZavod (http://www.webzavod.ru) programmer # # # # -- # Victor Wagner [EMAIL PROTECTED] # Programmer Office:7-(095)-785-09-72 # Communiware.Net Home: 7-(095)-135-46-61 # http://www.communiware.net http://www.ice.ru/~vitus # # # -- # To UNSUBSCRIBE, email to [EMAIL PROTECTED] # with a subject of "unsubscribe". Trouble? Contact # [EMAIL PROTECTED] # #
Re: What perl's bad for
On Thu, 26 Oct 2000, Dmitry Maevsky wrote: > VW> > VW> Не катит. Попробуй проделать то же самое со строкой. Я уж не говорю > VW> о более сложных случаях, типа $cgi->start_multipart_form(). > > А в чем проблема??? строка длинная получается? Да. Когда таких строк у тебя в программе несколько сот, это крайне снижает ее удобочитаемость. > { my $result="Beginig"; > $result.=$cgi->start_multipart_form(); > $result.="Ending\n";} > (Правда я не вижу смысла в такой обработке $cgi-> :) > Так-что все катит и на ура. Сравните это с return "Form begins [cgi startmultipartform] form ends" Речь -то идет, естественно, именно о return а не о print. А смысл такой print
Re: What perl's bad for
On Thu, 26 Oct 2000 12:51:01 +0400 (MSD) Victor Wagner <[EMAIL PROTECTED]> wrote: VW> > а типа print "length of string".#$list." noless no more\n"; не катит? VW> VW> Не катит. Попробуй проделать то же самое со строкой. Я уж не говорю VW> о более сложных случаях, типа $cgi->start_multipart_form(). А в чем проблема??? строка длинная получается? { my $result="Beginig"; $result.=$cgi->start_multipart_form(); $result.="Ending\n";} (Правда я не вижу смысла в такой обработке $cgi-> :) Так-что все катит и на ура. __ Dmitry Maevsky Novgorod Datacom7-816-223-8474 __ Весело жить не запретишь, но можно сделать, что смеяться не захочется.
Re: What perl's bad for
On Thu, 26 Oct 2000, Dmitry Maevsky wrote: > From: Dmitry Maevsky <[EMAIL PROTECTED]> > Subject: Re: What perl's bad for > X-Mailer: stuphead version 0.4.5 (GTK+ 1.2.7; Linux 2.2.17; i586) > > On Thu, 26 Oct 2000 12:24:04 +0400 (MSD) > Victor Wagner <[EMAIL PROTECTED]> wrote: > > VW> puts "Length of list = [llength $list]" > VW> > VW> т.е. не подстановка _внешних_ команд, а подстановка перловых же команд, > VW> вызовов процедур, выражений. > > а типа print "length of string".#$list." noless no more\n"; не катит? Не катит. Попробуй проделать то же самое со строкой. Я уж не говорю о более сложных случаях, типа $cgi->start_multipart_form(). -- Victor Wagner [EMAIL PROTECTED] Programmer Office:7-(095)-785-09-72 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus
Re: What perl's bad for
On Thu, 26 Oct 2000 12:24:04 +0400 (MSD) Victor Wagner <[EMAIL PROTECTED]> wrote: VW> puts "Length of list = [llength $list]" VW> VW> т.е. не подстановка _внешних_ команд, а подстановка перловых же команд, VW> вызовов процедур, выражений. а типа print "length of string".#$list." noless no more\n"; не катит? __ Dmitry Maevsky Novgorod Datacom7-816-223-8474 __ A famous Lisp Hacker noticed an Undergraduate sitting in front of a Xerox 1108, trying to edit a complex Klone network via a browser. Wanting to help, the Hacker clicked one of the nodes in the network with the mouse, and asked "what do you see?" Very earnestly, the Undergraduate replied "I see a cursor." The Hacker then quickly pressed the boot toggle at the back of the keyboard, while simultaneously hitting the Undergraduate over the head with a thick Interlisp Manual. The Undergraduate was then Enlightened.
Re: What perl's bad for
> > 3. Интерфейс для писания C-шных расширений к перлу громоздок и сложен > > по сравнению с Tcl и Python. А сила скриптовых языков заключается ровно > > в том, что на них можно не делать то, что на них делать неэффективно. > > Надо юзать swig - он генерит врапперы для perl, tcl, python для С и С++ > кода. Кривизна перла заключается имено в необходимости юзать всякие h2xs и swig. В Tcl swig - откровенное излишество. Написать руками проще и легче добиться соответствия логики работы добавляемых команд логике языка. swig генерит врапперы 1:1 с сишным api, а интерфейс конкретного скриптового языка должен быть совсем другим. В качестве примера того как я считаю правильным писать врапперы вокруг C-шных функций для скриптовых языков см. мой tclsyslog. > > 4. И как же меня злит в перле отсутствие командной подстановки в строки... > > Это типа `date`? Нет, это типа puts "Length of list = [llength $list]" т.е. не подстановка _внешних_ команд, а подстановка перловых же команд, вызовов процедур, выражений. -- Victor Wagner [EMAIL PROTECTED] Programmer Office:7-(095)-785-09-72 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus
Re: What perl's bad for
On Thu, 26 Oct 2000, Victor Wagner wrote: > On Wed, 25 Oct 2000 [EMAIL PROTECTED] wrote: > > > From: [EMAIL PROTECTED] > > Subject: What perl's bad for > > > > A mozhno li bez flame war spokoyno i konstruktivno > > obyasnit` svoyu nepriyazn` k perl. Vot vse, chto ya nashel > > v seti po etomu povodu: > > ------------ > > What perl's bad for > > > > User interface design > Perl has Tk, but syntax is a bit ugly comparing with Tcl or Python, > Perl has Gtk, but its interface is no better than C interface, and one > expects more from scriting language. > > Perl has CDK (Curses development kit) and I've never seen anything > comparable for Tcl or Python or Scheme. > > > Proprietary file handling > > I've seen nothing better in scripting language land. > pack and unpack are cool. > > > Character-by-character processing > Any scripting language is bad for it. But typically > there are other ways to do same job. > > > > > int main(void) > > { > > int chars=0, words=0, lines=0, inwords=0, c; > > while ((c=getchar()) != EOF) { > > chars++; > > if (c=='\n') > > lines++; > > if (isspace(c)) > > inword=0; > > else if (!inword++) > > words++; > > } > > printf("%d %d %d\n", chars, words, lines); > > } > > while (<>) { > lines++; > chars+=length($_); > words+=scalar(split("\W+)); > } > print "lines=$lines words=$words chars=$chars\n"; > > На самом деле проблемы перла начинаются не с этого. > 1. There is more than one way to do it, and sometimes it might be > misleading. > 2. В синтаксисе есть множество исключений из правил. При написании > маленьких программ это удобно, при написании больших - приводит к > трудноустранимым ошибкам. Согласен - это напрягает. > 3. Интерфейс для писания C-шных расширений к перлу громоздок и сложен > по сравнению с Tcl и Python. А сила скриптовых языков заключается ровно > в том, что на них можно не делать то, что на них делать неэффективно. Надо юзать swig - он генерит врапперы для perl, tcl, python для С и С++ кода. > 4. И как же меня злит в перле отсутствие командной подстановки в строки... Это типа `date`? Легко написать процедуру которая будет допускать bash-like синтаксис для коммандной подстановки. Best regards, -Vlad
Re: What perl's bad for
On Wed, 25 Oct 2000 [EMAIL PROTECTED] wrote: > From: [EMAIL PROTECTED] > Subject: What perl's bad for > > A mozhno li bez flame war spokoyno i konstruktivno > obyasnit` svoyu nepriyazn` k perl. Vot vse, chto ya nashel > v seti po etomu povodu: > ------------ > What perl's bad for > > User interface design Perl has Tk, but syntax is a bit ugly comparing with Tcl or Python, Perl has Gtk, but its interface is no better than C interface, and one expects more from scriting language. Perl has CDK (Curses development kit) and I've never seen anything comparable for Tcl or Python or Scheme. > Proprietary file handling I've seen nothing better in scripting language land. pack and unpack are cool. > Character-by-character processing Any scripting language is bad for it. But typically there are other ways to do same job. > int main(void) > { > int chars=0, words=0, lines=0, inwords=0, c; > while ((c=getchar()) != EOF) { > chars++; > if (c=='\n') > lines++; > if (isspace(c)) > inword=0; > else if (!inword++) > words++; > } > printf("%d %d %d\n", chars, words, lines); > } while (<>) { lines++; chars+=length($_); words+=scalar(split("\W+)); } print "lines=$lines words=$words chars=$chars\n"; На самом деле проблемы перла начинаются не с этого. 1. There is more than one way to do it, and sometimes it might be misleading. 2. В синтаксисе есть множество исключений из правил. При написании маленьких программ это удобно, при написании больших - приводит к трудноустранимым ошибкам. 3. Интерфейс для писания C-шных расширений к перлу громоздок и сложен по сравнению с Tcl и Python. А сила скриптовых языков заключается ровно в том, что на них можно не делать то, что на них делать неэффективно. 4. И как же меня злит в перле отсутствие командной подстановки в строки... -- Victor Wagner [EMAIL PROTECTED] Programmer Office:7-(095)-785-09-72 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus
What perl's bad for
A mozhno li bez flame war spokoyno i konstruktivno obyasnit` svoyu nepriyazn` k perl. Vot vse, chto ya nashel v seti po etomu povodu: What perl's bad for User interface design Proprietary file handling Character-by-character processing int main(void) { int chars=0, words=0, lines=0, inwords=0, c; while ((c=getchar()) != EOF) { chars++; if (c=='\n') lines++; if (isspace(c)) inword=0; else if (!inword++) words++; } printf("%d %d %d\n", chars, words, lines); } - Hotelos` by vse taki uznat` chem zhe "mastitym" tak ne nravitsya perl. Potomu kak, esli na samom dele gadost`, to ... Esli rech zaydet o sravnenii ( a kak po drugomu to?), to luchshe navernoye rassmatrivat` tolko skriptoviye yaziki (yabloki - apel`siny). Spasibo. Igor. > > > > ?? -- ?? ;) > > ?? . - ???. ???, ??? ?? - ???, > ?? ?? ??? ?? ?. > > ??? ?? ? ? ??. , ??, python, ?? ? ??? ? ?? CPAN > ?? ?? ??. > > > > -- > Victor Wagner [EMAIL PROTECTED] > ProgrammerOffice:7-(095)-785-09-72 > Communiware.Net Home: 7-(095)-135-46-61 > http://www.communiware.net http://www.ice.ru/~vitus > >