[Python] "Go or Unladen Swallow? " Cosa ne pensate ?

Daniele Varrazzo piro a develer.com
Mer 11 Nov 2009 17:24:52 CET


On Wed, 11 Nov 2009 16:32:09 +0100, Marco Mariani
<marco.mariani a prometeia.it> wrote:
> Daniele Varrazzo wrote:
>> pensoche nessun linguaggio come Erlang abbia bisogno di un "progetto
3K",
> 
> Compreso Javascript?

Fortunato bastardo, al calduccio del client side di un miliardo di browser
senza alcuna concorrenza :D

Se si dovesse davvero aprire una seria competizione in quell'ambiente
sarebbe spacciato :)

Mi sembra che la gente tenda a rimediare alla bruttezza del JS con
librerie o trattandolo come linguaggio macchina (GWT, Pijamas). Certe
oscenità sono incancellabili (variabili globali per default) ma per fortuna
il core della sintassi è abbastanza piccolo da poterci costruire su una
libreria e usare quella.

Comunque no, sebbene chi abbia progettato JS fosse lobotomizzato da un
linguaggio dalla sintassi ritardata (di almeno 20 anni già allora) come il
Java, ma dalla spinta commerciale inesorabile come è stata quella della
Sun, l'incoerenza di Erlang è qualcosa di diverso. Si vede semplicemente la
mano di troppa gente che ha scritto le librerie e di pochi utenti che le
hanno usate inizialmente, e di un dittatore pignolo come è stato Van
Rossum. Per esempio: tutti questi oggetti rappresentano array associativi,
e l'operazione è quella di ricerca di una chiave: i possibili risultati per
chiave trovata o non trovata sono:

   lists:keyfind(Key, N, TupleList) -> Tuple | false
   dict:find(Key, Dict) {ok, Value} | error
   proplists:lookup(Key, List) -> tuple() | none
   gb_trees:lookup(Key, Tree) -> {value, Val} | none
   ets:lookup(Tab, Key) [Value] | []
   dets:lookup(Name, Key) -> [Object] | {error, Reason}

Nota, oltre ai diversi valori di ritorno, l'uso disinvolto di singolari
(dict) o di plurali (lists, proplists), contenitori come primo (ets, dets)
o ultimo (lists, dict) parametro della funzione... Come facevo notare a
Lawrence mentre parlavamo del suo intervento al PyCon, le stesse primitive
di concorrenza (spawn(), receive, !) sono una funzione, una keyword e un
operatore. E ancora, il terminatore di riga può essere ".", "," o ";" a
seconda del contesto...

Certo devi sempre stare a guardare la documentazione per orientarti tra le
librerie, e ad ogni refactoring uno o due errori di compilazione ci
scappano. O un badmatch perchè il dict non andava più bene e l'hai
sostituito con una tavola ets. Ma se perdoni questi problemi e il programma
parte... gli perdoni tutto con le lacrime agli occhi :D

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python