Diferencias de Ruby entre + = y << para concatenar una cadena

En Ruby 1.8.7 estaba haciendo un bucle concatenando cadenas cuando descubrí que parece haber una GRAN diferencia entre << y += en un objeto String :

  y = "" start = Time.now 99999.times { |x| y += "some new string" } puts "Time: #{Time.now - start}" # Time: 31.56718 y='' start = Time.now 99999.times { |x| y << "some new string" } puts "Time: #{Time.now - start}" # Time: 0.018256 

Busqué sobre eso en google, encontré algunos resultados:

http://www.rubylove.info/post/1038516765/difference-between-string-concatenation-ruby-rails

Dice que << modifica ambas cadenas, mientras que += solo modifica la persona que llama. No entiendo por qué es entonces << más rápido.

Luego fui al documento de Ruby, pero me pregunto POR QUÉ no hay método +=

http://ruby-doc.org/core-2.2.0/String.html

El operador de pala << funciona mucho mejor que += cuando se trata de cadenas largas porque el operador de la pala tiene permiso para modificar la cadena original, mientras que += tiene que copiar todo el texto de la primera cadena en una nueva cadena cada vez que se ejecuta.

No hay un operador += definido en la clase String, porque += es un operador combinado. En resumen, x += "asdf" es exactamente equivalente a x = x + "asdf" , por lo que debe hacer referencia al operador + en la clase de cadena, no buscar un operador += .