►
From YouTube: .NET Design Review: GitHub Quick Reviews (Apr 23)
Description
00:00:00 - Approved: Add DynamicallyAccessedMembersAttribute https://github.com/dotnet/runtime/issues/33861#issuecomment-618548274
00:48:15 - Approved: Add SuppressLinkerWarningAttribute https://github.com/dotnet/runtime/issues/35339#issuecomment-618570506
01:24:22 - Approved: Consider PreserveDependencyAttribute to help linker https://github.com/dotnet/runtime/issues/30902#issuecomment-618601805
A
B
Hello
friends,
so
today
we
are
going
to
do
a
few
issues
regarding
linker
stuff
and
then
I
think
this
one
GC
feature
and
then
hopefully
yeah
exactly
there's
one
thing
on
we'd
only
span
overloads
and
compare
info
and
then
I
think
it's
backlog.
So
we
have
like
five
or
six
issues,
I
believe.
So
how
about
this?
Who
wants
to
do
the
work
through
flu
linker.
C
C
There,
where
you
can
just
like
activate
a
create
instance,
type
that
you
can
download
the
string
from
the
internet,
and
you
know
now
for
us,
it's
more
important
than
ever
to
be
able
to
make
ups
small,
because
we
were
simply
scanning
to.net
and
also
the
marine
is
switching
to
that
net.
Core,
so
kind
of
let's
test
the
problem
and
the
main
problem
is
really
the
conflict
between
a
small
app
and
a
working
app
like.
If
you
enable
ring
linker-
and
you
don't
have
a
good
idea,
what
kind
of
reflection
will
be
inside?
C
It's
very
well
possible
that
after
winking
and
removing
any
of
skulls,
your
app
stops
working
because
some
of
the
code
was
actually
used
so
in
dot,
not
core
3.0.
We
shipped
linker
as
an
opt-in
option
in
a
very
conservative
mode,
kind
of
the
very
conservative
mode.
Didn't
touch
user
assemblies
at
all.
We
would
entire
framework
assemblies
if
they
appeared
unused
and
kind
of
it
didn't
try
to
remove
individual
types
or
methods.
C
C
So
we
were
talking
starting
to
think
about
linkers
safety
kind
of
how
can
being
give
guarantees
to
the
customers
that
our
linker
will
not
break
their
abs.
C
C
So
we
were
started
starting
to
think
about
okay.
How
do
we
automate
this
and
we
started
with
bringing
all
the
pieces
of
reflection
analyzer
from
MIT
that
is
able
to
analyze
all
the
using
sister
play
of
a
fraction
in
code?
If,
if
you
have
something
within
a
metal-
and
it's
not
doing
something
to
complicate
that,
then
link
actually
just
figure
it
out
and
it
should
be
able
to
kind
of
see
through
the
reflection
patterns
in
there.
C
C
C
C
Maybe
we
can
go
to
the
next
slide,
so
these
are
kind
of
the
easy
cases
that
we
are
enabling
like
if,
within
the
method,
do
you
have
code
like
this,
it
should
be
possible
to
statically
analyze
that
we
need
to
keep
default
constructors.
We
need
to
keep
an
extra
method.
We
need
to
keep
an
extra
field,
the
kind
of
that's
something
that
we
will
enable,
so
that
you
don't
need
to
annotate
too
much,
but
in
a
real
world
call
this
almost
never
like
this.
C
C
A
kind
of
blinker
can
reason
about
something
like
this
and
it
can
kind
of
make
sure
that
these
things
happen
so
kind
of
you
either
need
to
pass
it
something
that
is
known.
So
it's
either.
It
comes
from
time
to
time
with
a
non
string,
but
it
comes
from
a
type
of
or
work.
It
comes
from
some
other
location
that
is
annotated
the
right
way,
and
whenever
this
doesn't
happen,
it
can
warn
maybe
next
slide.
C
It's
something
that
the
linker
can
reason
about.
So
whenever
it
sees
this
kind
of
store,
it
will
just
kind
of
keep
the
type
and
it
will
keep
all
the
methods
on
it.
And
then
we
have
another
location
within
the
program
where
we
load
from
this
field
and
call
some
reflection,
API
and
since
this
location
was
annotate,
that
we
know
that
this
reflection,
API
call
is
safe
and
if
the
annotation
wasn't
there,
then
now
kind
of
linker
has
no
idea
what
this
is.
C
C
B
Basically,
the
the
other
type
field
is
marked
with
saying:
okay,
I
will
I
will
use
this
type
to
access
methods,
potentially
so
keep
all
the
methods
and
if
I
would
know
it
within
the
program
type,
if
I
would
know
access
properties
or
fields
or
events.
That
means
I
just
got
my
annotations
wrong
right.
So
now
that
would.
C
C
B
C
C
C
C
The
last
thing
is
that,
like
this,
of
course,
doesn't
work
for
all
reflection,
and
there
are
some
patterns
that
are
never
compatible
with
Winker
and
that's
kind
of
like
I
have
I
have
got
somewhere.
That
is
just
reading.
Some
string
from
the
internet
and
just
like
activating
a
random
type
kind
of
those
will
never
be
safe.
Linker
will
always
warn
for
them,
and
it
would
be
nice
if,
for
example,
library
developer
will
be
able
to
annotate.
Their
API
did
like
this
specific
API
is
not
linker,
safe,
so
kind
of.
C
So
linker
will
not
do
those
things
for
you.
You
have
to
annotate
that
it's
kind
of
like
the
nullable
annotations
and
in
c-sharp
like
when
a
logo
came
out.
You
you
have
to
unload
everything
manually
like
the
compiler
will
tell
you,
will
give
you
all
the
warnings
as
well
as
will
tell
you
where
you
have
to
put
them,
but
what
you
have
to
actually
do
the
action
of
and
place
those
annotations.
D
A
Think
that
the
experience
will
be
slightly
different,
like
the
experience
will
be
that
the
linker
will
see
into
the
library
and
we'll
find
that
you're
using
the
pattern
there
and
if
it's
not
like
fixed
in
the
library
I
cannot
get
it
correctly
and
it
doesn't
leak
out.
Then
it
would
say
nothing,
but
if
it
leaks
out
through
whatever
means
or
it's
not
annotated,
then
you
would
get
a
warning.
The
difference
would
be
that
in
this
case
you
will
get
a
warning
about
some
internal
assets
in
the
library.
So
the
experience
is
not
great.
D
Just
to
clarify,
then,
if
I,
if
I'm,
if
I,
have
a
library
that
uses
one
of
these
patterns
and
I
pull
it
into
my
own
application,
say
that
the
library
was
created
five
ten
years
ago.
So
it's
not
going
to
have
this
attribute.
What's
the
behavior
that
my
application
would
have
when
it
pulls
in
such
a
library.
D
A
It's
kind
of
combination
we
needed
ourselves
because
there
are
certain
methods
in
our
reflection
which
are
simply
unsafe,
like
assembly
that
get
types
so
you'd
put
it
there,
but
also
you
can
use
it
on
the
library
basically
say
you
know
whatever
is
behind
this.
Api
is
not
linked
or
safe.
Please
don't
call
this
and.
A
A
D
D
Sir
the
reason
behind
these
questions
is
I
was
trying
to
figure
out
who
the
target
audience
for
applying
these
attributes
was.
If
the
target
audience
is
people
who
have
already
shipped
libraries.
Well,
we
can't
ship
a
new
API
for
them,
because
they've
already
compiled
their
code.
If
the
target
audience
is
us
internally,
does
the
attribute
have
to
be
public
and,
and
so
on,
I
see
it's
a
conversation
that
we
can
have
later.
I
just
wanted
to
kind
of
speed.
That
discussion
are.
E
A
All
right,
I
think
we
need
it
publicly,
but
it's
a
in
fact
for
them
for
the
public
usage,
it's
mostly
about
like
having
a
better
experience
with
a
library
and
also
like
you
know,
xamarin
or
blazer,
we'll
use
this
or
like
the
higher
level
frameworks.
We'll
use
this
right.
So
then
the
question
becomes
like:
should
we
keep
it
sort
of
internal
and
internalize
them
internalize
it
for
them
as
well?
Or
could
we
make
it
public.
B
I
mean
we
should
only
go
through
the
slides
before
we
make
any
judgment,
but
the
way
I
understand
it
is
like
if
we
assume
that
nullable
would
be
not
a
c-sharp
feature,
inaudible
would
have
done
and
aesthetic
code
analysis
feature.
Then
that
would
be.
You
know
similar
to
your
experience
where
you
get
warnings,
but
the
warnings
are
now
inside
of
the
library
rather
than
at
the
entry
points
to
set
library
right.
B
So
basically,
the
consumers
of
the
library
has
the
worst
experience
unless
the
author
of
the
library
entertains
the
entry
points,
but
the
feature
will
also
work
when
the
library
also
didn't
annotate
the
entry
points
right.
So
I
guess
that's
why
it
needs
to
be
public,
because
the
idea
is
that
library,
authors
holistically
buy
into
this
model
and
annotate
the
libraries
to
be
linked
are
safe
and
then
consumers
have
said
library
will
basically
have
a
better
experience.
C
You
know,
I
would
probably
start
with
this
one
so
kind
of
this.
This
is
the
annotation
to
put
on
the
system
type.
We
would
also
like
to
enable
putting
it
on
standard
string
locations,
but
it's
not
like
a
night
API
review
thing,
because
you
cannot
specify
what
types
these
are
here
it
should
be
placed
on,
but
whenever
you're
placing
on
system
that
string,
the
expectation
would
be
that
this
is
a
fully
qualified
type
name
and
that
kind
of
helps
in
a
bunch
of
places
where
people
pass
around
the
string
and
then
type
to
the
type.
B
B
C
Oh,
so
at
that
point,
linker
wouldn't
assume
anything
yet
so
this
is.
This
is
just
an
annotation
that
helps
and
the
consumption
side
whenever
you
call
some
reflection
API,
because
the
thing
within
the
linker
is
that
if
you
already
have
a
system
to
type
instance,
then
that
type
by
definition
wasn't
stripped
right.
But
it
doesn't
tell
you
anything
about
the
members
of
the
type,
because
all
the
members
are
eligible
for
stripping
when
aggressive
modes
are
enabled
right.
E
C
B
E
B
Would
somebody
do
who
has
a
library
that
does
that,
for
example,
imagine
we
have
a
library
in
our
world
where
the
losses
to
diff
API
surfaces
right,
so
we
built
this
library
in
the
library.
Of
course,
you
know,
expose
the
systems
or
types
and
member
infos
everywhere,
but
none
of
them
are
runtime
reflection
they
all
effectively.
Just
would
be.
You
know
what
the
runtime
reads
for
metadata.
That
was,
you
know,
passed
to
it
so
with
some
annotated
library
and
say
that
there's
no
reflection
going
on
here.
So
so,
don't
don't
don't
worry
about
it?
Yes,.
C
C
B
C
C
B
C
Yes,
basically
trying
to
separate
into
the
two
categories,
because
reflection:
api's
always
have
one
simple:
oh
well,
yes,
just
say
get
method
and
give
it
one
sting
and
that
one
only
searches
for
public
so
kind
of
this
is
trying
to
optimize
for
that
and
have
encoding
for
the
kind
of
most
common
reflection
api.
Because
then
you
have
the
other
reflection,
ideas
that
take
a
string
and
a
binding
flags,
and
then
you
can
say
also
look
for
non
private
or
something
and
kind
of
that.
That's
why
there
is
this
distinction
so
that
we
can.
D
I
think
this
is
actually
backward
normally
on
binding
flags.
You
explicitly
specify
non
public,
so
the
idea
is
just
take
methods.
For
instance,
the
idea
is,
if
I
said,
methods
I
would
expect
only
public
methods
to
qualify.
If
I
said
non
public
methods,
then
I
would
also
expect
private
protected
and
internal
to
qualify.
So
my
feedback.
E
B
I
mean
this:
is
this
respectable
even
earlier
I
said
right,
it's
the
reflection
default
right.
If
you
say
reflection,
you
know
get
method,
for
example,
and
you
pass
it
a
name
for
private
method,
able
excite
you
anything.
Unless
you
use
too
long
or
overload,
we
can
pass
and
binding.
Flexin
also
opt
in
for
private
state
I.
Think
in
general,
like
people
don't
think
of
private
state
by
default
right,
because
if
I
have
effect
over
something,
then
you
know
it's
seasonable
that
it
started
with
public
API
service
right.
The.
D
Reason,
for
that
is
the
the
target
audience
for
reflection,
is
I
need
to
I
need
to
call
this
API
that
I
don't
necessarily
know
what
the
type
is
at
compile
time.
So
it's
a
runtime
check,
but
private
methods
by
definition
or
implementation,
details
that
the
type
author
did
not
intend
to
expose
to
arbitrary
callers.
That's
why,
in
the
reflection
surface,
we
explicitly
make
you
pass
in
a
flag
saying
non-public,
like
I,
intend
on
calling
an
implementation
detail.
Please
don't
stop.
D
F
E
D
E
Okay
kind
of
the
point
that
I
was
driving
towards
is,
is
that
specifically
the
naming
part
right.
You
said
if
I
told
the
linker
to
save
all
public
methods,
it's
like
well,
no,
really
what
you're
telling
the
linker
is
save
methods,
and
that
implies
public
methods
right
like
it.
It
just
feels
to
me.
It
just
feels
a
little
bit
of
a
trick
to
just
say
method,
and
it
doesn't
mean
all
methods.
It
only
means
public
methods.
Yes,.
F
G
D
D
G
D
F
B
G
E
G
The
way
you
I'm
late,
I
apologize
but
I'm,
just
looking
at
what's
on
the
screen
right
now
and
there's
methods
and
public
methods
and
I'm
suggesting
that,
yes,
they
are
non-overlapping.
So
there
are
public
methods
and
non-public
methods,
and
if
you
want
both,
you
specify
public
methods
or
non
public
methods
just
like
in
reflection
today.
If
you
want
both
instance
and
static,
you
specify
instance
or
static
or.
B
I
mean
binding
flex
is
not
necessarily
great
API.
No,
but
yeah
I
mean
I,
get
it.
I
would
agree
with
you
that
it
aligns
it
more
I
mean
I'm
personally
fine
with
public
methods
in
private
methods.
I'm
also
fine
with
saying
you
just
have
methods
and
then,
as
probably,
can
private
as
different
flags
that
also
works.
B
D
B
A
B
A
G
E
D
C
So
the
specific
methods-
you
cannot
rotate
it
with
this,
this
kind
of
flow
semantics
that
you
can
flow
the
type
through
the
system
and
pass
it
around
and
then,
by
the
time
you
try
to
call
the
wicked
method
on
it.
The
linker
would
know
that,
like
oh,
this
one
specific
method
was
kept.
Maybe
we
don't
have
a
way
to
express
that
so
kind
of.
If
you
just
want
one
specific
method,
you
either
have
to
do
all
the
reflection
within
a
single
method
body
so
that
the
linker
can
see
it.
C
You
know
a
linker
can
see
that
like,
oh,
that
there
was
a
type
of,
and
then
you
call
on
this
one
specific
method,
and
you
are
looking
for
that
and
it
will
keep
that
one
specific
method.
But
if,
if
you
want
to
kind
of
pass
it
around,
then
anyway,
I
don't
think
there
is
a
good
way
how
to
annotate
things
like
that.
If.
E
C
E
D
B
I
think
it
depends
on
what
you're
writing
right.
If
you
had
a
CEO
Lizer,
for
example,
you
would
just
say
public
properties
and
you
literally
don't
care
which
one's
right
anything
is
permissible,
because
you
just
you,
don't
care
about
specifics.
You
just
match
them.
Based
on
input
against
methods
is
different
because
methods
you
clearly
have
to
have
a
knowledge.
What
you
have
to
pass
in
for
those
guys
right,
so
there's
polling
and
expectation
that
you
find
specific
methods.
You
may
not
know
whether
the
method
exists.
C
Like
from
family
enumeration,
that
is
here,
the
dynamic
we
access
member
kinds,
I
think
the
most
valuables
are
the
the
constructor
related
ones,
and
the
field
and
property
really
delighted
ones
right,
because
constructors
is
like
that's
that's
the
major
thing
that
people
do
with
reflection
like
they
will
activate
a
nuclear
instance,
something
that
came
from
somewhere
else.
Okay,
that's
the
highest
value
that
I,
see
and
then
kind
of
fields
and
properties.
It's
like
yeah.
B
I
will
say,
though,
I
think
it's
convenient
to
have
an
attribute
that
allows
you
to
keep
almost
everything
if
you
need
it
to,
because
that
probably
helps
in
debugging
quite
a
bit.
If
you
can
just
say
you
know
what
let
me
just
annotate,
this
particular
parameter
here
and
then
see
what
happens
and
then,
if
that
works,
maybe
then
you
go
down
the
path
of
finding
more
specific
notations.
A
D
B
D
A
quick
question
on
this
on
another
question:
if,
if
a
type
or
a
method
does
stick
around,
the
linker
doesn't
shake
it
out,
do
all
of
the
attributes
on
that
API
come
along
as
well,
so
I
could
use
reflection
to
access
that
data
and.
A
That's
a
very
complicated
question,
but
the
default
mode.
Yes,
it
will
keep
all
the
attributes,
but
there
is
a
discussion
now
that,
like
especially
with
nullable
keeping,
those
attributes
has
none
significant
size
cost
and
it's
probably
never
used
to
run
time.
So
you
know
those
kind
of
attributes
which
are
like
we
don't
really
need
to
keep
them
around.
So
there's
a
discussion.
A
D
A
Yes,
there's
the
expectation
also
similar
for
properties.
If
you
mark
your
property,
we
will
all.
If
you
access
property
through
reflection,
we
will
bring
call
the
accessors,
even
though
linker
itself
for
like
statically
reference
things
will
differentiate
between
getters
and
setters.
But
reflection
will
always
prove
everything
because
we
don't
know,
what's
going
to
be
used,
yeah
I,
look.
B
A
B
B
B
A
A
D
A
B
F
F
G
The
question
would
be
is,
if
you
said,
if
you
supposedly
set
everything
that's
on
here
today,
is
there
anything
the
linker
would
be
able
to
trim
out
today
that
if
you
had
it
something
else
in
the
future,
who
would
no
longer
mean
the
same
thing
and
I
don't
know
the
answer
for
them
answers
no,
because
if
that
wasn't
sure
we
would,
we
would
already
see
more
things
here.
I.
A
H
B
F
D
F
F
Adding
all
is
reasonable
if
all
just
says
this
type
is
preserved
and
the
linkers
not
going
to
inspect
it
further
because
then,
no
matter
what
change
has
happened
in
the
future,
it
will
still
have
that
behavior.
My
concern
is
just
if
the
behavior
becomes
measurably
different
in
the
future
than
now
there's
a
compatibility
question
and
for
we
like
compatibility,
so
we
we
spend
a
lot
of
time
debating
what
it
means
so
yeah.
G
D
E
A
D
A
A
E
B
A
E
G
G
A
G
A
So,
on
the
consumption
side,
when
you
read
a
value
which
is
annotated
like
this,
it
makes
a
guarantee
to
the
linker
that
hey
this
thing
has
all
methods,
and
so,
if
you
call
dot
get
method,
it
will
work
and
it
won't
warn
if
it's
not
there.
The
linker
would
issue
warning
saying
this:
dot
get
method
is
dangers
and
we
can't
guarantee
that
it's
going
to
survive
the
trimming,
and
so.
A
E
A
D
B
B
E
G
At
the
same
time,
though,
there
are
a
lot
more
things,
presumably
that
those
annotations
could
be
a
lot
more
reasons.
Those
annotations
could
be
valid
and,
if
they're
not
being
tested,
I,
don't
know
that
analyzers
could,
unless
the
analyzers
police
assume
the
functionality
of
the
linker
I'm,
not
sure
you
could
get
to
100%
coverage.
That's.
A
G
B
A
A
B
B
C
D
B
A
One
of
the
main
feedback
in
previous
discussions
was
that
this
shouldn't
be
linked
or
specific,
or
the
naming
shouldn't
like
imply
link
in
most
cases
at
least
oppression.
One
is
special
because
it's
like
a
specific
tool,
but
the
ones
which
are
describing
the
code
should
be
about
the
code
and
not
about
the
tooling.
A
C
C
So
kind
of
this
provides
away
how
to
suppress
it
and
I,
basically
just
took
as
an
inspiration
the
existing
suppress
message
attribute
and
I
removed.
I
think
two
things
from
it,
and
this
is
the
result,
and
the
purpose
is
really
to
suppress
message
potentially
from
any
tool
that,
after
linker
kind
of
or
after
the
seizure
compilation,
which
is
why
maybe
suppress
linker
warning,
is
not
great
for
name
because
we
could
potentially
make
it
more
general
purpose.
C
G
C
G
A
E
A
C
C
E
Example
was
when
we
were
comparing
two
trucks
and
we're
looping
over
all
the
fields,
and
if
the
field
is
trimmed
out,
you
might
as
well
not
have
to
to
compare
it,
because
it's
not
there.
So
it's
safe,
it's
safe
to
get
all
the
fields
on
a
struct,
compare
it
with
another
one
right.
That
was
another
case
where
we'd
want
to
use
this.
A
Yeah,
that's
the
internal
usage
like
there
are
actually
many
places
in
like
coral
lip
specifically
where
we
do
things
which
are
always
safe,
but
from
this
analysis
point
of
view
are
unsafe,
but
I
don't
want
to
like
that's
noise
for
this
discussion
right.
It's
internal
implementation,
details.
If
reflection
for
normal
users,
the
case
would
be
just
the
one
which
Michelle
described
for
example,
or
anything
which
like
when
you
cast
it
through
non
type
variable
so
like
if
you
store
something
in
an
array
of
object
and
the
linker
will
lose
track
of
it.
C
Just
today,
I
was
the
CSV
naughty
code,
generator
for
the
new
way
of
doing
WinRT
intro
and
that
one
uses
a
reflection,
and
it
has
some
kind
of
dictionary
of
the
protections
and
that's
exactly
I
use
case
for
for
this.
This
thing,
because
they
play
something
a
dictionary
and
when
they
are
placing
it
into
the
dictionary,
it
can
have
the
right
amount
ation
and
you
kind
of
keep
the
default
constructor,
because
this
needs
default
constructor
as
well,
and
once
we
are
take
it
out
of
the
dictionary,
it
doesn't
have
the
annotation
anymore.
C
D
D
G
If
I
were
to
do
something
like
this,
maybe
based
on
the
description
earlier
and
on
the
screen,
I
mean
it
really
seems
like
the
sole
difference
between
this
and
the
existing
one.
Is
that
the
existing
one
has
a
conditional
attribute
on
it
rather
than
this
being
linked
or
specific?
It's
just
do
you,
or
do
you
not
want
it
to
go
away?
Based
on
what
the
code
analysis
is
said,
if
that's
true
from
a
naming
perspective,
it
seems
like
that's
the
key
difference.
G
We
were
to
do
that.
I,
don't
know
if
there's
any
benefit,
but
we
can
consider
like
inserting
it
somehow
into
the
the
hierarchy
here.
So
you
had
like
you
know.
If
we
were
designing
this
from
scratch,
we
might
have,
for
example,
had
attribute
and
then
driving
from
that
the
unconditional
suppress
one
and
then
deriving
from
that,
like
the
suppressed
one
that
has
a
conditional
flag
on
it
or
something
like
that.
I
don't
know
if
we
could
somehow
sim
it
in
here
in
a
non-breaking
way,
but
look
at
that
too.
F
G
G
B
B
G
F
Inherited
right
well,
if
we
took
so,
if
we
did
it
the
other
way,
we've
had,
we
took
suppress
message
and
left
it
as
is,
but
presumably
it's
sealed
and
we
need
to
unseal
it.
And
then
we
said
an
unconditional,
suppress
message
extends
conditional.
The
problem
we
would
have
with
that
is.
If
we
were
still
servicing
FX
cop,
we
would
need
to
teach
FX
cop
that
there's
another
derive
type
it
should
care
about
by
then
the
the
is
test
makes
sense.
An
unconditional
suppress
message
attribute
is
a
suppress
message,
attribute
right
and
so
I.
A
F
Then
it
would
be
up
to
tools
to
decide
that
they
want
to
check
for
suppress
message
or
unconditional,
suppress
message
and
I.
Don't
I,
don't
know
how
many
tools
we
have
that
are
actually
using
suppress
message
now,
because
the
like
Rozlyn
analyzers
are
looking
at
the
source
code
they're,
not
looking
at
the
output
il.
It
was
only
like
that
was
only
invented
because
FX
cop
and
the
linker
are
running
on
post
compiled
so.
B
F
B
B
A
F
I
think
it's
only
on
the
per
target,
so
it
would
just
be
that
the
constructor
is
conditional,
but
it
can't
remove
it
without
I
have
no
I
think
it
would
only
apply
to
the
attribute
usage
and
not
the
attribute
constructor
chaining,
so
I
see
yeah.
So
as
long
as
it's
a
new
type,
it
shouldn't
unless
itself
is
marked
inherit
it,
in
which
case
we'd
have
a
problem,
but
I
don't
think
it
is.
B
B
I
mean
paging
in
what
we
did
for
nullable.
Our
conclusion
was
because
Corvallis
is
such
a
small
namespace.
We
did
not
include
the
base
type
I'm,
actually
fine,
with
making.
This
just
appear
to
suppress
message
but
I'd,
like
Stevens
suggestion
of
saying
you
know,
let's
not
put
in
linker
in
here,
just
just
model.
The
actual
distinction
that
it
has,
which
is
is
unconditional,
so
unconditional,
suppress
message
attribute,
seems
fine
to
me.
F
F
F
B
F
E
E
A
E
E
A
E
D
B
My
key
level
has
brought
significantly
because
rosin
effectively
in
intellisense.
Does
you
know
prefix
and
suffix
search?
So
if
you
just
press,
suppress
linker
warning,
so
if
you
just
say,
suppress
message,
DEET
Ellison's
will
show
you
both
suppress,
meshes
and
unconditional,
surprise
message
and
it's
highlighted
so
that
you
see
where
the
common
Burma
is
so
people
will
find
both
of
them.
B
D
E
But
there's
nothing
we
can
do
about.
Somebody
knows
all
I
want
to
suppress
this.
They
start
typing,
suppress
and
then
they're
like
suppress
message.
That
sounds
like
there.
A
one
two
hit
that
one
and
then
bills,
and
they
still
get
the
warning
right
or
link-
can
still
get
the
warning
like
there's
kind
of
nothing
we
can
do
because
suppress
message
is
already
taken,
the
good
name
right.
Then
they
just
then
they
just
search
linker,
suppress
message,
not
working.
It's
like,
oh,
you
should
use
unconditional,
suppress
message.
B
D
E
D
D
A
H
B
A
B
B
D
B
A
A
E
A
A
B
E
B
A
So
for
one
I,
don't
think
generics
work
well
today,
that's
something
we
should
probably
fix
and
type
names
are
simple.
Just
like
fully
qualified
type
name,
including
Assemblies
and
members
member
signature.
I,
don't
remember,
maybe
Marik
would
know
what
is
exactly
the
syntax
like
the
simple
stuff
looks
normal,
but
like
the
more
complicated
things
I,
don't
remember.
B
A
B
E
E
B
H
H
Yeah
you
call
it
on
the
method
which
has
the
dependency
right
saw
that
so
that's
up
to
you.
You
can
put
it
as
many
methods.
You
can
you
you
need.
So
basically
you
can
have
reserved
dependency
into
same
member
from
multiple
methods
that
again
make
sense.
If
you
code,
I,
have
called
handles
the
third
thing.
F
B
But
these
are
all
read
right,
because
normally
the
only
property
you
want
to
have
read
right
at
the
ones
that
we
consider
optional
for
an
attribute.
I
would
normally
expect
members,
signature,
type
nerd
assembly
name
to
be
get
only
because
you
only
pass
them
through
the
constructor
and
then
only
condition
is
something.
You
said,
optionally.
D
B
G
G
G
D
E
A
G
They
were
my
concern
was
primarily
that
the
preserve
part
in
particular
is
talking
about
an
action
that
we
expect
a
particular
tool
to
take
in
response
to
this
when,
in
reality,
all
this
is
doing
is
just
saying,
I
have
a
dependency
on
something,
and
you
have
something
that
you're
unable
to
determine
otherwise
do
with
that
information.
What
you
will
and
something
like
the
linker
would
then
choose
to
say:
okay.
E
F
A
F
Because
if
you,
for
example,
semi
statically
used
the
keyword,
dynamic
I
have
no
idea
if
that
works
through
peyote,
but
the
runtime
can't
look
at
it
and
know
what
type
you
used,
but
you
can
be
like
I'm
totally
calling
that
members
to
string
or
that
types
to
string
like
I
can
see
it
in
the
code
right
now.
So
you
have
a
you:
have
a
static,
dynamic
reference.
F
H
B
That's
kind
of
my
point:
I
think
we
just
had
this
discussion
recently.
It's
even
right
on
the
pure
attribute
right,
we're
pure,
were
kind
of
had
a
very
broad
semantics
and
then
different
things
interpreters
differently,
and
then
we
ended
up
of
saying
no
really
want
an
attribute.
That
specifically
says:
don't
ignore
return
type
right,
so
it
seems,
like
you
probably
want
attributes
that
a
bit
more
specific
on
what
the
mechanical
interpretation
of
this
is,
and
if
you
want
more,
you
have
to
apply
more
attributes.
G
G
No
I'm
suggesting
the
opposite
that
and
the
this
thing
the
only
purpose
of
this
API
is
to
say:
I
have
a
dependency
on
something
else
like
I
depend
on
this
other
thing.
The
linker
then
chooses
to
assume
from
that.
Okay.
Well,
then,
I
better,
not
remove
that
other
thing.
If
I
need
it,
if
I
need
you,
but
you
know,
I
else,
PI
could
use
that
to
navigate
to
the
dependency
or
to
show
it
in
your.
You
know,
use
references,
that's
not
has
nothing
to
do
with
preservation.
F
Yeah
I
think
it's
describing
that
you
have
it
that
this
member
has
a
dynamic
dependency
on
something
else
and,
yes,
you
can
painted
it
to
hide
up
too
high
of
a
level
and
something
like
I
else
buy
it.
It
makes
no
sense
for
it
to
jump
from
there,
but
you
you
painted
it
there
and
you're,
describing
a
relationship
between
this
and
something
else.
Not
Deere
linker,
don't
delete
this
other
thing
and
the
linker
interprets
that
relationship
as
good
I'll
spy
or
any
code
or
any
other
sort
of
tree
view.
E
B
I
guess,
as
long
as
we
think
that
this
is
a
very
specific
and
clearly
defined
thing
that
the
same
codes
I,
think
I'm
fine
with
man
I'm
just
worrying
when
you
have
multiple
interpretations
based
on
attribute.
This
is
same
thing
we
had
with
things
like
XML
Sheila
is
a
rare.
Obsolete,
no
means
you
know,
hide
it
from
civilization.
When
you
really
want
two
different
attributes
doing
to
express
these
things
independently
right,
it's
not
only
concern
that
we,
if
you
make
it
to
general,
then
you
bucket
decisions
together.
B
G
G
B
Added
as
a
note,
what's
the
syntax
was
a
signature.
It
seems
vodka
is
also
supported,
not
sure
that's
discoverable.
The
link
should
at
least
think
I
should
at
least
one
when
the
string
can't
be
managed.
So
does
it
also
mean
we
concluded
that
members
in
here
should
not
be
nullable
right?
That's
the
other
thing
we
said.
B
F
I
guess
saying
the
all
bike
to
put
a
constant
string
hanging
off
of
this
of
all
members.
Being
this,
the
asterisk
or
whatever
it
is.
That
would
also
make
sense
and
I
guess
it.
It
could
still
make
sense
for
tools
like
I
guess
really.
That
would
only
make
sense
to
the
linker,
but
other
things
could
still
do
something
with
it
like
not
show
a
number
is
being
uncalled
because
like
well,
something
said
it
has
a
dependency
on
everything.
So.
A
F
F
Because
didn't
we
talk
about?
Wasn't
that
the
first
thing
we
talked
about
a
type
of
and
and
the
flags
of
what
you
care
about.
F
F
Yeah
so
I
guess
that
is
one
question
is
on
the
two
constructors
here
that
take
type
name
or
where
we
have
typed
name
an
assembly
name.
Does
it
makes
sense
to
have
a
another
constructor
that
takes
type
of,
and
we
could
certainly
make
it
populate
the
other
two
members,
but
that
way
you
can
still
get
a.
You
can
have
a
strong
reference
to
a
type
that
you're
just
encoding
a
dynamic
member
reference
to.
A
A
F
G
C
How
many
of
those
we
could
replace
it
with
the
first
attribute
that
we
discussed
was
even
like
when
I'm,
even
looking
at?
What
is
this
that
dynamic
update,
delegate
or
whatever?
If
we
were
to
rewrite
the
code,
so
the
linker
can
actually
see
the
text
in
there.
When
we
are
not
string
formatting
things,
then
you
don't
even
need
to
annotate,
because,
like
this,
this
linker
could
see
through
it.
C
A
G
I'm
just
looking
in
it
like
core
libs
I'll
lean
trim
file
and
while
we
could
so
there're
various
places
to
be,
is
that
one
is
we
use
it
on
a
not
to
keep
around
anonymous
types
which
have
unknown
names.
So
there's
you
know,
will
basically
say
it
on
this
type
star
to
keep
around
anything.
That's
been
generated
by
the
compiler.
G
That's
for
then
source
stuff.
All
the
marshallers
have
stars,
there's
a
star
for
everything
in
something
to
do
with
component
model
event.
Pipe
has
a
star.
Next
to
it,
we
this
one's
just
for
convenience,
but
there's,
like
you,
know,
a
bazillion,
different
method,
builders
for
acing
stuff.
We
need
to
keep
the
same
two
members
on
each.
So
we
say
same
task
method,
builder,
star
grip,.
F
F
You
do
that
right,
like
look
smart,
it's
because
if
we
say
that
this
doesn't
get
a
shouldn't
support,
wildcards
in
members
signature,
then
because
we
were
making
it
general
like
we
can.
We
can
leave
it
I'm,
just
like
we're
I'm,
just
asking
the
design
questions
here
of.
Are
we
are
we
shipping
something
for
a
tool
or
are
we
shipping
something
that's
generally
useful?
And
if
we
think
it's
really
close
to
generally
useful,
what
are
the
tweaks?
We
can
do
that
make
it
meet
all
the
scenarios
and
I.
E
Name
of
the
variable
you
want
it
to
be
is
equals
some
fault,
fully-qualified
type
name,
and
then
you
slap
on
dynamically
access.
Members
attribute
from
the
first
discussion
with
all
the
members
that
you
needed
to
preserve
on
it,
and
then
the
linker
sees
that
on
that
field,
and
it
says
oh
I
see
this
is
a
fully-qualified
type
name.
Let
me
go
look
at
what
members
I
should
preserve
on
it,
oh
all
of
them.
E
D
G
Const
string,
something
I
depend
on
equals,
quote
you
know,
food
type,
close
quote
and
then
add.
On
top
of
that,
the
dynamically
method
add
dynamic,
attribute
all
and
the
linker
would
see
that
and
say:
oh
I
see
you
have
a
Const
field,
nay,
that
is
given
the
string
value
who
type
therefore
I'm
going
to
keep
everything
around
from
foo
type.
G
D
Yeah
but
I
mean
cost
is
part
of
it's
part
of
the
assembly
metadata,
so
people
outside
of
your
assembly
might
query
the
value,
but
people
within
your
assembly
will
never
ever
do
you
reference
the
field
that
has
a
cost
value
in
it.
A
Think,
like
the
answer
is
you
could
make
it
work
with
some
magic.
Like
you
know,
there
are
certain
places
where
you
need
to
reference
the
type
and
the
way
you
do
it
is
just
you
type
of
an
assignment
to
do
like
discard
right,
and
so
you
could
do
something
along
those
lines
here
as
well.
The
question
is
where
it's
better,
to
separate
all
cards
on
the
attribute
we're
looking
at
or
whether
we
would
force
people
to
use
this.
G
G
D
D
A
D
D
F
G
I
mean
it's
possible.
The
latter
one
is
speculative,
I
mean
we'd,
have
to
go
through
and
see
like
what
the
actual
use
case
for
that
is.
We
know
we
had
to
use
cases
for
the
ones
on
the
screen
and
and
also
where
the
the
type
is
the
type
I
would
imagine.
Actually,
the
bulk
of
our
current
usage
would
just
use
type
as
the
second
argument.
E
G
G
F
G
F
E
G
F
F
F
B
F
E
F
B
G
But
that
does
apply
more
generally
to
anywhere
where
some
external
dependency
wants
to
be
able
to
use
something
like
if,
if
I
have
some
native
code,
that's
going
to
call
into
my
assembly,
or
you
know
or
some
other
something
that
me
I
know
my
this
thing
is
gonna
be
used
by
someone.
Is
there
a
way
that
I
can
attribute
it
to
say,
like
don't,
don't
remove.
F
This
I
mean
if
we
think
it
makes
sense
to
widen
this
to
a
method,
constructor
field
and
assembly,
so
that
there
are
places
of
like
just
this
needs
to
be
true
and
find
all
references
will
say:
yeah
you
loaded
system,
private,
core
Lib,
so
this
type
can't
go
away.
I,
don't
know
why
it
needs
it,
but
it
that's
the
relationship.
Then
that's
what
I
think
Emily.
B
G
B
E
G
F
E
F
Or
again,
if
it's
just
the
the
things
of
like
dear
linker,
this
type
can't
go
away
and
it's
specific
to
the
linker.
Maybe
that
means
it
just
stays
in
the
XML
file
and
it's
and
it's
a
thing
for
the
tool,
but
it
would
be.
It
would
be
nice
if
we
had
something
standard
applied
on
the
things
of
like
no
matter
who
writes
a
linker
in
the
future.
Please
don't
delete
this.type,
because
the
debuggers
you're
you're
gonna
crash
the
debugger.
E
F
I
teach
there
and
so
yeah,
so
maybe
that's
a
maybe
that's
debugger
required
is
it's
the
attribute
that
we
want
in
that
case,
but
I
think
that
on
on
this
one,
if
we
drop
the
wild-card
support
from
it
that
we've
we've
probably
beat
this
one
into
either
to
death
or
into
the
shape
that
we
wanted
I'm,
not
sure
which
I
have
one
more
question
about
it,
though.
Okay.
A
E
A
A
E
F
B
H
Yeah
I
think
that
the
motivation
was
basically
to
give
flexibility
to
describe
with
further
the
dynamic
dependency
condition.
So,
for
example,
you
can
use
this,
follow
it's
a
civilization
in
theory-
and
you
say:
ok,
I
need
this
dependency.
Only
when
I'm
running
in
I
don't
know
civilization,
dynamic
mode
or
something
like
that.
F
E
B
I
mean
it
does
raise.
The
question
that
you
conditioned
to
me
implies
either
it
says,
even
if
we
do
it
after
the
conditional
way,
it's
just
a
single
string
or
meaning
a
single
symbol,
whatever
that
symbol
means
but
like
over
time.
If
you
need
to
support
multiple
things,
will
you
ever
have
something
like
the
bug:
Kumar,
profiler,
comma,
whatever?
Why
is
there?
This
is
always
going
to
be
a
singular
string.
F
B
F
I
guess
I'll
have
multiple
is
allowed
multiples.
True,
because
you
get
it,
you
could
have
had
multiple
different
dependencies
anyway,
so
yeah.
So
that
may
be
fair,
so
condition
may
be
single
dependency
and
there
is
no
there's,
no
handing.
If
you
need
anding,
then
you
you
need
to
do
complicated
stuff
yourself.
Another.
F
B
B
B
B
E
A
B
You
is
another
tip:
don't
have
displaces
different
dpi
settings,
extra
gig,
impossible,
all
right,
so
I
heard
type
and
then
I
heard
biting
flakes.
What
else
was
there.
F
B
E
D
F
E
F
F
Maybe,
but
if
it
was
for
for
things
like
the
debugger
is
going
to
directly
reference
this
or
the
the
debugger
has
a
hook
to
call
this
member
that
you
don't
see
like
the
linker
would
have
already
stripped
it
out,
because
the
debugger
didn't
like
it
doesn't
see
any
call
to
it.
So
the
dynamic
dependency
doesn't
resolve
unless
we
said
dynamically
depending
on
yourself
means
you're
a
root,
but
that
feels
hacky.
B
B
Cool
then
I
will
and
invite
the
same
sort
of
people
for
next
Thursday
I
believe
there's
an
excuse
to
Zara
taking,
and
then
we
will
also
cover
moenay's
get
GC
info
on
this.
We
can
do
it
over
email
and.
B
B
B
I
think
those
are
fine,
I
mean
we
usually
don't
do.
Two
passes
might
be
usually
tell
people
like
here's
the
things
you
should
probably
fix
and
then
that's
the
end
of
it.
I
mean
it's
only
really
for
like.
Oh,
we
don't
know
what
the
design
would
look
like.
I
think
everybody
can
visualize
what
having
static
methods
would
look
like.