pasantía de cadena


En informática, la internación de cadenas es un método para almacenar solo una copia de cada valor de cadena distinto , que debe ser inmutable . [1] La internación de cadenas hace que algunas tareas de procesamiento de cadenas sean más eficientes en términos de tiempo o espacio a costa de requerir más tiempo cuando se crea o interna la cadena. Los valores distintos se almacenan en un grupo interno de cadenas .

La copia única de cada cadena se denomina interna y normalmente se busca mediante un método de la clase de cadena, por ejemplo, String.intern() [2] en Java . Todas las cadenas constantes de tiempo de compilación en Java se internan automáticamente usando este método. [3]

La internación de cadenas es compatible con algunos lenguajes de programación orientados a objetos modernos , incluidos Java, Python , PHP (desde 5.4), Lua , [4] Ruby (con sus símbolos), Julia y los lenguajes .NET . [5] Lisp , Scheme y Smalltalk se encuentran entre los lenguajes con un tipo de símbolo que son básicamente cadenas internas. La biblioteca del Standard ML de New Jersey contiene un tipo de átomo que hace lo mismo. C objetivo Los selectores de , que se utilizan principalmente como nombres de métodos, son cadenas internas.

Se pueden internar objetos que no sean cadenas. Por ejemplo, en Java, cuando los valores primitivos se encuadran en un objeto contenedor , ciertos valores (cualquiera boolean, cualquiera byte, cualquiera charde 0 a 127, y cualquiera shorto intentre -128 y 127) se internan, y dos conversiones cualesquiera de uno de estos se garantiza que los valores darán como resultado el mismo objeto. [6]

Lisp introdujo la noción de cadenas internas para sus símbolos . Históricamente, la estructura de datos utilizada como grupo interno de cadenas se denominaba oblist (cuando se implementaba como una lista vinculada) u obarray (cuando se implementaba como una matriz).

Los dialectos modernos de Lisp suelen distinguir los símbolos de las cadenas; internar una cadena dada devuelve un símbolo existente o crea uno nuevo, cuyo nombre es esa cadena. Los símbolos a menudo tienen propiedades adicionales que las cadenas no tienen (como el almacenamiento de valores asociados o el espacio de nombres): la distinción también es útil para evitar la comparación accidental de una cadena interna con una cadena no necesariamente interna, lo que podría provocar fallas intermitentes dependiendo de patrones de uso.