1 puntos por GN⁺ 2023-09-04 | 1 comentarios | Compartir por WhatsApp
  • Explicación del trasfondo teórico y la implementación técnica de un CRDT de texto (Conflict-free Replicated Data Type) para edición colaborativa en tiempo real llamado 'cola', escrito en Rust
  • Un CRDT es una estructura de datos que puede replicarse y modificarse simultáneamente en múltiples sitios, con convergencia garantizada incluso sin coordinación de una autoridad central
  • El contenido del artículo se divide en la representación del estado del documento y las ediciones que lo transforman, cómo implementar eficientemente el framework en código, y una comparación de benchmarks entre cola y otras bibliotecas CRDT basadas en Rust
  • El autor presenta en el texto el concepto de 'Anchors', que se usa para especificar tanto inserciones como eliminaciones de una manera que habilita la concurrencia
  • El artículo analiza cómo manejar inserciones en conflicto usando 'Lamport timestamps' y ordenándolas en orden descendente según la marca de tiempo de Lamport
  • El autor introduce el concepto de 'tombstones' para manejar eliminaciones. Los caracteres marcados como tombstoned se consideran eliminados, pero siguen conservándose en el documento
  • El artículo analiza cómo mejorar el rendimiento del sistema mediante el uso de 'G-trees' (grow-only trees). Las G-trees pueden recorrerse en ambos sentidos, por lo que las ediciones repetidas en la misma posición del cursor son muy rápidas
  • El autor cierra el artículo con una comparación de benchmarks entre cola y otros tres CRDT implementados en Rust: diamond-types, automerge y yrs. Cola supera a los otros tres tanto en la dirección ascendente como descendente
  • El autor señala que cola es actualmente la implementación de CRDT de texto más rápida conocida, aunque todavía hay trabajo pendiente para dejarla lista para producción, como agregar soporte para undo/redo y otras funciones

1 comentarios

 
GN⁺ 2023-09-04
Comentarios en Hacker News
  • En un comentario se afirma que el G-tree es básicamente un B-tree con punteros al padre añadidos, y que incluso si se almacena en un arreglo, su estructura no cambia de forma fundamental
  • Existe la preocupación de que Cola quizá no soporte rangos de formato de texto enriquecido como negritas o cursivas, y quien comenta propone Peritext como el estado del arte en algoritmos CRDT para texto enriquecido
  • Hay preguntas sobre comparaciones de rendimiento o funcionalidades entre Cola y tecnologías similares como Automerge o Y.js/Yrs
  • Se discutió una solución al problema de propiedad de nodos en arreglos dinámicos, donde todos los nodos se almacenan en un arreglo dinámico y se usan índices para referenciar otros nodos
  • Se propone usar un crate llamado slotmap para permitir eliminaciones sin preocuparse de que los índices se muevan o terminen apuntando a otros valores
  • Algunas personas expresan interés en probar Cola en proyectos donde otras herramientas como Etherpad y Word han fallado
  • Se criticó la imparcialidad de los benchmarks usados, porque no calculan ni almacenan las operaciones ni el texto real
  • También se menciona que este Cola no debe confundirse con la obra homónima de Ian Piumarta
  • También hay una pregunta sobre hacer posible la edición colaborativa de formularios en el navegador usando CRDT de texto
  • Se sugirió definir el acrónimo "CRDT" en el documento, ya que no es tan común y podría confundir a quienes leen
  • También se plantea la posibilidad de usar Cola junto con tiptap/prosemirror u otros editores de texto para añadir edición colaborativa basada en CRDT