Skip to content

Instantly share code, notes, and snippets.

@MBkkt
Last active April 11, 2021 18:38
Show Gist options
  • Save MBkkt/921c8084b0355c78bc01a6b38725549d to your computer and use it in GitHub Desktop.
Save MBkkt/921c8084b0355c78bc01a6b38725549d to your computer and use it in GitHub Desktop.
Отчет по практике SSO string for rust

Отчет по проекту SsoCowString

Руководитель: Алексей Кладов

Описание задачи

Презентации из описания проекта

Написать библиотеку строки для языка Rust, интерфейс которой аналогичен std::string.

При этом реализация должна включать такие оптимизации как SSO (короткие строки хранятся на стеке) и COW (копирование представляет из себя просто увеличение счетчика ссылок на строку, modify операции, если счетчик не равен 1 сначала копируют строку).

Ожидается хорошее тестирование, иначе этим нельзя пользоваться, и бенчмарки, если будет работать медленее std::string, то зачем мы вообще это делали.

Зачем это делать?

К сожалению, единственная хорошая библиотека на Rust для SSO строк это smartstring обладает специфичной лицензией MPL-2.0 и нетривиальным интерфейсом, хочется иметь аналогичную библиотеку с более приятным интерфейсом и MIT лицензией. Возможно с некоторыми иными техническими решениями.

Текущий результат

Написана упрощенная реализация строки на Rust с SSO и COW.

  1. Реализованы трейты сравнения, принта
  2. Геттеры для длины и содержимого
  3. Методы push, push_str, remove
  4. Тесты и quickcheck тесты
  5. CI для убунту для тестов и форматирования

Возникшие трудности

Rust новый для меня язык, поэтому в основном трудности связаны с тем что я не знаю нужных библиотек, инструментов, принятых в языке, идиоматичных подходов.

Осталось сделать до презентации результатов

  1. Бенчмарки, которые сравнивают с std::string и smartstring.
  2. Имплементировать оставшиеся методы и трейты std::string.
  3. Заменить enum на c-union с флагом в размере.
  4. Написать свой вектор байт со счетчиком ссылок, для того что бы уменьшить косвенность и количсетво аллокаций.
  5. Тестов много не бывает...

Технологии

Rust, quickcheck, random.

Общение с руководителем

Созвониваюсь с руководителем практически каждую неделю. Это помогает быстрее разобраться с возникающими трудностями, которые описаны выше. Также засчет этого получается развивать проект достаточно итеративно.

Ссылка на репозиторий с кодом

https://github.com/MBkkt/fast_string

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment