►
From YouTube: .NET Core Design Reviews: IO and ILDASM
Description
Agenda for this review:
- Discussion on resolving behavior differences in System.IO across .NET FX/.NET Core as well as across operating systems
- ILDASM demo
A
So
today
we'll
talk
about
two
different
parts:
the
first
part
we
will
talk
about
behavioral
differences,
that
we
have
an
Ohio
stack
and
how
we
will
deal
with
that
across
da
Americans
on
a
core
as
well
as
operating
systems
and
in
the
second
half
we
will
have
a
demo
for
the
work
that
has
been
done
to
a
manatee
right
off,
Miles
dozen.
So
I
guess
you
should
probably
get
started,
just
walk
us
through
the
differences
and
proposing
what
we
should
do
there.
Alright.
B
Well,
I've
got
five
issues.
Two
sets
of
them
are
fairly
similar
like
this.
One
here
has
to
do
with
access
time,
right
time,
creation,
time
or
directory
and
file
or
directory
and
directory
info,
and
the
violent
violent,
though
essentially
on
windows
right
now,
the
desktop
and
with
the
score.
Whenever
you
try
to
get
one
of
these
attributes
from
file
that
doesn't
exist,
it'll
return
from
file
x,
0
0,
so
it
doesn't
throw
exception.
Anything
like
that
and
then
on
the
unix
core.
We
have
a
throwing
exception.
C
C
C
A
C
A
Mean
is
a
gentleman
principal
I.
Think
I
mean
unless
there's
good
reasons
that
would
deviate
from
whole
family
would
just
make
sure
we
have
the
same
behavior
and
seems
you
still
have
that
home
windows
right.
So
this.
B
A
C
A
A
A
A
C
C
If
we
think
the
very
inception
is
the
right
thing,
then
keep
the
behavior
and
Windows
and
Linux
change
the
winners,
behavior
and
then
start
moving
like
like
bring
that
change
back
to
the
desktop
under
a
cork,
so
that
the
platform
moves
to
a
consistent
state
like
we
can't
end
up
in
a
place
where,
on
some
platforms
we
throw
on
some
platforms,
we
return
0
and
go
well.
You
can
just
like
write
this
convoluted
thing
that
will
let
you
paper
over
the
differences
like
okay,.
A
D
B
D
C
Without
even
in
sacred
memory
said
the
same
behavior
for
doing
windows
and
mac
right,
so
we
can
have
this
behavior
between
Windows
and
Mac,
no
problem,
video
in
Windows
and
Linux
a
problem.
Now
we
may
say
that
that,
like
they
designed
in
a
vacuum,
that
was
the
wrong
behavior,
which
it
does
others
day,
but
it's
very
easy
to
align
the
behavior
that
if
we
want
to
move
everything
forward,
you
can
we.
C
A
B
B
A
E
C
D
D
C
Made
I
have
no
history
about
this,
but
I
think
this
paper
meet
because
like
trying
to
wave
the
exceptions,
I
mean
it
was
like
you
know.
If
you
have
a
lot
of
files
and
trying
to
get
that,
he
knows
a
date
for
it
or
the
time
axis,
and
they
will
get
some
exceptions
through
to
be
very
bad.
So
maybe
we
just
we
were
trying
to
avoid
Josh.
Yes,
next
section.
A
C
E
A
E
E
C
D
C
E
C
D
E
D
D
Another
option
we
could
do
is
just
implement
the
existing
behavior,
just
God
will
be
like
the
way
we
would
like
the
framework
to
behave.
It's
different,
then
how
it
does
behave
and
then,
once
we
kind
of
know
the
killer
bankers
of
many
of
these,
we
decided
what
to
do
with
them,
because,
like
doing
cooking
and
changing
these
things,
one
by
one
I,
don't
know,
maybe
it
doesn't
have
enough
value
but
like
doing
them
in
bulk
and
basically
saying
we
fixed
a
category
of
issues
and
now
throw
exceptions
for
things
instead
of
protecting
public
values.
D
D
C
D
E
C
E
A
A
A
E
A
E
D
Tigers,
you
know
won't
hurt
it's
not
like
thornwood
me.
I
would
not
make
that.
You
know,
like
the
attack
that
says,
to
revisit
like
public
promises,
ya
author
I
mean
to
say
you
know
this
game.
If
you
don't
like
it
was
the
condition
says
that
some
file
system
and
a
Quonset
file,
prime,
so
30
APR
x
0.
C
D
C
C
D
C
E
E
E
C
C
C
But
we're
using
zero
as
like
the
value,
the
universal
time
right,
wouldn't
that
be
the
same
across
iphones,
no,
no
from
file
size
nor
us,
but
here
I
start
a
different
time.
So
I
did
question
his
face.
Is
his
I?
Getting
the
question?
Is
her
gate,
I'm
from
file
time?
Do
you
assume
the
streams,
the
wheel
30
to
file
time
concept,
which
is
like
a
tick
shout
from
a
certain
epic?
Yes
exactly,
and
I
would
say
that
by
default,
my
guess
would
be
that
we
would
not
change
the
meaning
of
that.
C
E
E
C
C
D
D
E
A
E
A
C
A
B
A
B
B
B
So
if
you
try
to
create
a
subdirectory
with
just
white
space,
it
will
return
the
parent
directory.
So
in
this
case,
will
return
parent
dear,
whereas,
whereas
if
you
tried
to
make
a
new
directory
it'll
throw
an
exception
with
just
white
space,
well
I'm
from
a
perspective,
it
actually
is
it
different
from
linux,
because
we
don't,
we
don't
trim
out
the
white
space
on
the
on
linux.
Did
it.
E
A
E
B
C
B
B
This
one
has
to
do
with
how
if
I
give
you
example,
there.
C
B
So
the
problem
was
that
directory
create
directory
will
treat
white
space
differently
than
directory
create
subdirectory.
So
if
you
were
calling
directory
create
directory
with
just
wide
space
on
Windows,
it
would
throw
an
exception.
But
if
you
do
the
same
thing
with
directory
info
create
subdirectory
will
not
throw
an
exception
and
overturn
parent
dear
yeah.
B
D
E
B
E
C
Is
like
the
description
is
between
two
different
API
is
correct.
The
other
handle
whitespace
a
book.
What
are
those
two
consistent
within
themselves
like
create
subdirectory
behaves
exactly
the
same
across
platforms
like
create
directory,
because
there's
just
a
question
of
who
want
to
have
the
same
behavior
within
create
directory
and
create
subdirectory
know
that.
E
E
E
A
A
E
E
A
B
A
C
E
D
A
E
E
Is
different
than
five
is:
give
me
the
current
directory
pinge?
Hopefully
all
the
right
guys.
It
thinks
give
me
a
count
directory
event
sites.
I
give
you
would
think
that
I
think
you've
begun
to
pass
such
get
full
pass
on
an
empty
string.
Just
like
that,
the
same
you
get
it
would
throw
in.
So
it's
not
just
create
directory
here.
I
think
it
I
think
it's
pretty
much
every
single
IP
I
to
be
it
takes
a
pop.
It
does
validation.
House
combined
does
not
do
any
validation,
so
the
windows
naming
conventions
say
don't
end.
E
A
E
A
E
C
E
B
E
B
B
C
E
D
Like
here
like
the
here
may
not
be
intuitive,
maybe
we're
designing
from
scratch
that
it
reflects
it.
But
it's
dition
that
the
first
you
should
discuss,
because
you
can
just
do
the
same
thing
on
linux
and
mac
and
there
are
no
there's.
No
working
is
like
in
the
first
example
where
yeah
we
could
do
the
same
thing
on
linux
and
months,
but
then
the
final
times
a
lot
of
the
same
concepts,
and
this
one
is
just
you
discovered
something
that
is
a
bit
strange.
Yeah.
A
B
A
A
A
C
D
A
A
This
one
here
basically
would
on
windows.
It
wouldn't
fail.
It
would
literally
just
say
well
create
the
ecole
on
excess
temp
right,
because
we
just
trim
the
trailing
space
right.
Linux
II
wouldn't
trim
it.
It
would
literally
just
create
a
subdirectory
of
the
space
correct,
so
arguable
you
could
say,
there's
behavior
difference,
but
I
would
argue
that's
expected
because
in
line
faucets
just
behaves
differently.
Yes,
yes,.
B
A
A
framework
on
window
yeah,
so
there's
nothing
to
do
with
cosplay
word.
E
B
E
E
Today
show
you,
it
says
it
failed
and
we
have
no
idea
why
it
by
which
parameters
wrong.
So
then
we
don't
I,
think
we
do
a
follow-up
check
to
say
this
provoked,
which
parameter
was
actually
wrong
here
to
give
user
it'll
burn.
But
we
know
32
just
says
this
file.
Yes,
it
doesn't
say
it
was
this
parameter
in
this
program
or
just
says
the
file.
So
we
try
to
do.
B
C
B
C
A
On
I
think
yeah
to
David's
point
I,
think
I
think
you
should
probably
just
make
it
proposal
what
you
would
like
the
result
to
be,
and
then
we
can
talk
about
what
the
ramifications
discussed
earlier,
like
as
a
guiding
principle,
is
have
consistency
between
core
course
operating
systems
as
possible,
and
then
the
second
part
is:
what
does
it
mean
everybody
pluggable
code
between
full-time
writing
that
stuff?
Do
we
deviate
from
desktop
enough
that
we
should
fix
desktop?
A
If
so,
then
you
probably
need
to
do
with
EDC
review
and
send
it
or
put
that
book
like
another
option,
is
to
just
keep
with
the
Dalton
favorite
behavior
with
your
core,
which
is
called
it
whatever
would
use,
is
the
default
argument
because
they
would
point
out
these
api
is
a
fairly
old
and
fairly
long
and
exists,
and
then
this
never
registered
as
a
huge
issue
yeah.
Maybe
it's
just
north
deviating.
It's
a
pretty.
B
C
A
E
F
So
yes
little
context
here
what
I
work
this
Homer
was
on.
Implementing
a
library.
I
was
built,
the
top
of
the
Numa
theory
there,
which
was
bringing
in
manas
co
to
represent
the
synoptic
model.
All
the
metadata
objects
on
an
assembly
us
with
a
main
goal
of
being
able
to
visit
the
tree
through
a
visitor
pattern
and
be
able
the
main
goal
was
to
be
able
to
round
trip
and
s
early
through
my
tool
and
then
run
Iowa's
top
of
it
and
get
a
run.
F
So
this
is
basically
a
console
application
that
I
wrote
that
consumes
my
library,
so,
as
we
can
see,
we
can
here
is
where
I
create
the
object
for
my
library
and
then
I
get
well.
This
line
is
not
needed,
but
here
I
create
a
file
this
in
this
directory
and
then
just
call
assembly
right
to
and
pass
the
path.
This
has
some
bleep
right
to
the
only
thing
that
does
it
starts
traversing
the
three
through
a
visitor
that
I
implemented.
That
is.
F
My
yelled
string
visitor
that
the
only
thing
that
has
his
head
writer
and
some
options
either,
if
you
want
to
show
the
bytes
in
the
tokens
or
not
and
just
start
writing
the
assembly
through
this
method
right
so
it
starts
visiting
the
whole
tree
and
outputs
defied.
That
makes
it
so
right
now
the
the
assembly
then
gonna
run
a
top
of
it
to.
E
C
F
And
you
can
you
can
get
the
actual
IL
values
travers
with
three,
so
you
can
do
a
lot
of
cool.
F
So
basically
My
Little
Women
or
does
got
a
program
that
has
a
daytime
object,
use
reflection.
We
kiss
ass
truck
that
I
wrote
up
right
there
and
what
I
did
is
just
created
a
least
with
some
values
and
then
bring
the
least
and
then
sort
the
list
with
a
lambda
expression
then
bring
the
list
again
and
then
I
grow.
The
Fibonacci
little
example
to
use
recursion
bring
that
value,
and
then
I
used
some
reflection
and
I
just
bring
all
the
up
codes
that
have
an
inline,
no
operand
type
code
Wow.
F
C
A
F
F
D
F
F
F
C
A
F
It
yeah
you
did
it
now,
so
I
was
able
to
do
these
complex
demo
with
with
reflection
in
it
and
feels
like
expressions
are.
A
One
thing
that
would
wobble
would
be
nice
because
some
people
used
at
all
desert
for
various
reasons
that
they
parser
that
desertion
air
that
check
it
in
they
do
dips.
It
would
probably
be
nice
if
you
could
mesh
the
oil
doesn't
output
if
possible,
carrier
Cabana
carica,
unless
we
say
they
do
certain
areas
that
are
just
completely
oddly
now
it
doesn't
require
fix
that.
But
it's
probably
never
to
be
super
pretty.
I
guess,
because
it
doesn't
output.
I
think
it
will
probably
be
helpful
to
just
match
it.
A
F
F
C
D
F
F
A
E
A
A
Start
using
it
over
with
so
no
what
about
our
goal
of
the
project
is
the
source
Abby?
Are
we
going
to
publish
this
RB
on
getting
that
on
github?
Yes,.
C
A
E
D
A
A
E
A
A
A
C
F
A
Think
last
time
we
talked
about
the
object
model.
One
of
the
concerns
was
naming
overlap
with
an
actual
object
model
/,
whether
we
can
use
it
object,
model
espionage,
arnold
and
the
last
time
you
every
model
was
very
much
around
the
idea
that
it's
being
written
out,
meaning
like
it
had
like
things
like
this.
I
mean
culture
and
string,
probably
isn't
too
bad,
but
flags
and
some
other
things
were
also
strings,
but
some
of
this
has
seemed
to
have
changed
quite
a
bit.
I.
C
C
E
A
A
That
seems
like
something
you
should
figure
out.
What
would
he
do
with
that?
I
mean
there
was
also
the
question
like
whether
we
would
have
an
object
model
in
general
about
the
about
metadata
reader.
Yeah
is
partly
it's
very
hard
to
use
right
now
in
the
sense.
So
how
does
the
visitor
Jimmy
Burke
you
basically
just?
Have
it
just
have
one
method
for
all
the
objects
that
makes
sense.
B
C
B
One
where
you
return
the
value
and
you
control
like
base
not
visit,
does
the
walks
the
children
there's.
You
have
Eva
that
pattern
or
the
google
pattern.
We
are
like
return
true
or
false
to
visit.
You
know
in
depth
or
whatever
it
seems
like
here.
We
have
a
callback
pattern
where
I
can't
control
the
visit
like
if
I'm
in
signature
and
I'm
like
I,
don't
want
to
walk
signatures
defined
by
c++.
A
B
B
B
C
B
A
F
Because
there
is
like
350
instructions,
so
chill
motto
so
on
the
method:
body
parsing
I,
you
gotta
to
salt,
to
resolve
the
tokens.
You
gotta
know
what
the
operand
type.
So
we
wanted
to
get
rid
of
that
switch
statement
while
going
through
the
opcodes.
So
the
best
approach
was
explaining
instructions
by
objects
that
represent
that
opera
type.
So
when
you
visit
that
instruction,
you
know
what
tocan
you're
treating
and
what
value
your
you're
looking
to.
Well
as.
F
F
A
A
C
C
D
A
A
Well,
I
guess
you
could
still
have
that
right
could
just
have
different
method,
names
or
different.
Overlooks
that
actually
give
you
it's
one
type
arguments
in
there.
I
am
just
trying
to
think
of
you.
If
you
run
I'll
doesn't
let
say
against
a
large
table
with
thousands
of
method
bodies
right,
you're,
allocating
a
ton
of
stuff,
as
you
go,
didn't.
D
E
D
E
A
E
A
A
Well,
that's
one
thing:
I,
the
other
part
of
it
is
there's
certain
things
I
had
to
do.
Parsing,
where
cci
kind
of
cheats
a
bit
and
it
doesn't
is
not
necessarily
always
well
defined.
I
mean
I
talked
with
Nick
about
this
for
a
long
time
that
we
couldn't
come
up
with
a
way
that
we're
guaranteed
you
working
in
all
cases
at.
Why
not
it's.