►
From YouTube: .NET Design Review: Core Pipelines APIs
Description
00:00:00 - Approved: Add MemoryExtension APIs to get parity with array APIs https://github.com/dotnet/corefx/issues/25850#issuecomment-357358606
00:20:28 - Approved: String-like extension methods to ReadOnlySpan(char) Epic https://github.com/dotnet/corefx/issues/21395#issuecomment-357363944
00:43:51 - Approved: Add StringBuilder.Equals(string) to efficiently compare a StringBuilder with a string. https://github.com/dotnet/corefx/issues/25846
B
A
All
right
so
bet
is
also
in
the
class,
so
basically
what
we
discussed
over
the
over
email.
Let
me
just
repeat
this,
so
basically,
the
idea
was
that
we
would
discuss
the
equator
and
I
think
you
later
a
path.
Let
me
decide
that,
because
too
many
people
are
out
and
can't
make
it
today,
so
instead
we'll
focus
on
pipelines
more
and
but
before
we
do
that,
there's
two
issues
that
are
some
its
review
to
get
unblocked.
We
have
any
preferences
for
order
between
the
two
or
it's
only
for
writer,
and
that's
it
all
right
guys.
E
So
so
the
point
of
this
issue
is
decided
to
get
parity
with
all
the
API,
so
we
have.
These
were
the
muscle
between
area
and
span.
These
are
the
month
that
were
missing.
The
ones
that
are
coming
to
our
I
explicitly
chose
not
to
add
them,
because
there's
different
patterns
for
span
like
using
slice
instead
of
having
index
overloads.
F
H
And
it's
hit
and
miss
whether
you
find
the
same
api's
in
both
places,
and
we
got
like
oh
just
say
guys
this.
So
we
did
that
this
year
and
you
know
us
on
worked
and
I
did
the
API
two
days
later.
Oh,
we
missing
this
API
and
it
kind
of
happened.
You
know
five
times
like
let's
just
review
all
the
API,
tsundere
and
kind
of
make
sure
that
you
know,
since
we
are
communicating
that
the
types
are
like
moral
equivalence,
let's
just
have
the
same:
API,
okay,
but
I.
F
Get
your
point
like
that,
like
look,
verse
is
a
great
example.
I
mean
you
know
what
reverse
like.
Do
people
really
use
reverse
I
have
no
idea,
but
we
have
they
done
did
by
the
way,
I
believe
it.
So
that's
what
I'm
asking
I'm
asking
whether
you
think
email
do
have
a
access
tool
I
just
let
this
do
this.
Do
this
on
the
other
side,
anyway,.
H
F
G
A
I
A
E
H
So
one
one
thing
one
one
comment:
I
would
have
some
of
these
methods
like
true
for
all.
They
seem
like
they're,
linked
methods
that
were
added
for
an
LA
because
they
could
be
implemented
more
efficient,
I
think
that,
before,
regarding
this
referral,
some
of
the
money,
if
you
because
we
made
a
need
to
additional
problem
which
is
to
SS.
J
H
K
M
N
H
F
L
Don't
think
it's
lightly
shanem
it
also.
What
would
user
do?
What
would
user?
Where
would
user
take
and
spend
like?
If
you
see,
if
you
try
to
convert
your
method
and
then,
like
you
see
that
fine
old
method
is
not
there,
and
you
see,
there
is
a
triangle
like
my
first
thought
would
be
great
you're
a
passive
into
result
spent.
Q
Q
K
L
H
F
R
F
We,
you
know
user
community,
or
was
it
like
somebody
who
implements
every
API
because
they?
What
I
concerned
about
is
that
if
you
create
something
we're
using,
it
is
so
stilted
or
you
know
not
obvious
or
whatever
no
one's
going
to
use
it
they're
just
going
to
write.
All
of
these
things
can
be
implemented
in
probably
less
than
five
lines
of
code,
so
there's
a
pretty
good
chance
that
it
isn't
sort
of
in
their
face
and
easy
to
use.
Just
like
that.
F
If
it
isn't
like
one
line
of
code,
it
isn't
worth
it
they're
just
going
to
write
the
five
lines
of
code
and
be
done
with
it.
So
anyway,
I'm
not
convinced
this
one
passes
that
test.
So
in.
H
S
S
H
T
H
H
H
U
P
K
K
K
A
F
A
U
U
A
It
yet
oh
yeah,
he's
semantics,
that's
a
semantics,
but
it's
not
like
what
a
method
that
shows
up
for
me.
Essentially
I
mean
the
question
is
like
I,
don't
know
like
to
me
I'm
fine,
with
saying
we
don't
want
to
link
like
methods,
but
I
would
say
that
also
for
anything
that
takes
a
predicate
like
I,
don't
think
like
to
fault.
Amusing,
sometimes
are
different
from
let's
say
fine
last
I
mean
like
it's
the
same
logical
thing:
wasn't
predicating
you
back
and
resolving
our
I.
S
Q
A
V
H
It's
worse
than
a
predicate,
the
implication.
If
you
just
find
index
of
some
value
we
use
simply
to
implement.
It
is
vectorized
this
one
forget
about
the
delegate:
it's
not
vectorized,
it
cannot
be.
There's
no
vector
intrinsic,
that
takes
a
delegate,
see
the
processor.
What
a
slackers
who
designs
tools.
G
A
F
H
Of
the
outcome
of
the
review
is,
we
did
exercise
to
see
what
we
are
still
missing
and
we
don't
think
that
any
of
these
actually
I'm
completely
fine
with
it
I
would.
The
main
thing
I
wanted
to
do
is
avoid
the
yet
another
one
but
I
think
maybe
we
ended
up
with
through
there
yet
another
one.
We
added
all
the
ones
that
make
sense,
and
now
they
you
know
all
that.
It's
remain
is
not
that
maybe
reverse,
but
what's.
H
A
A
But
I
would
honestly
I
would
say
this
one
given
given
the
goals
we
have
to
spend,
which
is
performance
type,
given
that
nobody
asked
for
these
methods,
yet
yeah
I
would
just
say,
and
given
that
you
could
probably
make
an
argument
and
say
they
look
like
fur
traps,
because
we
advertise
them
as
like.
Really
you
shouldn't
call
them
it's
like
right,
as
it
seemed
like
a
bad
combo,
which
is.
F
N
H
K
H
F
C
F
O
G
G
F
E
E
A
A
H
A
A
G
H
F
F
F
H
Q
H
Q
Q
U
C
F
It
feels
like
you,
don't
make
it
harder
to
use
for
it's
like
red
butter
purpose
like
now,
you're
going
to
have
extra
parameters
for
like
what's
the
trim
character
or
whatever
we
can
still
probe
them.
Well,
because
it's
either.
Yet
you
still
have
the
string
character
parameters
and
you
can
just
make.
U
V
Q
K
H
V
H
Be
again
actually.
U
Q
Q
F
Y
F
As
a
point
of
philosophy,
I
will
say
that
having
been
at
Microsoft
for
more
than
a
decade,
we
are
much
much
more
likely
to
over-design
things
than
to
under
design
them.
So
we
tend
to
want
to
generalize
everything
and
make
it
add
a
bunch
of
bells
whistles
until
it's
so
complicated
that
our
users
have
no
idea
what
to
do
with
it.
So
I
think
we're
doing
it
here
for
what.
F
Q
E
A
spare
equal
to
slice
it,
but
it
could
be,
but
what
are
we
gonna
do?
I
assume
you
do
yeah.
H
L
H
H
L
T
F
H
E
L
G
H
Then
they
have
to
return
an
additional
parameter.
That
says
how
long
is
actually
so
as
the
double
it's
the
try
and
yeah
it's
too
small
yeah.
But
it's
a
such
a
pervasive
pattern
in
our
API
sand.
It's
actually
not
difficult
to
call
like
you're,
basically
called
if
try
blind
logged
and
I
slice,
whatever
that
the
thing
return.
F
L
Think
it's
a
bad
part
with
replace
forklifts.
You
can
count
amount
of
things
you
need.
You
can
recalculate
size
of
the
new
span
unit.
Now
now,
if
you
don't
know
the
number
I
mean
I,
don't
know
committee,
but
you
have
to
implement
it
like.
So
why
force
people?
How
many
times
would
you
resize
your
spam
to
get
it.
J
F
L
L
Q
Q
Y
Q
H
E
F
F
H
K
D
Q
F
F
H
Q
A
A
L
H
Think
that
what
okay
we
could
have,
but
the
other
alternative
is
you?
If
you
have
varied
understand
and
you
want
to
do
a
mutation,
we
only
have
to
make
a
copy
before
you
call
and
then
I'll.
Let
me
place
at
the
end
right:
it's
equivalent.
There
is
no
preference,
it's
just.
Somebody
needs
to
think
like
how
to
do
it
as
opposed
to
what
they
just
have
an
API,
and
it
takes
the
right.
You
just
read
it.
E
Q
E
Z
H
K
H
L
P
H
L
Z
F
H
F
Are
car
today
exact
right,
so
these
are
new
so
that
the
thing
I
worry
about
sort
of
doing
this,
half
I
hear
that
you're
describing
I
will
do
the
first
three
because
they
don't
seem
controversial.
F
H
T
A
F
E
T
F
There's
room:
we
don't
cannot
decide
what
good
are
part
of
the
reason
why
you
have
a
richer
API
is
because
it
is
more
specific.
It's
also
country,
it's
a
very
you
know,
but
we
have
a
much
better
idea
what
the
scenarios
are,
and
you
also
don't
have
this
much
problem
where
you
know
with
arrays
and
other
things
you
have
to
tell
the
equator
bowl
or
whatever
you
have
these
other
things,
whereas
all
that
is
well
defined
by
the
time
you
got
the
string,
it's
care
equals
its.
P
E
E
E
X
A
L
P
L
L
L
You
know
when
total
length
of
data
in
pipe
goes
over
that
size
to
be
clear.
That's
not
up
here
the
accents!
I,
don't
see
it,
it's
not
besieging
the
next
slide.
Okay,
it's
under
options
cause
I
had
to
student
yeah.
So
when
the
total
size
of
the
pipe
goes
over
this
over
the
value,
the
flash
method
that
transfers
data
from
writer
to
reader,
it's
a
sync
method,
but
it's
like
blocks,
so
you
can
prevent
or
writing
and
take
in
too
much
memory,
and
this
is
important
because
in
stream,
for
example,
is
the
pool
affair.
L
So
you
ask
stream
to
read
data,
so
you
can
only
ask
it
to
read
when
you
are
ready
to
get
it,
but
pipe
is
push-pull,
so
writer
tries
to
pull
data
to
push
data
on
you
and
you
pulled
it
out.
So
you
have
to
have
some
limiting
mechanism
that
will
prevent
fast
riders
and
slow
readers
from
eating
your
entire
memory.
Then
we
have
a
mechanism
for
completion
notification
so.
A
L
L
A
pipe
pipe
it
has
writer,
you
ask
writer
for
the
memory
you
somehow
put
bytes
into
the
memory.
You
tell
writer
how
much
you
wrote
and
then
you
call
flushes
that
would
transfer
ownership
of
this
bites.
You
wrote
from
writer
to
reader
and
if
the
pressure
kicks
in,
you
would
have
to
wait
until
it
releases.
L
J
L
Data
and
reader
after
reading,
wherever
it
seemed,
can
just
exit.
How
does
it,
how
does
advance
vary
from
flush?
What's
the
difference
between
so
advanced
just
tells
because
you
get
memory,
memory
doesn't
know
how
much
was
written
and
how
much
of
that
is.
My
good
data,
so
advanced
just
moves
the
pointer
inside
the
memory
to
the
point
where
you
feel
the
data
with
so
the
reader
can
use
yeah.
L
Just
lets
the
pipe
know
how
much
there
it
has
inside
itself,
because
you
can,
when
you
call
get
memory,
it
will
give
you
a
croquet,
then
you
pass
it
to
the
stream
and
stream
reads:
25
characters,
so
you
have
to
tell
it.
Ok,
you
I
feel
25
characters
only
so
the
next
time
you
can
get
memory.
It
will
give
you
the
rest
of
them,
so
you
can
call
get.
A
Q
A
L
Yeah
and
get
memory
takes
minimum
size,
so
if
you
want
more
than
there
is
but
differently,
it
passes
zero.
So
if
there
is
nothing
in
the
pipe
it'll
give
you
full
new
segment.
If
there
is
a
tail
space
in
the
segment
like
if
there
is
something
left
free
in
the
segment,
it
will
give
you
that.
But
if
you
pass
2020
56
bytes,
you
know
if,
even
if
there
is
tail
space,
it
will
allocate
in
your
segment
to
give
you
exactly
at.
H
F
Q
Q
Q
L
L
L
Y
H
L
Yeah,
you
can
also
complete
with
the
exception,
if,
if
there
is
a
case
where
you
want
not,
when
failed
writer
fails
the
reader
like,
if
you
don't
care,
even
don't
care
about
there,
any
further
files,
you
can
transfer
exception
through
the
you
can
put
it
exception
to
complete
code
and
then
read
this
and
you
just
throw
it
out
of
the
reader.
So
it's
nice
for
cases
where
a
complete
this
optional
call.
F
L
F
L
And
why
do
we
have
commit?
So
there
are
some
cases.
For
example,
when
you
read
a
lot
and
reader
there
is
a
synchronous,
read
call
on
the
reader
drive
it.
So
if
you
read
a
lot
and
read,
there
is
a
bit
slower,
it
can
catch
up
to
you
synchronously
without
having
to
risk
like
to
do
chase
and
go
back
and
go
through
the
old
erasing
thing
you
just
try
to
like
with
the
channels
you
had
read
async
and
try,
or
whatever
the
name
of
the
read
it
was,
but.
L
Q
F
I
The
non-blocking
reason
the
date
is
there,
but
you're
not
on
flush.
I
do
have
sort
of
not
issue,
but
there
should
be
a
flush
that
at
the
moment,
since
there
is
only
flush,
a
sink
and
it
takes
no
parameters.
It
is
a
it
sort
of
like
a
force
flush.
It
means
that
the
reader
has
to
it
is
consuming
the
data
it
has
to
sort
of
flush
it
sorry.
The
data
has
to
be
flushed,
whereas
there
should
be
a
sort
of
a
notify
flush
where
it's
of
optional
that
it
flushes.
If
that
makes
sense,.
J
I
This,
if
the
reader
is
going
back
out
on
the
network,
you're
saying
flush,
it
doesn't
know
whether
there's
going
to
be
more
data
coming
soon.
So
it's
going
to
it's
going
to
immediately
write
it
out
to
the
network.
You
know
it's
like
it
can't
a
buffer
it
for
a
bit
to
sort
of
cut
down
on
Siskel's.
So.
Q
Today,
with
advance
repeatedly
call
it
fans
and
not
flush,
if
you
wanted
to
ensure
that
the
reader
received
big
chunks-
and
that
was
your
only
concern,
but
there's
this
in
between
performance
concern
where
it's
like
well,
you're
gonna,
grab
data
anyway
reader
like
will
give
you
all
of
it,
but
if
you're
waiting
we're
just
gonna
wait
until
the
next
chunky
thing
finishes.
Like
that's
the
purpose,
it's
pretty
nuts.
AA
Like
TLS
since
16k
frames
and
there's
a
huge
overhead
per
frame
and
if
you're
writing
that,
like
a
hundred
or
200
K
from
say
protobufs,
so
this
is
something
I've
done
with
Mark
and
he
decides
well
I.
Don't
want
to
wait
until
written
the
whole
hundred
K
is
that
there's
a
huge
latency
to
there
so
I'm
going
to
flush
at
40
K.
AA
So
it's
a
real
simple
if
statement,
basically,
if
some
flag
comes
through
this
is
this
is
the
end
of
the
message
then
I
have
to
write
or
if
I
have
more
than
a
frame
size,
then
I
have
to
write
otherwise
I'm
just
going
to
loop
back
around
and
wait
and
not
not
cause
like
a
network
call
or
a
full
frame.
So
it's
basically
like
a
an
application-level
Nagel
in
a
way
like
I'm
gonna,
wait
for
the
next
full
frame,
but
instead
of
like
nowhere,
it's
like
there's
a
timeout
for
it.
AA
H
M
Q
L
I
There's
three
things:
there's
there's
commit,
which
is
I'm,
making
the
data
visible
to
the
other
side.
So
if
it
happens
to
be
running
in
parallel,
it
can
opportunist
to
opportunistically
pick
it
up.
Then
there's
sort
of
a
partial
flush
which
is
notify.
You
know
post
commit
notify
the
the
other
person,
but
they
don't
have
to
I've
got
more
data
to
process,
so
they
don't
have
to
throw
it
out
onto
the
network
and
then
there's
like
a
full
flush
which
is
notify
the
the
reader,
but
I
don't
have
any
more.
AA
L
F
I
can't
impossible
yeah
I
feel
like
I
feel
like
if
it's
natural
and
needed,
then
we
should
probably
support
it,
but
but
I
also
think
that,
as
long
as
we
could
add
inversion,
yeah
like
you
were
doing
something
insane
that
maybe
we
can
just
take
what
make
sure
that
we're
happy.
You
know.
You
really
believe
that
we
need
it.
H
Not
convinced
that
we
need
to
come,
but
not
only
not
not
convinced,
I
think
it's
kind
of
unless
I
misunderstand
the
semantics.
It's
kind
of
a
trap,
because,
if
I
use
the
wrong
api's
on
the
other
side
and
I
call
commit
won't
the
user
be
surprised
like
I
just
committed
these
bikes
and
they
don't
show
up
and.
Q
H
H
F
Be
other
things,
I
think
you're,
I
think
you're
really
debating
the
the
main
I
mean
it's
weather
is
cold
to
meet
or
not
you
can
sort
of
say
you
know
right
bytes
or
it's
not
even
like
you
know,
push
bytes
the
first
level
you
know
or
something
like
that
is
sort
of
what
it's
is,
that
I'm
done
with
I
I
know.
I
can
write
these
bytes
I,
don't
care
for
your
sees
them
yet,
but
I'm
allowing
the
buffering
system
a
bad
and
eat
I,
and
but
I,
don't
K.
L
R
Q
O
I
J
I
You
only
if
you've
only
got
say
you've
done
enough
work
for
a
half
and
TCP
packet,
but
you've
got
more
data
coming
in.
You
might
you'd
want
to
go
flush,
notify
and
the
either
know
how
much
the
the
next
stage
in
the
pipeline
has
got
before
it's
it's
ready
to
write.
There
is
a
when,
when
a
when
it's
easy,
be
packets
for,
for
instance,.
L
Station
primitives
like
complete
and
flash
and
releasing
you
want
to
put
more
and
more
data
through
a
queue
constantly.
Oh,
if
I
could,
instead
of
doing
that,
if
I
could
pass
these
objects
through
the
pipe
to
the
other
side,
it
would
have
been
so
easy
like
if
there
was
a
state
on
flash
that
I
got
them
when
when
I
did
read
async
and
we
tried
to
not
do
that
and
be
simplicity,
yeah
and
I
feel
like
this
is
just
another
lesson.
Yes,.
H
L
H
L
I
L
L
I
F
F
I
Sort
of
previous
previously
precedent
for
it.
That
would
be
the
word
and
would
be
in
streamwriter,
where
you
have
you've,
got
the
flush,
your
fallback
buffer,
there's,
there's
sort
of
two
bird
flushes
on
it.
Where
you
can
say,
you've
got
to
clear
out
what
you've
got
in
your
internal
buffer
and
beep
zooming.
F
R
R
L
Yeah
so
now,
let's
go
go
back
to
the
reader
for
yourself
yeah
when
reader
reads
cause
releasing
and
runner
flushes
you
get
a
result.
Object
result
has
is
completed,
consult
and
buffer
buffer
is
data
is
completed.
Is
where
the
writers
complete.
You
have
to
check
both
in
that,
if
not
to
lose
last
piece
of
data.
So
when
you
can
get
it
a
situation
where
you
got
data
and
reader
completed.
So
if
you
don't
check
that
your
buffer
is
empty,
you
born
process,
the
last
part.
So
that's
our
default
parent
for
an
intensive.
L
H
So
I
have
a
I
mean
I.
We
talked
a
bit
about
this
and
I
think
improve
the
api's.
I
still
think
it
would
be
useful
to
have
a
defense
that
takes
an
int
for
the
cases
when
I
I
did
something
with
the
data
and
I
have
an
int.
Then
you
have
C
Conn
the
writable
background,
but
you
also
have
C
and
you
can
just
call
seek
inside
this
advanced
detects.
You
don't
want
to.
L
L
The
person
read
a
lot
and
it
would
still
put
it
there.
You
know
that
you
know
that
we
GT
posse.
No,
no,
but
thick
is
hard
to
find,
and
it's
you
know
like
I
want
people
to
not
not
to
seek
and
not
not
to
put
in
there,
because,
like
you,
ask
the
consumer
of
the
Setai
I
don't
want
to
make
the
easiest
way.
The
slowest
and
advancing
within
would
be
the
easiest
way,
but
it
will
still
be
slow
unless
I
advanced
by
a
multiple
of
perfect
sizes.
It's
not.
L
L
H
Fight
it
by
myself,
I
just
wanted
to
point
this
out
that,
like
for
people
that,
like
I,
think
somebody
is
trying
to
you
know
it's
not
an
expert
on
pipelines
and
it's
you
think
you
guys
have
been
using
it
in
very
high
performance
and
are
you
somebody
just
wants
to
basically
have
a
reasonable.
You
know
to
sell
consumer
trying
to
make
rap,
you
can
head
around
razón
buffer
and
why
would
I
pass
it
basically
I'm,
looking
at
the
API
in
the
intellisense,
it
says
reader
data
at
best,
okay,
awesome.
When
I
was
writing.
H
L
L
H
L
A
H
Y
J
Y
L
L
F
Y
Y
L
L
A
So
what
me,
how
actually
is
some
more
code
when
I
try
to
fill
in
the
blanks
of
the
be
part?
My
many
multiple
saws?
It's
basically
like
you
know
that
say,
I'm
starting
to
read
so
I
expect
a
header.
So
I
basically
say
you
know,
do
I
have
enough,
but
do
I
find
a
pole.
Well,
don't
find
it
cause
are
open
up
data
it
so
just
skip
for
the
next
loop
and
say
you
know.
Give
me
give
me,
give
me
more
data,
and
so
like
the
first
thing
that
I.
A
Q
A
Something
there's
there's
nothing
there,
so
I'm
saying
right
now:
I
have
to
spin
again
so
I
would
say
if
you
how
much
did
I
just
read
while
I
read
the
name,
the
consul's.
Next,
you
know
six
bytes,
so
they
said
my
mental
model
is
I
would
basically
is
some
condition.
I
do
some
parsing
I
do
advancing.
You
know.
My
next
thing
happens
so
basically
always
advance
in
between
I
don't
advance.
J
A
Q
L
Usually,
when
you
process
through
Tommy
buffer,
you
don't
get
in
out
of
it
if
you
are
not
using
like
very
simple,
spend
that
whatever
methods,
if
you
process
a
big
chunk
of
a
big
chunk
of
data,
that's
represented
by
multiple
segments
you
get
along
with
buffer
and
then
you
slice
it
or
you
use
position
off,
and
every
of
those
methods
give
you
something
that
has
position
on
it.
So
this
only
falls
off.
When
you
say
all
right,
I
just
want
five
first
bites
and
that's
a
pretty
trivial
case
that
five
bites.
H
L
Q
Q
H
L
You
use
reader
that
will
give
you
instead
of
doing
an
efficient
way
you
give
if
you
do
things
efficiently
and
you
get
a
position,
that's
useful
in
that,
like
I,
don't
you
are.
You
are
correct
from
the
standpoint
of
writing
an
efficient
code,
but
if
you
read
the
code
that
we
intend
people
to
write,
they
will
naturally
get
into
the
place
where
they
have
position.
The.
B
H
A
hint
I
do
find
it.
Basically,
if
you
kind
of
do
one
of
the
prescribed
spots
that
we
had,
you
wrap
the
buffer
in
a
leader
and
then
reader
kind
of
has
the
API
is
that
I
was
talking
about
internal.
It
has
an
int
and
it
kind
of
manages
the
spans
at
the
end.
You
basically
call
it
either
not
advance
forever
viewing
another
reader
I
get
another
reader
which
is
a
bit
confusing
but
find
another
little
dot
position.
H
L
L
Dancing
we
all,
we
always
thought
we
almost
always
consume
to
some
position.
Then
you
have
a
seat
there.
No,
we
use,
we
use
position
off
to
get
where
we
are
always
slice
and
we
we
rarely
use
six
together.
Anything
if
you
look
at
the
parser.
The
first
thing
we
do
is
we
find
that
a
new
line.
We
first
start
line
of
the
HTTP
request.
We
advance
to
the
position
where
a
new
arrows
so.
E
L
H
H
L
L
F
Q
On
the
next
read
a
sink,
we
always
return
what's
after
consumes,
so
typically
we
call
it
dance
and
you
haven't
consumed
everything.
You
know
the
next
color
read
a
sink
completes
immediately
with
the
stuff
that
you
haven't
consumed
in
this
second
call
the
advance.
It's
like:
okay,
I,
haven't
consumed
everything,
but
I've
actually
looked
at.
Everything
is
what
that's
for,
and
this
one
so
now
I.
L
Y
Y
H
Q
Q
Q
The
one
that
Christophe
disagrees
with
the
one
that
Coble
is
like
ambivalent
about
is
that
my
position
is
Vance
with
two
parameters
is
to
do
everything
the
first
advance
can,
in
the
way
of
maps,
is
that
advanced
with
one
parameter
is
calling
advanced
the
two
parameters
just
consumed.
It's
also
example,
so
you
pass
the
same
yes,
so
that's
the
behavior
as
it
stands
today.
Christophe
is
suggesting.
Let's
change
that
slightly
so.
F
Q
That
consumed,
so
what
I'm
saying
is
the
current
behavior
is
the
same
stays
if
consumed
is
the
start
position
right,
I'm
saying
that
I've
examined
nothing
in
that
case
and
that's
weird
because
that
means,
if
you
pass
start
to
advance,
then
read
async
returns
exactly
what
it
did
on
your
last
call
every
day
immediately
immediately,
which
it's
very
hard
to
come
up
with
good
scenarios,
where
you'd
actually
want
that
behavior
they're
they're
very
few.
That
I
could
possibly
call
this
well
they're
somewhat
contrived.
Q
So
Chris
tom
is
saying:
okay,
since
that's
not
a
real
scenario,
consuming
nothing
and
examining
nothing.
Let's
just
special
case
that
to
say
I'd
consume
nothing
and
examined
everything.
So
only
call
me
back
again
when
there's
more
data
available
in
this
fruit
prevents
potential
accidental,
like
infinite
loops.
So
the
only
thing
I
was
changing.
What
I
do.
H
What
you
said,
except
the
reason
for
why
I
wanted
this
behavior
is
not
because
they
alternate
can
sense.
The
reason
for
it
is
to
me
that's
the
most
natural
thing.
If
I
kind
of,
like
you
know,
I
got
the
buffer.
I
didn't
consume
anything
because
I
was
trying
to
find
what
I
wanted
to
consume
and
it
was
not
there.
So
I
examined
everything
I
think
it's
zero,
therefore,
don't
go
again.
Q
Q
Q
One
right
now,
if
you
consuming
consumed
partial
data,
if
you
call
just
consume,
you
call
read
a
sink.
You're
called
immediately
with
the
data
you
didn't
see,
he's
suggesting
that
if
you
call
consumed
with
partial
data,
assume
that
I've
examined
everything
anyway
and
don't
finish
the
next
one
read
a
sink
until
there's
more
data
yeah,
which.
L
P
L
Each
of
the
import',
or
there
is
like
read
prefix
that
is
jason
and
then
read
the
body
that
is
not
jason.
Both
of
them
take
pipe
reader.
So
you
call
read
a
singh.
You
find
the
end
of
the
jason
part
you
advance
to
that
part.
So
you
consume
that
part,
and
now
you
immediately
want
to
call
first
body
that
has
to
succeed
because
you
have
there,
so
you
don't
want
to
examine
everything
in
the
first
go.
Q
J
A
Q
A
Form
because
I
think
the
point
of
the
day
P
is
that
it's
basically
Edinburgh,
you
know
boyfr,
you
may
be
less
efficient,
but
you're
this
it's
a
boy.
You
know
that's
API,
like
yeah,
the
mighty
bit
of
some
of
the
winter
tapi
is
at
the
head,
which
you
know
that,
while
it
depends
upon
would
only
ever
work
with
the
follow
any
exists
or
something
I
mean
basically,
you're
gonna
pull
the,
and
so
that's
the
same
here
they
took
a
beans
API.
Then
it
should
work
in
all
cases,
their.
Q
Dirt,
certainly
are
some
scenarios
where
you
would
write
or
leader.
Let
me
get
away
with
only
advancing
using
the
first
day.
Guy
like
it's
too.
It's
it's
not
very
useful,
especially
considering
it's
like
a
simple
one,
and
it
should
be
simple.
Please
I
was
saying
the
simplest
scenario.
Is
you
get
away
with
calling
advanced
first
API
every
time
without
any
pitfalls,
but
you're
right?
If
there's
ever
situation,
where
you
do
nothing,
then
you
would
need
to
call
the
second
API,
given
the
current.
Y
Q
L
H
L
H
Well,
because
I,
basically
we
refactor
in
my
code.
So
then
each
lead
is
independent.
Everything
line
by
line
right,
I,
consume
line,
I,
consume
line,
I,
consume
line
and
right
before
the
light
last
line,
because
I
already
got
all
the
data
but
I
consumes.
You
know
not
everything
I
loop
again
and
it
never
returns.
I
mean
it's
really
bad.
It's
frustrating!
That
is
quick.
Why.
H
Q
V
H
X
H
Y
H
Blue
but
you
wrote
the
code,
so
you
don't
need
to
I
understand
that
it's
not
as
intuitive
what
I'm
saying
is
you
write
the
loop
that
he
showed
you
the
slide?
It
always
works.
Yes,
it
will
be
looping
by
one
bite,
but
it
works
versus
all
the
other
combinations
that
we
discussed.
They
have
a
problem
with
either
they
deadlock
or
summer.
They're.
A
A
I
think
I
mean
I,
think
the
general
I
mean
tennis
base
is
saying
I
think
so
what
college
is
saying
it?
You
know
basic
sense
to
just
kill
the
faith
at
all,
takes
an
argument.
Yeah
I
would
say
that
the
benefit
of
this
API
is
that
it's
it's
much
easier
to
understand.
What's
going
on,
I
mean
if
you
look
at
like
your
your
loop
example,
you
can
basically
write
that
loop
and
get
something
to
work
mullet
if
Li
quickly
yeah.
Now.
A
Yes,
it's
not
efficient,
but
you
have
something
that
works
and
can
tweak
it
from
there
and
I
think
the
problem
is,
if
you're
presented
with
this
API
service.
The
question
is
whether
you
would
succeed
in
like
half
an
hour
to
get
anything
to
work
at
all.
Like
thanks
forget
about
efficiency.
Just
doesn't
work
at
all
and
so
I
think
the
question
is
we
want
to
make
it
easier
people
to
learn
the
API
and
like
target
and
get
out
of
it.
H
By
a
byte
by
byte
and
also
I,
think
that
so
there's
a
difference
between
like
shoe
performance
traps
and
like
code,
that
is
slight.
In
addition,
you
can
kind
of
optimize.
It
I
think
this
is
an
example
where
you
can
optimize
the
code
defuse
the
other
overload.
It's
not
like
it's
complete
disaster,
because
I
use
the
first
one.
L
L
H
H
Yes,
basically
that's
what
the
cancel
pending
read.
You
have
mutates,
and
somebody
else
observing
is
this
intend
advanced
EPS.
So
imagine
that
you
would
have
an
interface
called
a
consolation
source,
okay
and
you
would
have
a
method
on
vibrator
or
on
five
create
one
of
those.
You
would
return
an
interface
and
the
implementation
of
the
interface
would
be
still
the
same
type
that
has
this
this
int.
That
I
was
talking
about.
Why?
How
is
it
better
than
just
can
serpent
blah
I'm
not
like
pushing
for
it?
I
was
just
asking
it's
in
my
opinion.
H
L
Q
I
would
like
to
say
that
cancel
pending
read
is
pretty
easy
to
kind
of
work
with
the
single
cancellation.
Token
likes
pretty
trivial,
just
to
call
cancel
pending
grief
on
register
call
back
the
only
thing,
that's
kind
of
hard
and
the
reason
that
we
kind
of
a
comb
in
it.
As
far
as
the
interface
is
like
when
you
might
have
a
trigger
that
changes
from
recall
recall
like
it's
one
thing:
if
it's
a
trigger
for
the
lifetime
of
the
pipe
and
that's
pretty
easy,
you
just
have
a
single
register.
Q
H
L
He
gets
some
translation
token
right
from
somewhere,
okay
and
he
wants
to
cancel
reader.
If
this
concession
token
fires
to
married
them
together,
he
would
still
need
to
allocate
and
register
all
right.
If
you
know
that
you
would
have
one
only
one
source
of
information,
you
can
just
call
cancel
plan
agreed,
but
if
the
source
of
information
changes
every
time,
you
will
have
to
interconnect
them
some
way
and
okay,
most
of
the.
A
L
I
would
honestly
expect
yeah
exactly.
It
should
be
honest.
It's
not
so.
We
advocate
this
way.
I
said
single
producer
single
consumer.
We
advocate
that
three
days
and
try
read
advance
and
complete
our
code
from
the
single
thread
and
even
better
from
the
single
method
thing
like
single,
logical
flow,
because
when
you
start
using
it,
but
it
doesn't
allow
multiple
reads:
it
doesn't
hello
read
after
complete,
like
it
has
so
many
limits
that
you
better
have
a
one
vertical
flow
where
it's
like
I
read:
I
loop,
I,
complete,
undone,
I,
consider.
L
Maintain
state
it
was
unexpected,
said
anyway,
yeah
it's
just.
We
try
to
use
it
from
the
like
complete
from
one
point
of
the
application.
While
reader
is
writing
the
loop
and
the
other,
and
it
didn't
what
happens
if
I
complete,
with
an
exception
when
it
does
the
exception
propagate
from
the
other
side
it
it.
A
L
L
S
L
V
L
L
Q
L
L
L
L
Q
L
Don't
want
to
easily
like
multiple
state
out
of
it
or
you
need
to
capture.
We
don't
want
to
capture
things.
Sometimes
you
want
to
register
a
callback
without
having
to
allocate
the
closure,
and
this
is
to
share
with
the
copy
can
I
just
any
color.
You
want
yeah,
but
often
you
want
to
provide
prevent
an
allocation
and
you
want
the
state
passed
enjoy
public.
That's.
A
Q
G
H
H
G
H
L
G
L
F
M
F
F
A
A
H
A
A
H
That's
it
I
think.
That's
slightly
different
thing.
We
often
a
bad
idea
is
with
the
delicate
takes
more
parameters,
so
we
can
avoid
closure
and
pass
the
parameters
explicit
right
then
I
understand
that
pirate.
That's
completely
is
sane
and
Rama
by
this
one
another.
It's
re,
not
things
it.
This
one
is
kind
of
weird
I
mean
we
don't
do.
F
Sure
I
understand
isn't
that
what's
happening
here,
we
just
I
would
take
a
parameter
and
Rapunzel
dr.
Lewis.
A
V
A
F
Q
K
H
J
H
L
H
A
H
L
H
P
H
F
I
anyway,
it's
okay,
what's
the
name?
What's
the
name
we
want
for
this
thing
like
there
was
a
question
whether
we
want
to
call
on
writer
completed,
register,
write
your
completion,
call
that
C-
or
this
should
be
a
salt
problem.
I
just
don't
know
what
the
answer
is,
which
is
that
we've
had
this
problem
before.
When
did
we?
How
did
we
call
these
things
in
the
other
cases,
and
then
we
should
call
pattern.
That's
done
well,
I.
L
F
F
M
H
L
L
L
H
I'm
aware
of
this
issue,
could
you
update
the
properties
when,
when
the
read
returns?
So
basically,
if
you,
if
you
got
the
buffer
from
the
previous,
read
yeah
and
there's
something
going
on,
you
don't
update
the
complete
it.
So
where
do
I
put
computer,
you
store
it
in
some
other
field
and
then
you
swapped
it
when.
L
H
F
H
Z
H
F
Things
were,
error.
Nose
is
like
sword
on
a
local
variable,
because
this
is
one
last
little
thing
that
I
need
sort
of
what
these
are.
Like.
You
know
the
crap
that
you
put
in
in
that
revocable
variable
and
you're
kind
of
local
I,
don't
know
what
you
were
proposing,
but
it
sounded
a
lot
like
that.
We
have
this
thing.
We
swap
it
in
and
we
put
it
on
the.
Q
Q
That
way
to
be
is
what
I
call
read
a
sink
and
I
see
properties
on
a
read
result
like
oh,
those
values
were
probably
taken.
Sorry
yeah,
we're
probably
taken
at
the
times
that
are
in
read,
operation
completed
it
when
read
a
sink
completed
its
task,
if
it's
just
on
the
iPad
freedom
like
are
those
current
like?
Is
that
thread
safe,
like
I,
just
called
I
just
called
rather
not.
L
F
Mean
like
your,
but
then
it
won't
be
useful.
I
think
it
is
discoverable
with
at
Ellison's
to
find
the
buffer.
You
got
a
result,
you
look,
you
start
type
thought
and
there
it
is
buffer.
You
know
you're
one
hot
away,
so
it's
really
just
a
question
then,
just
to
be
honest,
like
I,
think
the
original
thing
I
looked.
A
At
like
made
me
more
and
easy
like
this
one
I
like
more
because
I
like
the
fact
that
we
have
some
symmetry
I
would
still
like
it
would
serve
a
better
if
the
by
provider
would
have
a
right
basic
method.
That
would
return
the
right
result,
but
I
think
the
the
this
one
is
like
symmetric
enough
that
it's
kind
of
clear
will
you
explain.
A
L
L
W
B
C
L
C
L
Here
we
go
no,
no
serious,
so
I'm
gonna.
Let
there
is
a
nice
picture.
What's
what
is
my
prediction
now
even
yeah
this?
So
we
have
often
recon
situations
where
we
will
do
faulted
plugs?
Yes,
L
do
plaits
and
while
we
don't
shoot
anything
fully
uses
so
often
like
man,
I
get
it
requested
body
is
full
duplex.
We
don't
right
into
the
same
pipe,
but
we
have
two
together
and
different
part.
Q
L
Connections
it'll
be
like
you
have
to
pass
in
five
options
for
every
five
and
then
you
don't
want
to.
You
want
to
get
pipe
objects
themselves,
not
only
the
ends
and
it's
easier
to
just
implement
on
something.
It's
super
easy
to
implement.
You
always
have
two
pipes,
you
stop
it
on
the
type
you
return
it
and
is
that,
but
it's
so
useful
to
have
in
the
detail,
because
that's
what
we
use.
That's
what
we
expose
muscle,
isn't
not
just
what.
H
G
H
F
F
A
A
With
the
connection
thing
is
like
too
thick
III
pipe,
given
that
it
only
to
be
done,
writer
looks
like
a
very
stable
interface
that
be
very
unlikely
to
want
to
add
to
that
connection
sounds
starts
to
sound
like
something
that
we
eventually
find
ourselves
to
say
all
right.
We
have
an
I-5
connection.
Do
every
night
connection
three,
even
and
then
that's
the
thing
where
I'm
like
well,
unless
I
mean
this
is
why
I'm
generally
not
a
fan
of
like
putting
st.
B
L
F
L
AA
AA
Q
L
Z
F
S
L
S
L
L
A
L
I
A
I
A
A
AB
A
F
U
Q
S
A
L
A
Request
this
is
another
question
hat
so
like
okay,
I
create
a
pipe
I,
pass
it
to
a
message.
I
pass
the
reader
to
a
method
that
once
an
i5
reader,
can
the
message
basically
just
take
the
I,
PI
reader
and
cost
back
to
pipe.
Like
is
reader
and
writer.
Returning
this
yeah
everything
returns.
This
awareness
output,
like.
F
A
A
An
array
right
and
then
people
see
all
as
the
output
and
then
we
said
it
some
versions
of
framework
like
would
it
be
nice?
If
you
wouldn't
return
you
an
array
but
something
that
implements
get
numerator
differently,
so
it
doesn't
allocate.
Did
that
broke
a
ton
of
apps,
because
it's
your
last
the
upper
lower
range.
So
like
same
with
other
things,
we
gently
wrap
other
collections
return
types.
We
don't.
A
So
you
know
the
purpose
of
what
it's
like,
if
you,
if
you
think
what
you're
getting
here,
is
like
segregation
of
concerns,
so
the
reader
can
try,
the
writer
can
read
I,
don't
think
it
would
get
by
serious
if
you
care
about
I
want
different
properties,
because
I
really
don't
want
to
see
the
combination
of
pipe
leader
and
pipe
rider
on
the
same
type,
because
it
will
be
confusing
SL.
Then
you
get.
A
Q
This
into
two
interfaces
I'll
say
that
one
of
the
first
things
he
did
in
Kestrel
is
try
to
pass
just
the
one
interface
to
the
side
that
needs
it,
and
there
were
a
couple
places
where
we're
doing
some
like
dodgy
stuff
like
to
avoid
connections
and
stuff,
and
it
helped
us
point
that
out
like
right.
So
of
course,
it's
up
to
the
user
to
do
things
the
right
way.
The.
H
H
You're
saying
you
would
create
an
internal
class
that
then
wrapped
is
wrapped
in
this
chart.
Well
still,
you
can
get
reader
and
cast
it
to
a
writer,
because
you
implemented
two
interfaces
on
the
same
object
and
if
you
implement
it
on
two
different
objects,
then
you
paint
code.
The
cost
of
cutting
two
objects
like
I'm,
not
gonna,.
F
H
A
L
A
D
B
L
H
Q
L
L
L
K
H
Q
F
L
L
Feature
yes
in
what
segment
sizes,
except
so
a
right
pool,
is
such
a
pool
that
it
would
give
you
whatever
you
ask
for
if
you
aspirate
it'll,
give
you
eight.
So
when
somebody
calls
pipe
doctrine
or
get
memory
eight,
because
it
is
exactly
how
much
data
he
has
thread,
and
if
we
forward
this
code
to
memory
pool
it
will
give
a
segment
of
size
eight,
which
is
very
location.
So
this
is
the
property
that
sets
the
minimum
amount
of
segment
size
we
would
ask
for.
So.
If
we,
if
you
aspirate,
we
will
still
ask
memory.
F
We
have
one
of
these.
We
can
always
add
new
properties,
as
we
need
more
options.
It
feels
like
a
minimum
segment
size.
You
could
pick
something
literally
statically
like
forever,
like
you
know,
it
knows
no
smaller
than
256
and
called
day
or
whatever.
What
is
it?
It's,
okay,
you
picked
for
them,
I
mean
what,
if,
if
you
did
that
and
how
much
of
our
end
user
is
going
to
care
about
totally
with
this
I
guess
is
the
upshot,
but.
L
F
I
just
want
to
make
sure
that
that
is
lot.
What
I
was
looking
for.
Sometimes
we
create
parameters
that
we
really
don't
expect
like.
You
know
somebody,
the
BCL
will
pick
a
number
and
realistically
everyone
will
be
happy
with
that
number
that
number
we
could
we
could
just
not
have
and
and
if
we
ever
found
that
we
needed
it,
we
would
just
add
it
like.
A
That's
why
I'm
saying
to
me
this
is
why
I
think
it's
important
that
we
default
most
of
this
type,
because
I
think
this
type
most
people
would
not
pick
anything.
They
were
just
passing
the
defaults
and
then
from
their
own,
given
that
the
constructor
is
same
pattern
right
spice
option
already,
like
you
only
fill
in
as
much
as
you
care,
yep,
so
I
think
that's
to.
G
F
H
G
H
Q
H
Q
H
H
H
Q
H
AA
AA
Q
A
S
A
F
A
F
L
F
A
H
S
L
H
L
Q
Q
Z
L
E
L
H
L
D
H
H
L
Have
a
problem
with
a
bit
of
a
bit
of
a
problem
with
having
both
that,
depending
on
what
you've
called
you
can
write
an
efficient
code
like
it'll
work,
fine
on
string
builder
right,
go
and
get
memory,
but
then
get
memory
on
our
output
on
pipe.
If
you
call
it
every
time,
you
want
to
write
something:
it'll
be
slow,
so
the
extension
methods
on
output,
if
you
run
them
on
your
implementation,
that
is
optimized
for
returning
spam,
but
here
they
would
go
through
the
memory.
They
would
just
be
slow
on
a
session
methods.
L
Q
R
Q
N
Q
V
J
L
L
H
L
L
H
H
Writing
on
string
builder
on
pipelines
like
we
don't
want
to
have
work
and
virus
types.
They
actually
have
this
problem
that
they
cannot
inherit
from
anything.
So
if
you
want
to
have
code
reuse,
the
only
way
to
reuse
code
is
to
have
an
extension
method.
Origin
delegate,
that's
all
they
cannot.
They
cannot
be
headed.
What.
L
J
Q
H
Doing
that
so
I
don't
know
what
the
polymers
are
also
and
it
gets
I
think
I
can
explain
it.
Basically,
the
best
way
to
write
to
pipelines
is
to
use
this
writer
right
there,
so
they
basically
don't
want
to
have
any
other
way
to
write
to
pipelines,
except
for
the
writer,
because
it
leads
people
to
do
the
right
thing
right.
H
J
K
H
H
Q
H
H
Q
H
Q
H
H
L
Q
F
L
Q
H
H
H
We
could
add
it
and
then
you
implement
either
this
or
that
but
I
I,
don't
know,
I
think
that
we
can
lead
like
people
who
use
pipelines.
They
will
have
to
know
a
lot
of
stuff
about
right
on
the
scope
they're
like
stamping
on
some
extension
methods
in
some
namespace
I.
Don't
think
that's
like
the
biggest
problem,
all
right.
If
I.
L
H
All
so
bad
is
it,
but
I
do
want
to
ask
you
one
more
question
about
the:
why
do
you
eat
memory,
so
I
understand
the
async
problem,
but
we
added
memory
because
in
some
contexts
like
there's
nothing
else
you
just
have
the
payload
or
the
buffer
and
it
has
to
be
represented
by
memory.
If
you
want
to
survive
async/await
in
this
case,
why
would
you
not
survive
async/await
with
IO
output?
So
basically
you
want
to
before
I
sink
away
to
get
a
span.