[SP-pm] SaoPaulo-pm Digest, Vol 71, Issue 49

thiagoglauco at ticursos.net thiagoglauco at ticursos.net
Fri Aug 20 06:03:11 PDT 2010


Quoting Blabos de Blebe <blabos em gmail.com>:

> Crianças, crianças, acalmem-se.
>
> Linguagem imperativa é quase tudo igual. Muda só o label do token...
>
> Exceto por python (eu acho), você pode tornar código em qualquer
> linguagem tão obscuro quanto se queira, basta ser porco. E olha que
> parafraseando um amigo meu, tem programador que é tão porco que não
> serve nem pra torresmo. Mas estão aí fuçando bit...
>
  Eu achava que não estava brigando com ninguem!!!
>
>
> 2010/8/20 Pinguim Azul <bluepenguin em gmail.com>:
>> 2010/8/20 Thiago Glauco Sanchez <thiagoglauco em ticursos.net>:
>>> /*Duzentas linhas depois*/
>>> sun = is_sun;
>>> /*Imagina aqui, duzentas linhas de código depois... você vai pensar: sun é
>>> uma função de alguma biblioteca... ou é uma variável? */
>>> /*E sim... isso compila!!*/
>>
>> Se você usar -Werror isso não compila não.
>>
>> O seu ponto é que Perl pode ser mais legível que C mal-escrito? Até
>> aí, C é mais legível que Perl mal-escrito.

Não... mesmo que o C bem escrito. Meus exemplos é não foram bons.
Veja...

Vou pegar um exemplo do Kernighan - C ANSI, pg 13.

#include <stdio.h>

main(){
   int fahr;
   for(fahr = 0; fahr <=300; fahr = fahr + 20){
      printf("%3d %6.1f\n", fahr,(5.0/9.0) * (fahr - 32));
}
}

OK... pretty easy!!!

for (my $fahr = 0; $fahr <= 300; $fahr += 20){
      printf "%3d %6.1f\n", $fahr, 5/9 * ($fahr - 32)
}

melhorando ambos:

#include <stdio.h>

main(){
   int fahr;
   for(fahr = 0; fahr <=300; fahr += 20) printf("%3d %6.1f\n",  
fahr,(5.0/9.0) * (fahr - 32));
}



for (my $fahr = 0; $fahr <= 300; $fahr += 20) printf "%3d %6.1f\n",  
$fahr, 5/9 * ($fahr - 32);

A estrutura do Perl é semelhante a estrutura de idiomas reais,  
inclusive mais flexivel. Apenas este é o meu ponto. Não quero entrar  
no mérito que Perl é melhor que C ou vice-versa. São linguagens com  
paradigmas e histórias diferentes, criadas em contextos diferentes e  
ambas são importantes e necessárias no mundo Unix/Linux.

Meu argumento é: O Perl não tem um sintaxe estranha, e sim uma sintaxe  
otimizada para compreensão humana e praticidade do programador.

Algumas empresas usam o Perl como linguagem para prototipos antes de  
criar a versão final em C para testar a ideia e ver sua viabilidade  
comercial e depois criam uma versão final em C ou Java, por que é mais  
rápido criar programas em Perl do que em C ou Java e não sou apenas eu  
que penso assim.

Permitam que extraia um pedaço de texto do livro "The art of unix  
programming" que seria uma opinião imparcial:

14.4.1 C
Despite the memory-management problem, there are some application niches for
which C is still king. Programs that require maximum speed, have  
real-time require-
ments, or are tightly coupled to the OS kernel are good candidates for C.
...

14.4.4 Perl
Perl is shell on steroids <<<DISCORDO DO AUTOR AQUI>>>. It was  
specifically designed to replace awk(1), and expanded
to replace shell as the ?glue? for mixed-language script programming.  
It was first re-
leased in 1987.
     Perl?s strongest point is its extremely powerful built-in  
facilities for pattern-directed
processing of textual, line-oriented data formats; it is unsurpassed  
at this. It also in-
cludes far stronger data structures than shell, including dynamic  
arrays of mixed ele-
ment types and a ?hash? or ?dictionary? type that supports convenient  
and fast lookup
of name-value pairs.
     Additionally, Perl includes a rather complete and  
well-thought-out internal binding
of virtually the entire Unix API, drastically reducing the need for C  
and making
it suitable for jobs like simple TCP/IP clients and even servers.  
Another strong
advantage of Perl is that a large and vigorous open-source community has
grown up around it. Its home on the net is the Comprehensive Perl  
Archive Network
<http://www.cpan.org>. Dedicated Perl hackers have written hundreds of
freely reusable Perl modules for many different programming tasks.  
These include
everything from structure-walking of directory trees through X  
toolkits for GUI building, through excellent canned facilities for  
supporting HTTP robots and CGI
programming.
...



14.4.4.1. A Small Perl Case Study: blq

The blq script is a tool for querying block lists (lists of Internet  
sites that have been identified as habitual sources of unsolicited  
bulk email, aka spam). You can find current sources at the blq project  
page <http://www.unicom.com/sw/blq/>.

blq is a good example of a small Perl script, illustrating both the  
strengths and weaknesses of the language. It makes intensive use of  
regular-expression matching. On the other hand, the Net::DNS Perl  
extension module it uses has to be conditionally included >>>> isso  
acontece com bibliotecas de qualquer linguagem <<<<, because it is not  
guaranteed to be present in any given Perl installation.

blq is exceptionally clean and disciplined as Perl code goes, and I  
recommend it as an example of good style (the other Perl tools  
referenced from the blq project page are good examples as well). But  
parts of the code are unreadable unless you are familiar with very  
specific Perl idioms?the very first line of code, $0 =~ s!.*/!!;, is  
an example. While all languages have some of this kind of opacity,  
Perl has it worse than most.

Tcl and Python are both good for small scripts of this type, but both  
lack the Perl convenience features for regular-expression matching  
that blq uses heavily; an implementation in either would have been  
reasonable, but probably less compact and expressive. An Emacs Lisp  
implementation would have been even faster to write and more compact  
than the Perl one, but probably painfully slow to use.

14.4.4.2. A Large Perl Case Study: keeper

keeper is the tool used to file incoming packages and maintain both  
FTP and WWW index files for the huge Linux free-software archives at  
ibiblio. You can find sources and documentation in the search tools  
subdirectory of the ibiblio archive <http://www.ibiblio.org>.

keeper is a good example of a medium-to-large interactive Perl  
application. The command-line interface is line-oriented and patterned  
after a specialized shell or directory editor; note the embedded help  
facilities. The working parts make heavy use of file and directory  
handling, pattern matching, and pattern-directed editing. Note the  
ease with which keeper generates Web pages and electronic-mail  
notifications from programmatic templates. Note also the use of a  
canned Perl module to automate walking various functions over  
directory trees.

At about 3300 lines, this application is probably pushing the size and  
complexity limit of what one should attempt in a single Perl program.  
Nevertheless, most of it was written in a period of six days. In C,  
C++ or Java it would have taken a minimum of six weeks and been  
extremely difficult to debug or modify after the fact. It is way too  
large for pure Tcl. A Python version would probably be structurally  
cleaner, more readable, and more maintainable?but also more verbose  
(especially near the pattern-matching parts). An Emacs Lisp mode could  
readily do the job, but Emacs is not well suited for use over a telnet  
link that is often slowed to a crawl by server congestion....


  Embora eu discorde da opinião do autor que Perl tenha uma sintaxe  
estranha, que é o que estou tentando provar aqui... é muito mais fácil  
e rápido programar em Perl por que a estrutura do Perl é mais próxima  
da estrutura de um idioma real. Possui prefixos que indicam os tipos  
de token (@ $ %). Outra coisa são os castings de tipo... a real pain  
in the nuts para iniciantes em programação... Para iniciantes é muito  
mais simples usar uma linguagem que faça isso automaticamente. Isto  
também aproxima mais a linguagem do nível humano. Do contrário  
desenvolvimento em Perl não seria tão mais rápido que em C ou Java!!!



>>
>> --
>> Ricardo Bittencourt
>> http://www.ricbit.com
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>





More information about the SaoPaulo-pm mailing list