python, perl6 January 14, 2006 12:30 am (Save post)
Un nuovo articolo su perl6, per chi non avesse mai voluto indagare sul perché sia necessario un perl nuovo, e volesse saperne di più è un’ottima lettura.
Perché io, di fondo, guardo con ammirazione a perl6.
Fondamentalmente perché contiene tutto, ma in un modo molto.. beh.. perlish.
Ad esempio, perl6 ha le macro, come lisp o dylan, ma le macro non nascono dall’idea (che è ovvia in lisp) di manipolare direttamente l’albero sintattico (perché, suvvia, la sintassi dei dialetti lisp è una metasintassi), bensì partendo da quello che il perl ha sempre fatto, e che è poi una delle idee fondamentali che si sono propagate a ruby/python/php/etc, ovvero manipolare stringhe tramite espressioni regolari.
Ok, le regexp in perl6 sono una cosa che non c’entra niente con quelle di perl5, eppure sono una evoluzione abbastanza naturale di quelle.
E poi ci sono i multimetodi. Non mi spiego come uno possa progettare un linguaggio moderno senza multimetodi, ma questo è materiale per un altro post. E ci sono le junction!
Ma la cosa davvero interessante è che perl6/parrot sono stati vaporware per un lunghissimo tempo, ed ora comincianmo a materializzarsi. È uscito da poco parrot 0.4.1, che comincia ad essere usabile, e non solo, parlando di performance va già come un treno.
Intermezzo
Ah, ho detto di recente che cosa fichissima è YARV?
Ho anche inviato una patch di una (1) linea.
Il che per uno che non ha ancora capito una mazza del codice è una cosa notevolissima. Di nuovo c’è il fatto che sembra finalmente qualcuno si sia messo a ripulire il codice per eliminare i warning.
Mi chiedo se potranno mai essere rimossi quelli relativi all’uso di longjmp ma in fondo chi se ne frega.
Nel frattempo, in un posto lontano
Ho anche dato un’occhiata al What’s new in python 2.5 , che è molto succulento.
La prima cosa di cui si parla è la possibilità di effettuare currying, o “applicazione parziale” tramite una funzione di libreria.
Per chi non sapesse così, è un’idea assolutamente semplice e geniale che viene dai linguaggi funzionali e che consiste nel creare una funzione partendo da una esistente e passandogli solo un po’ di argomenti.
Ad esempio, una cosa così:
def stampa(s1,s2): print s1,s2 stampa_hello=partial(stampa,s1=\"Hello\") stampa_hello(\" world\") #=> \"Hello World\"
Sapete qual’è la cosa interessante? Non tanto che questo meccanismo sia finito nella libreria standard di python, ma che sia builtin in perl6
. Ah, le affinità elettive.
L’altra cosa che ho trovato interessante è il pacchetto di cambiamenti relativi ai generatori.
Il più lampante è che yield diventa un’espressione invece che essere uno statement.
Il che in sostanza vuol dire poter scrivere:
def stuff(): res= yield value
non dirò che ruby funziona già così, perché non è vero, ma diciamo che ci si è avvicinati un po’.
E pure questo c’è in perl6.
Ed anche se nel documento non c’è, pare che py 2.5 avrà anche una espressione condizionale ternaria, la possibilità di scrivere:
foo= if condizione allora qualcosa else altro
Insomma quello che in C e derivati è foo?bar:baz.
La sintassi è diversa ma il risultato uguale.
Ah, le affinità elettive.

