Я несколько раз повторно реализовывал некоторые встроенные в язык структуры данных, функции и классы. Как разработчик встраиваемых систем, главная причина, по которой я бы это сделал, - скорость или эффективность. Стандартные библиотеки и типы были разработаны, чтобы быть полезными в различных ситуациях, но есть много случаев, когда я могу создать более специализированную версию, специально адаптированную для использования преимуществ и ограничений моей текущей платформы. Если язык не предоставляет возможности открывать и изменять существующие классы (как, например, вы можете в Ruby), то повторная реализация класса / функции / структуры может быть единственным путем.
Например, одна система, над которой я работал, использовала процессор MIPS, который был быстрым при работе с 32-разрядными числами, но медленнее при работе с меньшими. Я переписал несколько структур данных и функций для использования 32-разрядных целых чисел вместо 16-разрядных целых чисел, а также указал, что поля должны быть выровнены по 32-разрядным границам. Результатом стало заметное повышение скорости в части кода, которая являлась узким местом для других частей программного обеспечения.
Как говорится, это был не тривиальный процесс. В итоге мне пришлось модифицировать каждую функцию, которая использовала эту структуру, и мне пришлось переписать несколько стандартных библиотечных функций. В этом конкретном случае преимущества перевесили работу. В общем случае, однако, это обычно не стоит проблем. Существует большой потенциал для трудных для отладки проблем, и это почти всегда больше работы, чем кажется. Если у вас нет особых требований или ограничений, которые не соответствуют существующим структурам / классам, я бы не рекомендовал их повторную реализацию.
Как упоминает Майкл, действительно полезно знать , как повторно реализовать структуры, даже если вы никогда этого не делаете. В будущем вы можете столкнуться с проблемой, которую можно решить, применяя принципы и методы, используемые в существующих структурах данных.