►
From YouTube: GitHub Quick Reviews
Description
Powered by Restream https://restream.io/
A
A
The
proposal
was
under
because
we
have
three
different
microsoft:
extensions
options:
libraries,
one
is
options.data
annotations,
options.
configuration
extensions
and
the
other
one
is
just
options,
so
I
figured
it
can
go
to
because
it's
not
data
annotation
specific,
then
the
namespace
would
be
the
general
one,
which
is
microsoft.
Extensions
options
and
the
static
class
name
would
be
options.
B
Yeah,
so
let
me
just
cool
down
because
then
honestly,
I
forgot
what
we
did
last
week.
You
know
to
scroll
back
up
here.
I
guess
yeah.
So.
A
B
A
A
So
the
we
there
was
a
good
feedback
last
session
because
I,
in
the
beginning
I
had
two
apis.
One
was
validate
annotations
eagerly.
The
other
one
was
just
validated
early
and
then
the
ask
was:
why
do
we
need
both.
B
A
So
because
originally
I
thought
we
wanted
to
have
both,
I
placed
both
of
them
under
data
annotations
library.
So
since
we
don't
want
to
do
anything
specific
for
data
annotations,
the
api
can
move
up
into
outside
of
that
library.
Outside
of
options.
Data
annotations,
you
can
just
go
to
microsoft,
extensions
options.
A
A
A
D
A
C
A
My
original
recommendation
on
the
script,
which
is
showing
on
the
screen
is
options.
Builder
validation,
extensions,
but
I
just
went
with
like
how
other
names
are
usually
done
there,
I'm
not
opposed
to
any
other
name.
F
C
Mean
yeah
like
we
do
have
a
lot
of
types
that
use
the
extension
suffix,
but
if,
once
it
has
the
word
extensions
on
it,
we
can't
really
use
it
for
anything
other
than
extensions.
If
it's
named
as
a
for
some
positive
functionality,
then
it
could
end
up
with
non-extension
routines
that
are
on
that
same
type
and
still
make
sense.
C
B
Yeah
I
mean
a
good
example
is
innumerable
right.
The
new
mobile
has
a
lot
of
extension
methods
over
in
your
mobile,
but
there's
also
a
bunch
of
static
methods
that
you
have
to
invoke,
like
you
know,
anymore.empty
for
example,
and
so
having
to
say
numerable
extensions,
dot.
Empty
is
very,
very
weird
right.
So
that's
why
we
generally
prefer
some
sensible
class
man.
E
What
do
the
similar
extension
methods
for
options
builder?
Look
like
today?
Are
they
all
suffixed
with
extensions.
A
Options
builder
there's
a
bunch
of
validate
options
for
options
builder
but
they're
under
they're,
not
under
the
static
classes
but
they're
under
the
options
builder
class
itself,
and
then
there
is
one
extension
under
data
annotations
and
the
one
that
you
can
see
on
the
description
of
the
issue
as
well.
The
existing
one,
which
is
under
options,
builder
data,
annotations
extensions.
E
A
A
Even
even
in
configuration
or
like
elsewhere,
let's
see,
for
example,
like,
for
example,
microsoft.
Extensions
configuration
has
static,
class
tuned
builder
extensions,
like
a
lot
of
these
end
twists
awards
extensions.
G
C
G
G
C
Things
like
enumerable.empty,
and
so
it's
just
a
in
if
there's
a
name
that
is
not
just
something
where
the
general
thing
is.
We
have
a
type
and
then
type
extensions,
and
then
that
is
just
because
often
it's
because
we
had
an
assembly
boundary
or
something
and
we're
trying
to
pretend
they're
the
same
type,
but
we've
definitely
run
into.
C
The
file
system,
apples
of
we
named
something
extensions,
and
it's
like
well
great,
now,
there's
a
utility
method
that
we
really
want
to
put
on
that
same
type.
But
we
can't
because
it's
named
extensions
yeah
I
mean.
B
C
C
Okay,
so
if
there's
not
currently
a
an
options,
builder
validation
type,
then
you're,
definitely
not
extending
it,
which
def,
which
means
it
options.
Builder
builder
validation
was
the
functional
name
of
this,
and
extensions
is
just
making
the
type
name
longer
and
preventing
future
enhancement.
So
we
should
just
drop
the
word
extensions.
B
Yeah,
let
me
let
me
find
the
window
now
all
right
cool,
so
then,
okay,
let
me
copy
and
paste
this
and
you're,
also
proposing
to
only
have
one
method
right
is
that
right.
A
B
A
A
G
B
So
then,
my
only
other
question
is,
I
think,
the
constraints
last
time
were
just
where
t
options
call
on
class
and
now
it's
rarity
options,
colon
class
and
new.
That's
intentional,
I
suppose
right.
F
B
A
B
B
A
I'm
not
I'm
not
sure,
but
I
the
way
I
if
I
I
don't,
have
much
reasoning
behind
it,
but
I
think
I
would
keep
the
new
unless
there
is
a
reason
against
it.
B
B
B
B
The
only
reason
why
I
bring
this
up
is
that
so
we
very
often
have
this
problem
that
the
existing
generic
constraints
that
we
have
are
not
as
specific
as
we
would
like
them
to
be,
so
we,
for
example,
we
have
like
you
know.
Sometimes
things
only
make
sense
where
the
supplied
argument
is
an
enum,
for
example,
but
then
the
problem.
F
B
So
if
you
now
say
I
mean
if
you
expect
people
to
be
able
to
replace
the
data
annotations
with
validate
on
start,
for
example,
then
you
might
have
trouble
when
you
know
the
engineering
context
and
their
generic
is
not
constrained
with
the
new
constraint
right
and
there's
no
really
any
way
for
them
to
cast
this
away
right.
They
just
can't
make
it
compile
anymore,
and
that's
why,
generally
speaking,
if,
if
you
want
to
have
an
overload
or
logical
overload
to
an
existing
method,
I
would
just
copy
the
existing
constraints
and
not
adding
any
new
ones.
A
B
G
They
are,
I'm
gonna
push
back
strongly
on
that,
because
ad
options
like
service
collection,
dot,
add
option
service
question
dot,
configure
like
any
way.
You
actually
have
to
get
an
options
builder,
that's
normal
other
than
like
newing
up
one
with
the
constructor,
which
no
one
actually
does
is
in
microsoft.
Extensions
dependency
injection
so
it'd
be
kind
of
weird
to
require
a
new
using
unless.
A
G
G
I
feel
that
if
it's
a
very
common
thing
that
we
want
people
to
do
with
the
options
builder,
we
should
put
in
the
dependency
injection
same
space,
because,
if
you're
in
the
startup.cs
file
in
like
one
of
your
asp.net
templates,
it
will
just
show
up
on
the
list
if
it's
in
dependency
injection
versus
like
having
a.
If
you
start
typing
the
right
thing,
then
it
like
suggests
you
add
the
using
for
the
extension
method.
C
A
C
A
There's
no
helper
class
or
optional
folder
other
than
that
that
one
in
data
we
didn't.
B
E
C
C
B
Yeah,
I
have
nothing
nice
to
say
so
just
say
nothing
yeah
then
I
don't
know.
Like
I
mean
jeremy,
do
you
care
whether
we
use
an
existing
one
or
whether
we
just
add
a
new
one
to
that
beautiful
dumping
ground.
A
The
the
data
annotation
extensions
was
not
in
it's
under
options:
dot,
data,
annotations
library
and
I
didn't
want
facebook
there
and
also
the
same
for
configuration
extensions.
This
is
not
specific
for
configuration
extent,
it's
specific
for
configuration
extensions.
B
B
Any
yeah,
that's
I
mean
it
seems
good
enough
to
me.
I
mean
quite
frankly,
like
I
mean
you
know,
they
all
seem
to
be
incredibly
specialized
in
in
nature,
but
they're
all
very,
very
narrow
types,
so
that
seems
to
be
the
pattern
of
the
namespace.
So
I'm
okay
with
saying
like
yeah,
there's
nothing
really.
That
is
specific
to
validation.
B
So
to
me
I
mean
it's.
I
don't
know
like
api
design.
Is
this
art
of?
Like
you
know,
you
want
to
preserve
the
invariant
of
the
thing
you're
adding
to
and
that
namespace
is
for
better
or
worse
the
shape
that
it
has,
and
so
I
would
preserve
that
narrow
nature,
because
it
doesn't
seem
like
it's
useful
to
introduce
a
generic.
B
I
mean
bad
word
boring
here,
but
like
yeah,
it
doesn't
make
sense
to
have
a
generic
type
in
here.
That
is
that
it's,
you
know
potentially
more
useful
because
it
doesn't
seem
like
it
will
be
discoverable
anyway
in
this
sea
of
extensions
types,
all
right.
So
then,
let's
move
on
to
the
next
one.
B
I
think
this
might
be
the
jason
one.
Yes,
david,
are
you
on?
B
C
D
Yeah,
I
can
speak
on
it,
so
it's
okay,
analyzer,
pretty
straightforward!
Just
if
remove
is
used
within
that
guard
contains
key.
Then
we
just
should
just
remove
the
contains
keyword
because
it's
redundant
if
you
scroll
down,
we
have
some
examples.
D
C
With
the
comments
about
not
doing
this,
if
there's
stuff,
if
there's
any
other
code
in
the
block-
and
we
could
do
a
crawl,
walk
run
thing,
but
there
are
certainly
cases
where,
if
contains
key,
and
then
the
first
thing
in
the
block
is
remove
and
then
there's
other
stuff
afterwards
and
that
could
be
converted
to
if
remove
and
then
all
the
other
stuff
in
the
block.
But
we
could
add
to
it
over
time.
If
you
know
you
wanted
to
yeah
my
my
comment
was
gonna.
C
If
there's,
if
we
have
the
did,
I
remove
something
and
what
was
it
in
one
call
which
I
feel
like
we
do,
then,
even
if
we
don't
have
the
fixer
fix
it,
having
the
squiggle
or
squiggle,
it
seems
yeah.
I
use
fancy.
Words
seems
reasonable
because
it
is
a
double
dip,
suggesting
the
there's
a
better
way
for
you
to
do
this.
That
has
the
same.
C
That
should
be
allowed
to
do
the
same
logical
flow,
but
you
know
if
you
have,
if
contains
key,
then
prints
the
entire
dictionary
state,
then
certainly
you
wouldn't
be
able
to
do
that
with
a
for
the
rewrite,
so
you'd
have
to
suppress
on
that
one,
but
I
feel
like
that
should
be
about
the
only
thing
you
would
do.
That
would
be
wrong.
C
C
Yeah,
I
wouldn't
I
mean
that
I
wouldn't
do
the
fixer
for
it,
but
my
associate
is
we
have
another
proposal
for
another
analyzer
somewhere.
That
would
suggest
changing
this
to
if
try
get
value
right.
C
C
Oh,
if
we
have
that
do
we
have
that
yeah
remove
tiki
key
and
out.
D
C
B
A
C
Right
yeah,
so
in
that
highlighted
code
from
the
previous
one,
it
would
be
the
case
that
both
of
these
would
trip,
because
it
was,
if
contains
key,
followed
by
an
indexer
followed
by
remove
and
while
try
get
value
followed
by
remove
would
work
for
that
particular
path.
A
more
optimal
code
would
have
been
just
to
call
remove,
because
that
was
what
the
that
was
the
functional
flow.
It
was
going.
C
B
C
B
C
D
D
D
B
Presumably
that
still
means
this
one
is
approved,
and
then
we
can
alright.
Just
for.
C
C
C
Which
means
the
analyzer
is
going
to
be
potentially
noisy
in
anything
that
we
have
to
cross
compile
for
on
that
standard
2o.
But
that's
our
problem.
Yeah,
I
mean
in
general
for
these
sort
of
small
perf
wins
for
the
things
we
are
having
across
to
compile.
We've
generally
just
gotta
we're
just
gonna
suppress
the
warning
rather
than
deal
with.
G
D
C
B
C
Don't
know
why
I
I
haven't
yet
figured
out
what
drives
people
to
write
that,
but
I
I've
seen
it
enough
that
I'm
actually
interested
in
having
this
yeah
I
mean
I
can
speculate
that
it's
that
they
used
to
have
win
all
with
two
things
and
then
they
removed.
The
second
thing-
and
you
know
all
they
did-
is
remove
all
their
red,
squiggles
and
right,
maybe
didn't
think
about
the
line.
I
I
do.
Is
it
in
addition
to
an
analyzer?
Is
it
worth
adding
a
win?
C
B
C
Yeah
I
mean,
I
guess,
yeah
with
the
analyzer.
It
would
be
good
enough,
especially
because
this
analyzer
can
run
back
to
4-0.
E
C
C
Replacements
that
depth
code
is
incorrect
in
multiple
ways.
Okay,
first,
that
that
passport
went
all
of
I
mean
well,
okay,
there
could
be
a
variety
of
things
in
the
specific
thing,
if
someone
wrote
past.when
all
of
t
without
the
await,
then
they've
written
an
expensive
no-op,
so
maybe
they
were
trying
to
wait
for
it,
in
which
case
the
fixer
should
really
be
await
this
thing.
C
But
if
you
could
have
awaited
it,
the
compiler's
already
going
to
warn
you
that
you've
gotten
the
weightable,
that's
not
being
awaited,
so
we
don't
really
need
an
analyzer
for
that.
The
thing
that
I
thought
this
was
was
about
is
someone
using
a
weight
pass
that
went
all
with
a
single
argument,
in
which
case
the
when
all
is
just
unnecessary
overhead
and
complication
in
the
code,
and
it
should
just
be
a
weight
peak,
but
you
would
never
want
to
replace
past.when
all
of
c
with
p
dot.
Wait.
That's
that's
just
not
the
only
reason.
G
C
Okay,
yeah,
whether
it's
the
same
certainly
there
could
be
different
diagnostic
ids.
I
don't
have
a
strong
opinion,
but
that's
fine.
C
State
yeah,
I
also
I
don't
know
I
mean
in
general.
We
want
to
discourage
folks
from
doing
synchronous
waiting
in
general.
That's
the
point.
We
want
to
have
an
analyzer
for
it,
but
I
care
more
about
the
when
all
analyzer
than
I
do
about
the
weight,
all
analyzer,
yeah
and
so
being
able
to
enable
them.
C
B
C
Well,
the
someone
could
be
using
it
to
avoid
exception
propagation,
because
when
any
doesn't
doesn't
actually
like
find
the
task
that
was
completed
and
then
wait
on
it.
It
just
tells
you
which
task
was
completed
and
then
it's
up
to
you
what
you
want
to
do
with
it.
So
you
might
await
task
that
went
any
with
a
single
task
to
avoid
throwing
an
exception.
C
C
G
C
G
C
Well,
it's
pretty
rare
to
see
it
when
any
with
one
argument.
Usually
it's
if
task
dot,
if
a
weight
tests
out
when
a
t1
t2
t3
equals
t1,
then
blah
right.
So
and
and
that's
why
you
you
don't
want
when
any
propagating
the
exception,
because
you're
generally
going
to
check
what
tasks
completed
and
do
something
different
based
on
which
one
it
was
or
you're
going
to
process
it
and
then
loop
around
again
or
whatever.
C
So
it's
it's
very
rare
to
see
when
any
with
one
argument,
but
because
there
is
a
potential
valid
use
for
it.
I
don't
want
to
introduce
potential
bugs,
but
yeah,
probably
if
you're
using
it
with
one
argument,
you're
you're,
actually
wanting
the
side
effect
like
it
being
no
throw
exactly
you've,
either
made
a
mistake
or
you've
very
much,
not
made
a
mistake.
B
All
right
so
then,
I
think
we
have
one
more
right,
the
ventilation
token
one.
C
Yeah
steve
correct
me
if
I'm
wrong,
but
I
think
we
would
want
to
if
they're
throwing
operation
cancelled
exception
or
task
cancelled
exception
either
of
those
we
would
change
it
to
throw
off
cancellation
requests.
C
I
don't
think
we
want
to
do
that.
So
I've
said
this
multiple
times
before
the
record.
I
hate
that
we
added
tests.
C
Oh
sorry,
can
you
hear
me?
Yes,
my
connection
dropped
for
a
second
yeah.
I
hate
that
we
added
champ
cancellation.
That
was
my
bad.
We
should
have
never
done
that,
but,
having
done
that,
some
people
do
care
that
a
task
canceled
exception
is
being
thrown,
and
so
I'd
be
a
little
hesitant
to
automatically
change
task
cancelled
exceptions
to
the
base
exception
like
we
would
never
we
allow
it.
We
allow
replacing
you
know,
throwing
a
more
derived
exception,
but
we
would
block
if
someone
tried
to
throw
a
less
derived
exception.
C
So
well
so
task
canceled
exception
is
a
bad
type
like
we
shouldn't
have
had
it.
We
added
it
because
we
thought
you
know,
maybe
in
the
case
where
it
was
a
task
that
was
getting
canceled
rather
than
something
else
that
you
would
want
to
know
what
the
task
object
was,
and
so
all
task
cancelling
exception
is
it's
an
operation
cancel
exception
that
has
a
task
property.
The
problem
is
in
ninety
nine
percent
of
new
usages.
C
B
G
E
C
I
double
checked
the
code.
It
is
throwing
operation
cancelled
so.
B
B
E
C
There
is
a
thing
with
task
cancellation
that
it
would
be
great.
If
you
know,
tobe
was
still
able
to
speak
to
us
that
I
feel
that
there's
an
anti-pattern
of
people
doing
if
cancellation
requested
return
and
that
that
sometimes
you're
doing
it
intentionally
but
often
you're
doing
it,
because
you
don't
understand
how
task
cancellation
works,
and
so
I
wonder
if
we
would
also
want
an
analyzer
for
that,
but
it
may
be.
That
is
different.
Sorry,
can
you
hear
me
again?
Yep
sorry,
I
was
on
my
phone
and
I
think
it
it's
been
like.
B
C
Kept
switching
back
and
forth,
I
I
hear
what
you're
saying
jeremy:
there
are
sufficient
number
of
cases.
I
think
where,
if
cancellation
is
requested,
return
is
warranted
that
I
would
be
hesitant
to
warn
about
it.
Okay,.
C
I
I
mean
we
could
do
we
could
it
would
be
a
trivial
analyzer
to
write.
I
think
we
could
see
what
it
flags
in
various
code
bases,
but
I
suspect
it
would
be
a
high
enough
false
positive
rate
that
we
would
you
know
basically
off
as
like
none
by
default,
okay
and
then,
but
just
to
confirm.
You
do
still
agree
that
we
put
it
in
guidelines
of
if
it's
cancelled,
you
should
let
that
go
to
the
canceled
state
and
not
to
the
succeeded
terminal
state.
C
Definitely
it's
just
that
some
people,
it's
just
that
some
people
use
it
as
basically
a
simple
like
a
a
box
boolean
that
they
can
signal
between
threads.
Basically
and
in
those
cases
it
might
be
perfectly
fine
if
we're
not
throwing
okay.
So
you
agree
that
the
guideline
says
you
should
be
throwing.
But
if
the
code
says
it's
not
throwing
that,
maybe
it
was
intentional
and
there's
not
enough.
C
B
So
how
about
we
review
the
other
two
analyzers
that
we
still
have?
I
don't
know
whether
anybody
can
talk
to
them,
but
it
seems
like
I
can
talk.
D
B
C
G
A
C
Wasn't
there
one
of
these
use
those
char
overload,
instead
of
string,
overload
that
we
actually
did
in
in.net
five
that
implemented.
Am
I
misremembering.
B
B
C
Well,
like
I,
I
don't
know
that
you
would
say
that
any
time
that
you
have
an
overload
or
two
overloads,
one
takes
string,
one
takes
char
and
you're
passing
a
literal,
that's
a
single
character
that
you
would
prefer
or
suggest
replacing
the
charon,
because,
like
I
don't
know
that
you
know,
console.right
has
is
better
for
the
char.
It
may,
in
fact,
be
worse
for
the
char.
B
I
don't
know
yeah,
I'm
not
saying
we
should
have
a
rule
like
that.
I'm
just
saying
like
there
might
be
other
overloads
that
should
have
the
same
behavior
as
contained,
so
we
should
still
have
an
explicit
list
here
but
like
I,
don't
think
that
it's
just
contained.
C
So,
unfortunately,
index
5
is
one
of
the
problematic
ones,
because
oddly
index
is
culture
aware
great
meaning,
the
char
version
is
worse
than
the
string
version
or
meaning
the.
B
B
C
Memory
serves,
this
is
an
api
from.net
framework
that
is
about
a
behavior
that
doesn't
exist,
in.net
core.
C
No
reason
for
it
to
exist,
and
so
it's
basically
saying,
let's
obsolete
it,
because
it's
irrelevant
in
the
noel.
B
So
if
you,
if
you
set
it
to
false
it's
just
we
don't
do
anything
with
that
information.
I
think
it
defaults
to
false,
and
if
you
set
it
to
true
it
drops
it
sorry,
the
term
idea:
okay,.
G
This
was
kind
of
a
general
question.
Sorry
I
I
support
the
change,
but
why
does
an
obsolete
kind
of
default
to
editor
browsable,
never
behavior
yeah.
So
the
reason.
B
We
don't
do,
that
is
because
it
gets
complicated,
because
now
the
question
is:
if
the
obsoletion
has
a
diagnostic
and
you
suppress
that
you
probably
don't
want
to
hide
the
type
from
intellisense
because
you're
suppressing
it,
because
for
better
or
worse,
your
library
uses
the
feature
I
mean
for
properties,
it's
probably
not
a
big
deal
or
for
enum
members.
But
imagine
it's
types.
B
B
So
I
think
to
me
I
would
never
just
blindly
opposite
like
I
would
never
just
blindly
apply
editorializable
to
things.
You
also
need,
I
think
it
makes
sense
for
particular
overloads
or
properties
or
things
that
are
extremely
easy
to
use,
but
like
I
would
not
do
it
for
types
for
example,
because
it
just
interferes
with
your
editing
experience
way
too
much.
C
B
C
B
C
Yeah,
I
can't
think
of
a
reason.
People
would
want
it.
I
guess
steve,
you
know
what
the
purpose
of
this
is,
how
likely
is
someone
to
have
a
net
standard,
2o
cross,
compile
where
they
care
in
framework,
and
they
are
tired
of
getting
yelled
at
in
the
thing
that
used
to
be
called
core?
And
now
it's
hard
to
talk
about
in
meetings?
C
C
B
I'm
not
very
consistent
with
my
own
smile
here,
but
good
enough.
All
right,
so
service
controller
stop.
F
A
B
I
mean
honestly,
I
don't
know
enough
your
market
ready.
C
C
C
Well
so
this
is
the
same
as
I
mean
it's
the
opposite
direction,
but
you
know:
there's
like
directory
dot,
remove,
recursively
and
directory.remove,
and
one
of
them
you
want.
One
of
them
is,
I
want
this
to
be
removed
and
the
other
one
is
remove
it.
If
it's
empty-
and
this
is,
I
want
to
stop
this
service
and
the
current
behavior
is,
if
there's
a
service
that
is
dependent
on
the
service,
it
will
have
to
also
be
stopped,
so
do
it
and
I
think
the
passing
false
is-
and
I
want
no.
C
Surprises
so
like,
if
you
stopped,
I
actually
can't
think
of
two
services
with
a
dependency
and
I'm
too
lazy
to
type
the
service
control
manager
commands.
But
you
know
you'd
think
it
would
be
pretty
weird
if
you,
you
know,
stopped
the
team's
video
chat
service
and
it
closed
your
remote
desktop
because
it
they
happened
to
say
that
their
most
desktop
service
depends
on
teams,
video
sharing
and.
C
E
B
C
Yeah,
the
only
question
I
would
really
have
is
about
the
the
truthiness
of
the
boolean,
because,
with
the
current
proposed
name
and
deriving
functionality
from
the
name,
stop
is
stop
true,
and
I
wonder
if
that's.
C
B
C
Indeed,
like
in
you
know,
I'm
fine
with
saying
that
anybody
who's
really
using
the
service
controller,
either
they're,
just
copying
pasting
code
or
they
actually
kind
of
understand
how
windows
services
works,
because
in
my
experience
you
can't
be
in
the
in
between
those
two
states.
It's.
It
is
a
vertical
learning
curve
that
the
that
you
know
you
would
understand
what
it
means
so.
B
C
I
thought
I
saw
something
in
here
while
you
were
scrolling
about
wanting
to
stop
with
like
timeouts
and
things
of
that
nature.
And
if
that's
the
case,
we
shouldn't
have
stopped
with
a
boolean,
because
it's
weird
that
you
have
stop,
stop
bool
and
then
stop
int
and
stop
cancellation
token
and
stop
timeout.
So
I
just
want
to
make
sure
that
we're
reviewing
the
proposal
that
is
actually
being
proposed
and
not
that,
like
it
changed
in
the
middle
of
the.
C
Yeah
I
mean,
I
think,
they're
it's
interesting
that
they're
not
paying
it
unless
wait
for
status
throws.
I
guess
it's
probably
what
it
does.
B
B
B
E
B
C
Particularly
thinking
about,
I
think,
he's
particularly
thinking
about
aot
and
if,
if
you
instantiate
a
dictionary,
if
you
have
a
generic
instantiation
of
a
dictionary
like
enumerating,
it
yields
key
value,
pairs,
other
apis
or
key
value
pairs.
So
you
end
up
with
a
generic
instantiation
of
that
key
value
pair.
C
B
Yeah
I
mean
I
would
say
it
is
very
unfortunate
that
we
have
this
truck
that
doesn't
have
a
quality
semantics
that
are
efficient,
but
yeah,
because
I
mean
you
can
do
equality
today
right,
it's
just
not
fast
right
and
you
can't
write
double
equals
because
we
don't
have
the
operator.
So
it's
a
bit
annoying.
C
C
B
Yeah
yeah,
I
mean
any
methods
we
add
to
key
value
appear.
Is
the
problem
here
right?
It's
not
the
interface
implementation
per
se.
That's
the
problem,
so
I
mean
in
fairness.
I
mean
it
makes
sense
to
me
what
the
what
the
person
is
proposing
here,
but
I
will
also
say
I
never
vanished
this
issue.
So
maybe
it's
not
a
big
deal.
B
Yeah
I
mean
I'm
somewhat
hesitant
to
not
give
people
useful
apis
just
because
we
have
a
very
abstract
size,
constraint
or
concern.
I
don't
know
what
that
means.
I
mean
the
problem.
I
think
that
john
is
fighting
for
is
like
you
know,
it's
not
that
this
particular
method
is
the
problem.
It's
the
you
know
the
total
set
of
all
these
things
they'll
be
adding
to
all
the
bcr.
That
is
the
problem,
so
you
know
it's
equally
hard
for
him
to
give
us
a
number
right.
So
it's
a.
C
B
C
With
a
multi-thing,
then
now
you
have
a
combinatoric
problem
of
if
you
have
int
comma
reference
type,
that's
different
than
reference
type
comma
end.
So
that's
two
different
copies
now,
and
so
this
is
look
at
a
net
application
after
it's
up
and
running
what
is
the
average
number
of
distinct
generic
created
versions
of
dictionary
or
key
value
pair?
C
I
don't
know
the
six
thousands
too
high,
too
low
or
in
the
right
ballpark,
but
that's
especially
because
this
is
a
two
argument:
generic
it's
it
grows
quickly,
and
so
I
assume
that's
his
concern
that
this
is
just
too
low
level
of
a
type
to
want
to
do
that.
B
Yeah
I
mean
I
I
mean
I
buy
the
argument,
it's
understanding
now
what
what
jano's
saying
I
mean
unless
there's
strong
evidence
that
this
api
is
doing.
Something
amazing,
which
I
don't
see
it
just
seems
like
you
know
it's
a
more
consistency
argument
for
how
we
usually
do
structs,
but
I
have
zero
problem,
not
approving
this
yeah.
C
I
wonder
if
we
have
an
analyzer
that
warns
that
you're
doing
equal
equal
on
a
struct,
that's
not!
I
equatable
and.
C
We
could
have
an
analyzer
if
you're
calling
dot
equals
on
a
thing.
That's
not
equatable,
but
I
I
don't
think
that's
a
very
useful
analyzer,
because
if,
if
you're
doing
dot
equals
like
you
have
to
do,
dot
equals
what
what's
your
alternative?
Just
suppress
the
analyzer
or
go
back
to
the
person
who
wrote
the
the
type
and
say
hey
implemented.
E
E
C
B
All
right
next
one
feature
request
renewable
for
xml.
Note
list:
oh
boy,
does
anybody
know
xml
well
enough
here
to
have
an
opinion.
C
B
I
don't
think
it
was
quite
bad,
but
there
were
certainly
cases
where
we
had
non-generic
collections
and
we
tried
to
implement
generic
interfaces
on
them,
and
the
problem
was
that
the
benefit
could
only
be
realized
if
we
were
to
add
strongly
typed
methods
on
the
type
rather
than
explicitly
implementing
it,
and
that
wasn't
possible
due
to
the
way
the
type
is
already
shaped
or
something.
C
Yeah,
so
I
can
say
this
is
this:
will
this
type
looks
like
it'll
be
a
losing
battle,
because
it's
it's
get
enumerator,
that's
the
non-generic
enumerate
get
enumerator
is
abstract,
so
we
can't
put
the
generic
enumerable
first,
which,
if
my
recollection
of
the
for
each
pattern
happened,
it
means
it's
still
using
the
non-generic
one.
B
B
Correct,
yes,
you,
let's
say
right
now:
if
you
want
to
use
link,
you
basically
have
to
first
say
as
innumerable
of
blah
blah
right
or
cast.
I
think
you
have
to
do
and
yeah.
I
think
the
problem
in
general
is
like.
If
you
have
a
technology,
like
you
know
the
the
old
dorm,
which
is
all
built
on
the
non-generic
collection
types.
I
think
your
phrase
is
really
telling
you
it's
like
it's
a
losing
battle.
E
C
But
yeah
since,
since
we
can't
do
the
normal
thing,
we
do
with
iron
removal-
and
I
know
I
enumerable
of
t
of
make
the
t1
be
the
the
default
public
one.
The
only
benefit
to
this
that
I
can
see
is
link
well.
The
system.link
got
enumerable
extension
methods
because.
C
C
C
B
B
B
What
why
did
the
bot
at
the
untriage
level
after
I
closed
the
issue?
That
seems
like
a
very
weird
reaction.
A
C
All
right,
I
think
it's
like
just
glancing
at
it.
I
think
it's
it
wants
to
return
where
and
where
not
as
two
separate
lists.
E
B
B
C
E
C
Yeah
I
mean
I
I
can
guess
at
the
functionality
and
I
can
guess
it
when
it
goes
poorly
like
if
you're
on
windows
does
support
re
rebinding
directories
as
parce
points,
or
I
guess
junctions,
but
basically,
if
you
for
one,
if
you
had
a
circular
directory
structure,
which
I
don't
know
if
windows
allows,
but
linux
definitely
does
you.
C
B
C
C
The
uint
is
logically
the
correct
thing
and
I
think
our
normal
framework
rules
say
we
would
say
end
unless
we
can
prove
that
we
need
that
30.
Second
bit
of.
F
C
C
I
mean
yeah
nullable
is
fine.
The
other
answer
where
they
have
here
you
know
default
is
max.
Value
is
also
fine,
because
you're
not
gonna
hit
it
like
it's
not
really
a
magic
number.
It's
like
I'm
going
to
count.
This
avoids
the.
If
I
don't
need
to
count
or
the
count
is
still
okay,
it's
like
no,
it's
just
if
the
count's
still
okay,
if
you
overflow
31
bits,
then
yes,
sorry
we're
going
to
stop
recurring.
C
I
mean
technically,
it
would
be
a
change,
because
if
you
do
have
an
infinite
thing
and
you're
not
allocating
at
each
step,
you
could
run
forever
and
now
it
would
terminate.
So
if
we
care
to
make
that
keep
running
literally
forever,
we
could
make
it
nullable,
but
I
would
just
make
it
in
defaulting
to
max
value.
Yeah.
D
C
They
called
out
in
the
comments
like
eventually
you're,
either
going
to
run
out
of
memory
or
get
rejected
by
the
file
system.
Anyway,
once
you
recurse
deep
enough,
because
you
you,
like
literally
can't
represent
a
you-
know,
directory
structure,
two
billion
items
deep
in
a
single
string,
for
instance
like
it's
just
forbidden,
we
can't
represent
that
data
right.
I
don't
know
how
the
walkers
work
and
I
don't
I
feel
like
in
in
the
you
know,
posix
file
apis.
You
can
have
I'm
in
this
directory
and
I
want
this
name.
Child
and.
C
C
E
B
B
B
B
C
Thing
I
mean
yeah.
We
could
say
that
zero
gets
normalized
to
max
value
as
well,
just
so
that
the
default
is
the
default
because
yeah,
I
think
that
there's
a
recurse
subdirectories
boolean
that
they're
showing
in
the
usage
examples
line.
So
you
already
have.
B
C
B
Yeah,
it's
it's
the
noaa
location
thing
that
jeremy
built
for,
I
think,
ms
built.
It's
basically
a.
C
B
I
see
so
you
pass
in
the
options
and
then
you,
basically
logically
just
for
each
over
the
end
results.
That
means
you
would
not
control
the
actual
the
actual
recursive
behavior,
but
you
have
basically
a
predicate
where
you
can
say
should
include
and
should
recurs.
So
if
you
don't
want
to
recurse
at
all,
you
would
just
set
the
predicate
to
false
for
everything
and
which
I
think
is
more
logical
than
having
a
magic
value
for
max
recursion
zero
right.
So
I
think
it's
okay
to
say:
zero
means
no.
E
C
C
B
C
C
B
C
Yeah,
so
for
heard
the
discussion
there
was
a
question
as
to
when
you
would
actually
ever
have
a
read-only
span
of
string,
but
assuming
assuming
you
actually
have
such
a
thing
like
this
api
would
be
a
relatively
straightforward
gentleman
yeah.
The
only
thing
I
can
think
of
is
you
had
an
existing
array
and
you
wanted
a
slice
of
it.
B
B
B
B
C
Steve
you
do
a
lot
of
work
with
the
language
people.
When
are
we
getting
params
span?
It's
hollywood.
I
just
shut
my
door,
it's
it's
definitely
on
the
list.
Param
spam
pram's
innumerable
like
they're
all
sort
of
in
the
same
bucket,
and
you
know
maybe
c
sharp
10,
maybe
which
is
beyond
six.
D
C
That
doesn't
be
on
that
side.
Okay,
because
I'm
like,
I
feel
that
if
we
had
params
span
and
whether
or
not
it
would
do
a
sort
of
more
optimal
thing
for
a
span
of
reference
types,
I
think
that
if
we
had
params
span,
we
would
look
at
things
like
string.join
here
and
we
would
just
go
through
and
go
to.
C
Town
with
these
are
things
that
our
params,
that
we
want
to
spanify
or
things
that
would
have
had
value
as
being
params,
but
we
were
always
afraid
of
the
accidental
overhead
of
somebody
not
realizing
that
when
they
do
this
in
a
for
loop,
it's
creating
a
13
element
array,
every
time
and
so
yeah.
Maybe.
B
F
So
if
the
other
half
of
one
of
the
slated
tentatively
for
c
sharp
10
features
goes
in,
which
is
the
the
support,
the
better
refscoping
rules,
which
would
include
support
for
effectively
value,
arrays
and
fixed
size,
buffers
of
any
type,
not
just
the
primitive
types,
then
the
compiler
could
generate
behind
the
scenes,
a
struct
which
contains
the
correct
number
of
fields
and
pass
that
as
a
span
as
they
correctly
scope
span
to,
for
example,
this
joint
method
yeah.
But.
C
That
that's
something
that
we
were
already
experimenting
with
with
source
generators,
steve
harder,
I
think,
had
some
some
prototypes
of
that,
but
yeah
that
that
would
work
assuming
the
compiler
could
do
it
yeah
I
mean
just
because
the
c
sharp
language
doesn't
let
you
stack
alec
string.
Three
doesn't
mean
that
the
c
sharp
compiler
can't
write
down
fields
that
it
knows
will
be
aligned
and
then
pass
a
pointer
to
them
it
can.
C
It
can
do
cheating
things
that
the
language
can't
assuming
that
the
runtime
supports
it,
but
so
what
that
makes
me
think
is
that
if,
if
all
of
this
potentially
would
be
in
the
scope
of
you
know,
param
span,
as
was
mentioned
earlier,
we
probably
shouldn't
look
at
this
api
in
isolation
and
instead
should
look
at
it
as
what
would
it
mean
to
paramsfanify
much
of
the
runtime
or
much
of
the
ecosystem
yeah
unless
yeah?
C
I
would
agree
with
that,
unless
somebody
does
think
that
there's
a
compelling
reason
to
do
string
join
of
read
only
spam,
in
which
case
it
doesn't
hurt
to
do
the
one
offs,
but
it
if
it's
just
like.
Oh,
this
could
be
better
than
I
think
it's
param
spam.
C
C
C
B
Mean
I'm
not
sure
that
I
mean
I
don't
know
like
I
mean
the
array
would
have
to
be
very
large
in
order
for
you
to
say
that
link
performs
better
than
just
creating
a
new
array.
So
I
don't
know,
like
I
mean
realistically
like
when
you
say,
string
dot
join
like
how
many
pages
will
you
have
like
if
you
do
this,
for
a
5
000
element
array
like
you're,
doing
something
really
terrible
anyway
right
well,.
C
B
E
C
Yeah
and
you
could
always
write
your
own
enumerator-
that
was
the
the
range
of
numerator
over
an
array.
C
Sure
I
mean
if
we
leave
it
as
ready
for
review
it's
going
to
pop
up
continuously.
So
I
don't
know.
If
that's
we
want
to
close
it
and
say
it's
solvable
with
enumerable
already
and
then
maybe
link
to
the
where
we
just
added
enumerable.range
and
but
that
we
will
reevaluate
it
as
part
of
a
bigger
params
span.
When
that
comes
online.
D
C
C
C
So
there
is,
I
don't
I
don't
want
to
sidetrack
too
much,
but
they
they
did
list
a
scenario
in
here
where
they're
trying
to
use
the
existing
array-based
overloads
and
they're
saying
like
hey,
you
know
it's
kind
of
painful
to
keep
index
and
count
kind
of
you
know
consistent
with
each
other,
especially
as
I'm
trying
to
chunk
this
on
my
own,
and
I
wonder
if
that
means
that
there
might
be
an
opportunity
for
kind
of
a
helper
api
which
is
given
an
array
and
given
a
read-only
span,
try
to
get
the
array
segment.
C
C
And
I
was
wondering
if
this
is
actually
a
scenario
where
we
could
have
a
a
kind
of
more
fundamental
helper
method,
which
is
given
a
t
array
and
given
a
read-only
span
of
t
that
that
corresponds
to
a
slice
within
that
array.
Return
the
array
segment
of
t.
That
is,
the
slice
that
way
from
the
array
segment.
You
can
reconstruct
the
index
and
the
length
for
the
span.
F
I
think
we
had
discussed
something
like
this
previously
and
we
decided
against
it.
I
that
that
is,
I
think
we
had
discussed
the
apis
for
trying
to
go
from
a
span
back
to
the
original
backing
array,
and
we
basically
had
said
users
have
both
of
them,
so
they
can
use
unsafe
to
do
the
tracking
themselves.
F
C
Yeah
well
because
I
know
I
had
brought
one
of
from
a
read-only
span,
get
the
span
or
from
a
read-only
or
from
a
any
span
type
get
a
memory
type.
I
don't
think
when
I
brought
a
proposal.
It
would
go
all
the
way
back
to
array,
but
I
do
think
it
is
it
even
though
from
the
span,
I
don't
think
you
could
get
the
array,
but
if
you
give
the
array
and
the
span,
then
the
overlaps,
like
you,
could
span
the
array,
do
overlaps
and
now
you
know
the
relative
indexes
yeah.
C
It's
basically
a
glorified
call
to
overlaps
you.
You
can
never
go
back
from
a
span
to
the
original
object
because
we've
lost
that
information.
But
if
you
had
the
original
object,
we
could
tell
you
where
inside
that
object,
the
span
is
yeah,
so
we
could
make
the
helper
or
you
know
we
could
write
in
the
issue
here:
hey
here's!
Your
four
line
helper.
C
Maybe
maybe
I'll
just
respond
with
that
after
this
meeting
then
and
see
what
they
think.
C
A
A
A
B
A
B
So
are
we
canceling
tomorrow,
I'm
canceling
not
just
tomorrow.
I
just
cancel
the
the
whole
series,
basically
to
be
only
just
back
to
one
tuesday.
Basically,
okay,.