[Linuxtrent] Re: W Perl ;)

  • From: Daniele Nicolodi <daniele@xxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Thu, 30 Sep 2004 19:01:20 +0200

On Thu, Sep 30, 2004 at 04:02:11PM +0200, Luca Manganelli wrote:
> Daniele Nicolodi wrote:

Interpreto l'omissione di repliche ai punti 1 e 2 come amissione che su
quei puinti ho ragione ?


> >3. Implementazione del paradigma ad oggetti a dir poco penosa.
> > 
> >
> Vedremo con Perl 6.

Se è per quello dicono che tra poco ci sarà un linguaggio che si scrive
da solo... Limitare la discussione a quello che esiste mi sembra un
ottimo inizio per avere commenti il più possibile oggettivi.

> >4. Mancanza delle eccezzioni che unita alla mancanza di tipi rende un
> >  casino ritornare qualcosa di consistente da una funzione.

> Basta usare eval.

Eval può in qualche modo sopperire ma non permette di trappare le
eccezzioni condizionatamente. O tutto o niente non è sempre quello che
si desidera.

> >5. Pretesa di essere un linguaggio "all inclusive". Alla fine se vai
> >  fuori da quelle quattro cose che fai tutti i giorni devi stare
> >  semrpe con il manuale sottomano.
> > 
> Anche con Python e PHP e' cosi'.

Forse con PHP si, sicuramente non con python. Per il motivo occorrerebbe
sapere che cosa è l'introspezione...

> >6. Mancanza di una qualsiasi forma di introspezione. Una delle migliori
> >  features del python.
> > 
> Cosa e'?

Mi viene in mente un articolo che è girato in lista qualche tempo fa che
diceva come solo chi conosce linguaggi di programmazione più evoluti
riesca a comprendere le limitazioni di quelli meno evoluti...

> In effetti, bisognerebbe usare ActiveState Komodo (a pagamento) che 
> include un ottimo Regular Expression Editor.

Anche emacs include un regular expression editor ma non è assolutamente
la soluzione del problema per non avere un interprete interattivo.


> >8. Sintassi mostruosa. Questo è un programma perl valido:
> >
> >   #!/usr/bin/perl
> >
> >   $b = { "c" => [ { "a" => 1 } ] };
> >   $a = [ keys(%{shift(@{$b->{'c'}})}) ];
> >   print join("\n", @{$a}), "\n";
> >
> >  ma capire che cosa fa non mi pare assolutamente semplice.
> > 
> Questo e' un problema di chi scrive codice, non del perl.

No. È un problema del perl che costringe ad utilizzare sintassi
astrusissime per fare anche delle cose banali. Per esempio mi viene in
mente il metodo per sapere la lunghezza di un array:

$len = scalar(@array);

ma era diffcile introdurre una funzione len() ? E poi tutto sto casino
dei reference e no reference che per farli e disfarli ci si incasina
sempre... tutto perchè in realtà per l'interprete tutti i dati sono
stringhe!

Lo stesso codice di cui sopra in python diventa:

  #!/usr/bin/env python2
 
  b = { 'c': [ { 'a': 1 }, ] }
  a = b['c'].pop(0).keys()
  print '\n'.join(a), '\n'

che non dico sia chiarissimo ma a me risulta molto più leggibile.

Ciao
-- 
Daniele

   Physics is like sex. Sure, it may give some practical results, but
   that's not why we do it.                     -- Richard P. Feynman
-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: