Data.Text против веревки
Я искал канаты в качестве альтернативы Data.Text, и мне нравится то, что я вижу так сильно, что теперь я вынужден задать этот вопрос... Есть ли какой-нибудь случай, когда Data.Text будет лучший выбор?
Вот те моменты, которые приводят меня к этому (исправьте меня, если я ошибаюсь ни на одном из них) -
-
Однослойная веревка node внутренне (почти) та же самая вещь, что и объект Data.Text. Накладные расходы в одной веревке node против текста незначительны, всего лишь один бит, чтобы различать ветвь или лист. Если вы действительно хотите Data.Text, просто используйте неразветвленную веревку.
-
Сложность универсальна или лучше в канатах-insert/delete (log (N) vs N), получить по индексу (log (N)/N в зависимости от глубины дерева против N).
-
Я читал, что успех веревок оказался смешанной сумкой в c, потому что производительность была повреждена кодом безопасности нитей. Однако эти проблемы не должны иметь значения в неизменном Haskell. На самом деле мне показалось, что из-за этого Haskell и канаты идеально подходят друг для друга.
Опять же, как и в моих предыдущих подобных вопросах, меня больше интересуют абстрактные качества структур, а не текущая ситуация (использование библиотеки, как усиленный код и т.д.). Если вы завтра переписываете библиотеки Haskell, замените ли вы Data.Rope на Data.Text?
Ответы
Ответ 1
"Палец дерева упакованных массивов" кажется хорошим выбором для представления, хотя я бы беспокоился о постоянных накладных расходах. Некоторые усилия с агрессивной потоковой фьюссией и некоторыми другими оптимизациями для коротких строк могут это исправить, но Data.Rope
не хватает этих функций. Прямо сейчас Data.Rope
на самом деле не является Data.Text
replacmenet.
- Он в основном реализует строки байтов, а не строки charachters - он заменяет byteString не текст. Поддержка Unicode важна.
- Несмотря на удивительность Эдварда, веревка не так зрелая. Он не внес каких-либо взносов в год и редко используется.
-
Data.Text
имеет огромные инженерные усилия, высоко оптимизирован и хорошо известен и хорошо документирован.
Ответ 2
Давным-давно, когда я попытался использовать Rope, автор сказал мне, что он еще не используется, это был просто эксперимент. Одной из проблем с Hackage является трудность изучения того, какой пакет/версии действительно готово к производству.
Является ли Rope как Unicode-совместимым как Data.Text?