observo que esto es un duplicado exacto de
Why is String.Concat not optimized to StringBuilder.Append?
por lo que probablemente se debe cerrar.
Pero si, hipotéticamente, los costos eran pequeños para implementarlo, ¿qué fundamento impediría que uno lo hiciera?
Parece que está proponiendo un poco de tautología: si no hay ninguna razón para no hacer X, ¿hay alguna razón para no hacer X? No.
Veo poco valor en conocer las respuestas a preguntas hipotéticas y contrafactuales. Tal vez una mejor pregunta sería una pregunta sobre el mundo real:
idiomas
¿Hay programas que utilizan esta optimización?
Sí. En JScript.NET, detectamos concatenaciones de cadenas en bucles y el compilador las convierte en llamadas a un generador de cadenas.
que podrían luego ser seguido con:
¿Cuáles son algunas de las diferencias entre JScript .NET y C# que justifican la optimización en el un idioma, pero no en el otro?
Asunción principal de JScript.NET es que sus programadores serán en su mayoría programadores de JavaScript, y muchos de ellos ya habrán creado bibliotecas que se deben ejecutar en cualquier implementación de ECMAScript. Es posible que esos programadores no conozcan bien el .NET Framework, e incluso si lo hacen, es posible que no puedan usar StringBuilder sin hacer que el código de su biblioteca no sea portátil. También es razonable suponer que los programadores de JavaScript pueden ser programadores novatos o programadores que llegaron a la programación a través de su línea de negocio en lugar de un curso de estudio en ciencias de la computación.
programadores de C# son mucho más propensos a conocer el marco .NET bien, para escribir bibliotecas que trabajan con el marco, y para ser programadores experimentados que entienden por qué bucle concatenación de cadenas es O (n) en la implementación ingenua . Necesitan esta optimización generada por el compilador menos porque pueden hacerlo ellos mismos si lo consideran necesario.
En resumen: las características del compilador consisten en gastar nuestro presupuesto para agregar valor al cliente; obtienes más "por dinero" añadiendo la función a JScript.NET que lo que añades a C#.
No hay nada técnicamente que le impida realizar esta optimización, pero considere que las dos operaciones no son semánticamente equivalentes. Concatenar una 'cadena' devuelve un nuevo objeto' cadena' que es el resultado de la operación, mientras que usar 'StringBuilder' modificará el objeto de cadena existente. El análisis de código tendría que realizarse para asegurarse de que de ninguna manera dependía de los efectos secundarios de la concatenación. En la mayoría de los casos, no es así, no es un problema que es imposible de superar, pero, de nuevo, no es tan difícil escribir el código correctamente en primer lugar. –
Vea también http://blogs.msdn.com/b/ericlippert/archive/2011/07/19/strings-immutability-and-persistence.aspx – SLaks
tenga en cuenta esta publicación también: http: //pranayamr.blogspot. com/2011/02/why-to-user-stringbuilder-over-string.html –