Implementation-wise, the delimiters of tag have been quite the thorn.
Are they there or not?
In Rebol2, Red, R3-Alpha...
>> find <abcd> "c"
== <cd>
>> find <abcd> ">"
== none
Not there!
Or are they? Reverse the arguments, and in Rebol2 and Red, they seem to magically appear:
>> find "ab<c>d" <c>
== "<c>d"
But... this was not the case in R3-Alpha...
r3-alpha>> find "abcd" <c>
== "cd"
r3-alpha>> find "ab<c>d" <c>
== "c>d"
I know things have gone back and forth with people believing deeply in their little hearts that they are happier when routines act like the delimiters are there...
But for the baseline behavior: I have come to believe R3-Alpha is right. They're string delimiters, and incidental to the default purpose, just as quotes are.
If you start looking at TAG! as it truly is--just another string class with different delimiters--it simplifies the mental model and the implementation model. You can truly just use it like another string, and it suddenly becomes consistent.
Of course, it's still nice to be able to match the molded form of a tag.
But... why stop at tags? Why not have a syntax to match the molded form of anything?
In strings, where you can't match list elements literally anyway:
>> parse "<a> 100 (b c)" ['<a> space '100 space '(b c)]
== (b c)
(The synthesized product may be more interesting, too. As a reminder, Ren-C has taken words that might be better as variable names like END and uses plain tag as instead, or to synthesize the parse input, etc.)
>> parse "<end> asdf" ['<end> to <end> <input>]
== "<end> asdf"
I don't know whether that is best done as just a PARSE feature, or if quoted things need to be searched for literally by FIND.
>> find "ab<c>d" <c>
== "c>d"
>> quote <c>
== '<c>
>> find "ab<c>d" quote <c>
== "<c>d"
>> find "ab<c>d" mold <c> ; one fewer character
== "<c>d"