►
Description
Round two of walking through the proposed API set:
https://github.com/dotnet/corefx/issues/21281
B
C
A
C
Right
now,
this
path
routed
returns.
Whether
or
not
the
specified
pack
contains
a
route,
and
the
assumption
is
that
if
it
is
passed
through
to
returns
true,
then
the
path
is
not
relative
and
her
most
cases.
This
is
true,
but
there's
one
case
where
he
have
a
directory
with
the
rear
of
the
directory
like
C,
colon
and
then
the
path
without
a
backslash.
C
Then
his
path
will
return
true,
but
this
path
is
actually
relative,
and
so
these
function,
that
is
populated,
returned
from
being
counted
as
false,
and
so
the
suggestion
is
to
have
a
new
method
is
possible
right.
That
would
tell
you
whether
changing
the
current
directory
will
change
the
path,
and
so
for
is
baffle.
D
E
F
Expect
it
to
break
a
ton
of
apps
if
we
change
it,
because
if
people
are
actually
looking
at
it,
this
routed,
which
doesn't
mean
that
it
doesn't
include
the
current
directory.
Weirdo
just
means
it's
routed
to
a
device,
is
what
it's
supposed
to
mean
or
what
it
does
mean
at
the
moment.
Is
that
linger
lying
on
that
behavior?
Then
it
would
break
them.
Yeah.
G
B
This
is,
this
is
basically
a
windows-only
concept.
Nobody
else
has
that
you
want
worth
that
then
I
think
we
need
two
different
api's,
because
otherwise
you're
like
okay,
the
past
is
not
rooted
or
except
it
has
a
drive
on
it.
So
like
that,
that
seems
very
weird
I
mean
that's
the
behavior
that
we
could
add
a
new
API
like
you
know,
as
as
drive
route
or
something,
but
then
the
question
is
well
I.
Guess
it's
pass
through.
This
is
home
with.
E
B
A
D
F
F
E
D
E
B
Certainly
written
code
like
this
into
a
store
up,
my
own
make
relative
path
function,
which
you
also
know
have
a
bit
didn't
used
to
have
and
I
basically
add
cool.
Like
you
know,
his
route
like
take,
it
is,
is
otherwise
make
relative
and
I'm.
Sorry
is,
if
yeah,
if
it's
not
make
it
relatively
so
that
all
of
that
cool
was
kind
of
like
busted
in
the
past.
E
What
about
did
you
consider
an
overload
of
is
routed
like
we
used?
We
ended
spring
split
with
spring
split
options.
Remember
that,
like
yeah,
you
could
have
something.
Light
is
routed
on
I
mean
it's
I
think
this
is
lame,
but
it's
funny.
If
we
could,
we
could
have
an
overload
of
is
routed
right
because
I
I'm
thinking
of
you
know,
path,
dot
and
now
I,
don't
know
which
one
to
pick.
Whereas
if
I
had
an
overload
and
I
know,
I'm
I'm
gonna
pick
his
path
routed
and
then
all.
H
E
F
E
F
D
F
D
F
E
B
Guess
one
of
the
niceties
about
this
thing
is
that
I
think
is
Pat.
Would
it
is
yes,
it's
a
neat
job.
You
have
for
a
long
time,
but
I
don't
think
it
matches
when
people
who
look
for
anyways,
so
I
think
generally
speaking,
like
people.
Think
of
you
know
getting
full
path,
and
it's
fully
qualified,
as
kind
of
like
things
that
are
related
is
parador's
only
something
that
you
find
out
the
browser
there
and
like
not
seeing
anything
else,
and
then
you
get
a
chance
right.
B
B
C
F
E
G
F
What's
relevant,
what
is
relative?
If
you
look
at
the
link?
That's
on
the
other
thing.
It
goes
to
the
MSDN
documentation,
but
relative
basically
means
that
some
part
of
the
path
is
relative,
not
that
it
has
current
working
directory,
so
the
documentation.
She
has
a
link
on
documentation
there.
Okay,
so
there's
fully
qualified
versus
relative
paths,
so
he
is
fully
qualified,
would
return
false
if
you
had
a
whole
path
ahead,
dot
dot
in
it.
No
it's
fully
qualified
would
return.
True,
fully
qualified
means
that
it
does
not,
and
it
will
not
change.
F
F
B
So
basically,
I
think
is
path
through
dirt
is
something
we
should
just
add.
Some
provide
guidance.
What
the
people
like
you,
don't
you
probably
don't
want
to
call
this
API
and
I
see
a
really
super
narrow
use
case
that
I
can't
even
come
up
with
and
then
the
other
one
is.
Basically
one
really
is
for
the
client.
This
is
fully
qualified.
G
A
terrible
example:
C
colon
backslash
checks
your
screen,
that
is
horrible,
just.
B
E
We
mentioned
that
if
we
just
fix
this
path,
we
today
would
break
people
with
it.
Yeah
I
mean
CDC,
C
would
say
well,
it
will
pass
yep.
You
work
it
and
everything
else,
but
but
would
it
be
impossible
for
someone
to
opt
in
to
the
clerk
because
they'd
likely
break
well?
The
way
clerking
would
usually
worked
is
that
you
would
say
if
you're
compiling
it.
F
F
G
The
problem
would
be
for
something
that
we're
returning
true
for
right
now.
If
somebody
doesn't
call
at
that,
combine
to
resolve
it
and
their
code
happens
to
work
with
a
relative
load,
and
then
we
change
the
behavior
and
then
now
they
start
calling
back
combined
and
then
evaluates
to
a
different
directory
than
whatever
was
going
to
have
happened,
because
the
place
that
they
do
the
check
and
the
place
they
do.
The
evaluation
could
have
changed.
Yeah.
H
B
The
bottom
of
Cynthia
nonsensical,
is
not
so
much
whether
it's
you
know,
since
it
is
nonsensical,
it's
more
about.
Do
you
change
the
condition
of
the
program,
so
let's
say
the
previous
one
returned
a
different
era
than
the
new
one
does
or
it
wasn't
no
I
mean.
You
could
imagine,
for
example,
that
the
old
Co
path,
the
file
didn't
resolve
to
an
existing
file
on
disk
or
the
program
handled
that
case
and
continue
now.
You're,
changing
it
to
a
father.
X
does
exist
and
is
another
program,
trust
our
supply,
but
the
yeah.
F
This
handles
it.
Okay,
the
current
implementation
handles
that
all
right
it
handles
it,
handles
all
all
known
path
formats.
It
just
code
is
actually
relatively
simple.
There's
a
link
to
that
as
well
and
the
thing
once
you
know
all
the
rules
for
the
windows
pass,
the
check
is
pretty
much
simply
looking
for
the
special
drive,
:
thing
and
also
looking
for
to
double
backslashes
is
is
UNC
fully
qualified?
Yes,
because
you
cannot
have
a
relative
path
for
UNC,
so.
F
F
F
B
E
F
G
F
E
F
D
G
F
G
A
D
I
just
have
one
question,
so
I
was
making
issues
last
night
and
I
for
both
bit
converter
and
gooood.
I
had
a
question
so
try
right,
bytes
I'd,
initially
assumed
that
we
didn't
have
to
tell
the
call
or
how
many
bytes
were
being
written
because
well,
if
they're
writing
along
it's
eight
and
if
they're
writing
a
float,
it's
four
and
whatnot,
but
do
we
think
we
need
an
out
parameter?
That
says
how
many
bytes
were
written
same
question
would
go
for
good.
G
G
A
B
D
A
D
F
It
assigns
a
bull,
give
you
the
one
interesting.
D
Or
a
zero,
it
writes
one
or
zero
as
a
bite
you
if.
D
F
F
I
B
D
D
M
H
K
D
G
D
So
I
think
the
logical
that
sort
of
the
only
thing
that
makes
sense
like
in
this
stream
case
is.
Oh
sorry.
So
there
are
two
deferral
issues.
One
is
what
do
we
defer
to
and
the
other
is:
when
can
we
do
more
optimal
things
and
derived
implementations
so
for
the
deferral
thing,
basically
there's
a
corresponding
method
for
all
of
these
and
I
think
we
just
delegate
to
that
one
so
read
span,
you
know,
read
span
char
span
delegates
to
read
char
arrays,
whatever
it's
called
I.
Think
there's
that's
pretty
straightforward.
D
D
The
trouble
is,
you
know
it
wants
to
do
the
more
efficient
thing,
but
that
more
efficient
thing
involves
not
calling
the
corresponding
method.
But
what?
If
someone
derived
from
memory
stream
and
overrode
those
other
methods,
they
would
still
presumably
expect
their
overridden
method
to
be
called,
and
so
our
overrides
on
our
streams
are
gonna
have
to
do
some
sort
of
currently.
The
best
thing
we
can
do
really
is
just
a
type
check.
Are
we
a
concrete
memory
stream?
If
yes
do
the
more
efficient
thing?
D
If
no
calls
to
the
base,
which
we'll
end
up
doing
the
delegation
and
what
I
don't
have
in
this
issue,
but
which
we
should
talk
about
when
we
actually
should
talk
about
now,
it's
probably
a
good
time
as
any
is.
If
we
want
to.
We
could
then
expose
out
from
our
concrete
streams
that
are
not
sealed
a
protected
version
of
the
more
efficient
implementation
which
the
public
method
would
just
call
and
derive
types
could
call
if
they
wanted
to
as
well
so
memory
streams,
efficient
implementation,
just
copies
between
two
and
memory
buffers.
D
Basically,
so
we
would
have
a
protected
method
that
just
copied
between
the
buffers.
We
would
have
the
public
method
that
called
the
protected
method,
and
but
only
if
it
was
a
concrete
memory
stream.
If
not,
it
would
call
to
the
base
and
then
a
drive
type
if
it
was
just
over.
If
it
was
overriding
the
method
entirely,
it
wouldn't
have
to
do
anything.
If
it
wasn't,
it
could
choose
to
override
it
and
call
the
base
protected
method.
Presumably.
D
G
So
I
guess
I'm
wondering
if
in
something
like
text
reader,
if
we
could
do
yes
so
find
the
place
that
we
can
make
the
best,
you
know
shared
implementation
and
then
like
in
the
constructor
of
that
type,
set
a
protected
or
set
a
private
boolean
based
off
of
doing
the
type
check.
So
we
only
do
it
at
construction
time
and
not.
You
know
every
call
into
read.
G
D
The
check
is
I,
thought
of
it
is
gonna,
be
if
I'm
in
tight
foo
if
get
type
equals
type
of
foo
than
X
else.
The.
Why
but
I
mean
it's
possible.
We
could
do
perf
testing
and
find
that
it's
better
to
do
that
check
in
the
constructor
and
cash
it,
in
which
case
we
can
totally
do
that.
It's
hidden
from
the
API
surface
area
and.
D
Yeah
I
mean
it's
pretty
rare,
actually
that
we
have
an
intermediate
type,
at
least
in
streams.
There's
like
one
or
two
cases,
I
can
think
of
I.
Think
like
SSL
stream,
derives
from
no,
but
even
then
it's
it's
pretty
rare
that
maybe
I
think
it's.
The
only
one
I
saw
was
isolated
file
stream
deriving
from
file
stream,
maybe
but
I
think
we
should
just
deal
with
it
on
a
case-by-case
basis.
All.
I
I
G
D
I
think
the
the
base
implementations
will
just
work,
its
it'll
be
a
question
of:
are
they
as
efficient
as
they
could
be?
The
base
implementations
will
either
like
for
the
buffer
taking
ones
like
if
the
buffer
wraps
an
array,
they
will
just
be
functionally
and
almost
performance-wise
equivalent
to
the
array
ones
we
already
have
and
four
otherwise,
you
know
they'll
they'll,
be
the
extra
costs
of
array,
pool
interaction.
D
I,
think
the
tail
will
be
streams
where
there
is
something
more
efficient
that
can
be
done
and
having
to
go,
and
you
know
do
the
overrides
on
all
of
them.
So
I
don't
think
we're
gonna
find
much
of
a
functional
bug
tale,
but
there
could
be
a
perfect
tale.
You
know,
there's
there's
something
like
tens,
ten
or
twelve
streams
in
core
FX
and
core
CLR,
where
it's
gonna
be
important,
that
we
go
in
over
I
these
for
performance
reasons.
D
Not
gonna
be
nearly
as
bad
as
some
of
the
like
blocking
deadlocking
issues.
We
saw
that,
but
those
were
mainly
due
to
the
issue
where
we
had
completely
removed
the
intermediate
begin
end
methods
in
some
profiles
and
because
of
that,
we
introduced
a
whole
host
of
potential
problems.
If
you
ran
on
a
platform
that
actually
had
them.
D
But
yeah
we
we
are
going
to
have
I
expect.
There
will
be
a
tale
of
streaming
implementations
where
oh
right,
we
have
to
go,
implement
these
there
as
well.
So
I
will
proactively
open
issues
for
all
the
ones
that
I
can
find.
In
course,
you
learn
core
effects,
but
we'll
need
to
we'll
probably
need
to
track
down
and
help
others
in
their
own
repos.
You
know:
do
the
more
efficient
thing
the
interesting
part
will
be
when
people
start
consuming
these.
D
You
know,
if
someone's
using,
if
someone's
using
a
new
word
neck
core,
that
has
these
methods
and
so
they're
calling
they're
consuming
them
and
someone
else
has
targeted
net
standard
and
thus
hasn't
overridden
these
you're
gonna
get
the
base
implementation,
which
will
at
best
be
as
efficient
as
the
current
him.
You
know
stuff
but
may
actually
add
a
little
bit
of
overhead.
D
Stream,
one
on
the
stream,
although
we'd
have
to
look
at
the
implementation,
it
probably
depends
I
mean
we
may
not
even
change
the
implementation,
or
rather
we
may
change
the
implementation,
like
I.
Think
if
I
remember
correctly,
stream
reader
has
like
one
method
that
it
always
goes
through
to
read
to
fill
its
buffer
from
the
underlying
stream
to
fill
its.
D
B
D
D
So
tasks
you
you
can
always
there.
There
is
only
one
possible
completed
task.
It
is
tasks.
There
are
an
infinite
number
of
possible:
well,
not
infinite.
There
are
2
billion
4
billion
possible
int
return
values.
So
there
is
a
single
cash
task
task
that
completed
tasks,
which
you
can
always
return.
But
there
is
we
can't
cash,
4
billion
tasks,
events,
so
we
returned
value
tasks.
You
don't
have
to
allocate
to
return
value.
I
B
Mean
in
the
journal
assumptions
when
you
do
read
a
sync
on
a
buffer
that
the
underlying
buffer
is
bigger
than
what
you
pass
in
so
that
here
is
that
majority
of
cases
you
can
just
return
the
completed
tasks
and
every
once
in
a
while.
You
actually
have
to
do
a
tasting
operation,
so
their
camera
twice
once
you
locate
that.
But
why
is
writing
oh
yeah?
Because
writing
it
seems
that
you
can
catch
the
task,
so
in
that
case
you
don't
have
to
defeat
it.
Your
swimming
everything's
good,
most
of
the
joy
it
takes.
If.
I
D
Have
shared
guidance
and
various
forms
on
various
posts
and
whatnot
I,
don't
know
if
we
actually
have
any
in
the
doc
we
should.
My
guidance
has
basically
been
if
the
thing,
if,
if
your,
if
your
API
is
always
going
to
return,
asynchronously
just
used
just
use
the
task.
If
your
API
is
going
to
return
a
a
fixed
number
of
possible
values
like
if
it's
either
non-generic
or
it
returns
a
bool
or
something
other
with
a
fixed
number
of
possible
results,
then
the
overturn
task,
return
task,
a
bool,
etc.
D
D
The
problem
is
value,
task,
isn't
always
a
win
like
it's
bigger
than
a
task,
for
example,
because
it
you
know
it.
It
contains
a
reference
to
a
task
n
to
the
T,
and
so,
for
example,
if
you
await
a
value
task
returning
function,
your
state
machine
will
have
an
extra
field
in
it
more
than
what
it
would
have
had
in
the
task
and
every
call
to
access
this
goes
through
an
extra
branch
and
etc
etc.
I
H
I
B
D
B
B
I
B
B
I
D
It's
potentially
mine,
so
there
are
some
places
where
code
will
check
whether
it
can
get
the
array
from
a
memory
stream,
for
example,
and
if
it
can't
like
it'll
it'll
type
check.
Is
this
a
memory
stream?
If
it's
a
memory
stream
can
I
get
its
array?
If
it
can,
then
I
can
do
various
things
based
on
that
and
so
having
the
interface.
If
we
implemented
it
on
memory
stream
on
it,
you
know
memory
stream,
buffer,
unmanaged
memories,
stream
and
I
guess
read-only
buffer
stream.
D
I
think
we
should
I
wanted
this
one
issue
as
a
way
to
kind
of
go
through
everything
together,
but
I've
already
started
opening
separate
issues.
If
you
scroll
up
you'll,
see
places
where
I
said
separated
out
as
XYZ.
You
know
issue
and
my
goal
would
be
that
once
we're
done
with
once
we're
done
with
this
review,
we
can
close
this
issue
and
just
have
the
individual
issues
that
people
can
tackle
individually.
So
I
will
make
sure
that
everything
has
individual
issues
and
then
we
can
close
this.
B
D
D
There
may
be
some
other
streams
as
well.
I
mean
it's
possible,
you
could
even
imagine
you
could
imagine
implementing
it
on
rapper
streams
as
well,
and
it
would
just
you
know,
check
whether
the
stream
that
I
was
rapping,
implemented
the
interface
and
then,
if
it
did
delegate
to
it,
if
it
didn't
return,
false.
B
That's
exactly
why
I
was
skeptical
of
the
value
of
this
thing
is
because,
as
your
delegation,
the
interface
check
alone
doesn't
actually
help
you
right,
because
you
have
to
statically
decide
whether
you
dynamically
rap
on
it
does,
and
then
you
would
always
have
to
do.
It
itself
would
have
a
query
method
and
before
you
might
as
well
just
add
it
to
the
base.
Well,.
D
The
that's
true
me:
we
could
just
add
it
to
stream,
it's
already
a
try
method,
so
it
can
already
fail
even
on
something
like
memories
stream.
It
can
fail,
because
when
you
construct
a
memory
stream,
you
can
say
I
don't
want
my
buffer
exposed
and
then
try
get
buffer
will
fail
or
try
get
array
whatever
it's
called.
B
D
A
B
D
F
D
You
know
you
give
it
a
pass,
do
we
have?
We
already
have
byte
array
versions
of
these,
so
this
is
just
the
span
versions.
Basically
you
call
it
and
you
give
it
the
data
you
want.
It
opens
the
file,
it
writes
it
out.
It
closes
the
file
and
write
and
append
versions
of
those.
The
read
ones
are
more
complicated
and
I'm
I.
Don't
I,
don't
know
what
the
right
answer
here
is,
so
you
can
read,
but
you
don't
necessarily
know
how
big
your
span
is.
D
B
D
D
Could
potentially
have
you
could
potentially
have
like
safe
file
handle
and
give
safe
file,
handle
and
open
method,
and
then
have
these
read
all
bites.
Excuse
me
methods
taking
a
say
file
handle,
so
maybe
that's
something
we
want
to
consider
for
the
future.
You
potentially
have
a
similar
thing
with
right
all
by
the
way,
because
you
might
you
know
if
you're
getting
your
your
data
in
increments
and
spans,
you
may
potentially
you
similarly
be
writing
4
Kbytes,
writing,
4,
Kbytes,
writing,
4
Kbytes,
so
we're
in
sort
of
this
gray
area
here.
D
G
H
B
G
D
Read
that's
what
I'd
intended
at
least
but
I
like
I,
said
these
all
get
into
this
complex
territory,
and
it
could
be
that
the
value-added
here
is
so
little
you
might
as
well.
Just
do
you
know
open
this
file.
Dot
open
right,
make
a
call
on
the
stream,
because
at
that
point
you
can
just
call
you
know
stream,
dot
right
and
pass
in
the
buffer
or
the
span,
and
you
close
it.
So
maybe
these
helpers
are
no
longer
particularly
valuable.
Everything.
G
G
B
Like
those
ones,
the
reason
why
I
like
those
is
it
there,
if
they
effectively
the
printf
of
binary
data,
you
can
just
say
I
the
buffer,
just
dump
it
to
the
file,
and
you
just
look
at
it.
You
don't
have
to
really
using
or
you
I
think
they're
just
convenient
I
would
still
have
those
but
making
a
highly
performant
app.
It's
also
not
something
you
would
use
a
lot
right,
but.
G
D
Argue
that
append
all
bytes
is
also
bit
like
write
all
bytes,
because
you're
gonna
wipe
wipe
out
the
stream
like
you
have
to
be
writing
the
full
thing.
So
it
kind
of
there's
it's
sort
of
the
most
efficient
thing
you
could
do
append
all
bytes
I
would
worry
that
you're
gonna
be
using
this
in
some
sort
of
repeated
fashion,
where
you're
gonna
get
ten
bytes
and
write
them
out.
Ten
bytes
and
write
them
out
and
then
you're
gonna
be
repeated.
F
I
G
B
D
D
B
F
B
G
G
B
Method,
it's
not
about
performance,
I
mean
what
what
see
just
said
like
it's
like
you
can
write
all
bytes,
that's
right,
so
I
mean
I.
Given
them
you
already
the
remaining
ones.
Maybe
we
should
just
start
with
file,
doesn't
have
any
overloads
and
until
proven
otherwise,
I
think
that's
also
visual,
offering
today
at
least
it's
somewhat
consistent
by
was
it's
bit
weird
to
have
on.
D
B
B
I
D
I,
don't
have
a
great
set
like
so
you
I,
unless
we
added
some
sort
of
specific
overloads
for
now.
I,
don't
know
how
we
would
you
wouldn't
use
this
read-only
span
of
char
as
the
arguments
that
were
like
inserted
into
the
format
string
and
at
least
in
my
experience
most
times
the
format
string
isn't
dynamically
generated.
It's
some
fixed
bit
of
text
with
the
holes
to
be
filled
in
which
wouldn't
be
a
read-only
span
of
char
either.
So
where
would
a
span
fit
into
a
format.
I
Maybe
it's
not
even
a
public
if
you
have,
but
it
would
be
internally.
I
feel
like
we
need
to
get
a
sort
of
a
good
code
path
through
the
append
logic
in
and
stringbuilder
such
that
we
can
past
abuse
spans
as
the
buffers
that
we're
writing
to.
As
we're
building
these
things
up,
we
can
eliminate
a
lot
of
allocations.
We.
D
G
I
Static,
a
piano
string,
the
string
that
format
API.
If
we
pass
in
a
span,
you
basically
do
all
the
formatting
into
that
buffer.
Well,
behind
the
scenes
my
post
string
builder,
which
is
what
need
to
be
passed
through
or
in
half
use
buffer
as
well
so
I,
don't
know
what
a
PS
we
need
to
get
make
that
all
yeah.
D
So
you're
saying
I
think
that
you're
saying
get
a
read-only
buffer
from
string
I,
don't
believe
we
have
any
way
to
do
that
and
then
also
have
string
builder,
dot
format,
methods
that
take
one
two,
three,
four
five,
six.
Whatever
generic
type
arguments
such
that
you
could
pass
a
read-only
buffer
as
one
of
those
without
boxing
it.
B
D
D
Should
just
fix
that
and
we
can
fix
that
easily
once
we
have
methods
like
in
32,
dot,
try
format
with
a
span
like
it'll,
be
trivial
yeah
the
form
the
whole
format
string
thing
I
agree.
You
know
if
we
had
a
a
string
format
that,
instead
of
generating
a
string,
had
wrote
to
a
span
of
char,
like
that
seems
pretty
nice,
but
maybe
I
agree.
Maybe
we
should
separate
out
that
higher
level
format
strings
thing
into
a
separate
issue
and
someone
tackles
that
directly
and
make
sure
end-to-end.
It
looks
nice.
I
D
D
D
I
D
D
D
I
think
it's
an
interesting
idea
that
should
be
left
as
an
orthogonal
unrelated
issue
to
be
addressed
separately
yeah,
but
it
would
alleviate,
would
potentially
alleviate
the
need
for
something
like
stringbuilder
cash.
It's
yeah,
you
could
just
be
you
could
well,
maybe
not.
You
still
need
to
allocate
the
stringbuilder
yeah
I,
don't
know.
D
Alright,
so
encoding,
the
encoding
class
already
has
a
bazillion
methods
on
it,
but
you
know
that
work
in
terms
of
charge,
stars
and
char
arrays,
but
there's
a
small
hand.
If
you
just
add
a
few
that
work
with
span
you,
you
know
you
could
basically
use
encoding
without
having
to
worry
about
allocating
arrays
and
the
like.
You.
J
D
The
preamble
thing,
so
that
was
one
that
just
invent
patent
and
Yan,
had
both
talked
about
adding
today.
There's
a
get
preamble
method
that
returns
a
byte
array
containing
the
preamble
for
the
encoding
like
the
the
bomb,
and
if
we
did
it
as
property
that
just
returned
to
read
only
span,
we
could
simply
have
an
encoding
cache,
an
array
of
of
its
preamble
and
then
always
just
return
to
read
only
span
around
that
same
array.
G
D
Know
it's
a
good
point.
I
raised
a
similar
issue
and
I
think
John's
point
was
valid.
Is
you
know
it's
called
dangerous
if
you
hidden
it
now
that
we're
in
a
world
where
you
know
Kaz
is
basically
deprecated
and
you're
single.
You
know
you're
you're
you're
in
a
world
where
no
you're,
you
own
your
destiny,
for
your
whole
process,
like
you
can
do
whatever
you
and
if
you
mess
with
it.
Well,
that's
your
problem.
I.
G
B
I'm
18
of
16
right
the
wrong
ball
and
I.
Give
this
even
consistent
with
a
volatile
cast,
so
I
don't
mean.
Thank
you.
We
had
private
reflection.
We
just
disabled
that
there's
a
lot
of
it
cats
right
in
the
same
way,
but
as
you
call
those
the
API,
you
could
load
them
in
cast
as
well.
I
mean
it's
just
about
speed,
bumps.
G
I
I
D
Actually
they're
not
called
try,
so
it
did
I
call
them
trying
the
issue.
Maybe
I
did.
Maybe
we
shouldn't
like
there's
already
a
you
know:
encoding
dot,
get
bytes
method
that
takes
a
charge
star
in
a
char
count
and
a
bite
star
in
a
byte
count
and
returns
an
int
we
could.
Maybe
we
shouldn't
even
call
these
try.
We
should
just
emulate
the
existing
methods.
Well,.
G
D
The
thing
that
Christophe
had
pushed
back
on
a
little
here
was
it
doesn't
return
how
many
chars
were
consumed,
which
this
version
I
believe
duh
yeah.
So
if
you
wanted
to,
like
you,
know,
you're
you're
reading
along
you
run
out
of
destination
space.
So
now
you
want
to
like
pick
up
where
you
left
off
the
current
methods.
Don't
tell
you
how
to
do
that
because
they
don't
tell
you
where
you
left
off
in
your
chars
or
your
input
bytes.
So
these
methods
that
I
added
do.
B
I
D
F
G
G
B
Like
I
think
that
to
me
considering,
the
complexity
of
Collin
is
having
uniformity
and
the
appearance,
I
think
is
very
important,
so
I'd
rather
move
to
a
give
either
we
do
booths
across
the
board
over
the
transformations
that
is
across
the
board.
I
mean
one
of
the
two:
it's
either
one
of
them
right
and
considering
that
the
pool
doesn't
work
in
all
cases,
probably
going
to
wait.
D
B
B
A
And
always,
is
that
good
enough
I
think
it
is?
We
still
have
the
parameter
for
the
concern.
J
G
B
B
We
do
need
to
take
into
consideration
the
existing
your
peers
on
no
I,
don't
believe
so
because,
because
if
you
try,
if
you
change
your
code
from
byte
arrays
to
spans
it's
gonna
drop
in
replacing
you
write
the
entire
like
the
way
you
call
the
API
is,
will
be
different
and
so
I
think.
If
you
always
move
to
the
same
I,
don't
it's
much
easier
as
if
you
move
to
better
name
class,
ain't,
right,
I'm
being
classy
and.
A
B
So
you
has
to
do
something
else
anyway,
like
I
mean
currently,
you
you
basically
have
to
catch
an
exception
than
the
I
mean
you're
too
small.
You
should
recover
from
that.
So
this
is
the
whole
point.
Is
that
whatever
code
you
have
currently,
you
have
to
change
the
way
you
said
it.
There
won't
be
any
exceptions.
The
only
exception.
G
I
G
A
property
on
encoder,
which
is
throw
on
overflow,
which
throws
if
it
hits
a
point
where
there's
not
enough
space
of
the
destination
I,
don't
know
who
said?
Oh
all
the
gift,
bytes
I'm.
Looking
you
here
check
the
bounds
before
you
start
writing
the
ones
that
they're
raised
and
then
they
go.
They
get
bites
that
takes
a
char
star
and
the
bike
start
yeah.
I
G
I
I
B
The
heck
they
want
yeah,
the
only
problem
with
like
adding
these
to
existing
types,
I
mean
I.
Think
your
principal
has
been
that
we
generally
want
to
keep
the
semantics
of
the
existing
time,
meaning
the
kind
of
issues
that
we
are
throwing
for.
Not
throwing
for
should
be
all
about
the
same
I
think
they
were
like
you
want
to
deal
up
spans.
We
kind
of
have
to
make
a
decision
with
more
important
for
us,
I.
B
Think,
generally
speaking,
when
you
move
to
spans
I
believe
we
should
make
sure
that
when
we
call
this
method,
we
generally
don't
throw
for
size
issues.
I
think
side.
Users
should
be
just
communicated
through
the
pattern,
because
otherwise
you
have
a
really
hard
time
using
span
based
overloads.
You
know
across
the
VCL,
because
in
some
cases
at
those
other
kids,
it
doesn't
I
think
that's
where
having
a
bit
more
I,
think
symmetry
with
the
usage
is
I'm,
not
an
entire
sure
we
can
do.
We
can
be
successful
in
that,
because.
I
G
B
They
start
doing
it
like
that.
What
you
just
said,
I
think,
is
a
slightly
orthogonal
angle,
which
is
like
the
king,
Kimmy
Kimmy
do
spends
in
principle
all
right
period
and
then
I
think
yours
is
more
like
for
the
error
conditions
that
we
have
I
mean
the
one
thing
you
could
do.
You
could
just
catch
the
exception
and
return
the
puppet
error
code,
but
it
may
still
be
better
than
propagating.
G
Of
intercept
their
shape,
pointers
the
encoding
when
the
way
that
the
encoding
classes
work
is
when
you
call
the
safe
API
that
returns
an
array,
it
calls
it
count
which
passes
the
data.
It
figures
out
how
big
the
thing
is
going
to
be,
and
then
it
calls
go
and
then
internally
they're,
like
one
stupid,
we
do
all
the
work
twice,
so
they
just
hope
that
they
have
a
big
enough
buffer
and
they
call
go
so.
B
They
separate
these
two
issues
like
what
you
just
said,
I
think
I
buy
like
if
they
have
a
pointer
base
overloading
already.
We
should
probably
match
that
consume.
That
is
it
we
space
it
just
save
pointers
if
you
will
and
then
the
other
cases
where
we
have
methods
that
produce
an
array,
no
move
to
spend.
Like
my
point
there
is
that
I,
don't
think
we
can't
have
the
same
semantics
logically,
because
you
have
to
call
this
table
tennis,
trainer,
right
and
so
I.
Think
in
that
case,
the
question
is:
what
should
you
do.
F
B
I
G
G
Of
the
form
I
can
believe.
Oh
my,
my
comment
about
the
word
tries
with
try
we're
we're
clearly
going
with
whatever
call
it.
The
track
parks
pattern,
which
is
common
errors,
return
false
and
if
we
picked
some
other
words,
so
we
were
introducing
a
new
pattern,
then
we
could
still
stick
with
in
places.
We
would
throw
an
exception
right
now.
We
throw
an
exception
on
invalid
data
and
then
we
only
return
false
for
a
links
problem,
and
then
this
would
be
the
new,
like.
G
B
Source
yeah
I
think
at
some
point,
I
think
crew.
So
for
me
you
have
to
write
a
few
conditions
that
we
need
to
handle
I.
Think
if
you
literally
will
just
write
something
and
you
pass
innovated
that
is
not
from
a
buffer
I.
Think
I
ride
is
very
same
pattern.
The
other
thing
is,
if
you
need,
then
try
also
seems
to
be
sensible
pattern,
because
you
really
only
want
to
fill
a
buffer
and
you
only
ever
condition
you
can
have.
Is
it
the
buffer
is
too
small
right?
B
So
if
the
only
condition
you
have
is
buffer
too
small,
either
the
destination
side
or
on
the
source
side,
because
you
only
have
one
buffer
I
think
try
is
holding
on
the
back
pattern
as
soon
as
you
do
transformation,
meaning
you
read
from
Bambaataa,
you
write
to
another
buffer
and
you
do
processing
in
between.
You
multiply
your
error
code,
so
I
think
that's
where
I
think
the
transform
pattern
is
is
more
sensible
because
you
no
longer
have
a
single
error
case.
I
The
encoding
fallbacks
actually
look
like
they're
going
character,
my
character,
so
you
what
say
that
passed
in
the
fluid
the
character
to
the
other
side,
yeah
you're,
basically
getting
next
character,
there's
basically
a
being
phobic
buffer.
Let
it
go
and
then
you
can
get
busy
passing
an
unknown
character
and
then
you
get
a
set
of
character
to
do
back.
I
So
how
would
they
handle
a
surrogate?
That's
exactly
how
they
handle.
Sorry,
you
get
out
of
them,
kicked
in
you
potentially
get
one
or
more
or
no
characters
every
turn
use
it
and
they
actually
have
a
the
for
surrogate.
They
basically
have
to
use
another
load
on
the
callback
that
sticks
to
the
high
and
low.
Oh
is
this:
is
this
any
bites
to
chars
problem
or
the
charge?
The
bites?
I
think
this
is
probably
going
to
end
up
being
using
both
to
some
degree,
there's
a
decoder
in
I.
Guess.
B
I
B
A
A
That's
right:
we
would
not
have
that
yeah
all
right.
All.
B
A
H
D
D
You
can
so
you
can
determine
so
it
would
still
throw
for
invalid
input
like
a
bad
encoding
right
and
it
would
return
if
you
didn't
have
enough
source
characters.
You
could
determine
that
by
checking
whether
chars
consumed
equals
source
dot
length
and
if
you
didn't
have
enough
destination
space,
you
could
determine
that
by
checking
whether
well,
basically
the
opposite
of
that.
Basically,
if
it
didn't,
if
get
bytes
returns,
destination,
dot,
length
and
chars
consumed
as
less
than
source
dot
length,
you
know
you
have
to
call
again
the.
I
I
G
G
Alternately
the
people
who
are
comfortable
calling
the
Pointer
without
the
encoding
pointer
base
to
get
bytes.
They
obviously
understand
or
think
they
understand
what
they're
doing
so,
adding
the
span
versions
to
get
the
better
link
balance
of
needing
to
manage
them
in
parallel
is
a
little
better
I.
B
On
what
we
said
earlier,
but
it
may
not
hold
up,
but
I
think
we
need
to
basically
have
that
written
up
somewhere
and
like
agreed
upon
cuz.
Otherwise
you
will
have
this
discussion
on
every
single
time,
so
my
gut
feel
generally
is
and
I
think
that's,
maybe
something
that
is
similar
to
how
West
thinks
about
this.
B
So
we
could
make
the
stance
and
say:
ok,
we
generally
try
to
match
existing
types,
because
the
idea
is,
if
you're,
really
going
after
high-performance
stuff,
you
probably
would
use
you
know
the
new
API
is
that
our
inquiry
effects
lab
anyway.
So
the
value
that
adding
spam
is
overloads
have
two
existing
types
is
less
about.
You
know,
you
know
highly
getting
it's
more
about
she'd
already
had
it
done
in
part
of
my
app
so
now
I
have
a
span
in
my
hand,
there's
not
a
part
of
my
app
that
it
hasn't
been
satisfied.
B
Yet
so
after
going
through
existing
API
and
so
I,
don't
have
an
overload
now.
I
have
to
do
a
whole
bunch
of
gymnastics
to
create
a
byte
array
or
something
and
then
copy
the
data
manually
and
then
whatever
the
other
type
can
do,
is
pull
it
better
than
what
I
could
do.
Plusses.
Let's
work
on
my
side,
they're
still
probably
doesn't
mean
that
I
get
the
best,
and
it
also
goes
back
to
things
like
here
and
we
say:
oh
you
know
the
existing
one
throws
so
this
one
still
keeps
drawing.
G
But
what
about
the
other
gate
lights?
So
the
because
the
the
problem
with
like
convert
from
base64
is
you.
There
was
never
a
scenario
where
you
gave
it
too
small
of
a
destination
because
it
produced
the
destination
array,
so
it
always
gave
you
one
that
was
the
correct
size.
But
now
because
there's
the
overload
here
we're
not
talking
about
which
is
the
gate
charge
which
returns
by
the
right,
it
asks
how
big
it
needs
to
be.
It
feels
it
using
the
pointer
method
and
then
it
returns
it
to
you.
G
G
We've
introduced
a
new
error
case
and
they
were
removing
that
error
case.
I
think
the
problem
is,
if
we
moved
to
this,
for
overloading
try
in
a
way
that
I
think
will
confuse
colors
so,
which
is
where,
if
we're
just
introducing
a
new
prefix
for
I
used
to
return
you
an
array
that
was
the
right
size
and
now
you
have
to
give
me
a
buffer.
Well.
B
That's
why
I
grieve
you,
but
that's
why
I
think
the
overloaded
as
it's
written
here
is,
in
my
opinion,
correct,
so
we
either
go
with
one
that
is
aligned
with
the
transform
pattern,
in
which
case
it
wouldn't
be
try.
It
would
return,
transformational,
setters
and
just
be
called
get
by
it,
or
we
mentioned
the
existing
over.
Those
two
also
happens
to
be
called
get
bytes,
and
then
you
know
returning
in
the
same
way.
It's
there
I
think
this
try.
When
you
have
multiple
different
error
cases,
it's
generally
a
bad
idea.
B
Yes,
and
that
is
basically
the
cool
that
is
this
one
here
right
right,
yes
and
so
I'm
saying
the
signature
of
this
thing
is
I
think
wrong.
Either
we
match
the
existing
pointer
based
one,
which
is
also
called
get
bytes,
or
we
go
with
the
transform,
based
approach,
in
which
case
you
would
call
it
some
either
either
you
could
call
it
public,
get
bytes
or
note.
D
Or
something
so
for
now,
why
don't
we
just
go
with
it,
basically
exactly
they're
as
close
as
possible?
What's
there,
which
would
basically
be
int,
get
bytes
read-only
span,
chars
span,
bytes
close
close
paren,
and
if
we
want
to
subsequently
add
the
transform
thing
that
we
can
add
an
entirely
new
API,
that's
exactly
what
we
want
it
to
be.
If
we
miss
miss.
H
G
B
Yeah
I
think
for
basics
before
even
that
it
was
so
close.
Christopher
possibly
could
almost
merge,
base64
elected
to
rfx
type,
with
a
fifth
convert
in
which
was
the
you
know,
the
point
would
become
good
because
the
new
one
is
effectively
the
low-level
high
performance
versus
this.
One
is
more
about
you
know.
This
is
not
the
high
performance
encoding
API.
B
Yeah,
that's
why
I
think
it
would
be
helpful
for
us
if
you
would
first
agree
on
that
principle
and
then
see
whether
we
can
actually
apply
it
in
all
cases,
I
mean,
as
I
said.
My
gut
feel
is
that
the
I
think,
if
you
have
static
upper
methods
like
basic
support
or
the
convert
class
I,
think
it's
almost
possible
to
say
the
span.
B
Based
versions
are
the
high
performance
ones,
but
when
you
talk
about
things
like
encoding
very
effectively,
has
whenever
class
hierarchy
with
virtual
methods
or
text
reader
text
writer
that
sort
of
thing
the
problem
is
you
never
get
to
the
high
performance
thing
anyway?
So
then
the
question
is
okay.
B
If
we,
if
we,
if
you
don't
get
there,
what
do
we
think
is
more
important
like
match
to
high
perform
an
API,
shame
or
just
have
it
so
that
if
you
happen
to
have
a
span
in
your
hand,
if
you
can
still
call
these
api's
meaningfully
and
then
it
deal
with,
you
know,
say
narrow
conditions,
because
I
think
the
problem
is
also.
If
you
go
with
transformations.
That
is
it's
possible
that
we
can
never
return
to
you
transformations
that
it's
invalid
data,
because
the
way
the
API
is
are
structured.
B
They
always
end
up
throwing
anyway
and
then
we
would
have
to
enemy,
probably
caption.
It
was
remedy,
but
they
may
not
be
the
right
approach
either,
but
yeah
I
mean
I'm
somewhat
undecided,
but
I
think
that's
what
we
should.
This
all
just
wrote
this
down
and
then
let's
just
look
over
their
remaining
api's
in
the
last
seven
minutes.
If
you
have
hopefully
we
can
you
actually
finish
this
on
all
other
thing
is
way
more
stuff,
let's
at
least
try
to
finish
the
like.
D
D
D
D
It
would
need
to
take
an
out
into
bytes
written
as
well
unlike
gooood
and
the
various
primitives.
There
is
no
size
of
big
integer
to
determine
how
many
bytes
it
contains
and
then
parse
and
try
parse
and
I.
Don't
remember
if
there's
a
big
integer
about
Parsons
act
that
we
would
need
to
go
add
again,
but
I
guess
based
on
our
previous
discussion.
So
we
need
that
to
we.
I
B
H
G
N
D
And
the
theory
is
in
a
case
like
these
print,
like
what
we
previously
talked
about
with
the
primitives.
Is
you
just
it's
such
a
short
operation
in
general
that
you
just
start
from
the
beginning?
Now,
maybe
big
integer
is
you
know,
maybe
it's
more
expensive
so
that
doesn't
hold
but
I
I,
don't
even
know
what
big
is
your,
whether
you
can
so
go
ahead?
Job.
B
L
G
That
we
could
take
the
calculation
it's
doing
right
now
in
into
byte
array
and
factor
that
out
to
a
method,
because,
given
the
current
value,
it
will
always
have
a
big
size
and
we
can
just
expose
the
method
of
get
by
get
by
count,
because
even
if
we
do
the
part
where
we
didn't
come
back
and
say
man,
it
really
sucks.
The
big
integer
is
little
endian.
Instead
of
like
lets,
you
specify
your
encoding
that
the
byte
count.
G
I
G
B
Handsome,
what
is
it
so
I
think
for
things
like
this
Ryu,
but
you
could
know
the
size.
It
makes
sense
to
give
me
an
API
to
do
that.
Right.
I
mean
like
there's
no
point
in
growing
things.
If
you're
in
other
day
I
mean
he's
younger
growing,
is
it
growing
is
something
that
happens
very
real
because
I
mean
you
if
you
write
data
or
like
say
in
a
given
four
K
buffer,
so
how
many
cases
you
can
actually
run
into
when
the
buffer
is
too
small?
So
when
it
actually
finally
happens?
B
Well,
then
the
cost
of
that
is
not
too
bad.
If
you
have
to
do
a
massive
dance,
because
it
takes
you
three
or
four
days,
we
have
the
correctly
sized
buffer,
then
you're
only
wasting
memory
also
wasted,
but
I
think
in
cases
like
this,
but
you
could
actually
ask
for
the
correct
size,
yeah,
so
I
think
every.
G
A
K
B
D
But-
and
that's
do
we
really?
Okay
I,
don't
know
I
kind
of
buy
it
for
big
integer
because
you
could
have
arbitrarily
long
things,
but
for
IP
address
I
mean
we're
talking
about
like
what
16
bytes
or
32
bytes
or
well
you're,
either
four
bytes
or
you're.
Sixteen
I'm,
sorry,
I'm,
sorry
bits
I
meant
yeah,
but
yeah.
Those.
G
G
Yeah
I
mean
I'm.
Fine
I
mean
like
somebody
who
wants
to
write
it
down.
They
can
either
guess
or
just
allocate
the
bigger
one
and
make
sure
that
they're
that
they
could
have
held
up
v6,
who
we
exposed,
there's
I
think
before
versus
I.
Think
this
I
don't
know
cuz.
If
you
do,
then
you
could
also
just
ask
that
yeah
you
shares
what
family
it
is.
Oh
then
you
can
know
ahead
of
time.
Then
it's
fine.
B
G
B
Truly
I
mean
how
many
cases
do
you,
you
allocate
expense.
This
is
it
you
just
hold
this
thing
like
it
and
it's
super
rare.
Thank
you.
My
dad
was
first,
you
would
probably
encode
it
in
to
make
this
gate
buffer.
It
holds
much
more
data
anyway,
right,
educate
after
the
fact
that
you,
you
know
many
bytes,
you
can
advance
the
pointer
correctly
and
then
the
questions
of
the.
How
many
places
inside
me.