►
From YouTube: .NET Design Review: GitHub Quick Reviews
Description
00:00:00 - Approved: Don't forget about JsonSerializerOptions.CreateForWeb() https://github.com/dotnet/runtime/issues/34626
00:07:37 - Approved: OSPlatform support for WASM/Blazor https://github.com/dotnet/runtime/issues/33328#issuecomment-614802442
00:47:16 - Needs Work: Guarding calls to platform-specific APIs https://github.com/dotnet/runtime/issues/33331#issuecomment-614826740
01:31:25 - Approved: New API: `InitOnlyAttribute` https://github.com/dotnet/runtime/issues/34978#issuecomment-614845405
A
A
B
C
B
B
A
D
E
A
Consumers
are
JavaScript
based
right,
so
they
often
want
the
the
camel
casing
policy
right
versus
the
normally
it's
about
the
options
that
we
have
are
just
basically
you
know,
in.net,
you
see
lies
in
DC
or
let's
just
plot
met
objects.
You
don't
really
care
about
the
naming
policy,
so
we
just
set
it
to
pascal
right,
and
so
I
think
that's
why
we
went
with
for
weapon
then
again
like
I
don't
think
it's
been
able,
make
it
break
and
change
the
either.
F
A
Did
they
did
Ryan
ever
push
back
or
anything?
Sorry
did
you
I,
never
push
back
on
anything
like
I
mean
being
better
than
the
spec
that
they
call
the
API
and
they
seem
to
be
okay
with
that.
But
then
I
haven't
already
need
any
anything
since
then,
so
I
assume
that's
still
the
plan
yeah
all
right,
then
this
goes
into
API
approved
and
that
no
means
we
can
remove
the
blocking
label.
D
F
F
D
F
I
mean
this
has
a
name,
so
it's
very
clear
the
purpose
and
you
know
we
can
slap
documentation
on
it
and
and
etc.
I
think
people
who
are
doing
their
own
serialization.
They
may
end
up
defining
exactly
a
redundant
copy
of
this
if
they're
looking
for
it
because
they
don't
see
the
factory,
but
you
know
using
the
constructor
gives
you
power
using
this,
gives
you
a
set
of
pre-built
defaults,
but
they're
all
settable,
so
you
can
change
it
after
the
fact.
But
it's
or
can
you
is
this
gonna
be
a
pre-sealed
options.
D
A
Mean
that's
why
that's
one
of
the
things
I
discussed
with
Rhian
at
some
point
is
like
and
know
we
need
to
be
able
to
modify
the
instance
right,
because
the
most
common
thing
you
want
to
do
is
register
some
sort
of
converter,
and
so
we
took
basically
the
ideas
you
create
for
web,
and
then
you
get
your
own
instance
to
mess
with.
And
yes,
if
somebody
is
an
idiot-
and
they
said
the
casing
polish
to
do
something
else,
then
that's
too
bad
sure.
F
But
yeah
it
might
hit
something
how
I
was
deciding
this
returning
a
shared
option,
setting
or
but
as
long
as
it's
returning
new
yeah,
because
it's
it
just
gives
you
a
better
starting
place.
If
you're
doing
the
web
scenarios
that
the
the
factory
gives
it
a
better
name
said
I,
don't
think
we
made
a
mistake
in
the
past
with
making
the
constructor
be
public.
A
Although
I
would
say,
like
the
Steve
just
said
of
the
enum,
it's
not
that
bad,
actually,
you
know,
might
be
more
discoverable
right
because
when
you
say
new
Jason
see
lots
of
options,
and
then
you
see
over
lots
of
the
construct
and
one
takes
an
enum
that
basically
has
two
values
like
you
know:
I
don't
know
standard
and
whether
right
like
that
would
not
be
insane
right.
Then
you
kind
of
get
hinted
that
all
there's
potentially
different
default
settings.
So.
F
F
F
F
We
can
decide
that
it's
is
singular
in
that
it
represents
a
collection
of
default
things.
So
defaults
defaults
feels
more
natural
to
me.
Somehow
yeah.
Then
we
would
have
you
know
I
guess,
yeah,
whatever
we
call
the
zero
value,
which
is
what
we're
already
doing
and
then
the
the
next
value
would
be
web
defaults,
but
again,
defaults
has
redundant
so
web.
B
G
A
D
I
think
I
guess
maybe
it's
more
discoverable
because
he
has
you're
typing
intellisense
will
tell
you
the
overloads
for
the
constructor.
So
from
that
standpoint
it's
more
discoverable
I,
don't
know
about
the
naming.
So
much
I
mean
generic
I
would
just
call
default.
Cuz
I
think
that's
what
we
do
in
a
lot
of
other
places,
but
maybe
that's
not
what
we
want
anymore
going
forward.
I'm,
not
sure
it's
just
a
little.
H
A
I
think
when
I
discuss
of
awesome,
initially
I
think
one
of
the
reasons
was
perf,
because
if
you
have
an
accept,
if
you
have,
if
your
kids
inside,
if
your
case
sensitive
and
pass
good
case
for
some
reason,
that
I
think
there
was
some
benchmarks
there
used
to
be
better.
And
so
we
went
with
that.
Well
because.
D
F
F
A
A
Yeah
I
mean,
like
my
kids,
for
example:
I
just
use
it
just
to
see
all
as
settings
and
store
them
like
I,
don't
I
mean
I
just
use
Jason,
because
I
can
actually
debug
it
and
read
it,
but
I
don't
exchange
it
with
anybody
else.
So
that's
like
a
local
yeah
local
to
file,
or
you
know,
document
to
be
when
you're
distorting
the
database
and
you
don't
actually
care
about
what
odds
mean
forward.
A
Yeah
I
mean
that's
the
discussion
I
had
with
awesome
right.
If
you
look
at
the
internet,
for
example
like
there's
a
bunch
of
stuff,
for
example,
the
the
github
API
is
have
a
naming
convention.
That
kind
of
tells
you
that
they
use
Ruby
because
they
use
the
movie
naming
conventions,
but
they
return
in
Jason
right.
So
it's
a
it's
not
uncommon.
For
people
to
have
you
know,
client-server
just
talk
in
a
language
that
happens
to
match
word
implementation
language
they
happen
to
use
I
mean.
A
In
the
in
the
chat,
I,
don't
know
like
I,
don't
like
standard
it
kind
of
implies
that
this
is
better
than
the
other
ones.
I
mean
that
wouldn't
be
insane.
It's
just
a
little
bit
weird,
because
I
think
it
only
really
makes
sense
with
the
naming
policy
right.
Everything
else
is
just
I
think
the
I
spin
it,
for
example,
set
different
settings
for
you
know
the
MEXT
recursion
depth
that
they
protect,
against,
which
I
think
is
lower
than
what
we
have,
which
is
nothing
to
do
worked
on
it.
A
F
I
actually
think
that
net
might
be
a
good
name,
because
you
know
if
we
added
you
know,
you
mentioned
that
it
sort
of
leaks
that
github
was
using
Ruby
right,
like
we
could
conceivably
later
get
enough
demand
for
hey.
Can
you
give
me
an
accelerator
for
the
Siri
things
that
I
can
write
the
class
and
dotnet
and
it
will
see
realize
looking
like
Ruby?
Did
it
etc?
F
F
But
yeah
so
at
least
that's
saying
like
this
represents
the
defaults
for
or
that
these
are
the
defaults
that
you
get
by
default
in
dotnet,
and
then
we
have
that
gives
us
a
room
to
expand
for
saying
this
is
what
the
defaults,
our
equivalent
defaults,
are
for
some
other
platform.
If
we
choose
to
do
them
in
a
future,
you.
A
H
F
I
F
B
A
I
A
Yeah,
so
I
could
talk
to
that
because
I
filed
it
so
for
Blaser
we
need
a
way
to
identify
the
place,
a
platform,
and
you
probably
all
aware
we
had
I,
don't
know
100
gazillion
discussions
about
what
that
actually
means
like
what
is
blazer
alright.
Is
it?
Is
there
such
a
thing
as
a
blazer
platform,
with
a
blazer
operating
system?
Is
that
you
know?
A
But
in
principle
you
could
imagine
other
environments
that
are
not
the
browser
that
executes
that
assembly
right,
and
so,
if
you
ever
need
that
we
can,
we
can
add
that
it's
also
worth
noting
that
we
don't
really
corner
ourselves
too
much
with
whatever
choice
you
make
here,
because
we
don't
really
have
a
way
to
ask
for
what
the
current
West
platform
is.
The
way
that
it
works
is
you
say:
runtime
information
is
a
West
platform
and
you're
passing
the
one
you
want
to
check.
So,
if
later
on,
we
have,
for
example,
more
specific
OS
platforms.
A
Let's
say
chrome
vs.,
Mozilla
vs.
edge.
We
could
expose
them
as
well
and
then
we
will
just
say
yep.
If
you
ask
us
to
be
a
browser,
we
say
yes,
but
if
you
also
put
the
VM
I
would
also
say
yes
right.
So
this
is
not
necessarily
like
a
cornering
decision
here,
but
I
think
that's
kind
of
the
the
minimum
we
need
in
order
to
make
that
assembly
available,
so
that
people
can
make
runtime
decisions
based
on
whether
they
can
call
certain
API
is
because
you
already
know
that
certain
API
is
won't
work.
A
Because,
fundamentally,
the
reason
why
you
want
to
do
analyze
check
is
because
you
want
to
call
an
API
that
might
not
work
right
and
so
the
general
mechanism
that
we
have
exposed,
so
that
is
runtime
information.
Dot
is
OS
platform
right
so
that
so
by
exposing
that
and
in
that
fashion,
seems
more.
You
know
self
consistent
with
the
other
west
checks.
You
would
have
to
write
like.
F
A
Yeah
able
to
me,
I
don't
have,
I
think,
yeah
I
just
copied
a
pacer,
but
somebody
suggested
I
mean
in
fairness,
though,
like
architecture
is
already
like
a
graphic
of
things.
We
really
have
x86
arm,
and
so
it's
not
like
the
most
readable
names
already,
but
I
also
have
no
objection
to
the
web
assembly
right.
F
But
those
are
more
charade,
marked
aims
and
and
such
verses
this
one
would
be
like
I
mean
you
know,
pick
an
assembly
language
language
is
for
x86,
and
you
know:
wasm
is
just
one
assembly
language
that
we're
using
as
another
intermediate.
So
it's
I
think
that
we
should
yeah
I
feel
like
we
should
expand
it.
It's
not
yeah,
it's
not
the
trademark.
F
C
C
Say
that
say
that
there's
some
capability
that
gets
added
to
it
in
the
future,
but
they
have
to
come
up
with
a
new
language
design,
so
they
call
it
was
into
instead
of
wasm,
because
it's
not
fully
backward-compatible
at
that
point,
do
we
end
up
with
architecture
having
a
bunch
of
different
fields
in
it
that
says:
webassembly
webassembly
to
webassembly,
3,
blah
blah
blah?
Or
at
that
point,
would
we
say:
Oh
like
this
is
getting
a
bit
verbose.
Maybe
it
should
have
just
been
wise
in
the
whole
time.
K
F
Think
that
so
looking
at
the
things
that
are
in
architecture
right
now,
which
is
arm
arm
64x64
and
x86
like
those
sort
of
go
along
with
our
level
of
you,
know
the
sort
of
rid
except.
We
also
include
the
OSS
in
the
rid,
and
so
the
question
would
be
is
why
azzam
two
fundamentally
incompatible
with
masam?
Or
is
it
just?
We've
they've
extended
it,
because
if
it's
extensions,
that's
versioning
and
not
not
an
incompatible
architecture.
Right
I
mean
I'm
aware
that
x64
is
a
superset
of
x86,
but.
K
C
K
J
F
A
In
fairness,
though,
like
I,
think,
the
vast
majority
of
users
will
never
care
about
the
architectural.
The
only
reason
why
you
might
care
is
because
you
are
loading
assemblies
yourself,
somehow
or
libraries
you
solve,
in
which
case,
if
you
do
architecture
checks,
you're
very
likely,
also
having
to
understand
the
directory
structure
of
your
package
in
order
to
make
sense
of
it,
and
then
you
basically
come
from
the
book
both
naming
conventions,
no
matter
what
you
do.
A
C
C
A
C
But
you
can,
you
can
do
things
that
are
specific
to
the
operating
systems.
For
example,
if
I
know
that
you're
coming
from
an
iOS
device,
then
I
might
pop
up
a
notification
saying
hey
download
my
app
from
the
App
Store
and
I
might
target
that,
based
on
what
OS
platform
I
believe
you're
coming
from
I.
A
Would
say
that
that
would
be
a
different
question
than
but
I
mean
in
principle.
We
could
I
mean
so
there's
nothing
fundamentally
broken
with
the
design.
We
could
only
have
it's
reasonable
for
us
to
return.
True,
for
if
you
ask
about
the
real
Windows
right
like
we
can
beta
return
true
for
browser
and
for
Windows,
but
the
problem
of
that
approach
is
how
much
more
code.
Do
you
break
by
doing
that,
because
I
think
it's
a
reasonable
assumption
that
most
code
takes
when
is
Windows
returns.
A
F
Depending
I
mean,
if
it's
something
that's
been
there,
since
you
know
in
t1,
then
you're
pretty
well
good
to
go.
Yeah
yeah
I
mean
like
that
may
mean
that
we
want
either
OS
platform.
Dot
is
host
platform
which
would
be
what's
running
the
browser
and
then
the
standard
console
things
would
just
return
the
same
answer,
but
or
that
it
would
be
a
something
webassembly
specific
somewhere
which
maybe
still
works
in
terms
of
OS
platform
as
input,
but
I,
don't
I,
don't
think
that
we
would
yeah
I
share
you
most
concerned.
That
is
OS
platform.
F
F
A
I
think
Johnson.
Allergy
is
quite
interesting
because
if
you,
if
you
really
want
to
do
the
inception
kind
of
thing,
but
you
want
to
know
what's
outside
I
think
then
it's
okay,
if
you
have
to
call
different
API,
is
right,
because,
basically
you
have
to
decide
how
many
layers
that
were
you
aware
of
right.
A
So,
for
example,
in
this
case
I
think
it's
reasonable
to
say
you
know,
if
you
say
it's
a
platform
browser,
then
you
can
say:
okay
now,
I
can
ask
some
other
API
from
you
know
that
blazer
folks
provide
you,
for
example,
to
check
the
browser
string
right
and
say
the
the
browser
user
agent
string.
So
if
you
want
to
know
that
you're
running
on
Windows,
you
can
still
figure
this
out
by
looking
at
that.
A
But
you
know:
I
have
to
progressively
know
more
about
your
outside
environment
right,
because
otherwise
the
whole
point
of
emulation
is
to
kind
of
lie
to
you
right
to
give
you
the
illusion
that
you're
just
running
you
know
in
a
particular
environment
right,
so
that
that's
why
it's
hard
to
like
give
people.
You
know
the
the
red
pill.
If
you
will
right
like
that,
you
have
to
kind
of
opt
into
the
how
many
red
code
that
you're
aware
of
I.
F
Mean
I
can't
see
the
browser
caring
slightly.
What
host
environment
is
because
it
would
be
things
like
suggested
path,
presentation
and
like
where
settings
like
there.
There
are
scenarios
where
you're
trying
to
tell
them
how
to
use
their
own
come
now
to
use
their
computer
outside
the
browser.
It
feels
very
nice,
so
yeah
I
would
say
that
that's
a
different
API
I.
G
C
C
D
A
I'm
unit,
so
we
had
this
discussion
recently
on
the
on
a
side.
Conversation
yeah
I,
want
to
I
want
to
talk
about
this
one
as
well,
but
I
would
like
to
make
that
a
different
topic
of
conversation,
because
it's
a
it's
a
bigger
issue.
So
there's
a
few
things
but
there's
one
then
it's
already
around
an
environment.
A
lot
of
people
are
using
it
I'd
looked
at
usage
recently
and
it's
actually
used
a
fact
on
to
use
the
technical
term,
and
so
the
question
is:
what
are
we
doing
with
that?
A
I
think
I
think
the
version
number
you
know
yon
already
corrected
me
that
we
could
that
we
were
took
the
correct
version
number.
So
we
no
longer
return
bogus
information
from
there
I
think
the
platform
ID
is
still
somewhat
broken,
though,
because
that
already
has
value
said
example:
I
think
it
has
Mac
OS
or
something
like
this,
which
we,
which
doesn't
return
my
co
s
on
on
Mac
OS.
A
So
there
certainly
is
some
issues
with
that
API,
but
maybe
there's
some
some
part
of
it
that
we
should
just
accept
as
it's
current,
for
example,
the
version
number
we
could
say
it's
current,
but
then
we
say
for
platform
ID
we
just
obsolete
that
one
and
say:
please
don't
use
that
one,
because
it's
no
longer
the
right
information,
but
there
certainly
is
overlap
of
environment
OS
version
and
for
better
or
worse,
we've
created
the
other
one,
and
so
we
have
to
reduce
it
overlap.
Somehow.
J
J
A
I
think
so,
there's
two
sizes
there's
the
version
number
itself,
which
is
also
not
clear
to
me
what
it
would
return
because
of
probably
the
the
return.
The
elective,
like
the
actual
version
of
the
browser's,
probably
also
not
very
well
defined,
but
I
think
like
if
you
ignore
browser
for
a
moment
by
the
question,
is
what
is
OS
version
return
on
on
the
neck,
so
Windows
today,
right
so
like
there
is
already
there's
some
things
where
we
return
correct
information.
There's
some
things
very
down.
If
we
just
have
to
think
about
that.
A
J
A
But
like
the
reason
why
I
would
ignore
it
is
because
it's
prior
hard
right
for
better
words.
We
have
both
environmental
US
version,
which
is
already
shipped
to
the
table.
We
can't
change
it
west
platform
and
in
top
services
has
also
shipped
in
this
table,
and
so
we
have
both
concepts,
no
matter
what
we
do
right
and
so
like
one
of
the
problems
we
have
to
do
is
you
know,
reconcile
this
overlap.
F
F
F
F
M
M
A
So
my
position
on
that
is
that
I
don't
know,
but
we
start
with
the
most
conservative
approach,
which
is
we
just
give
you
the
way
to
check
that
you
won
in
the
browser?
If
we
need
the
other
browsers,
we
can
add
them
later
there
because
of
the
way
the
the
OS
checks
are
being
done.
You
can't
ask
what
you're
running
in
you
can
only
ask.
Am
I
this
thing
so
we
can
return
is
true
for
both
browser
and
chromium.
If
you
have
to,
for
example,
or.
F
A
J
M
A
A
F
A
A
J
J
A
D
A
A
A
A
So
basically
you
have
the
situation
really
want
to
provide
people
with
an
analyzer
that
can
tell
them
when
they
use
ap
eyes
that
are
not
available
to
them
right
and
that
can
be
either
you're
the
wrong
platform,
because
the
API
is
Marcus
window
specific,
but
you're,
actually
on
iOS
or
because
you're
on
the
wrong
version
of
iOS
right.
So
the
idea
for
building
for
iOS
and
Android
is
generally
speaking,
that
you
compile
against.
A
This
API
might
not
be
available
to
you.
So
please
go
out
the
call,
and
so
the
way
they
analyzed
it
will
work
is
that
it
will
basic
check
whether
your
API,
your
type,
you
were
you
know
containing
symbol.
If
you
will
is
itself
markers
where
specific,
in
which
case
you
effectively
just
shift
the
burden
to
the
caller
of
yourself
or
you
have
a
you
know,
code
in
your
method,
body
that
basically
causes
API
and
says
you
know,
am
I
running
on
iOS,
11
or
higher
right,
and
so
this
is
basic
model.
A
By
saying
one
time,
information
thought
is
always
platform
or
later
we
already
have
its
platform,
but
then
the
West
platform
or
later
will
also
allow
you
to
pass
in
the
version
numbers.
You
can
quickly
check
whether
you
can,
you
know
be
not
you
your
minimum
is
that
version
number
interesting
single
tee
with
the
SDKs
is
that
you
know,
as
you
probably
all
Apple
makes
what
we
will
consider
breaking
changes
and
that
they
remove
a
api's
then
will
generally
not
make
incompatible
changes,
meaning
they
will
not
change
the
shape
of
an
API.
A
A
A
So
also
coming
up
in
the
spec,
so
the
way
the
spec
was
written
was
very
focused
on
iOS
and
Android
and
to
sort
extent
Windows
as
well,
where
you
really
don't
talk
about
general-purpose
api's,
you
want
to
talk
about
a
very
specific
API.
Let's
say
you
know
some
API
in
the
iOS
SDK
or
some
API
and
the
Windows
SDK,
like
registry
WMI,
things
that
are
inherently
we're,
specific
and
they're,
inherently
not
portable.
A
There
is
this
other
concern
that
we
have
today
in
the
platform
what
we
have
some
api's
that
are
inherently
portable,
but
they
don't
support
it
everywhere.
That's
a
good
example:
here's
or
favorite
you
know
console
window
with
right,
which
apparently
we
can't
I
forgot,
can't
get
or
can't
set
on
on
anything
but
Windows.
And
so
the
question
is:
how
would
we
model
that?
And
my
personal
opinion
is
that
it's
very
hard
to
model
that
over
time,
because
the
premise
of
the
feature
is
annotations
in
the
reference
assemblies.
A
So
that
means,
if
you,
if
you
target
something
portable,
we
can
only
annotate
what
we
know
at
the
given
point
in
time
right
and
then
you
can,
you
can
either
you
know,
have
a
model
of
a
inclusively
say:
there's
API
supported
on
these
platforms,
so
you
can
say
this
API.
It's
not
supported
on
this
platform
right
and
there
are
cases
where
one
is
better
than
the
other,
and
but
it's
most
single,
you
know
single
best
answer
I,
guess
so.
A
I
think
my
general
expectation
is
that
I
wouldn't
use
this
mechanism,
for
you
know
portable
API,
so
let's
say
reflection.
Image
program
we
would
say
reflection
amid,
is
a
feature
that
it's
not
available
on
all
platforms:
the
set
of
platforms
that
the
feature
might
be
available
to
might
shift
over
time.
So
we
don't
have
a
static
knowledge
about
where
that
is,
and
so
we
just
asked
it
to
call
the
capability
API.
A
But
you
basically
asked
at
one
time:
is
this
feature
available
or
not,
and
I
have
another
spec
for
that
that
basically
talks
about
how
we
would
mark
capability
api's
in
in
the
same
way.
So
the
title
has
a
coudn't
principle
check
your
code
and
check
whether
you
are
checking
the
capability,
but
if
you
go
through
the
motions,
I'm,
not
sure
it's
always
worth
it,
because
it
could
become
fairly
noisy
and
the
question
whether
we
are
better
off
than
that.
A
M
By
that
for
ETL
Debs,
maybe
we
make
a
choice
that
only
ever
use
this
specifically
on
very
platform
platform,
specific
things,
but
I
also
wonder
if
users
would
would
fall
into
that
recommendation
as
well.
If
there
was
a
way
we
could
influence
them,
even
I,
almost
wonder
like
we
have
some
api's
on
sockets
that
are
Windows
specific
today,
but
we
have
a
peak
era
up.
That
is
updating
to
add
support
for
other
platforms,
so.
A
Yeah
I
mean
this
is
a
discussion
that
we
had
a
discussion
with
Steve
and
I.
Think
I
forgot
things
particularly
ago.
I.
Think
the
example
was
there's
a
pep
talk
of
the
API,
not
sorry,
there's
a
named
pipes,
API
right.
If
you
pass
in
the
name
for
the
pipe,
it
only
works
on
Windows
if
you
don't
pass
in
a
name
for
the
pipe
that
works
everywhere
right.
These
are
examples
where
you.
A
It
also
depends
on
what
values,
you're
passing
in
and
so
I
think
in
order
for
us
to
tackle
that
we
can
either
do
one
of
analyzers,
where
we
just
check
for
particular
patterns
in
the
code,
which
I
think
it
would
work
for
widely
use.
The
API
is
what
we
find
some
sort
of
mechanism
where
we
can.
You
know,
extend
our
attributes
so
there's
a
personal
ability
where
we
just
put
in
enough
attributes
in
the
in
the
API
surface
that
we
can
have
generic
analyzers,
they
can
understand
what
what
what
works
and
what
doesn't
right.
A
But
the
problem
here
is
really
the
last
mile
right.
If
you,
if
you
shoot
for
a
hundred
percent,
it
will
be
very
hard
because
there's
a
lot
of
nuance
for
you
know.
Particular
things
don't
work
the
same
across
all
operating
systems
right
but
I
mean
the
example
that
we
have
here
is
that
if
you're
building
an
iOS,
12
app
anyone
run
on
iOS
10.
You
know.
Unless
we
do
this
feature,
you
have
zero
way
of
knowing
that
you
call
an
API
that
was
introduced
later.
A
A
J
J
A
The
way
I
see
it
is
that
I
don't
buy
capability
API
it's
for
that
level,
because
the
problem
is
unless
somebody
designed
capability
API
that
you
can
check
what
api's
are
you
looking
for
so,
for
example,
take
our
favorite
example
right
like
Ram,
it
is
not
supported
everywhere,
but
we
have
like
what
12
types
of
14
types
and
like
what
total,
probably
hundreds
of
members
that
are
directly
applicable
to
recommend.
So
if
you
were
to
write
this
code
against
Windows,
what
symbols
are
you
looking
for?
A
You
have
to
pick
some
symbols,
but
nobody
tells
you
which
ones
you
need
to
look
for,
and
it's
famous
through
the
JavaScript
world
like
if
you
check
for
the
presence
of
an
API,
you
never
check
for
the
presence
of
all
the
API.
Is
you
always
end
up
picking
some
sort
of
proxy
that
you
say
if
this
type
is
present
or
if
this
method
is
present,
then
I
assume
all
the
other.
Things
are
also
present,
and
that
is
very
fragile
over
time
versus
the
nice
thing.
A
A
The
problem
that
Windows
always
had
is
the
people
get
version
checks
wrong
all
the
time,
and
there
was
basically
no
tooling
right
but,
like
I,
think
the
idea
here
is
that
what
we
have
the
tooling,
what
the
analyzer
will
tell
you
if
you
do
the
guard
checks
incorrectly
or
whether
you
check
for
the
wrong
version
number
right
but
like
like
aesthetically
speaking,
we
have
that
information
available.
Then
we
can.
You
can
surface
that
by
addresses.
If
you
try
to
do
simple,
checking
like
what
zoom
was.
A
J
A
I,
don't
think
it
is
I.
All
that
said
well
said
the
feature
was
designed
specifically
because
that
is
a
requirement
that
comes
from
iOS
and
Android,
but
based
on
more
experience
of
linearity.
It
equally
applies
there.
We
can
say,
as
I
said,
they
are
the
same
mechanisms
right.
They
have
the
they
already
annotate,
all
the
API
surface,
with
version
numbers,
and
there
was
at
least
community
parties.
It
did
exactly
the
same
thing
that
we
are
doing
here.
J
A
But
if
you
leave
it
the
docs,
they
also
check
don't
check
for
the
best
version
ever
right.
I
think
this
is
the.
This
is
a
general
problem
that
we
have
of
the
platform.
I
think
that
people
have
this
knee-jerk
reaction,
that
version
checks
are
bad,
but
I
have
yet
to
see
a
counter
proposal
that
has
a
better
usability
order
and-
and
you
know,
fewer
issues
right
so
I,
don't
think
this
picture
is
iOS
or
Android
specific
I
think
it
equally
applies
to
the
Windows
SDK
all
up.
A
Well,
I
mean
the
question
like
what
is
the
Linux
specific
API
right,
because
realistically
we
talk
about
Linux
this.
Basically
either
you
talk
about
POSIX,
which
you
know
ideally
is
everywhere
or
you
talk
about,
like
you
know,
the
arbitrary
API
changes
that
happen
between
Linux
distros
right,
so
I.
Think
if
you
want
to
talk
about
a
Linux
and
I,
think
you
basically
have
to
talk
about
a
particular
disk.
Alright,
so
you
could
say
you
know
we
can.
A
F
A
A
But
yeah
I
mean,
like
I,
mean
Android
is
a
form
of
the
next
right,
so
in
that
sense
I
mean
it
equally
applies
there.
Assuming
you
have
a
distro
that
that
has
some
sort
of
you
know
binary
backwards,
compatible
thinking
right
and
SDK
like
any
that
somebody
needs
to
give
you
the
ad
in
the
information
which
which
version
of
the
platform
this
API
was
actually
introduced
in
right.
So
that's
something
that
just
needs
to
exist
and
that
doesn't
exist
for
all
of
Linux,
but
the
dead
thing
that
exists
for
some
distros
well.
F
I
mean
like
it:
we're
gonna
have
to
have
a
behavior
somewhere
of
what
any
of
these
things
do
on
a
boon
total
a
boon
to
2004
right
like
are
we
gonna
start
a
distro
specific
OS
platforms?
Do
you
do
you
use
the
fact
that
it's
just
a
strongly
type
string
and
ask
a
boon
to
I
mean,
or
maybe
it's
just
that
we
really
don't
expect
anybody
to
need
to
do
it
on
Linux
and
well,
we'll
need
to
have
a
behavior
to
find
right.
A
I
mean
I
mean
the
behavior
is
kind
of
hard
to
define
I
guess
in
general,
but
you
could
just
say
you
basically
forward
the
information
or
not
forward.
But
if
you
basically
extract
information
from
you
name
and
then
have
some
say,
mapping
right
and
then
your
special
case.
You
know
the
the
actual
things
we
know
about,
but
like
OSX
FreeBSD
and
why
do
I
like
known
known
things
we
have
and
then
the
rest
is
just
you
had
a
long
tail.
A
B
F
Now
that
you've
updated
the
OS
platform,
what
I
was
gonna
point
out
earlier
is
Apple
this
year:
split,
iOS
and
iOS
and
iPad
OS.
In
addition
to
the
already
split
out
TV
OS
watch
OS
right,
so
we
probably
need
iPad
OS
and
now
we
need
to
understand
the
version
relationships
between
all
of
those
which
is
gonna
make
that
complicated.
But
that's
this
libraries
problem
and
now
you've
added
Mac
OS.
Are
we
equivalents
in
that
with
OS
X,
or
are
they
going
to
be
something
semantically
different?
Oh.
A
That's
a
good
point,
I
think
I,
just
probably
just
a
copy-paste
error.
I
would
probably
don't
do
that
I
mean
so
I
by
the
way,
as
we
talked
about
anything
from
talking
to
the
German
folks,
is
that
iPad
OS
is
a
marketing
term.
It's
not
actual
a
destroy
in
itself,
it's
effectively
iOS.
So
basically
they
said.
Don't
wanna
lie
to
us
yet,
so
that's
why
I
base
it
didn't
bother.
I
mean
if
it
becomes
its
own
distro
or
its
own
thing.
Then
yeah.
A
It
will
be
a
different
thing,
but
there's
also
no
compatibility
relationship
between
them
right.
So
basically,
if
you
say,
is
platform
iOS
when
you're
running
on
an
iPad
OS
than
the
answer
would
be
no
right,
so
the
in
that
sense
like
we
don't
have
to
do
the
the
thing
that
we
do
when
you
get
that
we
have
to
map
things
in
particular
version
numbers
to
each
other
and
claim
they're
compatible
and
they're,
not
I.
F
Mean
that's
actually
I.
Think
wrong
from
from
the
base
is
OS
platform,
because
right
now,
if
you're
on
iPad
OS-
and
we
say
we're
not
modeling
iPad
OS
because
they
haven't
yet
split
the
API
service,
we're
gonna
return.
True
for
iOS,
we
can't
return
false
when
we
decide
iPad
OS
is
a
distinct
operating
system
because
there's
different
API
of
it.
You.
I
A
Think
I
think
that
is
kind
of
a
function
of
what
Apple
does
right
like
if
Apple
does
the
same
thing
in
their
API,
send
we
just
we
just
expose
the
platform
and
the
platform
made
a
breaking
change,
powerful,
minor
break
and
change.
That's
just
a
way
that
works
there
right,
but
I
would
say
that
on
the
on
the
windows
side,
I'm,
sorry
on
the
on
the
wessex
idea,
we
probably
should
not
have
OS
X
and
Mecca
was
that's
probably
a
bad
idea.
A
A
I
yeah
I
did
consider
it.
My
personal
opinion
is
that
wouldn't
and
the
reason
I
wouldn't
is
this
because
you
know
version
checks
are
one
of
those
things
that
people
get
wrong
all
the
time.
So
I
try
to
make
the
message
as
as
brain-dead
as
simple
to
call
as
possible.
The
thing
optional
is
you
basically
have
a
cop's
notes,
aren't
really
ordered
whether
you
can
you
can
set
them
in
any
order.
You
want
as
long
as
you
use,
name
syntax
and
that's
I'm,
not
sure
that
makes
sense
for
these
kind
of
things.
A
O
O
A
But
you
owe
me
you're,
not
saving
any
characters,
but
if
you
say
ten
kumar
build
pull
on
version
number,
that's
more
characters
than
what
is
it
like
major.
You
know
coma
so
yeah,
if
you
say
ten,
comma,
zero,
coma
subversion,
but
that's
shorter
than
ten
Kummer,
those
coulombs
in
version
number
right.
Okay,
you
know
you're,
not
saving
any
any
characters
conceptually
by
doing
it,
but
it
also
will
work
for
you
know.
Let's
say
one
is
fixed
right
and
then
you
just
pass
in
comma,
1,
comma
or
whatever.
It
is
right.
J
O
B
A
This
said,
the
skipping
part
isn't
you're,
not
saving
any
characters
right,
because
that
gives
you
skip
a
part
you
just
have
to
put
in
whatever
number
it
is
right.
Then
you
need
to
know
what
that
number.
That
is,
but
there's
some
implementation
detail
right,
because
either
0
1,
2,
3
or
whatever
it
is
right.
A
But
that's
what
I'm
kind
of
saying
like
to
me
when
I
said
number
of
orbitals
is
not
a
concern,
because
I
don't
consider
overloads
as
concept
count
right,
they're
all
collapsed
and
intellisense,
but,
like
the
point
is
version,
checks
are
hard
right
and
I'm
concerned
that
people
do
crazy.
Things
like
10.com
or
revision
equals
some
video
because
I'm
not
sure
that
they
understand
what
they
just
did
like.
Are
they
assuming
that
the
thing
in
the
middle
is
a
wild
card?
Are
they
assuming
it's?
Well,
whatever
the
u.s.
A
That's
why
I
think
the
I
mean
saving
overloads
I'm
generally,
not
too
concerned,
but
I
think
in
this
case
I,
given
their
version
checks,
have
this
history
of
people
them
up
all
the
time.
I
would
honestly
optimize
for,
let's
be
the
boss,
but
like
it's
also,
you
know
blindingly
clearly
obvious
what
you
know
what
the
behavior
of
the
API
is.
A
A
You
want
to
get
analyzer
to
to
look
at
right,
and
so
as
soon
as
you're
positive
version
number,
and
now
it's
harder
fertilizer
to
extract
things,
because
if
you,
if
you
construct
the
version,
other
people
are
also
more
likely
to
put
this
in
a
local
variable
or
put
it
even
an
aesthetic
variable
and
all
we
have
to
you
know
crawl,
that
information
out
from
somewhere.
We
just
take
three
ins
or
four
heads.
A
That's
what
it
is,
but
like
it
so
the
implementation
of
these.
So
if
you
think
limitation
standpoint
platforms
would
only
have
to
implement
the
first
four.
The
last
four
are
basically
almost
ethically
implementable,
but
the
problem
is
how
good
a
user
do
that
right,
because
naively,
if
they're,
just
in
the
gate,
is
platform
or
later
that's
the
wrong
check,
because
now
you're
chewing
on
every
platform.
That
is
not
that
particular
platform
right.
So
you
always
have
to
check,
is
West
platform,
West
platform
double-end
not
is
West
platform
or
later
right.
J
A
Yes
and
that's
something:
I
try
to
get
the
inner
honor
section,
not
that
easy.
With
the
move,
the
of
the
Apple
side,
I
talked
to
the
iOS
folks,
it
happens
pretty
much
in
every
release,
but,
like
that
doesn't
mean
it's.
A
lot
of
API
is
right
and
I
also
don't
have
a
good
intuition
on
whether
this
is
a
popular
ap
is
or
not.
My
understanding
is
the
way
apple
usually
works.
A
Not
all
of
them,
though,
and
so
my
expectation
is
that
the
way
most
people
will
probably
get
away
with
that
is
by
only
using
its
OS
platform
or
later,
and
then
the
ideas
and,
let's
say
in
version
1
they're
shipped
in
Apix,
an
inversion
to
the
deprecated
API
x2
introduced
API,
why
you
never
have
to
do
it
as
platform
oily,
then,
in
this
case
you
can
just
say
it's
platform
or
later
to
and
then
always
fall
the
replacement
API
right.
That
would
that
would
work.
A
That's
a
bit
harder
when
you
have
to
support
a
range
when
you
have
to
support
that,
say:
4
or
5
version
of
the
US,
and
you
have
to
support
both
cases
where
the
API
wasn't
obsoleted
yet
so
the
only
one
that
exists
is
the
old
one
and
you
also
have
to
support
operating
systems.
But
the
only
API
that
exists
is
the
new
one
because
they
removed
the
old
one.
But
in
this
case
it's
actually
nicer.
A
A
way
that
it
works
right,
whether
if
the
API
is
a
different
behavior
and
you
have
to
call
wondering
start
again
when
doing
a
shutdown
or
something
like
that,
then
that's
that's
much
harder
to
do
right
and
given
that
it's
just
you
know
one
one
API,
logically
before
overloads,
it
seemed
more
straightforward
to
have
that,
but
I
I
can't
tell
you
I
have
my
intuition
as
90%
of
codes
are
in
is
a
ruby
against
its
OS
platform
or
later
and
its
OS
platform
earlier
then,
is
rare.
That
will
be
my
expectation.
A
Yeah,
so
the
version
attribution,
so
that's
one
thing
that
I'm
not
sure
I
like
the
outcome,
so
I
would
be
very
happy
of
constructive
feedback
here.
So
let's
look
at
the
derived
ones
so
that
we
have
edit
in
OS
platform
version,
which
basically
tells
you
that
the
API
was
edited
particular
version.
We
have
removed
in
a
particular
version
and
we
have
obviously
the
dump
in
a
particular
version,
so
all
of
them
have
to
say
which
OS
platform,
all
of
them
have
to
say
what
version
number
right.
A
Now
they
are
all
mandatory
which
might
not
be
nice
for
metadata
conciseness.
You
may
want
to
have
constructor
over
those
that
allow
you
to
only
pass
in
the
ones
you
care
about,
and
then
they
only
apply
to
the
things
that
make
sense,
but
you
can
only
apply
to
an
assembly
because
you
came
back
an
entire
assembly
s
as
what's
specific,
for
example,
you
could
put
this
on
the
registry,
so
registry
was
introduced
and
I,
don't
know,
windows
95
or
something
right.
A
O
A
O
O
A
A
O
P
O
O
Similar
could
exist
on
iOS
or
Android,
especially
if
you
get
into
light
unity
and
stuff,
but
I'd
hope
that
peyote
covers
that
and
then
maybe
the
JIT
can
optimize
it
eventually
yeah
our
rid
specific
support
and
NuGet
packages
system.
Great,
so
I,
don't
think
aisle
trimming
will
be
necessarily
easy
for
that.
Right
now,.
A
A
Yeah
yeah,
so
the
other
thing
I
wanna
point
out
is
I,
have
a
inheritance
hierarchy
here
for
the
US
platform
version
attributes
because
it
seemed
in
the
docs
it's
nice.
If
we
can
group
them
and
in
principle
you
could
imagine
that
somebody-
the
tools
that
benefit
from
being
able
to
tell
that
it's
nice
platform
version
attribute,
but
that's
really
the
primary
reason.
I
don't
have
a
there's,
not
really
a
need
for
polymorphism
here,
but
it
seemed
nice
to
do
that
because
we've
done
this
in
the
past,
a
group
attributes
so.
A
F
G
A
That's
so
originally
I
had
allow
multiple,
true
and
originally
the
design
also
allowed
us
to
do
things
like
console
window
worth
of
it
would
just
say
this
API
is
only
supported
on
XY
and
Z
and
then
because
of
my
thinking
on
portable
versus
high
specific
I
removed
it
and
said
screw
it
like.
This
is
only
for
API
is
that
exists
on
one
platform
and
then
the
idea.
What
you
just
said
is
also
true.
A
The
apple
of
folks
basically
push
back
on
that
and
say
we
need
to
be
able
to
say
what
you
just
said
to
us
versus
iOS
versus
you
know
Mac
OS,
so
we
probably
have
to
make
a
lot
multiple
chew,
but
I
would
expect
it
to
be
reserved
for
things
like
that
right
effectively,
there's
in
the
West
family,
and
that
happens
to
be
one
SDK
for
the
West
family,
but
I
would
not
expect
us
to
use
that
for
Android
versus
you
know,
iOS
versus
windows,
on
the
same
API.
If
that
makes
sense
well.
F
You
started
with
something
like
console
window
width
right
and
if
we,
if
we
got
to
a
point
where
we
could
make
that
work
on
Mac
and
Windows,
but
not
you
know
the
X
windowing
system
generic
like
would
we
not
if
we
were
painting
it
with
with
this
stuff
of
this
works
on
Windows,
and
we
would
need
to
also
paint
it
with
this
networks
on
Mac.
Well,.
A
That's
I'm,
saying
I
wouldn't
like
I
mean
we
originally
when
I,
when
I,
when
I
designed
this
feature
that,
but
that
was
my
perspective,
but
my
perspective
was
I'm.
Writing
a
portable
class
library
and
I
want
to
make
sure
that
maybe
baby
eyes
attack
over
across
the
whole
operating
systems
right,
but
just
basic
what
the
platform
companion
eliezer
originally
did
right.
But
then
the
problem
is
that,
because
these
things
are
moving
targets
and
window
width
is
killed
by
a
specific
API
right.
A
It's
an
implementation
of
what
you
consider
a
portable,
API
right
and
so
I
think
that
the
mechanism
that
we
have
for
that
using
these
attributes
will
not
work
very
well
because
yeah
they
would
change
over
time
right
and
so
then,
how
do
we
do
that
in
any
same
capacity?
Right
philosophy
would
not
have
who's.
You
know
at
one
of
these
attributes
through
what
the
VCL,
if
you
would,
if
you
were
to
do
that,
what
I
would
do
is
I
would
use
these
attributes
for
clearly
window
specific
features.
A
So,
for
example,
all
the
exit
stuff
I
would
mark
because
they're,
if
they're
fixed
in
time
their
windows
only
they
will
never
be
working
anywhere
else.
We
know
the
version
numbers
so
they're,
effectively
immutable
attributions,
console
window
width
doesn't
seem
like
it's
in
the
same
category
of
api's
and
that's
why
I
also
said.
Like
you
know,
it's
not
a
lot
multiple,
because
you
know
you
should
only
have
only
ever
the
need
for
one
ways
but
unfortunately
iOS
so
it
makes
it
a
bit
more
complicated.
I.
Imagine.
O
People
are
going
to
end
up
using
in
their
own
api's
for
things
like
that
anyways,
regardless
of
whether
you
want
them
to
use
it
for
something
that
is
specific
versus,
not
I.
Imagine
they
might
version
their
API,
such
as
in
this
version.
It
only
works
on
Windows,
but
in
v2
it
works
on
Windows
and
UNIX,
but
not
Mac.
O
Right
but
I
mean
like,
like
the
Vulcan,
for
example,
Vulcan
is
a
cross-platform,
and
originally
it
wasn't
going
to
work
on
Mac
until
someone
went
created,
a
shim
that
wraps
metal
and
so
that
works
on
Windows
and
it
works
on
Linux
as
is,
but
if
on
wind,
but
if
on
Mac
there's
certain
things
which
only
work
on
Mac
and
you
have
to
do
a
couple
extra
steps
to
get
it
to
work.
But
eventually
it
was
made
to
work.
A
Right
I
think
that's
a
I
mean
I'm
less
concerned
about
that,
because
I
mean
the
analyzer
will
be
well
defined.
So
it's
not
so
much
that
the
feature
wouldn't
work
in
this
case.
It's
just
that
the
author
of
the
API
kind
of
forces,
their
consumers
to
a
bunch
of
breaking
changes
over
time
right.
So
you
know,
if
you
want
to
do
that,
I
mean
I,
can't
stop
them
anyways,
but
they
can
also
make
arbitrary
other
IPI
breaking
changes.
A
You
know
lens
were
the
basically
the
API
services
frozen
as
soon
as
you
ship
it,
and
we
don't
really
have
a
versioning
story
for
the
reference
assemblies
itself.
So
it's
the
only
thing
that
would
change
their
attributes.
We
don't
really
have
a
way
to
model
that
either,
but
maybe
the
dotnet
5
world,
where
we
just
update
once
a
year.
Maybe
that's
also
no
longer
concern,
or
maybe
that
becomes
more
viable
I
just
want
to
make
it
clear
that
you
know.
From
my
point
of
view,
this
is
not
maybe
the
mechanism
to
do
that.
A
Or
any
other
things
or
names,
absolutely
there's
a
bit
more,
it's
kind
of
sad
because
obsolete,
basically
conflicts
of
the
other
opposite.
The
tribute
that
we
have,
but
unfortunately,
obviously
attribute,
cannot
be
version
right,
so
we
don't
know
which
version
this
was
in.
So
this
would
add
that
the.
A
O
A
I
mean
so
description,
so
the
reason
I
don't
like
description
is
because
you
don't
know
it's
a
URL,
so
you
can't
in
the
UI
actually
whether
there's
a
link
versus
if
it's
a
URL.
You
know
it's
the
thing,
so
you
can
actually
make
the
diagnostic
it's
seeing
in
the
air
all
this,
for
example
an
actual
hyperlinks
and
people
clicker
they
actually
would
go
somewhere.
A
I
mean
you
could,
in
principle,
detect
that
it's
a
URL
right,
but
parts
of
the
description
or
something
but
people
very
often
with
description
fields
will
just
have
you
know,
basically
a
body
of
text
and
then
within
the
text
somewhere.
There's
a
hyperlink
right.
So
that's
and
it
does
it.
You
can't
localize
it
right,
so
I
mean
obsolete.
Has
a
message.
I
think
my
proposal
would
be.
If
you
use
obsolete
moving
forward,
we
don't
ever
use
the
description.
A
We
just
set
the
diagnostic
ID
and
set
the
URL
and
that's
it
and
everything
else
is
then
localized
where
you
go
so
I.
Think
I,
don't
know.
Description
doesn't
seem
like
it's
the
best
way
to
do
it,
but
I
think
URL
probably
would
make
sense
at
least
on
removed.
I'm,
not
sure
it
makes
sense
on
edit
in
I
mean
maybe,
but.
O
A
I'm,
just
thinking
of
like
now
keep
in
mind
that,
in
in
an
actual
s,
SDK,
this
attribute
is
literally
on
every
API.
So
if
you
don't
have
a
string
on
every
API
that
is
significant
metadata
upload
right,
because
also
that
that
link,
you
know,
will
be
different
for
every
API.
If
you
actually
link
to
the
to
the
actual
thing
where,
at
the
actual
section,
in
the
release
notes,
for
example,
that
you
can't
have
string
and
turning
for
that,
for
example,
think
of
the
Windows
SDK
more
like
100,000,
api's
I'm,
not
sure
we
would
do
that.
A
A
A
A
F
A
N
N
And
made
some
clarification
and
so
part
of
what's
confusing?
Is
the
scope
changed
so
presently?
The
only
thing
that's
in
scope
is
in
it's
only
accessors
in
it
only
setters
I
should
say
things
are
not
in
scope
or
init
only
methods
or
in
it
only
feels
so
there's
a
syntax
for
init
only
setter.
We
debated
you
know
easily
in
itself
or
just
in
it
and
then
in
terms
of
what
we
want
to
omit
after
discussion.
N
N
A
I
muted
the
way
understanding
is
that
you
need
only
properties,
so
they
are
a
different
accessor
in
c-sharp
land,
but
in
metadata
land
there
would
just
be
regular,
setters
rights.
In
that
sense
they
are
the
superset
of
what
set
is,
but
it's
basically
just
it
like
a
type
system
kind
of
enforced
limitation
of
when
you
are
allowed
to
call
it,
but
it's
basically
still
at
the
metadata
level.
A
regular
is.
N
A
N
Correct
and
then
the
only
change
is,
will
allow
you
to
set
this
in
a
couple.
New
locations,
I
think
there's
an
example
of
at
the
very
top
first
line,
basically,
if
you're
in
an
object's
initializer,
so
between
the
curly
braces
there.
We
consider
that
still
part
of
the
initialization
phase,
although
it's
not
part
of
the
construction
phase.
So
this
is
not
a
place
where
you're
normally
allowed
to
set
read-only
things,
but
we
would
allow
you
to
call
the
in
it
sets.
A
That
there
is
a
display
like
today,
basically
the
the
initializer
syntax
is
just
syntactic
sugar.
To
avoid
saying
you
know,
C
dot
right
and
now
you
would
actually
have
a
semantic
difference
between
saying
you
C
and
then
C
dot
in
it
only
property
that
wouldn't
work.
What
if
I
say
you
see
in
an
open
grades
and
that
would
work
right.
That's.
N
N
N
A
N
O
C
Reflection
does
not
respect
mod
rocks
on
our
serialization
libraries.
Also
don't
respect
mod
racks
and
I
know
that
we've
had
some
discussions
on
how
this
behind
effects
system
text
Jason
I'm
wondering
if
we
should
actually
build
into
libraries
like
that
knowledge
of
mod
rec
in
general,
and
then
say
if
I
see
something
that
I
don't
understand,
and
it
has
a
mod
rec
fail.
N
There
was
a
lot
of
things
that
were
mentioned,
and
so
I
lost
track.
A
little
bit
for
reflection
does
not
reflect
I'm,
not
sure
that
reflection.
We
respect,
we
don't
need
either
so
I
mean
the
purpose
of
this
mod
rec
is
to
try
and
prevent
people
from
just
using
this
as
a
regular
cetera.
So,
based
on
that,
we
can
write.
O
C
F
A
N
N
Well,
the
main
scenario
is
when
you
do
with
so
with
is
a
kind
of
new
construction.
It
would
be
a
Crone
and
you'd
be
able
to
set
some
of
the
properties
and,
at
the
very
end,
when
all
of
those
are
sets,
you'd
get
a
chance
to
validate
and
fix
your
fields
be
close
or
I
know,
as
the
initialization
I
guess,.
A
The
reason
I'm
asking
is
because
it
sounds
like
if
that's
the
case,
we
probably
have
to
rethink
our
reflection,
interacts
with
that
right,
because
you
know
a
naive,
Lee
I
would
think.
Like
we
just
block
setting
the
the
you
know,
it
ended
only
property
but
reflection
when
you
say
property
info
dot
set.
But
then
how
would
you
ever
finish
it
like
them?
Because
there's
no
such
thing
as
a.
A
What
is
this
thing
called
yeah?
Basically,
they
couldn't
often
initialize
or
everybody.
You
can
either
introduce
that
to
reflection
and
say,
construct
an
object
and
passed
a
bunch
of
things
that
you
want
to
be
in
it
and
then
that
one
will
actually
do
the
right
thing
and
will
actually
set
the
property
and
also
call
the
validate
method
if
it's
there,
but
that
doesn't
seem
like
something
we
can
easily
do
with
right.
Now.
N
So
first
they're
not
as
solid
in
terms
of
being
in
c-sharp
nine
and
they
will
have
holes
so
languages
I
think
we're
not
planning
to
try
and
lock
down
validators
super
hard.
So
there
will
be
ways
that
you
can
initialize
your
thing
and
like
if
your
compiler
does
not
recognize
things
or
through
reflection,
you
could
get
in
there
bad
sites.
A
N
N
N
A
N
C
N
C
A
N
R
Q
Q
The
attribute,
though,
is
just
a
question
of:
do
we
said:
does
the
compiler
need
it
100%?
No,
don't
care
like
we
can.
We
can
absolutely
like
we
ever.
We
have
no
need
for
that
after
you
whatsoever,
the
question
becomes,
how
do
serializers
look
at
that?
I'll
do
Syria.
Do
we
like
if
we
want?
We
because
part
of
serialization
is
like
unwinding
these
and
recreating
them,
and
if
you
look,
there
are
some
serializers.
Today
there
was
a.
There
was
a
talk.
There
was
an
email
that
I
got
see,
see
that
friend
responded
to
were
essentially
serializers.
Q
Her,
like
hey
we're
not
going
to
touch
read
only
feels
bad
bad
juju.
We
don't
wanna.
Do
that
completely
reasonable
stance.
So
the
question
is
in
the
future
we
want
like
heart
of
doing
in
it.
Only
design
is
to
make
sure
it
can
work
with
serializers
like
and
because
this
shows
up
as
it
gets
that
access
for
her
what's
fantastic.
Q
Q
Because
from
the
compilers
perspective
we
just
look
at
the
Maverick
is
enough:
we
can.
We
can
live
with
that,
that's
not
we
could.
We
could
easily
just
pull
that
out
of
the
data
and
I'm
buying
easily
I
mean
I'm,
saying
that
Julian
has
to
do
the
work
so
that
easy
for
me,
I
tells
me,
Julian's
name-
is
currently
right
over
his
mouth.
So
I
can't
see
if
he's
cursing
or
smiling
okay,
he
moved
his
head
back.
So
how
can
you
smiling,
but
it
doesn't
really
matter
so.
A
That
makes
sense,
I
think
then
the
question
becomes
I
think
I
met
a
question
earlier
about
reflection
like
it
seems
to
me.
Reflection
has
to
be
aware
of
it,
I
think
for
say,
Lazarus
and
that's
I,
think
what
we
talked
about
validators
is
that
you
know
there's
nothing
fundamentally
wrong
with
setting
in
it
only
property.
If
you
don't
have
a
validator,
it
only
really
kicks
in
then
you
know
you
can
only
set
it
when
you
actually
validate
all
right,
so
you
expect
it
to
set
all
the
things
and
then
call
the
validator
right.
R
C
Q
Would
say,
but
this
is
one
it
should
understand.
Emo
said
something
and
I
want
to
make
it
got
it.
Incorrect,
I'm
gonna
make
sure
he
didn't
mean
it
the
way
he
said
it
validators
and
it
only
properties
have
nothing
to
do
with
each
other.
They
will
in
concert
work
together
later,
but
and
it
only
properties
exist
completely
independently
of
validators
sure.
A
So
then
the
question
becomes:
okay,
that's
let's
talk
about
how
the
section
works
today,
because
my
expectation
is
that
probably
it
will
just
work
the
way
it
is
meaning,
there's
a
motor
act
at
the
surface,
but
it's
probably
going
to
be
ignored.
So
if
you
just
call
the
center
of
the
value
and
the
sooner
they'll,
probably
just
work,
it
will
probably
just
set
the
thing
right,
which
probably
and
validator
that
you
expected
to
call
no
harm
is
being
done
that
that's
our.
A
What
of
the
thing,
maybe
there's
other
features
that
you
also
have
to
honor
it.
But
the
thing
is:
if
we
do
nothing,
you
made
me
feel,
as
I
said,
doing
the
right
thing
already
and
they
would
not
do
the
right
thing
if
there
is
a
validator
that
they
expected
to
call
right.
So
then
that
is
the
case.
Then
I
think
we
should
have
a
reflection
feature
for
that,
where
maybe
the
regular
property
in
for
that
set
value
will
blow
when
there
is
a
boat
wreck.
A
C
Me
push
back
on
one
little
aspect
in
that
scenario:
if
you
haven't
you
serializer,
that's
hydrating
an
object
out
of
like
out
of
thin
air.
Then
it
would
make
sense
for
that
D
serializer
to
call
an
it
properties.
If
you
house
it,
you
serializer,
that's
hatching
an
existing
object
in
place.
You
might
argue
that
it's
improper
for
that.
These
serializers
are
calling
it
properties,
because
the
object
has
already.
F
Been
constructed,
one
yeah
I
mean
the
weird
part
to
me
about
it.
Using
the
set
slot
is
public
reflection.
If
we
don't
change
anything
in
reflection,
it
will
find
it
and
it
will
look
completely
Kabul
and
yes,
it's
a
little
weird
that
you're
using
reflection,
but
it
it's
weird
that
now
a
line
of
reflection
without
needing
to
do
private
reflection
is
doing
something
that
the
c-sharp
language
says
is
invalid
and
will
will
probably
bypass
the
logic
of
somebody
who's.
Using
this
feature,
like
you,
you
thought
that
this
couldn't
change
after
the
object
was
created.
It.
Q
F
Q
And
I
would
say
that
that's
we
can
make
that
decision,
but
the
context
I've
always
thought
about
this
in
is
very
isn't.
Essentially,
the
following
is
publicly
public
reflection.
Public
reflection
can
change,
read
a
public
read-only
fields.
Game
over,
like,
like
reflection,
just
doesn't
care
to
bits
about
read-only
and
instance,
members,
and
so
this
is
no
worse
than
what
we've
been
doing
since
one
oh,
and
if
we
wanted
to
say,
if
you
wanted
to
look
at
this
and
say
okay,
you
shouldn't
use
one
O's
an
excuse
for
continuing
to
be
bad
people.
Q
A
What
is
the
expectation
and
I
think
with
only
fields
relatively
where
right,
like
in
the
sense
that
people
who
actually
write
you
know
code?
That
is
see
us
over
the
wire
having
public?
We,
the
only
fields,
it's
relatively
rare
instance,
few
students
right
so
there's,
probably
not
a
lot
of
code
that
is
broken
by
that
right
versus
this
one
will
be
one
of
those
features
that
we
put
on
our
blog.
We
talk
a
lot
about
it
at
conferences.
A
Everybody
will
have
their
own
syntactic
cuteness
to
do
that
and
now
the
question
is
how
much
realization
code
ends
up
being
broken,
because
the
reflection
doesn't
actually
call
it
validator
at
all,
because
it's
it's
not
aware
of
it
and
suddenly
you're,
bypassing
all
the
cute
logic
that
somebody
has
written
right
and
I.
Think
that's
the.
D
A
Logic,
right,
I
think
that's
kind
of
hard
thing
about
the
feature
right:
whether
the
type
actually
has
a
validator,
it's
kind
of
irrelevant
in
that
sense,
but
like
practically
speaking,
it
matters
right
because
if
you
don't
have
a
validator,
then
having
an
in
it
only
property
just
for
the
people
to
put
it
in
the
in
in
the
curly
braces.
But
if
a
detail
eyes
are
just
calls
it
nothing.
Bad
really
happens
right.
A
How
likely
are
they're
broken
by
whatever
meta
data,
encoding,
you're
choosing
and
and
is
that,
is
that
the
right
outcome
I
mean
you
said
you
would
break
less
of
the
ecosystem
when
you,
when
you
reuse
the
set
concept
sure,
but
is
that
actually
what
you
want?
Because
if
you
expect
people
to
call
the
set
method,
have
to
do
special
things
then
maybe
using
the
sets.
Flawed
is
not
the
right
thing
to
do.
No.
Q
But
here's
the
thing
we
want
the
ecosystem,
the
work
as
it
does
today,
like
the
reason
for
choosing
set,
is
you're
saying:
should
we
do
it
and
I'm
saying
we
just?
We
explicitly
want
this
to
happen.
We
want
it
to
be
easy
for
serializers
to
use
this,
because
the
majority
case
of
people
who
are
using
reflection
to
do
these
properties
are
serializers
and
we
want
records.
Q
You
want
all
these
types
to
just
work
with
serializers
without
having
to
find
every
serializer
ever
written,
give
them
increase
their
concept
count
and
get
them
to
do
things
a
different
way.
Generators
are
gonna,
be
broken.
Dealing
like
people
I
understand
people
get
kind
of
like
caught
up
in
this,
but
it's
like
the
bar
we
are
starting
from
is
serializers.
They
can
break
everything
today
and
it's
buying
forever.
Q
If
you
took
what
we
are
doing
today
like
in
terms
of
our
fields
like
people
still
use
reflection,
even
if
we
did
the
most
extreme
thing
where
we
didn't
use
that
accessors,
we
generate
an
unspeakable
memory.
We
did
all
this.
Reflecting
could
still
beat
what
we
were
doing
like.
We
can't
stop
reflection
from.
A
It's
not
about
being
bulletproof,
I.
Think
I,
think.
The
question
that
I
would
have
to
use
is
that
one
world
is
better
and
is
better
wear
by
default.
In
it,
only
properties
are
not
called,
are
not
supported
by
the
analyzers
about
the
cylinders
that
have
to
do
work
to
support
them
properly,
or
is
it
better
when
they
accidentally
use
them
and
then
just
they
don't
use
it
correctly.
D
A
Q
I
think
the
last
the
latter
world
is
fine,
because
it's
I
would
say
it's
more
about
educating
the
the
cases
were
serializers
like
today.
Do
it
incorrectly?
Are
me
exceedingly
rare,
so
you
realize
that
are
just
like
store
data
create
data
like
they're,
not
trying
to
do.
They
are
not
giving
the
data
back
and
then
manipulating
it
afterwards,
like
they
see
the
construction
is
one
basic
operation,
a
unit
of
atomicity
and
then
handing
it
back,
and
that's:
okay,
like
it's
not
particularly
valid,
like
a
problem.
Q
Now
when
we
get
to
validator
like
that's,
when
we're
gonna
want
to
go
and
talk
to
essentially
serializers
and
say
hey,
this
is
something
you
might
want
to
respect
when
the
fan
goes
about,
validators
is
validators
between
their
properties.
Validators
exists,
validators
are
a
problem
that
we
have
with
object
initializers
today
that
people
want
to
solve
forever,
and
so
the
decision
for,
like
I,
don't
think
it's
valuable
to
say
like.
Oh,
when
you
do
validation
regret.
This
is
like
no.
We
won't
because
validators
have
all
the
problems
without
a
net
properties.
Q
Q
Have
to
divorce
validators
from
Anatole,
you
really
have
to.
They
have
nothing
to
do
with
each
other,
nothing.
They
are
completely
orthogonal
concepts
because
valid
like
here's.
The
thing
if
a
like
validators
were
supposed
to
run
after
everything
after
object.
Construction
is
finished
on
get
set
properties.
So
if,
if
the
serializer
DC
realises
runs
a
validator
and
then
calls
a
setter
and
then
only
are
not
event,
only
that's
a
problem,
and
this
is
why
they
like
they're
orthogonal
concepts
so.
A
So
this
goes
back
to
like
reflection
will
probably
like.
Unless
they
do
work,
they
can
always
buy
pasta,
validator
and
there's
nothing.
We
can
do
about
that.
Probably
okay
I
mean
unless
you
change
the
flexion
and
say
if
the
constructor
is
marked
in
such
a
way,
then
we
blow
up
unless
you
call
some
other
thing,
but
I
don't
know
what
that
would
be.
A
Okay,
so
that
makes
sense
to
me
so
in
that
sense,
okay,
so
I,
so
my
personal
opinion
is
I
would
probably
prefer
it's
not
being
an
attribute,
because
that's
just
more
consistent
of
what
the
other
mod
recs
are
they're,
just
plain
types
and
they're
just
one
Rex.
And
then,
if
you
really
want
to
service
this
information
from
reflection,
I'm,
not
sure
the
attribute
is
helping
much
because
at
the
end
of
the
day
we
probably
have
to
do.
You
know
explore
some
API
on
reflection
in
order
to
make
that
lucky.
Q
I
feel
I
was
I,
was
more
iffy
when
I
didn't
think
you'd
be
a
mod
Rex
reflection,
but
then
leave
I
showed
the
sample
on
how
to
get
it,
and
if
I
go
okay,
you
know
there
is
a.
There
is
a
escape
hatch.
It's
not
great
one
long-term.
If
we
wanted
to
expose
it,
though
we
could
like
take
a
different
designers.
You
just.
C
Q
Essentially,
when
you
get
to
covariant
arrays,
you
can
end
up
assigning
the
wrong
elements
into
them
and
violating
like
array,
covariant
rules,
and
so
we
needed
a
mod
rack
to
basically
say
like
no.
You
should
never
ever
use
this
member.
Unless
you
understand
what
in
is
so,
you
can
not
assign
to
it
sure.
C
O
F
About
the
language
feature
than
the
attribute
Jared
that,
while
you're
trying
to
make
serializers
work
by
using
the
set
slot,
presumably
code
generators
like
most
designers,
are
actually
gonna
be
broken
by
this.
Because
they're
gonna
see
a
set,
they're
gonna
write
the
set
call,
and
then
the
code
doesn't
compile
generators.
Q
Will
have
to
understand,
there's
no
way
around
that
and
that's
why,
in
the
Roslyn
API
is
very,
you
have
a
whole
little
things
rods,
an
API
to
make
it
visible,
so
code
generators
can
pick
it
up
and
use
it.
But
if
you're
generating
straight
line
c-sharp
code,
then
yeah
you're
gonna
have
to
understand
the
new
code
patterns.
If
you're
gonna
want
to
use
it.
Q
N
Q
You
could
yeah
every
method,
everything
all
methods
have
return
type,
so
you
can
always
put
them
all
back
on
the
return
type.
Okay.
Well,
this
is
my
seat
honestly.
If
we
want
it,
if
you
want
to
think
that
far
forward
Julian,
we
could
always
just
say
that
put
it
on
the
void
part
of
the
center
and
don't
put
it
on
the
parameter.
C
K
F
N
A
A
R
N
F
Q
Or
yeah
there's
talk
like
we
basically
said
Melanie
in,
like
we
can
put
that
our
pocket
and
if
people
say
they
want
general
member
give
it
because
it
seems
like
reserving
the
attribute
for
that
is
or
but
we
would
do
the
same
thing
that
we
would.
We
would
just
mark
them
as
in
it
and
that
birds
will
you
treat
him
exactly
like
properties.
Q
A
C
Q
With
null
and
the
reason,
why
is
because
null-
and
this
is
so
basically
the
divide,
as
always,
isn't
a
mod
rec
or
not,
and
the
reason?
Why
is
because,
if
it's
with
null
ability,
the
the
attributes
don't
have
to
be
public,
we
could
just
make
them
internal,
generate
them
in
the
compiler
and
then
the
compiler
can
just
make
like
by
name
copies
and
every
little
we
can
basically
just
say
like
get
or
in
the
compiler.
Q
The
signature
has
to
be
eidetic,
has
the
exact
height
match
and
the
compiler
team
is.
We
have
not
really
crossed
the
boundary
yet
where
we
will
silently
emit
public
types
into
your
assembly
that
they
spoke,
and
so
we
we
have
not
crossed
that
boundary.
Yet
we
did
design
the
feature
such
that
we
are
saying
that
we
will
look
for
this
type
by
name
and
if
this
type,
if
there's
two
versions
of
this
type,
we
will
tiebreak
on
what
is
in
core
them.
Q
C
Q
A
Q
A
Q
C
C
A
Should
I
mean
this
is
general
thing
that
I
started
last
too
late,
so
I
we
should
also
explore
solubility
and
other
things.
I
mean
there's
some
pushback
on
the
unfunded
from
the
runtime
team
to
not
make
it
too
short
to
sous-chef
specific,
which
I,
quite
frankly,
don't
buy,
because
realistically
the
vast
majority
of
our
customers,
as
you
shot
people
and
other
languages,
eventually
tend
to
support.
O
Just
a
quick
meta
point
on
it
being
a
mod
rack:
I
was
just
getting
through
the
spec
and
apparently
mod
recs
aren't
allowed
on
public
members
that
are
considered
CLS
compliant
as
to
compiler,
taken
that
into
consideration
for
existing
mod
recs
it
submitted
and
don't
they're
about
CLS
compliant
I
thought
they
compiler
still
emitted
warnings.
If
you
had
the
attribute
at
the
at
a
higher
level
and
then
emitted
a
member
that
was
not
yeah.
Q
Q
Cls
compliant
kind
of
went
out
like
at
some
point.
We
realized
we
hadn't
been
tracking
it
for
awhile
and
it
really
just
it's
not
been
a
part
of
the
features
we've
done
since
then,
and
I
think
we
should.
We
should
I
know
we've
had
you
know
tentative
discussions
on.
Should
we
have
a
bigger
discussion
on.
Do
we
even
track
it
inside
of
like
done
at
runtime,
because
it
is
affecting
your
build
perf
so
see
less
compliance
is
a
non-trivial
jack
and
the
compilers
good
yeah,
but
it's
good
point
to
bring
up.
Q
Generally,
at
this
point,
I'm
were
somewhat
wary
of
using
existing
Flags
because
it
wouldn't
cause
many
interpretations
like
if
you
look
at
when
we
did
in.
If
you
would,
if
you
had
said
that
c-sharp
100
had
n,
we
would
have
definitely
encoded
it
differently,
because
there
was
a
much
more
natural
attribute
to
use
right.
However,
given
that
that
attribute
have
been
the
eco
system
for
24,
you
know
18
years
and
we
could
easily
find
places
where
people
have
done
it
before.
Q
Like
me,
babe
Reid
might
have
said,
like
yeah,
that's
the
most
obvious
and
natural
way
to
encode
it
and
we're
not
doing
it.
That's
where
I
was
saying.
Tanner
could
probably
cite
chapter
and
verse
of
where
the
more
easy
way
of
encoding
in
should
have
been,
but
due
to
conflicts
like
P
and
VOC
and
stuff,
it
was
there's
pretty
obvious.
We
couldn't
do
it.
You
know.
O
That
was
the
wit
without
it's
just
a
rough
with
the
out
attribute
in
Nome
adopt,
but
within
we
had
to
put
the
amount
off
on
it
to
differentiate
the
back
and
patent
story.
But
we
do
actually
omit
the
regular
in
attribute,
as
well
as
the
mod
up
to
make
sure
that
P
in
VOC
works
correctly
without
breaking
back
and
back
yeah.
O
I
know
with
the
calling
conventions
we
we
only
have
a
limited
number
of
bits
as
well,
and
it
was
determined
for
future
calling
conventions.
We're
going
to
use
a
we're
going
to
use
one
of
the
bits
to
mean
you
have
to
now
go.
Look
at
this
additional
attribute,
extension
yeah,
so
I,
don't
think
using
the
attribute
is
necessarily
bad.
It
all
be
all
the
bit
would
really
do
is
say
there
might
be.
A
A
Yes
is
modeled
American,
one,
two,
three,
four,
five,
six,
seven,
eight
nine
10
11,
12,
13,
14,
15,
16,
17,
18
and
a
bunch
of
them
are
probably
flags
or
masks,
so
yeah
fields
might
be
at
the
limit.
Already.
A
method
attributes
is
fully
yeah
same
here.
It's
probably
we
might
be
already
at
the
limit
of
fields
and
methods.
Yes,.