Note that the internal field accessed by .tag() and .set_tag() is shared
throughout the historical instances of the Line.
The main way to create, move around or clone Line instances is through
PubLine. For this purpose PubLine implements From<&Line> and Line
implements From. (Creating a PubLine from a Line is basically free,
creating a Line from a PubLine includes some allocations but still cheap.)
This is to ensure that the internal pointers that Line uses internally
(sharing objects between historical states) aren’t pointing to somewhere
they shouldn’t.
LineText ensures that the text data is valid for a single line and
implements reference counted cloning, allowing easy re-use of the same
data (through history, clipboard and even multiple identical lines
(depending on how they are created)).