►
Description
Discussion for Chapter 2: Compilation of the book Ruby Under a Microscope.
A
D
Hello:
everybody
welcome
to
the
ruby
under
a
microscope
book
club
meeting
on
december,
8th
at
3
o'clock,
pacific
time,
how's
everybody
doing.
D
Great
excellent
cool:
what
did
everybody
think
about
the
reading
this
week
talking
about?
Was
it
compiling
and
interpreting
ruby
programs.
B
D
E
E
A
D
Yeah,
I
noticed
that
too,
that
optional
arguments
and
keyword
arguments
both
had
looked
like
extra
overhead,
where
it
had
to
look
stuff
up,
but
yeah
not
sure,
like.
I
think
they
talked
about
that
a
little
bit
in
the
earlier
group,
which
was
actually
last
week
just
like
whether
or
not
it
would
make
sense
to
do
some
sort
of
cache
of
the
sort
of
byte
code
that
it
writes.
D
So,
like
they
kind
of
mentioned,
how
python
has,
I
guess,
dot
pi
c
files
that
it
creates
that
kind
of
cache,
the
sort
of
compilation
of
python
to
whatever
and
whether
that
would
make
sense
for
ruby
or
not?
And
the
conclusion
was
that
there's
probably
not
enough
optimization
going
on
in
the
compiler
to
make
it
worthwhile
but
yeah.
I
don't
know.
D
I
don't
know
how
that
affects,
like
things
like
keyword,
arguments
where
the
more
sort
of
sophisticated
of
features
that
they
put
in
there,
the
more
overhead
you're
going
to
incur
probably
using
those
sophisticated
features.
D
Yeah,
I'm
sure
the
ruby
core
team
would
have
taken
that
into
consideration
when
making
the
feature,
how
much
it
would
potentially
slow
down
a
program.
D
Probably
both
I
don't
know,
I
don't
know
how
long
it
takes
to
either
compile
down
to
those
instructions,
or
once
those
instructions
are
compiled
down
to
the
byte
code
that
the
vm
understands
like
how
long
it
takes
to
actually
run
those
instructions
versus
how
much
extra
memory
they
might
be
taking
up
or
any
sort
of
memory
optimizations.
That
might
be
possible
if
it
sees
other
keyword,
arguments
that
are
similar.
I
don't
know
if
it
can
kind
of
like
compress.
D
E
B
It
was
a
very
dry
chapter,
like
you
said
it
did,
make
me
appreciate
again
kind
of
the
magic
of
what
happened
with
ruby,
where
I
was
trying
to
think
back
to
like
the
1.8
to
1.9
migration.
I
don't
remember
any
like
any
migration.
I
had
to
do
myself,
I
kind
of
just
like
swapped
in
and
now
we
were
compiling
everything
and
nobody
even
really
noticed
it
was.
It
made
me
impressed
with
that
again.
E
D
So
what
I
was
kind
of
wondering
is,
since
they
started
the
chapter
by
saying,
ruby
1.8.
Let's
see
basically
like
interpreted
straight
onto
the
c
code.
If
I
remember
right,
whereas
in
ruby
one
nine,
we
had
a
virtual
machine
that
we
then
create
a
sort
of
byte
code
to
the
ruby
virtual
machine
I
was
wondering
is
that
basically,
just
like
a
different
type
of
machine
language,
like
does
the
virtual
machine?
D
Allow
you
to
have
like
to
specify
your
own
machine
language
that
you're
going
to
kind
of
compile
down
to,
and
I
just
thought
it
was
really
interesting
that
it's
still
after
going
to
the
yard
instructions.
It
still
has
to
interpret
to
see
and
then
go
to
machine
language.
So
I
just
feel
like
I
was
adding
an
extra
step.
Yet
somehow
it
sped
things
up
which
is
really
interesting
to.
D
C
C
C
I
I
just
feel
it's
quite
strange
that
I
assume
that
we
need
the
tree
structure
to
be
able
to
like
do
the
work.
But
here
it's
we
first
convert
a
rubiko
into
a
tree
structure
and
then
we
come
right
back
to
the
flattened
instruction
set.
So
my
assumption
is
probably
not
true
yet.
D
Yeah
there
are
a
couple
lines
in
here,
so
I
don't
know
what
page
this
was
because
for
whatever
reason
my
kindle
book
just
has
like
locations
but
not
pages.
So
sorry,
I
can't
guide
you
to
the
exact
page,
but
it's
under
the
heading
ruby,
one
9
and
2.0
introduce
a
compiler
there's
a
few
paragraphs
in
it
says
the
primary
reason
for
using
yarv
is
speed.
Ruby,
1.9
and
2.0
run
much
faster
than
ub
1.8
due
to
the
use
of
yar
of
instructions
like
ruby,
1.8
jarv
is
an
interpreter,
just
a
faster
one.
D
C
D
Yeah
and
then
my
comment
on
this
next
one
was
just
interesting
because
I
didn't
know
what
else
to
like
say
about
it.
But
jarv
is
a
stack,
oriented
virtual
machine
and
I
was
like
okay,
which
means
when
yar
executes
your
code.
It
maintains
a
stack
of
values,
many
arguments
and
return
values
for
the
year
of
instruction.
D
A
D
Happening
good
question
because
there's
this
dashed
line
arrow
that
says
interpret
between
the
yar
of
instructions
and
the
sea
and
I'm
guessing
ruby
being
an
interpreted
language
that
feels
like
the
point
at
which
it's
interpreting
it
so
yeah,
maybe
if
you're
in
irb
and
you
write
something,
does
it
actually
go
through
these
top
four
things
and
then
interpret
it
through
c
and
give
you
back
the
results
or
yeah
like
I
guess,
yeah
as
you're
writing
lines
in
irb,
like
what
all
processes
is
it
doing
every
single
time
you
hit
return.
E
D
Yeah
yeah
and
what's
interesting
about
that,
is
the
idea
of
the
development
rails,
environment
versus
a
production
rails
environment
where
in
production
it
caches
classes
which,
maybe
that's
just
the
normal
ruby
way
of
of
compiling
it,
whereas
in
development
it
lets,
you
add
things
to
a
class
and
it
will
sort
of
reinterpret
that
on
the
fly.
Somehow.
C
Always
like
modifiable,
so
you
wouldn't
reload
the
class,
but
you
will
add
stuff
and
overwrite
parts
of
the
class
when
we
define
something
again
for
the
class.
D
C
So
ruby
have
to
re,
generate
a
list
of
method
tables
and
he
slows
the
application
down.
So
I
think
I
think
that's
part
of
location,
but
you
can
always
be
invalidated.
So
it's
another
concern
to
add
new
things
into
the.
C
A
Points
the
like
the
thought
that
goes
through
my
head
is
just
like
my
javascript
mind
is
like
oh
we're
dealing
with
trees
like
maybe
it's
like
react,
and
you
can
invalidate
part
of
the
tree
based
on
what
changes
and
that's
what
allows
faster
reloading,
because
you
don't
have
to
recompile
the
entire
tree
somehow.
But
I
don't
know
it's
just
a
random
thought.
D
Yeah,
that's
an
interesting
thought
I
feel
like
so
like.
I
guess
my
example
would
be
if
you
just
write
a
plain
ruby
file
and
you
kind
of
load
that
up
through
you
know,
ruby,
you
know,
run
whatever
file
and
it's
just
sort
of
like.
D
Maybe
it
runs
through
your
program
and
it
has
sort
of
a
redevelop
type
thing
going
on
in
it.
While
that's
running
in
the
console
or
in
the
terminal,
you
can't
go
into
the
file,
make
changes
and
expect
those
changes
to
show
up
in
your
live
running
program.
Right
like
it
will
have
already
gone
through
those
four
steps,
interpreted
the
whole
program
and
then
run
it,
and
just
because
you
change
stuff
in
the
file.
D
C
D
D
That's
kind
of
what
I'm
thinking,
so
that's
probably
why
development
is
so
much
slower,
or
at
least
always
perceived
as
slower,
because
it's
constantly
sort
of
reloading
files
and
I'm
wondering
if
it's
just
like
always
reloads
files,
every
request
or
if
it
only
does,
if
it
detects
it
changed
to
a
file.
But
anyway,.
D
Yeah,
I'm
sure
that
someone
could
find
a
way
to
attach
something
to
one
of
these
one
of
these
steps
that
would
like
output
a
counter,
so
you
could
actually
see
what's
happening
each
time,
but
it's
not
me.
D
I
also
thought
it
was
really
interesting
going
back
to
kind
of
the
kind
of
keyword
arguments
and
that
whole
line
of
thought
about
optional
arguments
and
block
parameters
and
the
rest
arguments
all
of
that
stuff.
It's
kind
of
interesting
that
it
sort
of
just
added
them
on
like
arg
feels
like
the
thing
that
was.
There
has
always
been
there
and
then
these
other
ones
were
sort
of
like
an
afterthought,
which
is
maybe
just
exactly
how
it
happened.
D
B
Yeah,
I
think
the
keyword
arguments
is
one
of
those
things
that
was
very
much
like
an
afterthought
and
they
kind
of
seeing
how
they
had
they
had
to
implement
that
it
seems
like
it
was
a
little
hackish,
I'm
not
saying,
there's
a
better
way
to
do
it,
but
yeah
that
was
just
like
they
worked
it
into
the
design
of
the
language
after
the
thought.
After
the
fact,
yeah.
D
B
D
B
D
B
D
D
Cool,
well,
I
think
we
are
over
time
for
our
get
together
today,
it's
great
to
see
everybody
and
see
y'all
again
next
week,
or
maybe
some
of
you,
I
don't
know,
see
how
it
goes
with
holiday
plans
and
all
of
that.