Hash keys: string or symbol?

+1 per Elia, a parte l’IDE migliore

Alessandro R.

2014-11-24 10:40 GMT+01:00 Elia S. [email protected]:

Potrebbe interessare:
String Key Performance in Ruby 2.2

Tra l’altro HashWithIndifferentAccess internamente usa sempre le
stringhe
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/hash_with_indifferent_access.rb#L258-L260,
il che rende probabilmente più efficiente usare le stringhe invece che i
simboli per evitare una conversione in più.
In realtà le stringhe sono più sicure ma leggermente meno efficienti.

Il problema di sicurezza dei symbol è quello citato precedentemente i
questo thread: il garbage collector non le rimuove (Ruby MRI <2.2). Se
si “simbolizza” un Hash di parametri che arriva da un input esterno,
l’applicazione diventa vulnerabile ad attacchi DOS.

Questo è il motivo per cui HashWithIndifferentAccess deve per forza
usare stringhe come chiavi.

Benchmark + object
allocations: Lotus::Utils::Attributes: benchmark String vs Symbol as keys · GitHub

Luca