►
From YouTube: GitHub Quick Reviews
Description
00:00:00 - Approved: Add a new `unmanaged` calling convention bit for use with function pointers https://github.com/dotnet/runtime/issues/38133#issuecomment-653130834
00:18:14 - Approved: `System.Runtime.CompilerServices.RuntimeFeature.UnmanagedCallKind` https://github.com/dotnet/runtime/issues/38135#issuecomment-653135036
00:27:46 - Rejected: Add NativeIntegerAttribute https://github.com/dotnet/runtime/issues/38683#issuecomment-653136856
00:32:08 - Approved: Flexible and efficient optionally-structured console logging out of the box https://github.com/dotnet/runtime/issues/34742#issuecomment-653193414
A
A
A
All
right,
good
morning,
friends,
we
will
start
with
some
c-sharp
things
for
function.
Pointers.
I
don't
know
who
wants
to
talk
to
you
whether
it
wants
to
talk
to
you
who
wants
to
talk
about
it
is
either
tanner
or
fred
fred.
Do
you
want
to
give
us
an.
A
B
I
can
talk
about
it.
Are
you
gonna
stream,
the
proposal,
email.
A
B
All
right
so,
basically
there's
a
couple
of
couple
of
pieces
to
this.
Runtime
of
the
compiler
have
sat
down
and
we
worked
out
basically
a
api
for
allowing
extension,
extensible
calling
conventions.
So
today,
when,
when
you
encounter
a
calling
convention
or
when
you
encounter
a
method
signature
in
il,
you
have
basically
the
the
call
kind
bit
is
what
describes
the
calling
convention.
So
we
have
defaults,
which
is
a
managed
function,
normal
normal
clr,
and
then
we
have
a
whole
bunch
of
unmanaged
calling
conventions.
We
have
cdecl
stood.
B
Call
this
call
and
fast
call
the
new
one
that
we
want
to
end
envirox,
but
we're
not
really
talking
about
ours
right
now.
The
the
new
one
we
want
to
add
is
called
unmanaged,
and
this
means
a
few
different
things
depending
on
context.
B
So
if
unmanaged
tells
the
runtime
look
at
the
set
of
mod
ops
that
immediately
follow
the
parameter
count
in
il
if
those
modops
have
are
are
of
a
specific
type,
they
come
from
system.runtime.compiler
services
and
they
start
with
the
name
callconf.
Today
we
have
in
this
in
this
namespace.
Today
we
have
types
for
qualcomm
seat,
echo
call,
column,
stood,
call
call
com
fast,
call
call
con
for
this
call
those
those
have
existed
in
the
framework
since
since
dot
net
framework
1.0.
B
So
look
at
look
at
those
set
of
mod
and
take
the
combination
of
them
and
that's
that's
the
calling
convention
to
use,
and
so
this
will
allow
the
run
time
to
add
things
in
the
future
like,
for
example,
vector
call
without
having
to
change
the
calling
convention
bit,
because
we
don't
have
that
much
space,
and
it
will
also
allow
the
runtime
to
add
things
like
suppress,
gc
transition
to
act
as
a
part
of
the
calling
convention,
something
that
should
be
considered
in
the
type
system
of
c
sharp.
B
When
we're
talking
about
function,
pointers
because
a
a
function
that
actually
has
suppressed
gc
transition
on
it
shouldn't
be
converted
to
one
that
doesn't
have.
B
If
there
are
no
calling
convention
mod
ops
in
that
set,
then
the
runtime
will
interpret
this
bit
as
use
whatever
the
default
is
so
on
linux
it
well,
I
believe
it
will
use,
stood,
call
no
cdecl
and
then
on
windows
is
stood
call
basically
whatever
whatever
the
the
c
plus
compiler
would
actually
emit.
Normally,
if
you
don't
specify
anything
for
that
platform
yeah,
so
that's
the
that's
what
this
is
going
to
represent
and
then
we
need
to
add
it
to
srm.signature
calling
convention.
So
the
compiler
can
actually
emit
this
bit.
A
B
B
Already,
we've
already
moved
so
dotnet
framework.
This
is
fine
and
everything's.
An
ms
core
level.
Dotnet
core
prior
to
2.0
doesn't
have
these
types
at
all.
B
2.0
added
the
four
types
that
existed
in
framework
and
they
added
them
to
system.runtime,
not
system
private
corelib,
but
we
are
basically
special
casing
in
the
compiler,
the
four,
the
four
types
that
existed,
always
as
not
even
not
even
we're
not
even
going
to
look
up
the
types
we're
just
going
to
recognize
that
cdec
will
stood
called
this.
Calling
fastcall
are
valid
things
and
then
for
net
framework.
Five,
we
moved
those
to
system
private,
coil,
dotnet,
framework.net,
five.
We
we
moved
the
those
four
mod
up
types
to
spc.
A
Yeah,
I
think
my
question
was
even
more
basic.
It's
like,
I
think
we
already
have
the
api
approved.
I
believe
right
because
it
I'm
pretty
sure
we
already
have
the
like.
There
was
a
meeting
on
the
on
the
required
mod
up
that
we
put
in
system
runtime
compiler
services,
I
believe
for
unmanaged
okay.
So
then
this
is
literally
just
this
one
bit
that
we
would
have.
B
We
need
a
bit
in
signature
calling
convention
so
that
we
can
emit
it
in
the
compiler
and
then
there's
a
related
one
for
the
runtime
flag,
which
I
assume
is
the
next.
The.
A
Next
proposal
yeah
so
like
by
the
way,
if
we
add
an
enum
member
here,
does
that
mean
we
have
to
rev
the
l
format
for
that
or
how
does
that
work?.
D
A
D
D
So
essentially,
if
you're
on
an
older
runtime,
so
not.net
five,
the
runtime
will
encounter
the
the
bit
and
it
will
do
whatever
that
run
time.
Does
I'm
assuming
it
will
throw
an
exception
in
fail
fast,
probably
a
type
load
exception
and
then
on
the
newer
runtimes.
It
will
actually
interpret
it
and
use
it
correctly.
B
E
A
B
So
if
you
look
in
335
the
way
that
all
of
the
existing
bits
are
specified
are
as
either
default
or
unmanaged
to
exactly
unmanaged
to
call
unmanaged,
this
call
unmanaged
fast
call
as
two
words.
There
is
some
question
as
to
whether,
in
my
mind
at
least
as
to
whether
or
not
as
just
unmanaged
is
a
good
term
here
right.
B
What
I've
been
viewing
it,
as
is
more
like
unmanaged
extension,
because
it's
like
this
is
the
unmanaged
extensibility
bit.
B
D
Right
so
so,
and
so
in.net
so
in.net
5,
the
only
valid
thing
will
be
unmanaged.
You
can't
have
any
mod
ops
on
it.
The
runtime
will
fail.
The
plan
is,
for
example,
for
net
6.
We
will
extend
it
so
that
at
a
minimum,
gc
suppress
transition,
call
conf,
gc,
suppress
transition
is
a
supported,
mod
opt
if
that
exists.
The
gc
will
treat
it
as
if
it
has
the
suppress
un
suppressed
gc
transition
attribute
it's
not
being
encoded
as
an
attribute
because
function,
pointers,
don't
support
attributes.
D
So
we
have
to
do
this
new
thing
to
support
it
instead
and
in
the
future,
we
may
have,
for
example,
a
call
con
vector
call
bit
which
allows
you
to
say
this
is
the
vector
call,
and
this
is
how
we're
going
to
support
it
moving
forward,
because
we
have
a
finite
number
of
bits,
and
there
are,
you
know,
20
plus
calling
conventions
defined
in
llvm
and
clang
that
we
could
theoretically
support
someday.
There's
also
other
scenarios
such
as
stood
call
plus.
D
A
D
D
A
It
seems
like
they
all
are
very
specific
anyway,
so
you
have
to
kind
of
read
the
manual,
so
it
seems
fine,
it's
just
the
only
question.
The
only
reason
I'm
asking
is
because
we
use
unmanaged
usually
as
a
very
broad
stroke,
and
it
didn't
seem
very
specific
in
that
sense,
but
it
seems
like
the
specificity
here
comes
from
other
data
that
is
elsewhere,
so
it
makes
sense
to
be
fairly
vague
in
the
name.
G
B
H
G
Mean
or
yeah
return
return,
ops
defined
or
something
like
something
that
says
this
is
this
is
where
you
go
to
find.
The
answer
like
essentially
what
it
means
is
external
right
of.
I
don't
have
the
answer
here,
go
ask
someone
else,
but
if
we
invent
a
new
pattern
later,
it's
external
one
and
external
too.
So
just
trying
to
say
right
now
that
this
is
you
know,
return
ops,
defined.
D
B
And
also
I
do
I
do
want
to
point
out.
There
was
so
we
do
have
prior
art
here,
in
that
the
p
and
vocal
equivalent
of
this
is
win
api,
which
we
don't
want
to
put
into
our
we.
We
regret
putting
win
api
as
in
it
in
the
first
place,
and
we
don't
want
to
do
that.
A
A
B
G
B
Well,
so
what
c,
plus
plus
we're
kind
of
following
the
the
c
plus
back
here,
which
is
they
would
put
not
only
the
calling
convention
bit,
but
they
would
also
put
this
mod
opt
on
the
return
type
and
so
it
so.
Yes,
if
you
don't
know
what
it
is,
you
shouldn't
necessarily
interpret
it,
but
the
language
that
itself
doesn't
really
need
to
know
about
the
whole
point
of
this
design
was
the
language
doesn't
need
to
know
what
valid
combinations
there
are.
It
just
needs
to
take
them.
D
G
D
A
I
mean
the
only
thing
we
could
do
is
like
give
it
a
name
like
modifier
defined
or
something
right,
but,
like
I
think
I
managed
is
also
fine
like,
as
I
said
like
all
of
them.
You
basically
have
to
look
up
but
yeah.
Basically
the
idea
would
be
we
give
it
a
name
that
is
kind
of
sensible,
but
at
the
same
time,
if
there's
a
mapping
table,
you
have
to
consult
to
see
like
what
the
layout
is
right
and
the
mapping.
C
G
G
I
A
D
A
D
There's
also
other
considerations
like
cdecl
doesn't
exist
on
x64
or
on
arm
platform
conventions,
in
fact,
on
a
arm
platf
on
arm
platform,
cdecl
standard
called
this
call
and
fast
call
will
all
produce
the
same
code
gen
they
can.
The
c-sharp
compiler
still
won't
allow
conversion
because
of
type
identity,
but
they
are
all
the
same
and
they
don't
actually
apply
there.
A
G
Yeah
so
like
looking
at
ecma
three,
three,
five
and
two,
I
think
that's
two
and
not
eleven
dot
15.3.
It
talks
about
the
existing
ones.
We
already
have
here
as
unmanaged
cdecl,
unmanaged
fast
call,
unmanaged
standard
call
unmanaged
this
call.
So
it
does
feel
weird
that
we
just
now
have
this
bear
word
unmanaged
it.
So
it
feels.
D
Weird
to
me,
but
when
you
think
about
it,
in
the
terms
of
il
just
unmanaged
by
itself
is
unmanaged
platform
default,
so
no
modifier
unmanaged
cdecl
is
then
unmanaged
calling
convention
cdecl
modified
and
then
once
you
get
into
modops,
you
would
have
unmanaged
mod,
opt
vector
call,
which
logically
reads
as
unmanaged
vector
call
and
therefore
is
fluent
in
the
same
pattern.
So.
C
D
A
I
I
I
suggest
we
move
on,
given
that
the
api
is
used
by
five
people
in
the
world.
Indeed,
all
right,
so
I
just
marked
it
approved,
as
basically
is,
unless
somebody
has
stronger
position.
I
would
go
ahead
with
that
all
right.
So
then
this
is.
B
The
corresponding
other
thing,
then
I
guess
yep,
and
so
basically
this
feature
of
the
runtime
that
would
support
this
unmanaged
flag.
We
would
like
to
be
able
to
detect
when
the
runtime
supports
it
in
the
compiler.
J
A
So
this
was
one
of
the
things
where
we
had
some
discussion
on,
whether
we
should
do
it
or
not
right.
I
think
jan
basically
said
something
on
the
lines
of
like,
instead
of
doing
that
probe
for
the
presence
of
the
attribute,
and
then
I
think
you
said
well,
there's
a
they're
not
strictly
speaking
tied
to
each
other
right.
So
right.
B
So
the
after
the
attribute
thing
is
unmanaged
callers
only
which
is
an
attribute
being
added
to
dotnet
five,
which
users
can
put
on
a
method
on
a
static.
B
It
will
actually
emit
a
stub
that
is
the
unmanaged
calling
conventions
convention
specified
by
that
attribute.
C-Sharp.
Won't
let
you
directly
call
that
method.
You
must
directly
convert
it
to
a
function
pointer
with
that
calling
convention
on
it.
So
we
could
use
that
attribute
as
the
as
the
flag
here
there'd
be
a
couple
of
things.
We
would
need
to
change.
Well,
there'd
be
one
thing
we
need
to
change.
Currently,
the
attribute,
I
believe,
is
defined
in
system
runtime.
B
We
weren't
going
to
require
that
that
attribute
is
actually
defined
in
system
private
core
lib,
but
if
we
want
to
use
that
attribute
as
the
detection
mechanism
for
whether
or
not
this
the
runtime
supports
this
feature,
it
needs
to
be
in
the
runtime,
so
it
would
need
to
be
in
system
private,
core
level.
B
L
B
Okay,
so
then
it
wasn't
defined
and
then
jan
asked
me
if
this
needed
to
be
in
the
same
library
that
defines
the
the
call
consideral
types-
and
I
said
not
necessarily
so
I
assumed
that
meant
it
wasn't.
A
So
basically,
what
you're
saying
is
because
you're
you're
inferring
runtime
behavior-
you
don't
want
this
type
to
be
in
some
random
assembly.
That
potentially
is
user-defined
right.
You
want
to
make
sure
that
this
is
coming
from
the
runtime
and
one
of
the
easiest
way
to
do
it
is
to
say
it's
the
call-it
right.
D
H
D
A
I
think
to
me,
like
yeah,
like
to
me
honestly
at
this
point
that
seems
more
like
a
wash
then
like
I'd
rather
add
a.
I
think
I
guess
a
filter.
One
time
feature
that
seems
cleaner
than
doing
you
know
some
crazy
gymnastics
with
type
forwarding.
I
mean
it
kind
of
makes
sense
to
me
that
runtime
behavior
is
something
that
runtime
needs
to
define,
not
the
user
right,
so
either
keying
it
off
of
callip
or
the
runtime
feature
type
seems
reasonable,
like
we
originally
invented.
A
Runtime
features
for
for
things
that
you
can't
key
off
of
api
surface
right,
but
I
kind
of
agree
with
after
10
antennas.
After
forgiving
more
details,
it
seems
weird
to
keep
off
of
the
attribute,
because
it's
kind
of
like
some
random
other
type,
that
is
part
of
the
feature
set,
and
that
seems
not
very
straightforward.
It's
almost
like
saying
the
runtime
supports
async,
because
some
random
s
method
exists
somewhere.
A
It's
supposed
to
you
know,
task
of
t
right
so,
like
that
seems
kind
of
similar
here,
like
the
calling
convention,
is
really
like
a
core
concept
that
runtime
has
to
support,
and
as
such,
I
I
probably
would
prefer
a
field
as
well
here
than
some
random
type,
that
we
now
also
have
to
type
forward
down
to
system.run
time.
That
seems
weird.
B
Well,
I
don't
think
we'd
actually
have
to
type
forward
it
because
we're
adding
it
in
this
in
f5.
So.
A
A
B
D
A
Yeah,
does
anybody
have
any
concerns
of
adding
it
to
runtime
features?
I
think
jan
basically
just
said,
let's
not
make
this
a
dumping
ground
for
all
new
compiler
features,
which
I
think
I
agree
with,
but
this
seems
more
like
a
runtime
type
system
constrained
which
to
me
honestly
belongs
to
runtime
feature.
D
Yeah,
because
f
sharps
are
also
going
to
need
to
check
for
this.
If
they
eventually
add
function,
pointer
support,
as
well
as
any
other
language.
A
Well,
true,
I
mean
that
doesn't
mean
it
has
to
be
this
right.
It
just
means
whatever
mechanism
we
envision.
Every
compiler
would
have
to
use
the
same
mechanism
for
that,
but
yeah
that
also
kind
of
makes
it
harder
to
explain
when
it's
like.
Well,
you
know,
for
these
one-time
features,
use
this
thing
and
for
these
other
runtime
features
use
this
other
mechanism.
That
is.
A
Yeah,
I'm
just
typing,
but
it
seems
runtime
type
systems
type
system
constraints
would
belong
to.
D
Here,
there's
also
one
other
compiler
attribute
request
for
that's
blocking,
which
is
the
add
native
integer
attribute,
I
believe,
fred's
the
secondary
reviewer
on
that
for
chuck.
D
Have
dinner
three
eight
six,
eight
three.
A
L
D
Right,
the
the
compiler
will
emit
it
itself
if
it
doesn't
exist,
but
that
can
you
know
that's
going
to
require
redefining
native
integer
attribute
in
any
assembly
that
defines
it.
So
it's
similar
to
the
other
similar
things
we've
done
like
for
nullable
and
other
bits.
L
A
L
A
So
basically,
the
bar
that
we
had,
as
we
said,
we
only
add
attributes
that
users
are
referenced
manually
because
that's
a
pain
in
the
ass,
so
they
have
to
copy
and
paste
the
definition
of
the
attribute.
So
everything
that
the
user
is
is
expected
to
put
in
brackets,
we
will
add
for
things
that
the
compiler
will
synthesize.
Happily,
we
basically
said
we
don't
care
and
we
ended
up,
not
adding
another
ball.
I
mean,
I
think
there
was
some
kind
of
metadata
upload,
but
I
guess
the
argument
was
it
doesn't
really
matter
because
it's
so
tiny.
A
B
Yeah
I
mean
they,
don't
they
don't
need
to
be
reference
equal,
I'm
I'm
messaging
chuck
right
now.
He
hasn't
seen
my
message.
Yet
I'm
not
exactly
sure
what
can
you
scroll
down?
Maybe
he
he
talks
more
about
why
he.
A
B
D
I'm
trying
to
pull
it
up
right
now,
but
most
as
far
as
I'm
aware,
most
of
them,
except
for
nullable,
we've,
actually
ended
up
adding
helpers
for
over
the
long
term,
just
because
it
it
allows
other
compilers
to
key
off
the
same
one
without
also
synthesizing
their
own
type
and
just
makes
things
overall.
D
D
I
believe
it
allows
you
to
encode,
so
so,
just
like
with
nullable,
you
can
put
it
on
a
higher
level
to
encode
to
encode
things
more
more
explicitly.
It
allows
you
to
save
on
metadata
bloat.
B
A
Yeah
so,
like
I
I'll
just
let's
say,
let's
just
close
it,
and
then
I
mean
if,
if
there's
a
reason
to
bring
it
back,
then
we
just
reopen
this
like.
I
just
want
to
avoid
like
holding
the
whole
meeting
hostage
on
this
one,
because
we
don't.
A
B
A
N
C
Should
we
wait
for
david
to
join,
let
me
ping
him
yeah.
C
Okay,
so
until
david
joins,
I
can
give
a
walk
through
of
what
we
talked
about
last
time
and
then
what
we
wanted
to
update.
So
if
you
remember,
we
had
for
the
logger
options,
we
were
using
interface,
icons,
log
formatter
options
and
then
we
were
going
to
use
a
base
class
instead.
So
that's
an
update
towards
the
bottom
of
the
c
ref
file.
C
That's
one
thing,
and
then
there
was
I
console
log
formatter
that
had
an
issue
with
like
we
wanted
to
see.
If
we
wanted
to
do
format
versus
right,
hi,
that's
one
of
the
feedbacks
and
I
think
the
third
feedback
was
so
with
this
new
set
of
apis.
Then
we
should
be
able
to
use
like
vt100
internally
until
the
bcl
system
console
apis
are
available,
and
then
we
can
internally
replace
what
we
have
implemented.
C
When
we
have
system
console
in
the
future,
let
me
see
if
david
joined.
K
K
C
There
was
a
overload
I
removed
that
we
were
using
this
interface
icon,
so
logger
options
so
now
that's
replaced
with
base
type
abstract
base
type
and
then
the
second
two
bullet
points
yeah.
If
you
remember
the
conversation
about
vt
100,
what
we,
what
we
talked
about
is
that
we
we
don't
want
to
expose
any
classes
or
types
in
order
to
write
logs.
A
A
C
A
A
M
C
C
Lower
at
the
bottom,
I
console
log
formatter
yeah,
all
right,
the
last
interface
you
see,
we
don't
we're
just
passing
down
a
text
writer
here.
O
C
Yeah,
so
these
are
the
usages
and
then
the
last
file
shows
the
existing
usage
and
how
it
you
can
compare,
how
it
could
differ,
but
yeah.
Basically,
you
can
either
do
line.
Three
builder
dot,
add
console,
which
is
which
would
be
the
existing
behavior
or.
C
Yeah,
so
you
can
specify
your
formatter,
so
we
have
this
line.
Seven
shows
a
new
property
formatter
name.
You
can
specify
any
of
the
three
built-in
formatters
default,
systemdr
json,
and
so
basically,
in
this
lines,
between
six
to
nine
you're
kind
of
configuring,
your
console
logger
options.
C
The
remaining
console
logger
options
are
deprecated.
So
therefore,
as
an
example
include
scopes
or
use
time
stamp,
they
would
be
formatter
specific
options.
So
then,
if
you
want
to
configure
them
you're
going
to
configure
them
with
the
formatter
so
line,
3913.
F
Oh
yes,
question
so
in
in
practice,
only
one
of
these
parameters
would
be
used
globally
for
the
application.
F
Why
do
we
have
both
add
methods
and
then
the
ability
to
set
the
current
parameter
instead
of
having
just
set
methods,
search
extension
methods,
so
you
would
call
set
default
or
like
apply
default,
console
logo
formatter
or
apply
json
console
logo
formatter
without
having
to
set
the
name
later
because
you
won't
be
using
like
registering
multiple
and
using
multiple
layers,
doesn't
make
a
ton
of
sense,
you'll
be
only
using
interior.
The
last
one
you
added
or
the
one
you
picked.
P
So
two
things
like
one
is
the
the
scenario
where
you
you
use
a
library
to
enable
more
formatters,
but
you
don't
turn
it
on
by
default.
You
can
imagine
in
azure,
then
offering
more
more
like
providers,
but
not
setting
at
the
same
time,
so
we
wanted
to
couple
adding
it
and
setting
it
just
in
general,.
P
F
P
Because
maybe
you
want
to
change
it
or
maybe
you
you
go
into
configuration
and
you
want
to
change
it
on
the
fly
to
be
something
else.
So
the
the
the
person
can,
the
person
doing
the
actual
consuming
and
the
person
doing
the
adding
or
are
sometimes
different,
but
so
that
that's
that's
the
first
thing.
The
second
thing
is,
if
you
call
I
formatted
without
calling
ad
console,
it
still
works,
so
these
methods
actually
short
shortcut
and
do
the
actual
setting
of
the
the
name
and
the
adding
of
the
provider.
P
F
P
B
F
P
P
F
Is
it
worth
renaming
the
method,
then?
So
you
don't
call
json
console
log
formatter,
you
call
json
console.log,
logger
or
json
console.
A
But
it's
true:
we
should
stop
staying
working
from
home.
I
should
stay
living
at
work.
All
right
did
we
change
anything
in
the
apis
or
is
that
still
the
same.
P
C
Because,
if
I
just
have
so
rather
the
feedback,
I
think
is
that,
rather
than
add,
json
console
log
formatter,
we
would
have
add
json
console
yep
and
then
so.
Basically,
the
last
three
x,
the
console,
logger
extensions
apis-
are
just
gonna.
Have
the
log
formatter
at
the
end,
remote,
like
it's
gonna,
be
add,
default,
console
log,
json,
console.log
and
add
system
console.log.
P
P
P
C
We'll
end
up
with
the
first
five
will
just
be
add.
C
A
P
C
Down
because
I
wanted
to
show
something,
as
with
there
is
a
in
this
usages,
there
is
one
with
add
console
log
formatter.
C
Yeah
so
usage
add
cons,
line
48,
even
though
we
don't.
As
pavel
said,
we
wouldn't
use
two
different,
add
console.log
formulas,
but
like
assuming
we
did,
then
you
would
also
need
to
do
add
console
because
if
it's
a
custom
formatter
you
have
to
somehow
specify
the
name
of
the
formatter
right.
F
A
P
These
these
lower
level
ones
are
just
doing
one
thing
in
instead
of
doing
the
combined
thing,
so,
basically,
the
the
lower
level
apis,
add
console.log
formatter
are
adding
just
the
format
to
the
system,
but
not
turning
it
on,
and
it's
basically
what
you
use
to
build
the
other
extension
methods.
On
top
of.
A
C
A
I
have
a
generic
for
the
options
because
it's
specific
to
me,
I
have
a
generic
for
the
formatter,
because
I'm
inheriting
some
other
formatter
and
where
I
basically
you
know,
do
the
tostring,
effectively
yep
and
so
the
other
extension
methods
are
implemented
over
the
one
that
takes
t
formatter
and
t
options.
Correct.
That's
right!.
N
A
P
A
A
But
it's
so
I
don't
think
people
will
accidentally
stumble
their
way
into
these
apis
and
then
get
like
lost
or
something.
But
I
feel
like
it.
It
does
add
value
to
group
them
together
because
it's
easier
to
explain
in
the
docs
if
you
say
well,
these
are
the
building
blocks
for
adding
to
the
console
stuff.
A
The
first
two
are
effectively
just
the
simple
ones
and
then
from
there
it
gets
progressively
more
advanced
right
and
I
think,
that's
probably
an
easier
story
than
trying
to
come
up
with
some
sort
of
convoluted
naming
convention
where
you
it
gets
because
you
run
out
of
names.
But
it's
this
java
problem
where
everything
is
in
manager
and
extension
and
plug-in
and.
P
It
does
a
bunch
so
like
remember,
we
added
overloads
and
we
added
like
a
bunch
of
methods
to
make
it
easy
to
write
a
logger
provider
and
get
change
tokens.
I'm
sorry
again,
and
I
options
that
was
that
was
that
that
was
wired
to
configuration
to
do
things
like
that.
It
does
the
same
kind
of
thing.
So,
let's.
P
C
So
if
there's
no
objection
with
like
the
usage
line
49
with
267,
then
I
don't
really
see
a
reason
to
add
the
add
console
of
t.
I
was
just
adding
it
just
in
case
there
is
feedback.
C
P
C
A
C
So
if
you
remember
console.log
formatter
options
is
the
base
class
and
then
json
and
default
console
logger
options.
Just
use
more
properties
extend
it.
C
Because
your
your
computer,
if
you
don't
have
the
last
three
years,
you
don't
know
how
to
you
can't
configure
default
json
or
systemd
options.
The
first,
the
second
ad
console
overload,
is
not
allowing
you
to
configure
formatter
options.
It's
just
configuring.
The
logger
options.
Q
So
one
thing
that
changed
is
a
bunch
of
the
options
on
the
console.
Logger
options
got
moved
out
into
the
individual
formatter
options.
That's
and
that's
what
I
think
at
default
console
would
be
configuring.
F
That's
yeah,
yeah
that
that
was
the
other
question
I
was
going
to
ask
is
how
what
what
do
we
do
about
back
compat?
Where
do
we
flow
these
old
options?
Do
we
flow
them
into
the
default
console
log
from
other
options.
C
So
so
like
for
backward
compatibility,
if,
if
someone
is
using
the
old
usage,
if
they're
specifying
on
their
console
logger
options,
let's
say
include
scopes
and
whatnot,
it's
gonna
bubble
itself
down
to
the
formatter
options.
If
it's
systemd
or
default,
it
will
put
it
on
whichever
of
the
two.
But
that's
just
I
think
just
in
case
this
is
just
so
that,
but
then
it's
still
going
to
be
deprecated
any.
It's
not
recommended
to
use
console,
logger
options,
deprecated
operators.
F
A
A
Like
you
know
the
formatter
name
and
the
format
itself
and
basically
leave
all
the
other
ones
as
is,
and
you
just
hide
the
ones
you
don't
want
to
promote,
and
then
you
make
all
the
new
ones
just
inherit
from
the
old
one,
because
that
has
fewer
moving
pieces
right.
You
basically
don't,
but
if
that's
not
what
you
want,
then
the
question
is:
why
would
you
not
obsolete
the
console,
like
the
old
console,
logger
options
in
the
old
ad
console
overload?
A
J
P
J
J
F
F
Is
confusion
with
like
two
having
two
types
now
better
than
confusion
we
would
have
had
if
some
loggers
didn't
support
some
options.
So
let's
say
json
logger
doesn't
support
timestamp
format
and
by
customer
system
some
formatting
it
doesn't
apply.
Customer
is
confused,
but
is
it
better
than
customers
seeing
two
option
types
and
like
having
the
set
of
fields
on
both
of
them?
So.
P
So
the
only
ones
that
wouldn't
apply
if
we
kept
the
old
one
and
we
didn't
do
the
new
one.
P
No,
the
so
what
we're
saying,
though,
is
imagine
we
just
use
console.log
options
as
the
base
type
for
replace
console
log
from
other
options
with
console
logger
options,
just
use
it
everywhere
as
the
base
type
and
then
deal
with
the
fact
that
that
some
things
are
weird.
A
Yeah,
I
think
I
understand
now
what
sharab
was
saying
like
it.
That
also
explains
the
naming.
Basically
you
you
basically
the
way
to
think
about
this.
You
you
have,
you
have
one
way
to
say:
where
does
the
data
go
and
then
there's
another
way
of
saying?
Okay,
how
should
the
data
be
formatted
right?
That's
why
everything
was
suffixed
with
log
formatter
right,
which
is
yeah.
C
F
F
F
Have
yeah
a
huge
opinion
here,
but.
A
C
Just
said,
options
yeah,
because
if
I
have
a
cust,
if
I
wanna
have
my
own
custom
formatter
and
it
has
a
property
called
my
custom
property,
then
okay,
so
then,
okay,
so
then
console.logger
console.logger
options
would
have
a
property
and
when
you're
exp
you're
you're
recommending
you
would
have
a
property
called,
let's
say,
formatter
options.
C
What
would
the
type
be?
Would
it
be
console
log
formatter
options
and
then
anyone
can
extend
their
own
yeah.
A
Basically,
what
I'm
suggesting
is
like
it's
supposed
to
split
so
like.
If
you
look
at
this
right,
you
basically
have.
This
is
basically
configuring
where
the
data
goes
right
and
then
this
is
basically
configuring
how
the
data
is
formatted
like
why.
Why
would
we
not
just
change
the
the
console
logger
options
to
effectively
have
properties
of
type
formatter
and
formatter
options,
and
you
basically
initialize
the
the
the
console
logo
options?
You
basically
get
to
say
what
it
looks
like
and
what
the
options
are
right
like
like.
A
A
So
what
I'm
wondering
is
like
like,
if,
if
the
so
let's
say
your
new
upper
console,
logo
options
right
and
then
there's
a
property
of
type
console.log,
formatter
options
and
console.log
formatter
that
you
just
did
literally
assign
into
these
options
yep
like
what.
Why
is
this
indirection
over
the
formatter
name
like
that
seems
like?
C
C
A
C
And
then,
if
someone
wants
to
set
up
their
options
right
below
formatter
name,
there's
formatter
options
with
inside
this
formatter
options
blob
you
there
could
there
that's
where
they
would
put
their
properties
right
and
it
doesn't
matter
yeah.
So
basically,
it's
gonna
pick
up
the
formatter
options
from
all
the
properties
inside
format,
options.
C
M
P
Tell
you
what
the
name
isn't
great,
because
the
name
doesn't
really
describe
what
what
it
is.
So,
if
anything,
could
we
somehow
expose
the
default
log
formatter
options
as
a
property
of
the
console
log
format
as
a
property
of
the
console
logger
options?
Does
that
make
sense?
I
still
still
keep
the
name,
but
then,
like.
A
C
Right
system,
so
so
console.log
formatter
options
default.
One
also
has
like
color
properties,
but
then
the
the.
But
then
we
have,
if
you
remember,
we
had
default
versus
systemd
and
then
systemd
was
simpler.
It's
just
one
liner
and
it
doesn't
have
colors.
So
that's
I
don't
know
how
to
explain,
but
is
that
is.
Was
that
your
question
you're
wondering
why
default
console
log
formula.
J
A
A
Yeah
and
basically
you
can
either
yeah
it's
basically
text
that
very
colorized
I
don't
know,
quotes
or
something
right,
but
like
yeah,
that
makes
sense
to
me,
then
the
other.
The
other
thing
I
would
suggest
is
strip
the
log
just
call
it
console
logger
and
console
formatter.
I
think
that
makes
more
sense.
Conceptually.
A
Enough,
I
mean
maybe
plain
I
don't
know
like,
but
basically
I
guess
what
sharav
was
saying,
I
think,
is
the
important
one
right.
It's
not
like
default
sounds
like
it's.
Some
sort
of
specialized
like
like
subset
kind
of
thing
when
it's
really
it's
a
very
particular
lock
format,
right
and
right.
A
O
O
A
C
A
J
A
O
J
O
E
A
J
J
A
Yes,
yeah,
because,
basically
you
have
two
options.
You
basically
have
two
ideas,
but
you
have
the
console
logger,
which
is
basically
controlling
how
it's
outputted,
and
then
you
have
the
console
formatter,
which
is
the
thing
that
controls
what
it
looks
like
and
right
now.
The
second
thing
is
just
extended
by
one
more
term
in
the
middle,
which
seems
odd.
C
May
I
also
add
console
logger
options:
pretty
much
everything
gets
deprecated,
except
for
a
formatter
name
which
gets
added
and
existing
property
called
log
to
standard
error
threshold
that
doesn't
get
deprecated,
because
it's
not
a
formatter
property.
It's
a
logger
property
and
just
wanted
to
point
that
out.
C
And
you
can
see
it
in
a
usage
as
well.
I
have
log
to
standard
error
threshold
property
how
it's
set
up.
It's
just
basically
set
up
the
old
way.
A
J
O
A
A
J
F
K
F
K
A
J
A
F
But
they
also
add
the
console
logger
right.
It's
enough
to
call
add
json
console
log
formatter
to
get
console
logging
with
the
right
format.
You
don't
have
to
call
add
console
in
addition
to
that
and
having
like
having
the
current
naming
makes
you
think
that
you
need
to
go
both
and
you
don't.
K
F
P
But
the
add
class
log
formatter
itself
that
one
doesn't
add
the
actual
that
one
doesn't
set
the
format
her
name
so
maybe.
A
Okay,
so
the
one
that
takes
the
formatter
and
so
the
t
format
entity
option
should
be
renamed
to
something
else.
Then.
P
A
A
A
C
There,
the
reason
is:
logger.log
already
takes
all
of
these
arguments,
except
for
maybe
the
text
writer.
C
And
then
I
I
tried
removing
the
scope
provider,
but
then
I
think
I
think.
C
F
L
P
A
O
F
F
N
A
Yeah
so
to
like,
I,
I
think
to
me.
The
abstract
task
is
kind
of
like
orthogonal
to
this
right
concern
right,
because
if
you
agree,
if
you
want
to
add
one
more
thing
to
it,
like
an
abstract
base,
type
has
very
similar
issues
where
you
would
have
to
add
a
new
write
overload.
That
is
also
virtual.
Now
everybody
who
overrides
the
old
one
still
gets
the
old
behavior,
so
plumbing
new
state
through
might
not
be
as
easy
as.
Oh,
you
have
a
struct,
and
you
add
one
more
property
to
that.
O
F
P
Abstractions,
I
think
it
should
go
into
the
yeah
into
abstractions.
Okay,
because
I
could
see
us
using
default
interface
methods
much
to
your
chagrin,
to
add
an
overload
of
log
in
theory
that
that
basically
unwraps
this
struck
and
calls
the
other
overload.
N
P
A
A
P
P
A
All
right,
so
here
are
my
edits.
Hopefully
this
all
looks
familiar
to
people.
P
E
N
A
E
H
E
L
A
I'm
I'm
not
good
at
compiling
in
my
head,
apparently.
P
D
D
P
D
The
there's
both
a
size
threshold
and
a
concern
for
if
the
struct
is
mutable,
if
it's
mutable,
then
you
may
incur
hidden
copies
and
if
it's
small
enough,
then
you're,
you
may
be
prohibiting
an
optimization
where
it
gets
passed
in
registers
aliasing
or
something
like
that.
D
D
On
linux,
a
a
struct
with
two
ends
will
be
passed
in
in
two
registers,
rather
than
being
passed
by
reference.
Yeah.
G
The
the
guidelines
as
written
are
don't
have
a
structs,
that's
bigger
than
24
bytes.
That's
public
and
don't
have
api,
that's
public
that
takes
variables
by
in
oh
cool.
Let's
keep
it
then.
F
G
G
H
P
D
C
D
G
Reference
type,
so
it's
it
has
both
right
should
be
the
same
as
it
should.
If
I
understood
when
yawn
explained
it
to
me
of
the
big
rules
that
got
dropped
down
to
simple
things
in
the
guidelines,
it
was
it's
essentially
a
flat
the
same
as
if
it
was
expanded
to
individual
parameters
in
a
method
call
so.
L
D
Likewise,
if
you
have
a
large
sequence
of
blittable
fields
following
each
other,
those
could
be
cindy
block
copied.
It's
not
required
that
they
be
individually
copied.
So.
L
L
D
T
state,
if
it
was
a
large
blittable
struct,
would
be
blitted
as
an
individual
field.
I
see.
H
G
Wait
if
I
understood
one
of
the
ons,
I
think
it
was
codis
that
I
had
this
conversation
with
essentially
or
my
understanding
is
on
linux.
We
don't
do
anything
clever
at
all
with
passing
strucks
by
value.
It
just
expands
them
into
fields
and
passes
them
one
after
another.
In
the
register
allocators
at
least
it.
D
D
If
otherwise,
it
will
be
passed
by
reference
if
it
can't
fit
into
two
registers
or
if
it's
not
a
hva
or
hfa,
which
gets
even
more
complicated
scenarios.
Likewise,
if
you
have
more
than
five
parameters
on
system
v
anything
past,
the
fifth
parameter
will
always
be
passed
by
reference
because
it
won't
fit
into
one
of
the
available
argument.
Passing
registers.
G
Okay,
okay:
this
is
just
how
we
came
up
with
24
bytes.
If
he's
like
four
ins
and
two
longs
are
very
different
and
four
ins
and
eight
shorts
are
very
different
and
hand
wave
call
it
24,
bytes
and
move
on
so
yeah.
D
P
E
A
A
A
P
A
K
G
D
Well,
what
I
I
don't
to
be
clear,
I
don't
think
t
state
should
be
passed
as
in
you've
got
no
clue
whether
t
state
is
actually
a
struct.
You've
got
no
clue
whether
it
like
it
could
be
just
be
an
int,
in
which
case
passing
by
n
is
worse.
It
could
also
be
a
mutable
struct,
in
which
case
passing
by
n
is
worse.
D
It
it
depends
basically,
the
way
it
works
is
log.
Entry
is
big
enough
that
it
will
always
be
passed
by
reference
anyways.
D
So
passing
by
in
given
it's
a
read-only
struct,
given
that
it's
always
going
to
be
over,
you
know
24
bytes.
In
this
case
it's
always
going
to
be
at
least
32.
Bytes
means
that
it
will
always
be
beneficial
to
pass
by
in.
E
A
P
A
P
Dangerous-Ish,
we
do
tell
loggers
that
you
shouldn't
you
shouldn't
store
t-state
anywhere.
That's
why
console
like
turns
into
a
string
before
storing
it
in
the
queue?
Because,
if
the
caller
that
does
want
to
reuse
the
object,
then
they
can.
H
H
L
P
A
F
I
O
A
So
I
mean
making
it
a
constructor
is
kind,
so
it
kind
of
depends
on
how
you
want
to
run
this
right.
If,
if
you
want
name
to
always
be
there
making
it
a
constructor
parameter
is
probably
slightly
like.
It
basically
forces
everybody
to
pass
it
in
kind
of
thing
right,
which
is
a
bit
annoying
when
you
derive
from
the
type,
but
but.
P
No
so
like
it,
it
isn't
a
problem
per
se,
because
you
would
basically
force
everyone
to
do
right
and
not
pass
in
the
name.
So
you
pass
the
name
to
base
yourself
and
then
your
constructor,
you
take
other
arguments
that
aren't
the
name
so
you're
forced
to
specify
name
when
you
call
the
base,
but
it
shouldn't
affect
di.
If
you,
if
you
didn't,
want
someone
to
make,
if
you
want
to
make
your
own
base
class
and
then
have
someone
provide
the
name,
then
that's
that's
the
issue
that
they
have
to
solve.
A
J
A
Yeah,
so
that's
my
general
pet
peeve
that
we
have
stopped
paying
attention
to
for
almost
all
new
features.
Now
so
like
I,
we
need
to
get
back
into
the
mode
where
we
think
about
the
assemblies
that
we
put
stuff
in
normally.
We
just
put
it
like.
We
just
broke
it
into
different
code
sections
and
said
this
is
assembly
a
disassembly
b.
A
G
P
P
K
P
G
C
A
So
this
would
be,
what
does
it
say:
microsoft,
logging
extensions
console.
P
Let
me
let
me
explain
the
intent
of
these
split
layering
things
so
like
originally,
when
we
were
doing
like
assembly
interfaces
and
all
this
stuff.
We
had
a
split
between
abstractions
and
implementations,
with
the
intent
being
that
you
share
this
package,
as
if
you
wanted
to
implement
logging
or
provider,
you
would
use
the
abstractions
and
it
contains
abstract,
abstract-based
classes
interfaces
enums
everything
required
to
implement
a
provider,
but
you
don't
need
the
implementations,
and
then
we
had
an
implementation
in
in
kind
of
a
we
had
implementation
assemblies
that
would
implement
the
spec.
P
Basically,
so
throughout
our
stack,
there's
a
pattern
of
like
abstractions
and
implementation
assemblies.
O
P
P
F
O
A
A
A
P
Q
A
A
M
K
A
P
O
L
O
K
A
P
L
A
So
when
we
talk
to
the
terminal
guys
last
week,
the
the
general
consensus
was
you
don't
want
to
do
that
because
it
highly
depends
on
other
things,
whether
it
makes
sense
or
not.
So,
for
example,
when
you
do
get
log,
it's
redirected
to
less
and
less
still
shows
colors
right.
So
like
it's
it's
basically,
the
general
pattern
is:
if
you
really
want
to
suppress
the
colors
like
there's
either
like
command
line
switches,
you
pass
to
the
thing
or
something
else,
but
you
can't
make
the
decision
necessarily
in
infrastructure
automatically.
O
Kind
of
the
difference
here
is
like
this
is
a
console
logging
right
like
if
you
wanted
to
do
some
other
kind
of
logging
like
serialog
or
something
like
that's
a
whole
different
formatting.
A
Yeah,
that
was
the
thing
that
I
also
asked
like.
It
seems
to
me,
like
that's
a
general
problem
on
linux
or
any
system
where
you
have
effectively
and
the
escapes
is
the
only
way
to
write
color,
because
it's
unclear
to
me
how
you
would
do
that.
But.
L
L
O
H
O
O
P
A
Yeah
the
number
one
goal
that
we
had-
we
just
we
just
didn't-
want
to
have
colors
being
also
part
of
the
abstraction
of
the
formatter
right,
because
that
would
that
would
make
it
complicated
right.
So
we
said
that
the
implementers,
basically
they
want
to
write
colors.
They
would
do
what
simple
console
formatter
options.
Do
they
basically
expose
an
option
for
that,
whether
they
have
colors
or
not?
A
Maybe
there's
also
more
configuration
options
like
what
color
you're
using
and
stuff
like
that,
and
then
they
basically
just
write
it
formatted,
like
nc,
escaped
to
the
underlying
logic
infrastructure,
and
then
we
do
nothing
with
it.
We
just
output
it
directly
to
the
console
unless
we're
running
on
windows
7,
in
which
case
we
filter
it
out.
O
A
That's
something
we
can
decide.
I
think
I
I
think,
I'm
okay
with
saying
you
don't
get
colors
at
all.
I
mean
it's
already
hard
enough.
P
That'll
be
a
change
I
think,
for
the
for
the
implementation
we
do
right
now
we
don't
try
to
interpret
the
acid
codes,
but
we
do
not
put
them
in
the
string
if
we,
if
we,
if
you
turn
colors
off
and
then
we
can
see
if
we
can
fit
the
whole
like
parsley,
acid
color
thing,
because
I
think
that's
the
big
piece
of
code
to
write
right
so
to
interpret
and
then
use
the
color
apis
in
dot
it
to
write
the
string.
K
B
O
The
console
api,
so
you
will
get
callers
today
on
windows
7..
Do
we
have
a
parser
like
in
parse
with
pt100.
C
C
L
No,
but
I
just
want
to
make
sure
I
I
understand
so
if
I
set
disable
colors
to
true
that's
controlling
whether
our
implementation
generates
color
codes
or
not,
and
then
in
our
implementation
of
something
when
on
windows,
seven
or
eight
we,
if
that
is,
if
somebody
else
has
generated
the
color
codes,
we
will
remove
them.
If
that
is
true,
did
I
understand
that
correctly.
A
L
C
So
so,
if
I
may
call,
when
you
have
console
formatter
and
then
the
console
formatter.right
whomever
is
writing
ilogger.log,
they
just
the
the
message
they
write
doesn't
include
antsy,
colors
or
anything
right
and
then
console
formatter
dot
right
internally.
What
happens
is
that
it
first
embeds,
antsy,
colors
and
then
parses
them
out,
so
that
so.
L
G
A
O
If,
if
you're
running
on
windows,
7-
and
somebody
has
an
app
that
uses
the
system,
the
simple
console
formatter
and
they
didn't
set
disable
colored
or
whichever
way
it
disables
that
color
it's
false.
If
it's
on,
if
colors
are
on
yep
right,
so
we're
on
windows
7
and
we
told
the
simple
console
formatter,
you
should
be
producing
colors
the
system,
simple
console
formatter
is
going
to
be
injecting
antsy
color
codes
into
the
string.
L
We
have
a
stream
of
data
coming
between
a
arbitrary
producers
and
a
consumer
and
we're
using
the
ansi
codes
as
sort
of
injected
into
the
stream
to
tell
the
back
end
when
it
should
be
doing
its
color
setting.
If
it
implicitly
supports
those
ansi
codes,
then
it
just
lets
them
pass
through.
If
it
doesn't,
then
it
removes
them
and
maybe
translates
them
into
something
else.
A
So
but
like
the
thing
is,
like
you
know,
the
the
simple
console
log
formatter,
sorry,
the
simple
console
formatter
we
control
correct
so
like
on
wind,
seven,
we're
not
obligated
to
use
the
the
the
nc
escape,
but
we
could
literally
just
say
you
know
if
you
are
running
on
win
seven
or
lower.
Even
if
you
set
colors
to
true
I'm
not
going
to
emit
them
because
we
can't
filter
them
out
yet
so
we
don't
have
to
just
let
them
through
right.
So,
like
I
think.
L
This
is
how
they're
proposing
doing
that
email
they're,
proposing
doing
that
by
injecting
the
codes
on
the
producer
and
stripping
them
out
and
reinterpreting
them
in
the
consumer,
because
it's
asynchronous
it's
the
right,
sir,
isn't
able
to
call
set
color
like
you
know,
console
dot,
set
color
right.
I
see
a
reset
color,
because
the
color
would
reset
by
the
time
it's
processed.
A
In
the
place
where
the
where
the
actual
output
is
being
done
is
too
far
away,
I
guess
that
makes
sense,
but
then
I
would
say
so
like
as
a
starting
point.
I
think
regressing
on
all
the
platforms
is
not
that
insane.
In
my
opinion,
like
that,
that,
like
I
mean
it,
might
not
be
ideal,
but
as
a
starting
point,
that
seems
reasonable
until
we
have
a
parser
okay,
I
mean.
A
A
Yes,
we
would
have
that,
but
the
problem
is
like
the.
It
depends
on
how
the
data
is
flown
right.
So
if
the
data
is
flown
as
a
string
and
then
later
on
is
actually
output
to
the
console,
like
you,
don't
have
a
convenient
place
to
replace
the
nc
escape
emitting
to
the
you
know,
set
the
console,
color
codes
and
windows
right.
You
would
have
to
reinterpret
that
data.
At
that
point,.
O
C
O
A
P
To
interpret
the
the
bytes
and
the
set
the
console
color
like
whatever,
but
but
I
don't
get
why
we'd
have
to
strip
ever,
I
feel
like
if
no
one's
producing
it.
When
would
you
have
to
strip
that
what.
A
No
stripping
would
be
in
the
case
where
you
say
globally.
I
want
to
have
to
turn
them
off
right
and
so
like.
Basically,
if,
let's
say
my
fancy,
emote
formatter
doesn't
have
a
disabled,
colors
property,
and
so
I
always
emit
ncs
case,
but
then
somebody
wants
to
say
I
want
to
redirect
this
output
into
something
readable,
please
strip
them.
I
think
it's,
it's
not
unreasonable
for
us
to
like,
if
you
already
do
the
parsing
to
have
a
global
turn
of
all
colors
thing,
that
is,
a
command
line,
switch
or
something
right.
A
I
J
J
A
A
G
L
If
we
were
just
talking
about
system.console
right,
system.console
doesn't
doesn't
like
on,
redirect,
doesn't
dislike
work
by
writing
and
then
stripping
out
the
color
codes.
It
just
doesn't
generate
them
in
the
first
place
right.
So
if
we're
just
talking
about
system.console,
there
wouldn't
be
any
stripping
it
would,
it
would
just
not
generate
them
when
it
shouldn't
be
generating
them,
and
it
would
generate
them
when
it
should.
C
A
L
A
A
Yeah,
I
guess
the
high
level
thing
is
like
whatever
we
do
for
console
is
not
part
of
this
feature,
and
it's
orthogonal
right
like
we
can
either
do
something
like
what
stephen
suggested
or
what
I'm
thinking
but
like
at
the
end
of
the
day.
It's
just
a
completely
different
design
that
it
sits
on
top
of
console.
A
Well,
I
don't
think
we
would
ever
support
an
arbitrary
command
line,
switch
for
any
app
right.
I
think
the
best
you
would
do
is
you
would
say
whatever
command,
I'm
parsing,
you
do.
You
can
accept
the
flag
and
then
call
the
console
api
that
says
strip
colors
or
something
right
like
I
have
a
hard
time,
imagining
that
we
would
pre-process
the
command
line
before
we
give
it
to
user
code.
That
seems
weird.
L
A
A
O
L
No,
not
necessarily
like
this.
My
point
is
this:
whole
thing
needs
to
be
designed
because
likely,
what
would
happen
is
the
cli
ends
up
setting
that
environment
variable
or
app
context
switch
or
whatever
it
ends
up
being
and
that's
respected
by
the
core
system,
and
then,
like
my
point,
is
my
concern:
is
we
were
developing
like
an
individual
component
without
having
designed
what
the
whole
experience
is?
That's
all
I'm
saying.
K
But
I
expect
some
other
people
is
already
doing,
that
I
mean
it's
not
it
doesn't
have
to
be
our
libraries
but
other
apps
or
others
and
libraries
I
mean
non-microsoft.
Libraries
is
doing
that.
I
mean
like
parsing
or
or
formatting
the
vt
100,
and
they
will
end
up
with
the
same
situation
anyway
right
it
doesn't
matter
what
we
are
going
to
design
at
the
end.
A
Well,
I
guess
I
mean
depends
on
what
you
mean
by
this
and
that
right,
like
I
mean
so,
this
is
one
argument
here
which
says
we
have
this
feature
here.
Where
we
talk
about
logging
in
the
construct
of
asp.net
and
or
I
should
say
in
the
context
of
microsoft,
extensions
and
whether
you
can
suppress
colors
or
not
right,
and
then
there
is
the
orthogonal
thing
which
is,
you
know,
can
I
turn
off
colors
entirely,
for
you
know
the
net
tooling
experience
which
would
now
probably
require
some
low
level
plumbing
in
console
that
this
interacts
with.
A
If
you
assert
this
feature
exists,
then
probably
you
would
design
this
feature
here
slightly
different
by
saying:
oh,
we
don't
actually
do
our
own
stuff,
we
just
plug
into
console
and
do
the
right
thing
there,
and
I
think
that's
that
argument
I
buy
the
question
is:
what
would
be?
What
would
we
do
differently
in
this
feature?
O
O
A
A
O
A
A
A
They'd,
so
in
that
case
I
would
say
yeah
so
the
way
we
would
set.
We
basically
did
my
so
we
wouldn't
check
for
win7.
What
we
would
check
for
is
is,
are
the
other
virtual
terminal
codes
enabled
for
the
console
session
you're
in
or
not
okay,.
J
I
I
don't
know
why
we're
going
on
about
the
regression
and
behavior,
because
I
think
miriam
said
she
has
an
implementation
for
parsing
it
already.
So
I
think
it's
this
I
feel
like
this
is
a
moot
point.
This
conversation
we
only
use
like
four
chords
right
now
background
and
foreground
color
set
reset.
I
think
at
least,
to
functionally
support.
Our
current
behavior
is
straightforward.
K
J
A
Yeah
I
mean
like
the
good
news,
is
vt
really
isn't
a
super
well
defined
thing
right?
It's
this.
You
know
loosely
defined
spec
that
people
adhere
to
right,
but
in
that
sense
it's
always
somewhat
hand-wavy
and
if
you
say
we
only
do
background
and
foreground
colors,
I
don't
think
that's
entirely
unreasonable,
like
my
bigger
concern
with
these
kind
of
things
is
that
we
have
a
prototyping
implementation
but
like
how
hardened
is
that
like?
Are
we
sure
that
it
performs
well
I'll?
Be
sure
that
we,
you
know,
don't
accidentally?
A
Have
you
know,
issues
really
parsing
correctly
and
then
I'll
put
garbage
like?
Are
we
willing
to
put
up
that
stuff
on
our
implementation,
for
what
amounts
to
basically
supporting
people
and
all
the
operating
systems
like
it
seems
like
we
go
out
of
our
way
to
make
the
experience
good
there,
which
is
generally
not
what
we
do
right
like
it's,
not
that
we
specifically
went
over
all
the
way
to
any
other
colors
for
win7.
We
just
got
it
for
free
by
implementation,
happenstance,
right
and
all
the
implementation
changes,
and
now
it's
actually
a
cost
to
maintain.
A
So
that's
why
I
personally
think
it's
a
starting
point
to
say
we
don't
give
you
colors
on
win7
like
if
you
want
to
have
the
best
experience
you
have
to
be
on
the
latest
operating
system
and
if
somebody
complains
we
can,
then
you
know
do
the
proper
thing.
But
you
know,
as
derek
said,
the
proper
thing
will
probably
be
more
than
just
foregone
and
background
colors
right
and
and
then
we
wouldn't
actually
design
the
end
to
end.
For
that.
O
Q
O
C
For
the
very
least,
the
parser
would
just
parse
the
background
for
foreground,
the
ones
that
it
already
supported
before
this
change
and
then
reset
color
and
that's
it
and
then
it
would
skip
any
other
nc
code.
I
mean
sorry
any
other
facilities.
L
C
O
A
O
A
Yeah,
so
they
do
the
translation,
basically
right,
so
so
that
means
basically,
the
parser
is
only
kicking
out
for
low
for
for
for
older
platforms,
which
seems
fine,
like
I
mean,
let
me
put
this
way
like
I
personally,
don't
care
so
much.
I
would
not
go
to
my
to
turn
it
off
either,
but
I
was
just
pointing
out
that
there
is
an
extra
cost
that
we
take
on
and,
generally
speaking,
whenever
we
talk
about
parsing.
A
That
is
not
super
trivial
to
get
right
right
and
like
usually,
we
want
to
bake
these
things
and
all
I'm
asking
is
like.
Are
we
willing
to
to
take
this
on
like?
If
engineering
team
feels
happy
about
the
implementation
they
have,
and
we
are
thinking
it's
rock
solid
enough
to
ship
it
then
yeah.
I
would
not
go
to
my
way
to
kill
it
right.
I
would
not
just
jump
to
the
conclusion
that
we
need
to
have
it
because
we
happen
to
have
colors
before.
J
J
K
J
F
J
F
Sorry
there.
F
F
A
F
F
No
just
call
like
add
more
apis
to
the
text
writer
that
would.
A
F
A
A
Yeah,
I
guess
that
one
is
something
that
we
can
do,
though,
right
because,
as
travel
said
like,
if
you
already
have
an
implementation
that
basically
buffers
that,
then
it's
just
a
basically
a
private
handshake
between
implementation
of
the
simple
console,
formatter
and
the
back
end,
and
given
that
we
control
both
ends.
That
does
not
seem
completely
insane
right
like
it
doesn't
have
to
be
part
of
the
public
api
because
they
can
trivially
downcast.
The
text.
Writer
to
you,
know
our
internal
text,
writer
with
awareness
or
whatever
right,
and
that's
just
an
internal
implementation
detail.
L
Maybe
I'm
I
mean
we're
in
implementation,
detailed
territory
now,
but
maybe
I'm
misunderstanding,
my
understanding
was
the
reason
that
things
were
being
proposed.
The
way
they
were
was
because
we
wanted
a
single
basically
by
stream
handoff
between
the
producers
and
consumers.
If
I'm
understanding
correctly,
this
would
add
a
dedicated
second
one
is
that
true.
A
L
A
L
A
J
J
C
I
think
if
it's
implementation
detail,
I
can
share
my
share
the
shared
after
the
call,
and
as
so
long
as
it
doesn't
affect
the
api
proposed
right.
A
Yeah
I
mean
to
me
it's
more
like
that's
what
I
was
asking
earlier
like.
Would
the
api
change
in
any
meaningful
way
here
like
it
seems
we
will
still
support
the
existing
mechanism,
which
had
a
way
to
disable
colors,
and
currently
we
only
have
colors
effectively
in
one
place,
and
the
only
thing
that
we
change
here
is
basically
to
say
if
the
json
console,
formatter
or
the
or
any
other
formatters
want
to
emit
colors.
They
do
so
by
embedding
nc
escapes.
C
How
about
to
simplify
it
and
rather
than
having
a
disabled
colors
property
on
simple
console?
Formatter
options
remain.
That
would
remain
on
console
logger
options.
So
if
disable
callers
is
false,
then
we
kind
of
regress
whatever
I
mean
not
necessarily
regress,
it's
just.
If
it's
disabled,
then
no
parsing
happens.
Anyways.
L
I
I
have
a
unix
question
that
does
potentially
impact
the
api,
or
maybe
it
won't
so
system.console
goes
out
of
its
way
to
use
whatever
ansi
escape
codes.
The
current
terminal
says
are
the
right
ones
to
use,
so
it
parses
the
term
info
file
for
the
current
terminal
and
uses
that
language
to
compute
the
right
strings
to
output
for
given
colors.
L
A
L
A
K
L
K
L
Right-
and
I
guess
I'm
just-
I
just
want
to
make
sure
that
we're
not
going
to
end
up
on
certain
terminals
and
maybe
it's
a
legacy
concern.
Maybe
it
doesn't
matter
with
any
terminal
that
anyone
actually
uses.
I
just
want
to
make
sure
we're
not
going
to
spam
it
with
control
quotes.
It
doesn't
understand.
A
Existing
yeah
I
mean
so
the
other
question
I
have
is
so
like,
echoing
what
mariam
proposed
or
what
I
thought
she
proposed.
What
if
we
moved
the
disabled
colors
to
the
console,
formatter
options
base
type
and
allow
any
formatter
to
honor
that
so
that,
if
I
write
my
own
json
console
formatter,
that
is
colors,
I
can
just
query
the
the
property
that
is
part
of
my
own
custom,
struct
or
my
own
custom
class,
and
then
we
can
say,
like
everybody
should
should.
A
J
A
A
K
A
Yeah,
I
guess
my
general
assumption
is
that,
like
a
formatter
would
not
put
an
arbitrary
on
the
escapes
right,
like
you
know,
move
carrot
left
move,
carry
it
up.
That
seems
pretty
useless
in
a
formatter
right.
What
you
would
normally
do
is
like
colors,
and
you
know
formatting,
like
the
you
know,
bold
italics
underline
whatever
they
support
in
vt
right,
but
that's
kind
of
the
extent
to
which
you
would
expect
the
formatter
to
use
nc
escapes
right
like
what
else
would
you
do
like.
K
K
A
A
K
A
A
J
B
C
So
then
it
would
be
just
an
extra
thing
that
says
disable.
What's
it
called
like
skip
parser
or
something
it
would
be
something
on
its
own,
not
related
to
disabled.
J
A
Well,
I
guess
yeah
I
mean
to
me
skip
parsing
is
kind
of
like
you
control
what
happens
at
the
base
here.
Basically,
what
we
are
proposing
is
you,
you
change
what
people
put
into
the
pipe
right
so,
instead
of
us
parsing
them
out,
you
basically
tell
everybody,
don't
put
them
in
the
first
place.
If
you
do
it's
a
bug
on
your
end,.
A
Which,
I
think
is
fair
right,
I
mean
like
it
seems,
generally
bad
to
do
work,
and
then
you
know
us
being
on
the
hook
to
remove
it
later
right.
That
seems
weird.
A
A
E
J
So
I
think
I'm
extrapolating
a
little
bit
here,
but
the
primary
use
for
colors
is
when
people
look
at
the
console
like
both
with
json
and
system
d,
they
aren't
meant
to
be
human,
readable
formats,
they're
meant
to
be
machine,
readable
formats,
so
that,
like
you,
know
you
plug
them
into
some
other
logging
system.
So
colors
are
usually
not
like
that
valuable.
There.
A
I
guess
the
downside
is,
if
you
don't,
if
you,
if
you
put
it
in
the
base
and
the
verse
that
can
happen,
is
it
doesn't
apply,
but
everybody
will
use
the
same
property
physically
right.
If
you
don't
put
it
in
the
base,
then
you
basically
ask
everybody
who
does
colors
just
follow
the
pattern
right,
which
is
not
bad,
but
it's
just
that's
kind
of
what
happens
right
and
people
will
probably
not
do.
That
it'd
be
my
guess.
A
A
Like
I
am
personally
fine
with
it
like
it's
a,
I
think
we
have
enough
of
the
discussion
happening
with
colors,
that
I
think
we
clarified
the
behavior
that
we
want,
and
so
my
understanding
for
behavior
that
we
want
this-
that
we
will
basically
say
we
will,
on
our
end
either
use
the
the
parser
that
you
currently
have
on
win7,
or
we
would
just
tell
people
like
to
disable
the
colors
by
default,
or
we
will
do
it
manually
right.
A
But
these
are
the
two
options
that
we
have
and
it's
kind
of
up
for
the
engineering
team
to
decide
whether
you're
happy
with
the
with
the
strip
that
you
have
for
win7.
And
if
you
feel
like
you're
happy
with
that,
then
it's
okay
to
say,
yep.
The
only
thing
you
handle
is
what
we
currently
put
in
from
our
end,
which
is
foreground
and
background
color,
and
that's
the
only
thing
we
handle.
O
K
J
I
I
should
add
one
thing:
the
reason
I'm
a
little
watered
because
I
don't
think
it's
just
windows
7.
There
are
a
lot
of
places
where
they're
embedded
consoles
that
I
don't
know
the
behavior
of
like
the
output
window
and
bs
or
the
you
know.
The
f5
window,
vs
launches
the
embedded,
console
and
vs4
I'd
be
worried
if
all
those
common
targets
actually
support
nc
consoles,
which
is
why
I'm
hesitant
to
lose
the
functionality.
A
A
A
Should
support
that
already
so
then
the
only
other
thing
is
the
the
vs
code,
one
and
he
said
like
they
basically
supported
ncs
case,
because
that's
kind
of
the
only
thing
that
makes
sense
for
them.
So
I
think
it
really
boils
down
to
cmd
and
yeah
cmd
effectively
on
windows.
Okay,.
A
O
A
So
minor
setting
is
a
registry
setting
basic
controls.
What
the
default
is
for
processes
you
spin
up
in
cmd
but
like
if,
like
in
the
process
in
that
you
basically
can
set
the
cert.
You
know
what
is
it
set
terminal
mode
or
whatever,
and
you
can
set
terminal.
You
know
vt
100,
enabled
or
something
right,
and
if
you
set
this
in
cmd,
it
should
do
the
right
thing
and
my
understanding
was
that
sorry,
what
who's
going
to
do
it.
K
A
A
Is
if
you,
if
your
process
now
gets
launched
in
cmd,
I
don't
think
it's
unreasonable
if
we
set
it
by
default
in
modern.net,
and
then,
if
you
don't
want
this,
we
give
you
an
opt-out
from
doing
that,
but
it
seems
like
like.
Why?
Would
you
not
want
to
do
that
like
realistically,
what
I
understood
from
rich
is
the
only
kind
of
applications
that
don't
want
to
have
that
are
some
sort
of
legacy,
applications
that
have
some
weird
legacy:
behavior,
where
the
output
of
the
console
is
parsed
by
some
crazy.
A
O
A
A
O
A
J
A
J
A
So
like
that's.
Why
that's
why?
Basically,
by
which
said
you
should
turn
it
on,
because
the
only
case
where
you
want
to
run
an
existing
app
in
that
environment
is
because
well,
this
is
some
sort
of
like
as400
interrupt
thingy
that
just
doesn't
work
otherwise,
but
like
that's
generally,
not
the
case
for
any
app
written
in
the
last
15
years.
A
K
A
Yeah
I
mean
like
that's
something
we
should
probably
talk
to
the
windows
guys.
My
understanding
was
that
the
desire
or
the
need
for
this
should
be
so
low
that
it
might
not
even
be
worth
it
like,
for
example,
in
in
windows
terminal.
I
don't
think
you
get
to
turn
it
off
ever
like
windows
terminal
only
works
this
way.
So
that's
why
I'm
not
sure
that
we
need
to
support
that
either.
A
F
A
J
And
then
so,
the
apis
on
the
screen
and
from
an
implementation
side
will
enable
like
vt
parsing
on
the
windows
terminal.
Assuming
the
windows
team
like
recommends
it,
and
there
are
no
other
side
effects.
K
O
A
Yes,
so,
like
that's,
maybe
very
misspoke,
I
think
my
understanding
from
from
which
was,
if
you're
on
wind
10.
You
should
never
do
any
parsing
yourself,
because
even
if
it's
off
they
do
it
for
you.
So
the
only
so
the
only
area
where
you
would
have
to
do
any
processing
yourself,
because
the
the
terminal
can't
handle
vt100
is
basically
when
what
is
it
when
it,
when
eight
or
lower
or
something
right.
O
K
A
O
O
E
O
A
O
N
O
C
O
It
wouldn't
be,
I
I
don't
think,
that's
a
logging
decision.
I
think
that
should
be.
That
should
be
an
all
up
like
if
you
run
a.net
5
app,
should
it
turn
it
on
or
not
so,
even
if
I'm
not
using
extensions
logging,
if
I
start
stuffing
ansi
console
codes
to
the
console,
should
it
start
turning
into
colors.
O
A
Sounds
good
all
right,
so
basically
the
four
things
is
then
we
said
implementers
of
I
console.
Formatter
should
use
vt100
for
color
decisions
on
wind7.
We
still
want
to
show
colors,
not
vt100,
escape
sequences
on
windows.
10
plus
we
want
to
see
colors,
not
vt
100
escape
sequences,
even
the
vt100
processing
is
off
and
then
there's
the
last
one,
which
is
should.net
5
by
default,
enable
vt100
processing
all
right.
So
I
think
that
captures
everything
we
set.
Then.
L
If
there
is
a
decision
made
that
dot
net
5
should
set
that
mode,
I
think
that
goes
beyond
this
library
like
that
needs
to
be.
Yes,.
O
A
O
J
S
h,
I
r
h
a
t
t.
I.
A
Gprc,
like
the
reason
I
set
it
up
for
the
afternoon,
was
because
of
james
newton
king
because
he
lives
in
new
zealand.