►
From YouTube: .NET Design Reviews: UTF8 Strings
Description
We're looking at a set of APIs to better deal with UTF8 encoded strings.
https://github.com/dotnet/corefx/issues/30503
B
D
Yeah,
so
so
we
have
some
scenarios
where
we
want
to
introduce
a
first
class
concept
that
represents
utf-8
textual
data
utf-8
textual
data,
as
distinct
from
binary
data,
as
distinct
from
utf-16
textual
data,
utf-16
being
one
system
different
uses.
Today
everyone
can
hear
yes,
okay,
no
one
in
the
chat
saying
they
can't
hear
me
so
I'm
just
going
to
keep
going.
D
We
so
some
of
the
scenarios
that
we
have
for
this.
There
is
a
link
to
it
at
the
top
of
the
issue
here,
but
I
can
just
briefly
go
over
them.
Some
of
them
are
very
high-performance.
Networking
scenarios
say
that
you
have
something
like
Kestrel
HTTP
clients,
something
along
those
lines,
and
what
you
might
want
to
do
is
you
might
want
to
say,
I,
have
a
byte
array
I'm
reading
data
into
my
byte
array
and
I
want
to
operate
on
it
as
if
it
were
a
utf-8
textual
data.
D
Traditionally,
what
you
would
have
to
do
is
you
would
have
to
transcode
that
into
utf-16,
and
this
transcoding
implies
a
mem
copy.
It
implies
an
allocation
if
you're
not
using
temporary
buffers.
If
you
need
to
stick
it
into
your
string.
Well,
you
can't
use
temporary
buffers
anyway,
that's
an
allocation,
so
we
might
have
scenarios
where
httpclient
says
I
just
want
to
quickly
compare
headers.
D
For
instance,
we
also
have
scenarios
where
people
are
coming
from
other
programming
languages
go
Swift
and
so
on,
and
the
API
is
that
those
languages
expose
for
string,
inspection
and
manipulation,
look
different
enough
from
the
dotnet
string,
inspection
and
manipulation
api's,
where
we've
received
feedback
that
people
are
having
difficulty
affording
or
code
over.
Some
of
the
other
benefits
that
we
would
want
from
this
yeah.
E
D
So
that's
what
I
meant,
okay,
so
the
answer
that
was
twofold
there
are:
there
are
some
developers,
especially
developers,
coming
from
NGO,
who
really
do
expect
strings
to
be
in
utf-8,
and
they
they
expect
everything
to
be
in
terms
of
bytes.
Really,
they
expect
to
be
able
to
take
utf-8
string
data
and
be
able
to
let
it
into
whatever
data
structure
they
want
to
for
things
like
serialization
and
deserialization
separately.
There
are
developers
for
go
and
Swift
and
other
languages
who
want
to
do
inspection
of
strings
beyond.
D
F
D
Not
have
a
native
type
for
utf-8.
Actually,
you
know:
can
you
pull
up
that
link
at
the
top
of
the
top
and
if
people
are
interested
like
this
is
really
the
document
I'm
going
to
remain
so
to
what
switch
does
Swift
has
a
string
type
that
they
allow
multiple
different
views
into,
so
what
the
string
is
actually
backed
by
is
kind
of
out
of
your
control
and
not
really
your
concern
to
be
honest.
Instead
they
have
string
dot,
utf-8,
utf-16
utf-32
and
those
are
innumerable
so
that
you
can
start
retrieving
scalar
values
from
those
instances.
D
D
We
also
have
scenarios
for
maybe
application
developers
just
have
a
lot
of
strings
inside
their
application
and
they
want
to
save
memory
because
most
of
their
strings
are
asking-
and
they
say
you
know
what
we're
using
utf-8,
which
is
a
language
of
the
web.
Most
of
the
text
that
we
have
is
primarily
latin
characters.
So
let's
just
go
ahead
and
see
if
we
can
get
the
memory
savings
from
having
our
strings
be
effectively
half
the
memory
that
they
are
today
again.
The
document
goes
through
a
lot
more
of
us.
D
There
are
scenarios
for
all
for
going
back
to
the
networking
example
like
if
I
have
a
byte
array
or
a
read-only
memory,
or
something
that
represents
utf-8
text
data
can
I
truly
slice
it
so
that
I
don't
have
to
keep.
You
know
reallocating
for
every
single
suffering
stuff
along
those
lines.
One
additional
thing
about
the
benefits
of
utf-8.
G
F
This
one
chrigel,
so
you
mentioned
more
compact
memory,
representation.
Yes,
I
know
you
know,
I've
seen
stats
and
I
believe
it
that,
like
often
the
Ebers
at
least
10%
strings,
but
my
understanding
correct
me
if
I'm
wrong
is
this
is
not
expected
or
intended
to
replace
most
of
those
strings
right.
The
vast
majority
of
guys
take
strings
for
ten
strings
and
will
not
interoperate
with
this
and
so
most
apps
when
I
break
into
them.
I'll
see
10%
instills
drinks.
D
G
Yes,
that
seemed
personally
eliminated.
Yeah,
that's
an
illegal
person,
but
I
would
say
office.
Gaming
is
an
Advil
I
agree,
but
I
would
say.
I
would
like
to
end
up
in
a
world
where
the
getting
started
with
sea
shark
died
still
doesn't
talk
about
utf-8
like
right,
sea
shark
has
one
main
string
and
like
if
you
just
getting
started
learning
the
language.
G
F
That
one
is
already
nuts,
like
you
know,
so,
just
to
clarify
user
action.
To
that
meant,
you
don't
go.
It's
also
an
own
goal
to
its,
not
envision.
Ever
that
an
API
that
takes
cling
today
could
became
story
class.
You
can
explain
with
such
compiler
cleverness
to
make
sure
it's
not
going
in
dropped
or
something
like
that.
Correct.
D
D
D
The
first
is
code
unit
and
when
I
say
code
units
effectively
what
I'm
meaning
is
a
byte
or
a
char
depending
on,
if
we're
talking
about
utf-8
or
utf-16,
but
code
unions
tend
to
be
distinct
from
from
bytes
or
short,
or
something
like
that.
For
example,
the
code
unit
of
a
utf-16
string
is
system,
doc
char,
which
is
a
16
bit
integer,
Titan,
distinct
from
the
system
dog
shortened
or
in
1630.
D
Now,
you've
gotta
find
out
something
that
you
define
any
kind
of
theory,
or
is
that
something
that
we
do
purples
as
pipes
as
well?
We
have
a
chart,
a
type
proposed,
which
is
the
8-bit
code
unit,
type
of
a
utf-8
string
where
char
8
is
a
distinct
integer
type
from
my
goodness
might,
and
the
reason
for
this
is
when
you
have
a
if
you
have
a
sequence
of
short
that
is
distinct
conceptually
from
a
sequence
of
char,
which
is
intended
to
be
treated
as
a
16-bit
or
a
utf-16
sunscreen.
G
D
G
Not
for
the
issuance
extension
methods,
we
would
not
at
this
time.
So
the
reason
is
not
that
we
wanted
to
have
a
distinct
type.
The
issue
is,
we
wanted
to
use
memory
of
char
8
as
a
representation
of
a
string
slice
and
then
have
extension
methods
for
memory
of
char
8
that
are
text
like
vs..
If
we
use
memory
of
I'd,
where
we
couldn't
have,
you
know,
we
would
follow
and
it.
D
Would
pollute
every
single
memory
of
guys?
So
let
me
let
me
keep
going
through
the
definitions.
Real
fast,
so
Cody
I,
just
went
over
a
code
point
is
a
unicode
value
that
can
have
a
representation
across
various
different
UTS.
Not
every
code
point
is
representable
in
every
UTM,
for
example,
utf-16
has
a
concept
of
surrogate
code
points
where
two
surrogates
side
by
side
can
represent
an
emoji
where
an
emoji
is
a
value
that
can't
be
represented
as
a
single
16
miniature.
You
can't
take
a
utf-16
code
point
and
represent
it
as
utf-8
or
utf-16.
F
D
To
a
Miguel
and
Goku
Lagoon,
yes
and
know
what
the
rune
in
go
conceptually
represents
a
scalar
value,
but
because
room
is
just
int
ingo,
it
can
really
represent
any
arbitrary
integer,
but
conceptually
they
want
some
math
rules
to
scalar
values.
Okay,
when
you're
enumerated
over
a
string
in
go
which
has
utf-8
strings
you're,
never
going
to
get
back
those
surrogates
room,
because
you
just
can't
read
surrogates
from
utf-8
as
well.
F
F
D
When
you,
if
you're,
considering
a
character
in
the
sense
that
this
is
a
single
fundamental
thing
that
can
be
represented
in
any
UTF
yeah,
what
you're
talking
about
is
a
scalar
value
and
that's
something
that
you
can
go
look
up
in
a
Unicode
table
and
say:
please
get
me
my
category
or
please
take
this
scalar
value
and
give
me
the
utf-8
representation.
Give
me
the
utf-32
representation
and
those
lookups
and
those
trans
coatings
will
never
fail
on
scalar
values,
because
every
single
one
of
them
has
a
well-defined
transcribing
behavior.
So
I
just
went
over
scalars.
D
Basically,
scalars
are
code
points
surrogates.
Finally,
there's
a
graphene
which
kind
of
kind
of
a
loose
definition,
but
a
graphene
kind
of
it
as
what
actually
appears
on
your
screen
as
a
representation
of
a
character.
A
graphene
can
consist
of
multiple
different
scalars
back-to-back,
for
example,
an
a
with
an
accent
problem.
It
could
be
a
single
accented,
a
scalar
value.
There
is
a
Unicode
value
for
that
or
it
could
be
a
regular
Latin,
a
with
a
joiner
with
another
value
immediately
after
it.
D
That
says,
take
the
previous
character
and
just
put
an
accent
rub
on
it:
I
don't
care
what
it
was
so
both
of
those
either
the
standalone
a
or
the
sequence
of
three
different
scalars
that
I've
just
described
can
be
considered
as
graphemes
in
layman's
terms,
a
grapheme
is,
if
I
hit
the
backspace
key
in
my
text
editor.
What
do
I
actually
expect
us
to
be
deleted,
but
I
think
on
something.
G
G
D
Like
you
know
like,
there
are
multiple
technical
specifications,
you
missed
it
so,
by
the
way
like
we,
we
don't
have
a
first-class
concept
of
a
grapheme
and
what
I'm
going
to
be
presenting
today.
The.Net
framework
does
to
have
something
called
a
text
info
element,
I
believe,
but
I'm
not
quite
sure
how
many
people
are
using
it
in
practice,
and
my
understanding
is
that
it
doesn't
support
the
full
range
of
things
that
people
actually
want
to
do
with
this
concept.
J
J
Define
they
arbitrarily
make
the
definition
that
they
that
Arun
is
a
code
point
and
what
they
do
is
is
a
favorite
part.
They
allow
invalid
data
to
be
stored
in
the
run
type,
which
is
just
an
alias
one
and
in
32,
but
but
they
do
support
an
API
that
you're
supposed
to
call
when
you
expect
value
data
to
come
in
this
called
it
is
where
you
essentially
determine
whether
the
rule
is
valid,
so
that
is
if
the
value
is
stored
in
the
integer
belong
to
the
range
of
current
and
care
about
policy
duty
code.
J
The
second
thing
is
just
a
little
of
a
clarification.
The
grapheme
well
I
think
that
your
explanation
of
it's
something
that
is
visible
on
the
screen
is,
you
know
it's
a
good
first
pass.
It
is
the
it
is
an
internal
representation
that
is
actually
disconnected
from
the
UI
and
the
complexity.
A
crystal
was
talking
about.
J
It
happens
at
a
higher
level,
so
it
happens
with
the
composition
of
core
teams,
and
how
does
our
display
on
the
screen
and
there's
a
whole
algorithm
for
choosing
the
actual?
You
know
it's
the
paint
of
this
relay
and,
and
those
are
typically
called
glyphs
and
a
single
letter.
The
letter
A,
for
example,
can
have
multiple
glyphs
in
Arabic.
That's
one
example,
but
in
English
as
well,
you
have
combinations
of
letters
like
FL
or
FF,
which
is
differently
depending
on
whether
you
use
kerning
or
not.
J
So
so
these
kind
of
stays
at
the
you
know
at
the
compiler
level.
You
know
language
level
have
a
big
not
at
the
display
thing.
I
think.
The
last
thing
that
is
worth
discuss
is
that
the
concept
of
graphing,
the
graph
you
cross,
whether
you
have
their
circles,
is
thing
a
parent
curve,
yep
stone.
So
the
swift
character
is
one
of
these
beasts
and
it's
a
it's
a
it's
a
heavier
beast
than
that.
It
could
point
right.
D
G
D
Is
Bay
so
there
there
is
an
active
discussion
again
core
FX
lab
recording
this
and
part
of
the
work
we're
doing
here
is
to
set
up
a
foundation
that
such
a
thing
can
be
built
on
top
of
in
the
future,
whether
that's
first
party
inbox
support
or
some
third
party
library
to
someone
who's
on
top
of
it
wait.
Do
you
know
what
the
vo-tech
sedative
is,
because
it
supports
all
these
things
and
it's
organized
a
detective.
F
D
D
G
D
Yellow
road,
it's
true
right!
So,
let's
so,
let's
go
over
the
Apr
done
now
that
my
browser
has
decided
to
so.
Where
do
we
start,
then?
In
this
proposal?
In
this
proposal
we
have
utf-8
string
as
an
immutable
reference
type,
a
very
similar
in
concept
to
how
system
don't
screen
works
and
the
reason
that
this
was
done.
D
I
will
send
out
a
document
later,
just
kind
of
contrasting,
whether
it
makes
sense
for
this
to
be
a
reference
type
or
a
staff
based
I,
but
the
the
gist
behind
why
I
chose
in
the
mutable
reference
type
is.
It
is
the
most
familiar
thing
and
most
approachable
thing
for
the
majority
of
our
developer
audience
and
anything
that
can
be
built
on
anything
that
can
be
built
on
top
of
this
could
also
use
read-only
memory
or
read
only
spam
as
a
representation.
That
is
any
API
that
we
add
or
utf-8
screen
processing.
D
L
On
and
so
on
top
of
that
morning,
just
like
to
clarify,
as
all
that
I
think
at
least
I-
and
maybe
some
other
folks
are
still
questioning
that
cough
level
decision.
So
we
can
review
the
you
know
under
the
hypothesis
that
we
are
going
to
move
forward
with.
This
is
a
class
but
I'm
not
convinced
that
together.
J
D
D
B
D
D
What
that
means
is
that,
as
we're
copying
string
data
over
like
as
we're
copying
data
into
a
utf-8
string
type,
while
we
caught
me,
we
also
check
to
make
sure
that
it
is
in
fact
valid
utf-8
and
if
we
see
invalid
utf-8,
we
fix
it
up
by
replacing
that
bad
bytes
on
the
floppy,
the
replacement
character
is
the
regular
Unicode
replacement
character.
Ffft
most
people
see
this
as
a
black
diamond
with
an
inscribed
question
mark.
What,
if
I
don't
want
a
replacement
I
want
you
to
actually
pay
me
they
so
there
are.
D
M
G
I
think
so
the
issue
was
19
different
now
that
I'm
pushing
down,
but
the
issue
was
that
we
don't
want
to
have
a
method
that
takes
read-only
span
of
Charlotte,
say
yes
and
not
have
a
method
that
takes
a
string
because
in
languages
that
don't
automatically
convert
you
cannot
just
pass
the
string
literal
in
c-sharp.
You
can,
and
you
know
in
other
languages
you
cannot.
So
this
is
a
very
advanced
conversion
between
Charlotte
and
bite
and
I.
Think
yeah,
maybe
worth
discussing
okay.
D
E
D
Because
utf-8
string
has
its
own
copy
of
the
data,
that's
a
security.
Okay,
we
fix
things
up
as
we're
copying
the
data.
Oh,
this
is
become
copying.
The
data
on
allocation
is
similar
to
the
way
that
strings
work
in
pretty
much
every
other
language
that
we
looked
at.
Go
swift,
Python,
C++,
Java,
so
yeah
she'll
be
completely
copy
from
them.
I.
D
J
Hey
you
know,
I
did
go
to
the
CBE
and
I
did
look
at
this
and
I
think
that
this
is
a
that
you're
painting
that
situation
with
a
very
thick
brush.
In
terms
of
that,
yes,
I
think
that
some
of
these
exploitable
things
are
things
that
are
exploitable
from
seed
to
begin
with,
you
know,
I
would
interest
I
mean
I,
didn't
look
at
the
time.
I
just
occurs
to
me,
but
I
didn't
see,
I,
don't
recall,
seeing
any
exploits
that
were
rooted
in
goats
handling
of
the
same
utf-8
data.
D
So
you
also
have
to
consider
the
ecosystem
with
which
done
that
applications
are
going
to
exist
like
if
we're
interfacing
with
databases
that
just
take
random
bytes
as
a
primary
key
column.
They
just
say
these
bytes
represent
tax
data
like
it's
one
could
make
the
argument
and
I
am
making
somewhat
of
that
argument
here
that
it's
on
us
to
make
sure
that
our
application
developers
aren't
getting
into
a
bad
situation
when
they're
trying
to
interface
with
databases
that
have
this
color.
J
I
think
that
you're
complaining
that
you're
completing
those
things
and
I
don't
know
why
your
ecosystem
would
be
vastly
different
and
the
existing
vehicle
system.
That
would
deal
with
these
things,
but
I'm,
assuming
that,
if
I'm
talking
to
a
database
a
some
amount
of
Martian,
it
would
take
place
and
if
there
is
an
invalid
character
at
that
point,
we
would
there.
The
the
marshalling
would
stop
marshalling
at
that
point,
because
it
cannot
proceed.
J
G
G
G
I
I
M
G
A
G
Is
saving
the
data
for
later?
So
that's
fine!
The
only
issue
is
when
you
lose
an
API
is
after
consume,
something
you
get
a.
They
have
to
now
pick
right.
No,
are
you
mother
and
because
there's
some
polymorphic
relationship
between
these
types-
and
you
know
pretend
the
most
powerful
one
and
you
take
the
it's
like.
M
A
G
D
D
Because
of
tearing
for
example,
say
that
you
want
to
compare
two
things
for
equality,
utf-8
string
and
a
string
instance
comparing
those
for
ordinal
equality
if
you're
using
regular
reference
types
is
actually
very,
very
fast,
whereas,
if
you're
using,
if
you're
doing
it
with
span
or
memory
of
T,
you
have
to
fall
back
to
a
somewhat
slower
code
path,
because
you
have
to
economize
transcoding
site.
So
as
part
of
construction
of
utf-8
string.
We're
also
able
to
determine,
if
you
contain
all
ASCII
data,
for
instance,
and
we're
able
to
make
optimizations
based
on
that.
B
Kamisha
sure
I
mean
read
pulling
too
much
on
this
design.
When
should
we
just
take
the
design
point
that
we
currently
have
and
just
move
on,
because
I
think
there
seems
to
be
some
contention
on
whether
we
want
to
type
that
copies
right
and
then
I
think
we
can
note
that
and
then,
while
they
haven't
one
so.
G
A
G
Solutions
initially,
let's
say
Spanish
alright,
but
at
some
point
the
user
says
like
yeah.
This
is
the
value
that
I
was
looking
for.
You
know,
I
inspected
the
feathers
name
and
I.
Don't
want
to
store
the
value
for
later.
What
do
they
do?
We
need
to
have
an
answer
for
it.
So
today
the
answer
can
be
either
utf-8
string
as
here
on
the
screen
right
or
you
pay
the
cost
of
both
allocation
and
transcoding
and
we'll
keep
using
system
string.
G
If
you
want
to
start
them
the
datafile
vector
or
memory
of
Charak,
those
are
three
choices
right,
but
I
think
you
know
saying
like
do
we
need
a
type
like
this?
We
should
kind
of
very
quickly
go
back
to
sin
agus
and
say
well,
you
know.
Do
we
need
to
start
for
any
of
this
analysis?
Yes,
that
we
need
the
diagram.
B
D
We
should
keep
going
through
this
right
because
we
are
at
risk
of
not
getting
for
this
one
thing.
One
of
the
questions
that
came
up
in
chat
is
what
about
things
like
buy
order
marks
there.
Imagine
there's
no
such
thing
as
a
byte
order.
Mark
like
byte
order
mark
is
a
concept
of
like
document
storage.
My
tfh
string
and
string
don't
deal
in
that
so
moving
on
operate,
so
we
went
over
constructors
comparison,
I
need,
oh
yeah.
Sorry
was
there
someone
on
the
call
just
taking
just
I've
been
ok,
so
any
any
comparison.
D
Api
compares
to
me
quality
stuff,
like
that
anything
that
does
not
take
a
compare
info
or
a
string
comparison
or
something
along
those
lines.
We
assume
orbital
this
generally
matches
how
system
string
works
today
there
some
API
is
on
system
string
like
dot
equals
use
or
annulled
by
default.
Unless
you
specify
an
explicit
comparison,
some
API
is
on
system
string
compared
to
use
thread
current
halter
by
default.
Unless
you
specify
an
explicit
comparison,
this
has
led
to
a
few
problems
with
developers,
not
really
knowing
how
string
is
going
to
treat
data.
D
So
we
are
willing
to
take
a
small
break
from
string
here
and
say
within
the
utf-8
string
type
we're
willing
to
be
self
insistent
and
say
ordinal
by
default.
If
you
have
some
explicit
comparison,
we
will
honor
what
you
passed
in
there
are
all
like.
We
also
have
certain
helper
types
or
a
certain
helper
ap
is
compared
more
than
or
equals
ordinal
that
just
prevent
you
from
having
to
explicitly
specify
string
comparison.
It's
just
a
little
bit
more
compact
way
of
writing
this.
Any
questions
on
that
I
thought
this
might
actually
be
appointed
intention.
The.
E
A
D
D
D
Why
does
it
have
to
exist
because
what
static
one
it's
static
and
well
the
value
of
one
of
the
things
that
we
said
when
we
were
designing
this
tightening
is
if
an
API
can
take
a
string
comparison
it
should.
We
should
not
have
an
overload.
That
does
not
take
a
string
comparison,
because
we
want
the
call
site
to
be
very
explicit
in
what
they
want.
D
The
only
time
where
we
should
ever
say
ordinal
by
default,
without
taking
a
string
comparison
is
if
we
require
it
in
order
to
override
a
method
like
equals
or
get
hash
code
or
implement
a
method
like
icon
for
the
document.
Why
do
you
want
people
to
be
explicit
about
the
comparative
or
no
there's
kind
of
a
natural
choice,
because
this
has
been
a
pain
point
for
people
using
systems
Austria,
and
we
wanted
to
try
to
get
developers
in
the
habit
of
the
Afiya,
though
they.
C
D
L
D
B
D
G
B
H
I
D
String
and
have
fewer
schools
there
are.
There
is
a
subset
of
applications
that
is
going
to
want
to
do
that,
especially
applications
that
have
a
lot
of
string
instances
that
they're
taking
from
user
data.
Imagine
like
something
huge
like
SharePoint,
Online
or
something
right
minimizing.
The
pain
going
from
one
type
to
another
will
be
useful
for
those
developers.
G
G
G
D
D
D
B
D
Comparison
between
string
and
utf-8
string,
there
is
no
comparative
comparison
compared
to
women
in
ball.
Transpose
equality.
Comparison
is
a
little
interesting
and
I.
Don't
think
I
have
it
in
this
API
that
were
discussing
today,
because
I'm
trying
to
figure
out
how
it
works
with
the
language
of
empire,
for
example,
we're
considering
having
the
compiler
smart
enough
to
say.
Oh
I
you're,
trying
to
take
a
literal
string
and
pass
it
to
someone
who
expects
a
utf-8
string.
I
can
just
do
all
of
that
fix
up
either
at
compile
time
or
it's
a
ton.
D
D
D
Is
it
a
I
and
some
someone
from
the
jet
team
might
have
to
in
the
heart
of
the
decision
here,
but
I
was
under
the
impression
that,
having
empty
as
a
constant
meant
that
it
was
difficult
to
the
intern
empty
strings
across
applications
which
meant
that,
like
string
reference,
equal
ended
up
being
here,
but
that's
my
historical
understanding
to
us.
Okay,
we.
B
D
F
D
D
G
C
P
D
Mean
one:
if
you,
if
you
pass
into
the
constructor
a
read,
only
span
a
bike
that
contains
garbage
data
and
we
do
all
the
fix
ups
in
the
constructor.
The
length
that
you
get
back
will
be
different
than
the
length
that
you
pass
done.
Similarly
with
systems
during
today,
if
you
call
its
constructor
passing
an
S
byte
array
or
whatever
it
takes
the
length
of
that
s,
wide
array
is
going
to
be
different
than
the
length
of
the
resulting
system.
D
Their
system
should
be
different.
Why
would
be
different
for
you
to
have
a
straight?
You
don't
doing
like
a
1:1
replacement
of
replace
my
character
is
three
bytes
long
and
that
we
might
be
replacing
an
arbitrary
number
of
Iseman
and
so
replacement
can
grow
strings.
They
can
shrink
strings
so
until
we
actually
inspect,
we
don't
know
how
it's
going
to
it
left
back
to
the
line.
D
D
In
fact,
the
compiler
goes
a
little
further
and
says
if
you're,
if
you
have
literal
plus
literal
plus
literal
like
I'm,
just
gonna,
say
screw
it
all
three
of
them
combined
nursing
a
literal
because
you're
never
going
to
observe
them
in
as
separate
instances.
We
would
need
to
figure
out
how
that
works
here
on
utf-8
string,
because
we're
going
to
we're
going
to
be
discussing
over
the
next
few
weeks.
D
Compiler
support,
I,
believe
the
final
api
will
probably
look
something
like
this,
but
we
also
have
to
consider
how
the
existence
of
types
like
value
of
structuring,
builder
and
stuff
like
that,
would
play
into
this.
So
that's
just
something
to
keep
in
mind.
Are
you?
So?
Are
you
gonna
come
to
the
idea
that
the
English
talk
about
these
strings
is
like
interpret
interpolation
mm-hm,
so
with
Unicode
stream?
I,
don't
have
string
better
than
a
year
that
is
I.
D
L
R
K
G
Question
about
the
concat
and
compiler
support.
Sorry,
so,
with
the
three
new
members
that
you
added,
that
they've
done
is
fan
of
char
yeah,
they
are
very
general
purpose
cause.
Everything
is
been
very
comfortable
to
read
on
the
span
of
charge.
Therefore,
we
don't
need
the
five
methods
at
all.
That's
my
associate.
Oh,
but.
G
So
I
I'm,
so
I
I,
would
say
no
and
the
reason
is
the
following:
yeah
we
will
want
to
come,
be
able
to
concatenate
both
utf-8
string
and
slices
several
different
types.
So
this
edgy
I
was
designed
when
we
just
had
string
the
moment.
You
have
many
types,
you
kind
of
have
to
use
something
the
string
for
concatenation
because
we're
not
gonna
have
you
know
five
thousand
permutations
of
all
these.
You
know
three
types
that
will
so
comparable
there.
D
D
S
D
G
So
let
me
talk
to
both
for
me,
anxious
the
discoverability
I
think
it's
a
bit
of
a
double-edged
sword.
It
basically
lets
people
on
the
path
to
discover
these
methods
and
when
they
concatenate
utf-8
string
instances,
it
all
works
and
they
are
happy
and
then
they
discover
that
they
have
memory
of
charge
or
one
of
the
slices
and
they
like.
Ok,
what
do
I
do
now
and
they
are
lost
versus
not
having
this
API
would
make
it.
You
know
very
clear.
G
Kind
of
you
know
the
other
three
members
always
work
and
the
stringbuilder
needs
to
be
used.
If
you
have
too
many
too
many
of
these
tonight,
so
that's
I
mean
I
didn't
feel.
Like
you
know,
it's
not
the
sister
forever
I
would
not
say
yeah,
but
I
mean
this
is
something
a
concern
about
the
validation
I'd
understand
why
you
cannot
do
the
same.
Skip
validation
thing
on
read,
manage
them!
No,
no!
No!
No
on
the
the
value
builder
yeah
would
have
overloads,
append,
utf-8
string,
and
if
it
takes
you
utf-8
string,
you
can
skip.
D
G
I
G
A
G
J
G
Would
just
say
so
Miguel
the
flag
that
Levi
was
talking
about
was,
if
you
happen
to
come
to
concatenate
five
strings
and
they
were
all
with
this.
You
know
and
validated
flag
flag
said
yeah.
Then
the
resulting
string
has
the
flag
said.
Yes,
if
you
concatenate
four
strings
that
are
validated
and
or
not,
the
result
is
not
valid.
Yeah.
It's
there,
there's!
No!
It's
just
an
optimization.
D
Of
after
you
have
there
I
we
just
we
park
the
result,
as
we
have
a
perform
validation.
Yet
what
someone
carries
validated
generally?
What
we
do
is
we.
We
try
validating
a
construction
time,
because
we
assume
that
they
call
the
news
case
is
going
to
be
somebody
calling
as
bytes
or
just
copying
it
somewhere
yeah.
So
we
never
really
have
an
opportunity
aside
from
the
constructor
to
validate,
but
if
can-can
so
isn't
validating,
then
when
do.
D
Halfway
there
it's
one
of
the
consequences
of
using
really
found,
basically
like
read,
read-only
spam
I.
What
I
want
to
do
is
I
want
to
get
developers
into
the
habit
of
treating
spans
of
char
eight
as
if
they
were
valid,
because,
ideally
you
don't
even
get
an
instance
of
that
without
having
perform
validation
in
the
first
place.
I
realize
that's
a
very
poor
answer
and
that's
a
long
way
of
saying
I
don't
have
a
good
answer.
D
G
G
D
M
M
It's
the
same
unless
it's
very
on
here
after
if
I
ended
up
building
my
own
span
and
copied
the
middle
body
like
a
three
byte
sequence,
so
we're
over
and
over
again
because
of
a
programming
error
like
I
need
to
know
that
I've
made
that
mistake.
So
if
the
constructor
is
gonna,
tell
me
K
cavities
to
tell
me
or
as
vital
threads
so.
D
M
D
D
D
Yeah,
we
have
to
consider
it
more
and
we
can
go
over
that
often
what
that
language
like
contains
is
relatively
straightforward.
Instead
of
taking
chari,
we
take
a
scalar
because
taking
Akari
is
probably
not
what
I
wanted.
Taking
a
bite
is
probably
not
what
you
wanted.
We
could
consider
compile-time
support
so
that
you
can
say
contains
like
single
quote:
X
single
quote,
and
that
would
a
compile
time
or
at
tip
time
take
the
ASCII
X
character
or
turn
it
into
Unicode
scalar
and
do
the
right
thing
for
contains.
D
D
D
I
D
Like
what
I
just
said
like,
we
might
need
some
good
support
in
order
to
make
string
and
if
we're
getting
rid
of
the
overloads,
it
don't
take
a
string.
Comparison
like
we
would
need
to
get
the
JIT
to
start
recognizing
some
of
these
patterns,
and
it
starts
special
cases.
For
example,
in
spite
of
contains
a
very
first
thing
that
we
do
is
switch
over
these
training
arrows
enemy.
If
you're
passing
a
constant
strain
comparison,
we
should
make
the
jitter
smarter
about
the
goriest.
D
Yeah
but
legit
legit
right
now,
it
doesn't
doesn't
look
at
in
these
methods,
aren't
marked
inlinable
and
the
jet
will
not
inline
them
by
default,
just
because
of
how
large
they
are.
We
just
need
to
consider
making.
We
need
to
consider
either
weight.
We
need
to
consider
the
consequences
of
losing
default
parameters
rather
than
having
overloads
it.
I'll
take
anything
and
how
and
what
changes
we
might
have
to
get
to
the
gym
in
order
to
have
the
performance
guarantees
we
want.
M
M
D
D
Know
there
is
not
in
ductile.
Actually
there
is
I
take
that
that
we're
going
enough
that
I
order
grass
I
thought
you've
an
indexer.
There
is
no
answer.
Okay,
so
there's
contains
here's
create.
This
create
is
very
similar
to
the
constructor,
but
it
takes
a
delegate
very
much
flakes
from
they'll
create
so
I
had
a
question
on
this.
L
So
the
and
I
understand,
incredibly
than
the
validation
that's
referred
to,
can
actually
change
the
length
the
candidate.
So
what
happens
so
I
I
pass
in
a
length
here,
I'm,
given
a
span
to
write
in
to
write
right
into
it.
I
fill
the
whole
thing
that
date
that
I
wrote
in
won't
actually
I'll
show
up
and
the
result
necessarily.
D
G
L
D
L
G
M
D
So,
yes-
and
someone
was
asking
for
an
explicit
like
someone-
was
asking
for
an
explicit
example
of
what
can
go
wrong.
This
comment
has
an
example
of
such
a
thing.
Basically,
this
would
allow
the
the
scenario
here
is:
I
register
an
account
on
your
form.
I
pass
invalid
data
to
the
server
the
server
forwards
it
to
the
database.
Remember,
there's!
No,
there's
no
marshaling,
because
the
data's
already
bytes
it
ends
up
in
the
database
and
now
I
start
posting.
D
This
user
account
link
where
the
user
ID
is
going
to
be
sent
back
to
the
server,
but
the
user
ID
contains
invalid
utf-8
characters,
which
means
the
web
browser
is
going
to
replace
them
with
ffft
at
runtime,
which
means
that
every
time
you
try
hitting
need
to
leave
this
user
button,
the
web
server
is
going
to
return
404.
That
user
doesn't
exist
so
now.
The
way
to
fix
this
is
to
go
into
the
database
and
manually
get
to
Oz
all
right
and
different.
G
I
D
G
D
I
D
D
B
C
J
J
I
mean
it
but
certainly
validates
something
different
right
for
cross-site
scripting
yeah.
You
know
that's
what
happens
that
these
web
frameworks
have
to
do
some
level
of
validation
and
in
fact
they
do
have
to
do
all
kinds
of
validation
for
cookies
and
all
kinds
of
other
things.
So
I
don't
buy
item
by.
J
Well,
I,
there's
a
lot
of
sea
bees
and,
like
I,
said
at
the
beginning
of
this
discussion
when
I
looked
at
this
a
couple
of
months
ago
or
whenever
you
send
I,
think
they
were
issues
with
the
C
implementation.
I
just
happened
to
go
there.
A
few
minutes
ago
when
I
was
I
was
specifically
looking
at
holes
in
utf-8
can't
go,
and
you
know
I
couldn't
find
anything
that
jumped
at
me
at
that
point.
Maybe
there's
some
but
I
haven't
found
it
yet
trying.
H
To
follow
this,
so
since
unicode
5
I
believe
the
specification
has
said
that
anyone
who
processes
data
when
they
find
invalid
data
has
to
replace
the
invalid
code
points.
Are
you
saying
that
we
shouldn't
have
any
validation
on
any
of
the
C
tours
or
anything
like
that?
It
should
always
be
garbage
in
garbage
out
I.
J
J
J
J
No
I
mean
at
least
in
the
NGO
world
as
soon
as
you
hit
an
invalid
character
or
you
know,
let's
say
they
have
a
partial
utf-8
input
right,
you're
missing
some
characters.
It
says:
hey
I
can't
proceed
further
from
this
point
and
you
get
any
product
I.
Think
it's
a
weird
value
error
or
something.
So
you
get
some
type
of
stop
yeah
since
you
get
together.
G
Some
kind
of
hands
so
I
have
to
say
I'm
with
me.
Go
I'm
not
like
this
example
doesn't
convince
me
and
I'll
tell
you
the
reason
why
the
reason
for
it
is
that
the
right
solution
to
the
problem
is
to
validate
when
you
save
data
to
a
database,
so
maybe
it's
equivalent
to
what
we
get
is
saying
at
a
different
level.
This
problem
needs
to
be
solved
at
the
different
level
and
because
we
are
not
preventing
people
from
getting
invalid,
utf-8
strings
by
you
know,
read-only
spans
of
invalid
bytes
and
so
on,
and
so
on.
G
M
D
K
M
I
think
I,
like
B
c-sharp,
is
generally.
This
is
the
language
of
doing
things
singly,
and
if
we
want
to
have
high
performance
scenarios
for
people
who
don't
want
to
pay
the
cost
of
validation,
that
needs
to
be
the
IP,
you
have
to
do
more
work.
You
have
to
call
the
overload
that
has
more
words
in
it.
Yes
do
whatever,
but
we
should
be
safe
by
default.
So
we
should
save
the
users
from
invalid
data
if
they,
if
they
have
to
do
an
extra
step
to
validate
before
saving
to
a
database
99%
of
our
users.
M
D
H
G
A
D
H
D
That
throw
as
well
in
in
general,
we
don't.
We
try
not
to
have
constructors
that
sometimes
do
safe
things
on
sometimes
do
dangerous
things.
Let
me
rephrase
we
some.
We
try
not
to
have
methods
that,
depending
on
their
parameter,
sometimes
to
safe
things,
and
sometimes
you
want
to
save
things
generally.
We
prefer
to
split
them
into
two
different
methods.
Channel
go
screaming
continue.
It's
really.
M
M
M
D
The
photos
Valladares
and
they
don't
want
that
at
the
call-
could
be
if
you
wanted,
on
validate
yeah,
create
without
validation
pass
them.
The
Arenal
is
kind
of
a
feeling.
I'm
gonna
be
typing
that
a
lot
though,
and
you
can,
you
should
not
be
taking
on
so
you
have
to
like,
if
you,
if
you
type
that,
like
there
will
be
a
code
analysis
rule
that
we
will
run
internally.
That
says,
please
don't
please.
G
A
M
N
D
M
G
M
G
G
G
M
D
D
With
the
same
should
like
ends
with
it
starts
with,
are
basically
the
same.
We
can.
We
can
also
have
Unicode
scale
or
take
a
string
comparison
parameters.
We
want
to
what
would
then
even
mean,
for
example,
to
you
and
with
the
character,
a
uppercase
or
lowercase.
Well,
because
he's
thinking
up
like
if
they
out
yeah,
that's
me
or.
D
A
D
Of
sometime,
okay
yeah,
then
you'll
you'll
all
have
the
same
feedback
on
starts
with
them.
Great
yeah
equals
of
equals
is
basically
no
there's
equals
of
string.
Comm,
say
mystery.
I,
the
equals
of
string
thing
is
something
that
we're
going
to
have
to
figure
out
what
to
do
just
because
I
don't
want
to
run
into
a
situation
where
people
pass
literals
in
here
and
then,
like
now,
all
of
a
sudden
you're
taking
the
runtime
transcoding
code.
There
is
no
operator
equals
between
utf-8
springing
screen.
D
D
And
it
does
the
conversions
and
then
you
pass
the
string
value
that
hasn't
been
converted.
That
is,
that
is
not
how
it
behaves
and
I
actually
have
a
comment
there.
If
you
have
a
string
that
contains
an
invalid
utf-16
sequence,
so
you
try
to
compare
it
against
any
utf-8
string.
We
will
always
return
false
policy.
It
will
never
be
equal
to
N
equals
power.
D
B
C
D
S
D
M
B
M
D
D
To
Frederick's
question
like:
are
we
going
to
do
lexical
comparison
if
the
string
comparison
that
you
pass
in
is
lexical
yes
like?
If,
if
you
pass
in
a
string
comparisons
that
would
have
treated
two
strings
as
equal,
even
if
they
have
different
lengths,
then
that
would
also
treat
utf-8
string
and
string
as
equal,
even
if
they
have
different
scalars,
for
example,
like
the
different
representations
of
a
with
the
ring
conference.
D
D
A
B
M
B
D
M
G
H
B
B
B
The
most
logical
thing
for
them
is:
there's
a
new
YouTube,
eight
string
passing
in
the
string
yeah
like
if
it
had
the
exact
same
problems
as
this
approach,
then
I'd
rather
have
it.
Okay,
it
does
the
exact
same
thing.
If
we
can
do
it
because
I
mean
that
people
will
do
it,
I
mean
extremes
are
super.
It
is
a
super
evasive
that
they
will
eventually
compare
other
ways.
Well,
one
solution:
we.
G
D
H
D
H
D
And
well,
this
is
something
that's
we
should
have
burning
around
out
of
time.
This
is
something
that
we
should
have
a
later
discussion
on,
which
is
or
api's
which
take
are
read-only
spanish
are.
Should
we
just
say
this:
isn't
the
appropriate
place
to
expose
those
as
overloads
instead
turn
this
thing
into
a
read-only
spam
and
then
called
dot
contains
on
the
spam
that
you
get
back
because
that's
going
to
have
overloads
to
take
like
read
on
the
spam
that
way,
you're
doing
spam
spam.
D
H
H
G
G
Q
D
P
P
U
H
D
D
More
line,
to
put
you
guys,
I,
think
I'm,
fine,
then
I.
Why
do
we
do
whatever
was
whenever
that
seems
a
bit?
It's
get
pinnable
reference
I
believe
the
recommendation
is
because
it's
only
supposed
to
be
called
by
the
compiler.
That's
not
bad!
You,
the
celebrant,
so
you
can't
base
it.
Just
is
the
plumbing.
D
G
G
This
is,
this
is
any
carrying
thing.
Yeah
I
think
the
idea
that
I,
like
and
scheme
was
boosting
Bianca
was
it
have
this
very
Universal
time
a
span
of
charge
and
in
this
world
span
of
Chara
yeah
we
should
try
to
minimize
the
number
of
other
loads,
because
many
types
just
asked
to
span
and
then
he
would
have
this
method
here.
It
takes
fan
of
charge
and
everything
just
ask
that.
D
P
B
L
D
D
D
Before
mo
so
what
wall
you
most
typing
on
pad,
left
pad
right
or
the
only
API,
is
to
take
Chari
instead
of
Unicode
scalars
parameters,
the
reason
being
that
you
kind
of
have
to
pass
in
ASCII
characters
like
why?
Because
what
happens?
If
we
are
asked
to
have
and
the
character
that
you
pass
in,
doesn't
even
we
fit
into
the
amount
of
white
space
per
user?
D
So
you
want
to
you
pass
in
an
emoji
character,
for
instance-
and
you
say,
okay
pad
left
to
total
117
and
we're
like
okay,
we
run
out
two
and
a
quarter.
Emoji
characters
like
it
seems
like
it
seems
like
the
common
scenarios
going
to
be
people
having
with
tabs
or
spaces
well.
I.
Don't
think
that
this.
J
Belongs
here,
okay,
I
think
this
device
here,
because
it
depends
of
the
terminal,
implementation
and
Moe.
Just
like
you
pointed
out,
are
tricky
but
they're.
Not
only
that
body
won't
just
take
one
space,
the
problem
are
Chinese
characters
and
in
in
the
console
you
can
make
certain
assumptions
that
you
cannot
make
assumptions
beyond
that.
I
don't
mean
you
just.
M
Use
an
alternative
little
under
there
like
taking
people
to
use
system
hearing
right
now,
they
usually
think
of
it
as
each
character
will
have
one
printed
representation
on
sharing,
which
is
not
correct,
but
what
our
developers
think
doesn't.
So
the
question
is:
is
this
padding
in
bytes,
as
is
padding
in
scalars
or
this
padding
in
graffiti?
So.
D
D
M
D
M
D
G
D
Api
stood
of
the
same
thing,
I
hope
better
depending
on
scenario.
I
guess
like.
If,
if
your
scenario
is
to
avoid
allocations
as
much
as
possible,
while
using
this
type,
then
you
can
imagine
that
we
have
a
like
a
struct,
split
method
or
something
along
those
lines,
and
we
would
also
have
the
same
extension
method
on
system
string
and
that
would
return.
We
only
memories
to
you
like
any
numerator
over
and
only
memory
and
we've
just
entered
this
I
think
basic
yeah.
We
think
we
could
design.
B
B
B
M
Somebody
could
easily
write
the
array
with
themselves.
The
problem
is,
if
the
right
ones
in
their
face,
they're
gonna
call
it,
and
if
this
one
doesn't
have
it,
the
people
who
start
using
utf-8
realize
that
they
come
and
trim
that
split
there,
because
that's
what
they're
used
to,
but
they
could
use
the
describe
the
numerator
on
the
string.
So
getting
rid
of
this
would
actually
improve
education.
G
G
D
D
G
D
M
M
M
D
G
Let's
write
that
multi.
Another
thing
you
know
we
could
consider.
So
if
the
design
is
not
efficient,
API
yeah
everything's
have
no
merit.
It
should
just
try
to
make
it
as
efficient
down
to
the
metal,
meaning
I
can
have
the
separator
in
the
stack
no
static
data.
Oh
there's!
No!
All
the
discussion
that
we
had
last
week
about
the
overhead
that.
G
D
You
could
you
can
imagine
that
we
should
consider
putting
split
extension
methods
on
memory
in
Spanish
ball
and
see
what
those
would
look
like,
because
I
think
those
are
going
to
be
the
ones
that
people
use
and
really
high
performance
scenarios.
Consider
that
if
you
had
it
hanging
off
of
spam,
you
don't
have
to
deal
with
Shanti.
D
M
D
M
D
D
We
should
settle
on
our
answer,
forking
caps
and
see
how
that
shakes
out,
because
that
might
affect
our
answer
here,
but
I
actually
feel
okay
in
general
about
this
method.
This
becomes
the
types
of
code
I've
seen
people
write
in
practice:
don't
really
lend
them
to
doing
dangerous
things
have
bad
location
in
the
first
one
I
got.
M
G
M
A
G
M
B
Know
I
think
you're
just
shifting
the
problem,
I
think
if
you,
if,
if
we
make
really
long
identifiers
what
you
end
up
doing
is
you
you
push
a
whole
bunch
of
cons
on
the
developer
and
you
don't
get
more
clarity.
You
just
get
more
confusion.
The
opposite.
Is
you
find
a
small
set
of
concepts
and
you
stick
to
them
religiously
and
you
baby.
G
M
B
I
live
with
that,
but
I
would
say
that
as
diversity,
if
you
consider
it,
we
use
soft
string
right.
What
ends
up
happening
is
the
index
with
the
literal
like
index
of
the
troll
they
get
back
and
index.
They
take
that
index
positive
to
substring.
So
assuming
that
the
that
the
things
you
get
out
from
parsing
occurring
are
saying
also
not.
G
B
A
B
A
B
Have
one
index
of
method
that
does
all
sorts
of
clearing,
and
you
have
another
operation
that
given
an
output
of
this,
does
this
stuff?
Does
the
substring
you
make
this
concept
of
orthogonal
and
they
compose
as
soon
as
you
match
them
together?
It
means
you
have
one
journalist
method
that
now
has
to
handle
all
sorts
of
ways.
You
think
theory
and
producing
your
outputs.
I
will
do
that
so
come
this.
B
B
It's
Curie
like
do
you
match
case,
sensitively
or
case
insensitive?
You
have
to
pass
it
a
string
captures
right.
They
have
these,
then,
okay,
no
you
talk
about
outputs,
know.
You
have
substring
that
take
start
index
and
length,
so
you
have
to
have
these
two
and
now
you
multiply
them.
If
it's
number
of
things
that
we.
B
M
It
was
the
needle
in
haystack
problem.
You
need
to
have
a
way
of
telling
it
I'm.
Looking
for
the
third
or
fourth
event,
the
currency
is
with
index
you're,
like
oh
call
index
up,
and
then
you
call
index
up
again
passing
the
last
index
I'm
saying
that
you're
not
allowed
to
return
that
so
I
want
a
reader.
Oh.
E
M
D
D
D
H
H
D
Explicit
cast
is
cleaner,
encode.
The
reason
that
I
avoided
an
explicit
cast
is
I
didn't
want
to
developers
to
run
into
a
situation
where
they
have
a
string
and
inside
of
a
loop
they're
casting
the
string
to
utf-8
string
or
vice
versa,
and
then
passing
it
on
to
some
other
API.
If
you
have,
if
you're
calling
dot
to
string,
that's
a
very
clear
indication
that
you're
actually
performing
an
allocation
performing
to
memory
copy
stuff
like
that.
D
H
H
D
D
Asynchronously
utf-8
string
dog
house
memory,
dollhouse
bytes,
assuming
we
know
it
now-
is
an
extension.
Nothing
as
fights
goes
to
stand
out.
I
can't
have
that
in
that,
in
an
async
method,
no
UTA
chattering,
dollhouse
memory
returns
a
read-only
memory.
Incorrect,
a
space
returns,
a
read-only
memory
advice
since.
L
D
Utf-8
string,
yes,
dream
dot
right,
async
like
what
sorry
a
summary
later
taking
bites
right.
It
takes
a
read-only
memory
at
night
that
takes
for
you
only
memory
bite,
utf-8
string
as
memory.
You
get
back
your
read-only
memory
of
turret
down
those
bytes
which
gives
you
a
read-only
memory
of
bite,
and
now
you
can
say.
N
D
L
L
D
Could
it
could
it
could
be
backed
by
a
utf-8
string,
but
that
doesn't
mean
that
we
need
to.
It
doesn't
mean
that
we
need
to
slow
the
code
path
for
existing
sure
it
doesn't
set
by
a
right.
Well.
Well,
you're
gonna
have
that
typecast
to
check,
but
the
thing
is
yeah,
but
we
already
have
those
today
we
could
just
order
them
in
the
mechanism.
That's
going
to
be
most
common,
look
I!
Think
in.
D
L
It's
important
from
the
perspective
of
saying
that
this
is
the
API,
because,
if
that
negative,
like
we
do
that
with
string
tonight
with
read-only
memory
of
char,
but
that's
because
chars
are
less
common
than
bytes.
That's
high
throughput
scenarios.
We
have
that
use
read-only
memory
and
we
know
they
span
use
by
you
and
so
we're
talking
about
this
API
that's
public,
and
this
is
the
way
that
you
use
utf-8
string
these
other
things.
If
we're
saying
that
the
way
that
you
use
it
with
these
other
strings
is
by
adding
over
ahead
to
that
implementation.
L
G
D
G
C
C
D
You
know
the
name
I
can
I
can
call
it
scalar
enumerable
instead
of
scalar
sequence,
because
it
implements
all
you
numerable
of
unicode
scalar,
when
why
is
it
good
sequence
of
me?
Watching
stream,
its
substring
doesn't
actually
have
string
house
in
a
getting
numerator
method,
so
string
itself
is
ienumerable.
So
what
they
actually
return
is
a
char
you
later
it's
the
ienumerator
of
charlie,
so
we
would
have
a
scalar
enumerator,
but
we
also
need
something
that
returns
that
to
be.
We
need
something
that
actually
has
sleeve
getting
it.
Well,
we
have
treated
before.