►
Description
Rust es un lenguaje que tiene fama de ser difícil de usar. ¿Cómo podría ser si pudiera ignorar sus restricciones de diseño? En esta charla exploraremos código que no compila en Rust, veremos las razones por la cual no es aceptado, que se puede hacer en cambio y cuánto puede cambiarse el lenguaje para permitirlo.
https://rustfest.global/session/58-el-lenguaje-que-no-es/
English: https://www.youtube.com/watch?v=OobZdCxO4DA
C
B
But
I
insist
very
good,
so
if
you
want
to
follow
it
well,
you
know:
reimold
is
on
twitter
and
well.
We
are
going
to
continue
with
the
next
talk,
I,
don't
know,
well,.
What
can
I
say
to
the
state?
Very
good
talks
and
I
think
this
is
going
to
be
very,.
Very
interesting.
I
was
reading
a
little
about
what
he
is
going
to
talk
about
and
the
incorrect
code
that
Fernández
Federico
was
commenting
a
while
ago
in
the
first
talk,
so
he's
going
to
be
with
us
right
now
there
is
vancouver.
B
C
I,
am
this
vancouver,
as
you
mentioned
just
now,
I
am
a
member
of
the
rast
compiler
team
and
main
engineer
in
the
rush
platform
team.
We
were
in
web
services
today.
I
want
to
talk
about
a
language
that
does
not
exist,
or
rather
about
the
language
you
will
want.
Nobex
I
am
going
to
give
examples
of
things
that
ras
does
not
allow
and
try
to
explain
why
what
we
can
do
as
an
alternative.
How
drag
would
look
if
it
allowed
those
things
and
finally
speculate
on
the
possibility
of
us
changing
the
language
to
allow
them?
C
If
you
are
looking
at
this,
you
probably
already
have
some
experience
with
raster.
The
language
has
a
reputation
for
being
difficult
to
learn
and
it
is
a
valid
observation.
Learning
rast
can
be
difficult.
It
has
many
new
concepts
and
the
rules
of
the
cracker
smudge,
although
they
seem
simple,
when
one
is
learning
them,
they
turn
out
to
have
complexity
and
subtlety.
In
practice.
C
Part
of
this
difficulty
comes
from
the
restrictions
that
the
language
has
rast
has
to
provide
free
abstractions
to
achieve
executables
with
low
energy
and
high
memory.
Consumption
performance
also
aims
to
minimize
the
risk
of
bugs
occurring.
These
two
requirements
cause
the
language
to
have
to
be
more
explicit
than
others.
C
First,
let's
take
a
code
example
in
python.
If
we
move
it,
it's
pretty
easy
to
understand.
Even
if
you
don't
know
the
language
They
give
an
idea
what
this
code
does,
if
we
transfer
it
innocently
to
rast
and
the
compiler
will
not
be
happy.
This
code
is
missing
a
lot
of
things
to
be
valid.
The
arguments
have
to
have
a
type,
the
return
type
if
it
is
not
present
in
the
unit,
so
we
also
have
to
put
something
there.
C
C
C
C
The
type
parameters
work
very
differently
for
are,
or
for
the
case
java,
these
use
a
monopolization
process,
a
fancy
word,
which
means
the
compiler,
looks
at
all
uses
of
this
function.
With
these
engineer
type
parameters,
the
machine
code
for
each
combination,
it
sees
effectively
copies
and
pastes
to
the
same
function,
multiple
times
replacing
the
parameters
with
the
types
that
were
used.
This
makes
the
generated
executable
as
fast
overall
as
possible
at
the
cost
of
more
compile
time
and
taking
up
more
space.
A
final
executable.
C
C
Here
we
find
ourselves
in
one
of
those
situations
in
which
rasta
prefers
to
be
explicit,
because
the
compiler
could
see
that
all
the
types
that
all
the
function
uses
and
implements
display
and
allows
it,
but
that
would
mean
that
the
function
epia's
contract
is
implicit.
Changes
to
the
function
body
could
cause
changes
to
the
contract
and
existing
code
to
suddenly
stop
working
or
allow
code
to
what
should
be
rejected
is
accepted.
C
C
About
that
trace
requires
trade,
bound
specific
annotations
that
restrict
the
types
that
can
be
used
when
calling
the
function
now
With
this
code
that
you
can
see,
the
compiler
can
know
that
the
argument
x
is
always
going
to
implement
display
and
when
finding
calls
to
the
function,.
All
it
has
to
confirm
is
that
the
argument
used
has
a
type
that
implements
display.
C
C
C
They
allow
one
to
change
implementations
during
execution,
for
example,
to
obtain
a
single
implementation
of
an
algorithm
while
different
types
are
passed
to
it,
because
all
the
algorithm
has
to
know
is
how
to
find
the
corresponding
methods
in
the
virtual
table
in
memory.
The
virtual
table
is
a
pointer
to
the
real
value
and
another
pointer
to
a
list
of
all
the
methods
that
value
has,
with
a
consistent
format.
No
report,
no
matter
what
type
the
actual
value
has.
C
This
gives
a
lot
of
flexibility,
but
comes
at
a
cost.
Now,
every
time
we
call
a
method
on
the
trade
object,
the
executable
has
to
chase
pointers.
The
position
of
the
data
in
memory
can
be
scattered
around
everywhere.
Making
execution
slower
modern
compilers
can
help
here
by
turning
the
virtual
calls
into
the
same
code,
one
would
have
with
mono
moore
type
parameters
attached,
but
in
general
the
cost
is
paid
on
the
other
side.
In
most
cases,
the
speed
that
provides
memorization
is
not
necessary,
so
we
can
use
straight
options.
C
C
C
As
programmers,
we
can
transform
the
bound
function
into
a
method
by
adding
a
method
self
which
is
then
not
used
by
the
implementation
for
associated
types.
The
most
complicated
situations,
any
representation
of
types
would
require
evaluating
types
at
run
time,
not
at
compile
time
something
rast
is
not
currently
able
to
do
would
be
a
capability
that
leaves
more
questions
which
answers
and
would
require
a
lot
of
work
to
be
able
to
implement.
C
C
C
C
C
But
what
would
the
language
be
like
if
you
had
facilities
for
this
pattern?
A
proposal
that
has
circulated
is
the
implementing
in
ams
anonymous.
This
would
allow
restricting
the
types
accepted
as
arguments
or
returned
by
a
function
to
a
group
of
heterogeneous
types
and
since
all
available
types
are
a
closed
group,
that
is,
the
compiler
knows
exactly
what
types
are
possible,.
Unlike
trades,
the
compiler
would
automatically
provide
the
implementation
of
display.
If
I
was
var
so
much
in
this
example,
they
implemented
it.
C
This
change
wouldn't
be
revolutionary.
None
of
this
has
too
much
implementation
complexity.
I
can
bet
something
similar
to
this
is
going
to
exist
in
the
future,
and
if
you
look
at
the
syntax
that
I
am
proposing
here,
we
can
see
that
there
is
a
direct
relationship
between
32,
open
algebraic
groups
and
closed
algebraic
groups
with
the
same
concept,
but
with
different
uses.
C
But
while
one
is
experimenting,
all
these
details
are
irrelevant.
All
one
wants
to
accomplish
is
to
explore
the
possible
designs
one
may
want
to
arrive
at
may
want,
depending
on
the
domain,
one
is
working
on,
and
that
is
the
reason
why
languages
like
pay
are
in
which
you
have
a
lot
of
freedom
in
what
you
can
represent,
despite
resulting
in
code
that
is
perhaps
less
robust
or
easy
to
maintain
are
so
popular.
C
What
could
we
do
to
bring
closer
trace
to
payton
in
this
axis?
The
anonymous
miners
would
be
useful,
but
it
was
still
enough
because
we
do
not
also
have
inference
in
the
signature
of
the
functions.
Well.
Road
rash
is
very
conservative.
The
places
that
make
you
different
ticos
nowadays
it
is
only
in
the
body
of
functions.
We
have
a
strong
rule
that
language
effects
have
to
be
localized.
Changing
a
piece
of
code
in
a
module
shouldn't
cause
other
unrelated
code
to
break.
C
C
C
By
changing
a
little
as
a
topic,
a
common
request
is
to
be
able
to
use
variants
and
nancy
directly
as
types
nowadays.
What
we
do
when
we
need
this
is
to
create
a
new
extract
with
the
corresponding
data
in
the
variant,
but
in
the
future,
I
think
it
will
be
possible
that
we
can
use
the
direct
variant
of
the
variant
well,
I
say
directly
as
if
it
were
a
type.
C
C
C
C
One
of
the
cases
we
see
most
often
causes
confusion
for
people.
Learning
rast
is
the
number
of
types
that
represent
text.
I
am
not
going
to
go
into
details
on
this
topic.
It
would
be
a
whole
talk,
but
knowing
that
there
are
strings
lights
and
heap
al
ok,
tenzing
one
can
make
the
argument
that
the
default
string
type
should
have
been
copyright.
C
This
type
allows
that
having
two
license
strings
and
wanting
to
mount
them
immediately
becomes
a
hit
for
what
you
screen.
Abstracts
us
from
having
to
differentiate
between
the
two
personally
I.
Don't
think
it
is
a
change
that
is
going
to
occur
in
the
language
because
being
able
to
identify
when
we
are
allocating
memory
and
when
we
are
modifying
in
local
memory,
is
very
important
for
high
performance
programs,
but
at
the
same
time
it
could
become
easier
to
convert
from
a
strings
light
sogipa.
What
there
is
of
swing
to
a
copy
write.
C
One
of
the
great
advantages
of
enams
is
that
one
can
make
patán
matching
with
pat
in
maxim
on
the
values
is
the
language
ability
that
I
miss
most
in
other
languages.
that
do
not
they
have
it,
but
it
is
not
perfect
for
such
a
machine.
It
allows
extracting
a
field
that
is
deep
within
a
type,
but
as
soon
as
we
have
to
go
through
a
field
that
is
some
type
of
container,
we
have
a
problem.
C
We
cannot
continue
using
it
for
such
a
machine.
It
does
not
matter
if
xbox
arch
er,
yes,
nowadays,
what
one
does
is
write
more
code
and
let
network
auto
work
in
knightley
for
the
box
type
in
particular,
there
is
a
special
syntax.
I
have
used
it
often
in
a
compiler,
and
it
is
useful,
but
it
has
no
stabilization
path.
At
the
moment,
however,
there
is
a
project
to
allow
them
to
pass.
C
C
The
reaction
in
the
inheritance
support
answer
is
almost
always
how
you
are
telling
me
loading.
No,
it's
not
a
joke.
Rast
doesn't
support
inheritance
for
several
reasons.
Some
practical
others,
philosophical
the
main
one
I'm
going
to
mention,
is
the
famous
diamond
problem
in
which
the
tree
of
classes
from
which
it
inherits
has
multiple
paths
to
the
same
source.
Some
languages
have
an
algorithm
strict
for
superclass
member
resolution.
C
C
Ras
doesn't
give
us
a
choice
of
using
inheritance,
but
composition
is
always
available
where
we
put
the
superclass
in
a
field,
but
no
language
support
for
inheritance.
Every
time
we
want
to
call
method
x,
we
would
have
to
specify
the
full
path
in
this
example
may
not
seem
too
annoying,
particularly
because
there
are
only
two
levels,
but
in
the
long
run,
if
it
gets
annoying
and
difficult
to
use
as
your
code
gets
more
complex.
C
This
is
where
language
capabilities
that
do
exist
can
help.
If
you
ever
wonder
why
string
slice
methods
are
available
in
a
value
of
type
string
escrow,
it
is
probable
that
they
have
learned
about
self-reference
in
each
expression
from
which
we
access
a
field
or
method
of
a
value.
The
compiler
will
first
try
to
find
it
on
the
corresponding
type,
but
if
it
does
not
find
it,
it
will
try
to
add
or
remove
borrowings
and
if
it
still
doesn't
find
the
method.
C
C
This
is
very
useful
when
we
want
to
abstract
a
bit
objectively,
what
type
we
are
interacting
with
without
needing
to
be
explicit
or
expensive.
Conversions
is
the
reason
why
lend
borrow
from
a
jeep
to
the
ok
of
spring
returns,
an
english
endpoint
and
also
allows
us
to
emulate
the
experience
of
using
inheritance.
C
C
Of
course,
with
trades
too,
there
are
other
ways
to
represent
functionality
dependencies
using
super
trade
bones.
This
is
similar
to
how
inheritance
works
in
other
languages,
but
we're
not
just
inheriting.
This
is
a
to
Music].
A
version
of
that
baby
is
implemented
on
top
of
something
that
also
implemented
a
case.
That
It
seems
very
personal
to
me,.
It
is
that
of
traders,
do
not
bother
dealing
with
the
egress,.
It
is
an
implementation
of
a
problem.
C
C
C
To
close
I
want
to
talk
about
cloud
by
calling
cloud,
we
are
constantly
reminding
ourselves
that
we
are
copying
memory
and
its
origin
of
many
problems.
When
experienced
people
start
to
learn
trace,
we
cannot
avoid
trying
to
eliminate
unnecessary
clowns
when,
in
reality,
cloud
has
nothing
to
do
with
efficiency.
C
C
C
C
A
C
Probably
what
I
would
try
to
do
is
help
clearer
and
all
the
people
who
are
working
on
using
the
store
to
achieve
parity
in
the
formula
that
we
show
the
errors,
because
the
compiler,
when
one
when
you
call
it
from
the
terminal
there
is
a
lot
of
effort
to
make
it
look
understandable,
no
matter
what
level
of
experience
stores,
but
at
rastan
online.
It
is
beyond
that.
It
makes
an
impressive
effort
to
be
very
useful.
C
Unfortunately,
the
presentation
does
not
have
the
same
quality
nowadays.
Part
of
that
is
the
entities
that
visual
studio
code
provides.
Do
not
allow
us
to
do
that.
There
are
some
alternatives
that
I
have
explored,
but
that
would
imply
a
lot
of
work
to
be
able
to
have
the
scouts,
and
that
would
be
the
first
thing
that
I
would
like
to
be
able
to
work
on
making
the
experience
in
haiti
even
better
than
in
what
is
in
the
terminal.
Also
things
like,
for
example,
to
have
to
make
the
compiler
a
state,
meaning
that
it
has
memory.
C
C
A
C
A
C
C
C
For
the
moment,
one
is
created,
a
lot
of
previous
work
has
already
been
done
and
there
have
been
a
lot
of
conversations
in
those
conversations
they
also
happen,
sometimes
in
hewlett
between
people
who
are
part
of
the
different
teams.
Although
there
is
the
tee
compairé,
the
compiler
team,
there
are
also
working
specific
groups
for
different
different
things.
For
example,
there
is
a
working
group
for
5,
so
there
is
a
group
of
people
who
are
dedicated
to
trying
to
make
using
and
zinc
in
rast
the
best
it
can
be.
C
We
know
that
it
is
not
today,
but
we
try
to
improve
each
time.
Incremental
and
other
of
these
conversations
happen
in
the
hallway
at
conferences
like
this
or
in
chat
rooms.
Sometimes
someone
has
an
idea,
and
it's
left
hanging
around
in
someone
else's
head
and
reappears
six
months
later,
with
solutions
to
some
of
the
problems
that
were
originally
identified..
So
it
is
very
organic,
but
I
insist
if
they
want
to
be.
If
someone
listening
to
this
wants
to
be
part
of
these
internal
conversations,
two
roland
topor
and.