pmontrasio / rubynights-20170301

3 stars 2 forks source link

Least surprise #11

Closed keobox closed 7 years ago

keobox commented 7 years ago

Dire che in Ruby il paradigma "least surprise" è rispettato più che in Python mi sembra un poco "forzato". Sembra una critica verso Ruby fatta da Pythonisti al contrario.

Allora partendo proprio da zero potrei anche dire che se invoco "python" da una shell e mi parte un interprete è senz'altro meglio che invocare "irb" al posto di "ruby" per avere la stessa cosa.

Potrei dire che avere "$" "@" davanti alle variabili non mi sembra molto comodo. Potrei dire che avere le stringhe mutabili mi sembra grave. Potrei dire che una lista vuota in un if deve valere false, non true.

Tutte queste cose mi sembrano più "sorprendenti" dei controesempi Python.

pmontrasio commented 7 years ago

Aggiunta sezione sui sigil [master 9fd055b]

Delle strighe im/mutabili ho scritto in 0558c8aaf9da5fd2c7f8caf3edd78b821f936885

Che lista vuota sia falsy in Python non lo sapevo e non l'immaginavo. Sono andato a cercare e ho imparato cos'altro sia falsy.

Tendenzialmente mi piace che in un linguaggio l'unico truthy sia true (molto scomodo però) e l'unico falsy sia false. Mi piace poco che in Ruby nil sia falsy (in fondo c'è .nil?) e il povero zero cos'avrà di speciale se non essere il valore che il linguaggio macchina usa per false? :-)

Ho aggiunto la sezione falsy / truthy [master 55f27cf]

Vero per ruby/irb. Forse Matz ha copiato quel che fa perl ed elixir ha copiato ruby. Python fa come bash.

keobox commented 7 years ago

Ciao. Grazie di aver precisato meglio. La storia dei simboli non mi convince molto, purtroppo Io penso che le stringhe mutabili siamo un baco di sicurezza. Per fortuna se ne sono accorti!!

https://bugs.ruby-lang.org/issues/11473

pmontrasio commented 7 years ago

Perché sono un baco di sicurezza?

Per i simboli ti riferisci a questo?

Avendo già i simboli l'immutabilità delle stringhe non è un'esigenza particolermente sentita,

Ho sistemato l'errore ortografico :-) e in effetti in Ruby spesso si usano simboli dove Python usa stringhe. Ad esempio nei dict. Le stringhe si usano dove davvero serve del testo. Come scrivevo, c'è un certo conflitto tra simboli e stringhe come chiavi degli hash in I/O con il mondo esterno, come nei params Rails e nei JSON. Il rubista vorrebbe usare simboli ma il mondo ci dà stringhe e sappiamo che la conversione costa CPU. Le stringhe immutabili sono una soluzione anche al problema di prestazioni.

I simboli tipicamente sono propri dei linguaggi funzionali https://en.wikipedia.org/wiki/Symbol_(programming)

keobox commented 7 years ago

Perché le stringhe mutabili sono un problema di sicurezza http://stackoverflow.com/questions/15274874/how-does-java-string-being-immutable-increase-security

pmontrasio commented 7 years ago

Aggiunto il link con [master a506b47]