<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-07-11 8:07 GMT+02:00 Andrea D'Amore <span dir="ltr"><<a href="mailto:and.damore@gmail.com" target="_blank">and.damore@gmail.com</a>></span>:<br><div><br></div><div>> [...]</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
>> Qual è la differenza con il caso di stringhe Python e Java, entrambe<br>
>> immutabili?<br>
<br>
> Mi riferivo a tutt'altra cosa, quando parlavo di oggetti immutabili.<br>
</span><span class="">> Gli oggetti che git gestisce (e.g. tree, blog, commit) non hanno nulla a che<br>
> fare con la rappresentazione delle stringhe nei vari linguaggi di programmazione.<br>
<br>
> Gli oggetti di git sono immutabili nel senso che una volta aggiunto, ad<br>
> esempio, un file (blob) nel repository, questo file non può più essere modificato.<br>
<br>
</span>L'OP ha spiegato che vuole confrontare due stringhe in Py e Java con<br>
SHA-1, come git.<br>
Tu gli hai risposto che potrebbe non essere il modo migliore per le<br>
stringhe, immediatamente dopo aver evidenziato esplicitamente che nel</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
caso di git gli oggetti trattati sono immutabili. Questa vicinanza<br>
suggerisce che usare SHA-1 nelle stringhe non è il modo migliore<br>
perché non sono immutabili, cosa che non è vera.<br>
<br></blockquote><div><br></div><div>Quello che volevo dire è che se vuoi confrontare due oggetti A e B, fare</div><div>hash(A) == hash(B) normalmente è conveniente solo se A è immutabile, come accade</div><div>in git dove A ad esempio è un oggetto blog dentro il repository.</div><div>In questo caso hash(A) lo devi calcolare solo una volta.</div><div><br></div><div>Ho usato stringa invece di oggetto perchè l'OP parlava di stringhe.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
La mia domanda è quale sia la differenza nei due scenari, non mi è<br>
chiara la tua risposta alla mia domanda, mi sembra parli d'altro.<br>
Senza sapere altro sullo scenario dell'OP, cioè se ad esempio deve<br>
confrontare due stringhe al mese o duecentomila al minuto, direi che<br>
se vuole confrontare due stringhe "di grosse dimensioni" (magari dei<br>
testi scritti in linguaggio naturale da un utente umano e non dei<br>
tentativi specifici di avere una collisione) può farlo tranquillamente<br>
con SHA-1.<br>
<br></blockquote><div><br></div><div>Se dovessi confrontare oggetti di grosse dimensioni (non parliamo di stringhe, perchè rappresentano testo</div><div>mentre qui in generale conviene parlare di bytes) io partirei con farlo nel modo semplice, ossia confrontando</div><div>i vari chunks di 4kb o 8kb.</div><div><br></div><div>Se i due oggetti sono su computer diversi, come nel caso dell'OP, questo approccio non diventa più conveniente.</div><div>Però invece di confontare l'SHA-1 calcolato sugli interi oggetti, io confronterei l'SHA-1 calcolato sui singoli chunks.</div><div><br></div><div>Il problema di usare una funzione di hash, però, resta quello che hash(A) == hash(B) non garantisce che</div><div>A == B.</div><div></div></div><br></div><div class="gmail_extra">> [...]</div><div class="gmail_extra"><br></div><div class="gmail_extra">Ciao  Manlio</div></div>