Comenzando con la cadena

Cuerdas

Una cadena es una secuencia de caracteres literales. Hasta la fecha, las cadenas son compatibles con todos los lenguajes de programación modernos,1 pero no hay consenso entre los diseñadores de lenguajes sobre cómo deben clasificarse las cadenas. En lo que respecta al diseño del lenguaje de programación, hay dos preocupaciones principales a tener en cuenta.

  1. ¿Debe tratarse una cadena como un valor primitivo o compuesto?
  2. ¿Qué operaciones de cadenas debe proporcionar el propio lenguaje?2

Al convertir una cadena en un valor primitivo, las operaciones de cadena proporcionadas por el lenguaje están todas incorporadas; y no se puede definir en el lenguaje mismo. Esto permite ciertas optimizaciones a nivel de compilador — específicamente con respecto al diseño de la memoria y la reutilización de cadenas utilizando el llamado conjunto de cadenas. La compensación radica en no poder usar reemplazos directos para las operaciones de cadena, y dichas funciones tendrían que llamarse usando llamadas de funciones normales, mientras que la sintaxis para usar operaciones integradas suele ser claramente diferente. La consecuencia es que si se descubren algoritmos más efectivos, uno no puede simplemente cambiar qué biblioteca de cadenas está usando. Un ejemplo artificial es tener la búsqueda de subcadenas como parte del conjunto de características principales antes de que se desarrollara el algoritmo de búsqueda de cadenas de Boyer-Moore.

Por el contrario, al definir una cadena para que sea un valor compuesto, como una matriz de caracteres, todas las operaciones de matriz habituales se aplican automáticamente a las cadenas. Sin embargo, esto da como resultado que todas las cadenas dentro del idioma tengan una longitud fija.3

En última instancia, otro enfoque es representar las cadenas como una lista de caracteres que, al igual que con las matrices, permite que la representación herede todas las operaciones de la lista.

1 Salva a los más esotéricos como Piet 2 Los idiomas suelen ofrecer comparaciones de cadenas, principalmente igualdad, concatenación de cadenas con otras cadenas, sustitución de caracteres individuales y subcadenas y clasificación lexográfica de cadenas. 3 Generalmente