00:00:23.199
so so I'm always sorry about that so to waiting for you so
00:00:30.519
Ruby typing so this year I'm going to talk
00:00:36.800
about the types and
00:00:42.200
then various type are related to the Ruby so
00:00:47.680
warning so this talk is highly technical so you are not supposed to
00:00:54.719
understand part of them but the very important part is not
00:01:00.120
technical so I will emphasize the the important nontechnical part so don't you don't have to worry about that so let me
00:01:07.720
talk about
00:01:13.159
types blood types so the mankind has some kind uh
00:01:19.880
several types of the blood types the most famous one is the AO
00:01:25.320
systems uh AO system is uh the our blood
00:01:30.479
type according to have the factor a and Factor B
00:01:36.159
so the we have four types of the blood types in Avo systems so the blood type A
00:01:43.439
which who the people of the blood type A has the factor a and the people with the
00:01:51.000
blood type B is uh uh Factor B and uh blood type AB has both factor a and
00:01:58.399
Factor B and blood type does not have either blood uh factor a and factor
00:02:05.280
factor B so we are class all humankind
00:02:11.080
are classified into this four category four blood
00:02:16.160
types the do you know your own blood types no no
00:02:24.480
so very uh funnily so all Japanese
00:02:30.319
uh almost all Japanese uh know their blood types According to some St
00:02:37.720
Superstition uh we Japanese most of us believe the our blood types influence
00:02:44.200
our personality so the our personality can be classified according to our own blood
00:02:51.360
types for example the blood type A is a kind of the organized personality he or
00:03:00.239
she loves to make everything organized and bl typ B tends to be
00:03:10.480
Optimist then so he has uh he or she has
00:03:16.239
very uh bright Viewpoint to toward the future a
00:03:22.920
blood type A B since they have the both factor a and Factor B they have some
00:03:29.799
kind of the Dual personality so the he or that people with blood type AB has
00:03:37.760
some sometimes organiz very organized and sometimes very optimistic and blood type
00:03:46.360
O people with blood type O don't care about small things I'm happen to be blood type
00:03:54.480
O it's kind of like a fortune telling and we have the cycle iCal effect named
00:04:00.920
the burnam effect which is the people tend to believe vague and general
00:04:06.120
descriptions of their personality so so if you were a blood
00:04:11.519
type A and then you were told okay you blood type A you are very organized
00:04:16.600
person yeah you have you should have The Very Organized personality so you are
00:04:23.120
very easy to believe that kind of your personality description so do do you believe
00:04:30.800
it maybe not that's okay the important point is I'm blood type O and I don't
00:04:38.800
care about the small things and I don't want to care about
00:04:45.479
small things uh things should just work in a personality influence design
00:04:54.199
since I design Ruby things should just work
00:05:00.600
and I want to getting getting job done and let things is better and I really
00:05:06.680
really believe in the sness is power as the Paul gram once uh told
00:05:15.039
about the the his idea of programming language so the Ruby design of Ruby is
00:05:21.800
highly influenced my influenced by my personality the dynamic types is one of
00:05:27.560
them uh Dynamic type means the values have types but expression or variable
00:05:35.440
does not have types so that is dynamic types so in in description of the type
00:05:42.120
system we have the two dimensional
00:05:48.520
uh aspects like the static versus Dynamic there are static types
00:05:53.880
programming languages and a dynamic type of programming language now the example of the static type language is the Java
00:06:00.520
Scala or hcal or C they are static type of language and Ruby uh Small Talk
00:06:08.039
python uh lisp or other programming language a dynamic type and the other
00:06:14.120
aspect is the strong verse weak some programming language are strong that
00:06:19.639
means the the types cannot be
00:06:25.160
uh change changed or
00:06:31.319
and converted automattic automatically or weak that you can break the time
00:06:36.880
system in some way so the example so the Ruby is a strong Dynamic
00:06:44.199
type programming language and the power or is a weak Dynamic program type
00:06:50.639
programming language the H scale and other static type uh programming language uh strong static uh type
00:06:58.919
programming language and programing language like C which can cast pointers to other type of pointers
00:07:06.599
so you can easily break uh memory access so these are weak static programming
00:07:14.280
languages so the dynamic typing leads to design policy which is a dark
00:07:20.800
typing so remember this picture last year duck typing this is very important
00:07:27.440
factor in programming language like Ruby so dark typing means not this one typing
00:07:35.440
dark that means if it works like a do Walks Like a dock and a qus like a dock
00:07:41.319
it is a dock this is a very important uh principle in Ruby
00:07:47.479
so if so if let me
00:07:55.639
see it's a duck because it qus like a duck
00:08:01.360
it's a duck just because it's working like a duck right this is duck typing so
00:08:07.960
uh we don't care the internal detail of the data we just uh we just care about
00:08:17.240
how it behaves so in doct typing we do not classify like animal M hum type
00:08:24.440
things uh do not check types we just ask object to be
00:08:30.039
behave so we don't care about inheritance we don't care about the structure we just care about how it
00:08:38.159
behave so we can ignore inside detail so
00:08:43.279
we ask computer this to dispatch so pick the proper method or the process the
00:08:50.120
they want for that particular object so we don't want to care about small things
00:08:56.640
so things just work so so for example
00:09:02.040
so do typing like this so suppose we
00:09:07.120
have the function named log which has the two arguments uh we the first one is
00:09:13.720
the destination to Output the log the second one is the message to print in a
00:09:20.920
log so if uh we have the static types of programming language we it it should be
00:09:26.839
called like this log DSD destination which is IO and message which is string
00:09:35.920
right but uh what if we want to redirect uh your blog message into a
00:09:44.720
string so in Ruby we have the something named string iio so you create the
00:09:51.240
string iio object then uh call log uh standard iio as a destination
00:10:00.160
then STD iio H string iio string retrieves the input
00:10:06.760
strings so this this is quite easy the important point is string iio is not a
00:10:13.760
subclass of iio nor they have common interface or engine
00:10:20.480
that they have no relations but in Ruby it works like magic just because uh string iio
00:10:30.120
even though sing iio does not have any relation direct relation with
00:10:35.160
inheritance or interface but uh it it has same method set to iio so it's just
00:10:45.320
behave like I an IO so string IO Walks Like a dock works like IO the qus like
00:10:53.000
IO so it is IO it is dark typing right but the static type version
00:11:00.079
which is this one so this one says IO here here so it
00:11:08.279
if it's string iio is passed since string iio is not a sub class of iio it
00:11:15.480
refus to compile it refused to compile so the this way this kind of program is
00:11:23.959
prohibited in static types programming language so type version doesn't work as
00:11:31.279
I we expected because string I doesn't have common super class or no inter
00:11:36.519
interface to iio so string type check fails at long time compile time I mean
00:11:43.160
and then compared to that duck typing or dynamic typing allows you to ignore
00:11:49.760
internals just behave you can focus on behavior of the object so look so you
00:11:57.079
don't have to care about internal or inheritance tree or anything so we you
00:12:02.839
just care about how it behave so it has lower mental cost in
00:12:08.360
development so dog typing is open for the future so you don't know so when you
00:12:15.839
uh create the you when you define the log function so you you don't have to
00:12:23.480
decide about the future so you you just care about how it behave so the in the future you might
00:12:31.560
want to redirect your log message into the standard IO any or any other IO like
00:12:37.800
object but so it is open for the future so that means the do dark typing
00:12:45.720
enhance the flexibility but uh you know dynamic typing has some
00:12:53.399
drawbacks so Dynamic typing does not check type in compile time
00:12:59.800
so the errors especially type errors only F in R
00:13:05.440
time and then so and uh often you get very bad error message like undefined
00:13:13.040
method F in NE class or something like that so you know it is quite difficult
00:13:19.160
to understand in especially in runtime and then you have coverage
00:13:24.839
problem so the unless you have the 100% cover test so you may miss the some kind of
00:13:33.560
the type error in your development uh in on the contrary the
00:13:39.760
static type program programming language so type check has done in compile time
00:13:46.240
100% coverage so you at least you your compile success
00:13:52.720
you you you can be sure your uh your
00:13:57.920
program doesn't have any type mismatch errors and uh the most the last but not
00:14:07.079
least is the less documentation the the type system type description uh itself
00:14:13.720
can be worked as a uh the do documentation so the in Ruby or any
00:14:21.240
other program Dynamic type of programming language we often like write like this so the call the calculate
00:14:28.600
factoral number it takes integer then then returns integer
00:14:34.560
so it's a type so it it it brings me some kind of
00:14:42.320
the contradiction so I don't want to specify types just because know the the programs
00:14:49.839
without any type notation just works so in that Viewpoint the type
00:14:57.000
notation type description is redundant so you
00:15:02.560
know I don't want to care about small things so for me type notation is small
00:15:08.519
things I don't want to write that but I don't want to specify types
00:15:14.839
because by specifying types we restrict we refuse future uh flexibility F uh we
00:15:24.240
are close to Future enhancement but at the same time
00:15:29.959
the when we provide our code to others
00:15:35.519
we need documentation for users so if we put type information in
00:15:42.639
documents it's kind of like a static typing with the enforcement so you write
00:15:48.040
you write type notation type description anyway like uh like a previous example
00:15:55.279
like this you write type anyway and but this is a mere comment so this is
00:16:02.199
not enforcement this is not type check this is not compart time check so that's
00:16:07.920
that's worst of both world
00:16:15.040
so no compare time check so here's the room for improvement for future
00:16:20.959
really so we don't want to write types but we want to have some kind of type
00:16:27.240
information from uh from code but uh we are Engineers
00:16:32.839
fundamentally so we try to solve problem with Technologies so so let me think about
00:16:39.959
the solution okay the one candidate is static typing with type inference type
00:16:47.440
inference is nice so you so by inference from code you can have the type
00:16:54.920
information but uh you don't have to write it but uh but still static typing L
00:17:01.519
flexibility as I explained before and there are some programming
00:17:06.679
language that introduce the gradual typing or optional typing which is say
00:17:12.199
for example the groy has options uh static typing or typescript has the
00:17:19.400
similar things optional uh typing system or gradual types of system so the these
00:17:26.640
uh so you add several uh you type description in some
00:17:33.799
part of the program but it's not the mandatory so you can drop if you don't
00:17:39.039
want to or you can put any as type
00:17:45.240
description but uh the they are fundamental static the partly static the
00:17:52.039
rest is dynamic so so since it is optional you you w have the 100%
00:18:01.000
coverage and since it's static so you lack of flexibility as I explained
00:18:07.240
before so it's also the worth of both
00:18:13.159
world so I don't want like so the optional
00:18:19.520
static typing share same drawbacks of the static typing system so what we want is something
00:18:28.280
similar to static typing but that as dark typing so du typing is very important uh
00:18:37.559
policy and very important in Ruby so we want to keep
00:18:43.280
that at least I want to keep that and then but uh static typing is
00:18:48.960
good especially compile time uh check is pretty
00:18:54.080
nice so what shall we do so the think about that static typing
00:19:01.000
with do typing so I look for I look for uh many programming language yeah I'm a
00:19:07.799
programming language geek so I studied about a lot of lot of programming languages so there there
00:19:15.120
is a language with static typing with du typing which is
00:19:21.039
go uh go programming is kind of like this so the focus on the log function
00:19:28.159
definition so DST take two uh two arguments then write
00:19:35.840
to the dstd and then this is type
00:19:41.600
then this is type definition the log DST is the anything which has the right
00:19:50.880
object a right method can be considered as a log DSD
00:19:56.919
you don't have to be uh subclass of anything or you don't have you don't
00:20:02.600
have to share common interface so just you have the right method this is only
00:20:13.080
requirement so the any type even uh IO
00:20:18.120
or string IO or anything which has the right method can be applied to the log function this is do typing and this is
00:20:26.799
with st typing this is quite nice uh they call it a structural sub
00:20:33.039
typing so but uh you can add inference to go
00:20:40.679
with so in the ideal go you can drop off the type
00:20:48.240
notation so function dstd and message the dstd should have the right method
00:20:56.000
and uh you can call uh that method with message so you can
00:21:04.240
generate the DSD you can read dstd type
00:21:09.400
of dstd should have a right method so right takes one argument with message so
00:21:16.760
with this information you can generate interface from code so from this code
00:21:23.960
this is the the ideal uh my own version of goal and then you can generate this
00:21:30.360
version of the current goal so if go something like this could
00:21:40.400
be possible in in go a language like go so the language like Ruby can similar
00:21:49.000
things I call it soft typing so soft typing is a type system
00:21:54.760
defined by Behavior so type is defined by the defined by a set of methods and it's
00:22:02.919
they are the argument types and uh thus so infer types do not have names
00:22:11.919
so many people including static type up camp so tends to Define class with a
00:22:21.080
name but you don't have to worry about type
00:22:26.120
type names so the I want to express that this type of this
00:22:33.279
argument or type of that argument or something like that you don't have to name it so you can generate the
00:22:40.760
anonymous uh interface so you don't have to worry about names just because you know the
00:22:48.720
makeup the the proper name is pretty heavy task in programming right so the
00:22:56.279
if you you can avoid naming them so it's much easier
00:23:02.600
for for a brain and then you can uh put stay the vague ideas in your brain
00:23:09.200
remain vague so the type system the soft type
00:23:14.840
systems like should be kind of
00:23:20.200
database so you can retrieve uh type of an expression so here's the variable a
00:23:26.559
that what you can ask type of that expression that variable
00:23:34.240
then you can the the type retrieve type as an object so you can check
00:23:40.320
compatibility between types okay this type of the the argument under this type
00:23:46.320
of expression so are they compatible so you can check the
00:23:51.679
compatibility so if it is they are compatible the you you will not see the
00:23:58.240
any type error but if they are in incompatible they're not compatible so
00:24:05.080
you will see the compart time type error so and then you can check if a
00:24:10.960
type has a specific method like a okay this type do does this type has a method
00:24:18.600
named F or something so the important point is the
00:24:23.760
soft typing do not challenge uh 100% coverage so the current Ruby without any
00:24:31.679
static type system just works right so the if the type can be uh if type can uh
00:24:41.600
type can be inferred from the your code so that's okay you can check in static
00:24:46.640
type static type system but if you don't that's okay just four box uh just four
00:24:53.480
box of dynamic typing so the 80% compart time check is far better than the
00:24:59.240
0% right now so it is easily follow back to Dynamic typing so we are not trying
00:25:06.360
to 100% compatible in addition this is still the concept but
00:25:13.159
we can use the Run type runtime type information so for example the you write
00:25:19.279
test right right you write
00:25:24.399
test then you you are test system should not have
00:25:30.679
any type error right so you can write you can execute the your test with the
00:25:39.080
you know the type error correction mode so you can correct the type of information running when you during the
00:25:46.279
the test the executing test executing test then
00:25:52.679
uh you can build type database from your source code and then in the future you can sh
00:26:00.520
your type database with your gem so that you can uh the your users of your gem
00:26:06.880
can use that kind of type information generated from the test execution so by using these database you
00:26:16.360
can have the more accurate compile time type check so it'll be
00:26:24.039
awesome and but unfortunately this is mere concept but
00:26:29.919
you can use it now but it's still mere concept but uh it's a it's a part of the
00:26:37.880
Ruby 3 project we have a lot of things to down to Ruby Ruby 3 but uh the this
00:26:44.360
kind of soft typing so the soft typing which is a static typing kind of soft
00:26:50.360
typing the you can check that you typing type error in in compile time without EX
00:27:06.399
of the self typing in Ruby 3 that is my
00:27:12.760
hope and dream the important message
00:27:18.320
is we care about you we care with you so the Ruby is
00:27:26.440
pretty nice the most of us love Luby right I force you to say
00:27:33.880
that so most of us say love Ruby just because Ruby care about you Ruby cares
00:27:40.399
about you so Ruby try to reduce your burden in your development the mental
00:27:47.399
burden or Ruby restore joy in your
00:27:53.360
programming so when you when you were a child then started programming
00:28:00.200
everything was fun even in the basic or
00:28:05.880
assembler but uh as you grow
00:28:11.200
you you pick the programming as a job or
00:28:16.840
responsibility so you have to care about many things so you make you make money out of
00:28:24.200
programming so the joy is getting
00:28:29.840
less enjoyable the programming is less enjoyable the joy is
00:28:36.080
decreased the the day by day but Ruby tries to restore that kind of
00:28:42.519
Joy just because Ruby tries to reduce your
00:28:47.679
burden that tries to uh joy in your programing just because Ruby cares you
00:28:54.600
just because we the designer or developer of Ruby the language care
00:29:00.799
about you so we care about how you feel during the programming we are willing to
00:29:07.600
improve a development experiment that sometimes results just
00:29:13.120
because it fails to find your uh type error in compile time or it's or it's
00:29:21.080
it's their document is less descriptive compared to the other programming
00:29:26.679
language but uh we are uh despite of the current state
00:29:33.279
status so we are willing to improve your uh development experience so we are trying so we are
00:29:41.720
sick of claims like a ruby is dead rail's dead Ruby's old and
00:29:49.080
then I don't care as long as we are
00:29:54.399
improving actually I care I try not not to
00:29:59.760
care they they hurt but uh actually I try not care as
00:30:05.840
long as we are moving forward as long as we are moving forward we the the Ruby is
00:30:11.919
keep uh is moving forward rubies is moving forward the the every Ruby
00:30:17.559
version every year we release a new Ruby last year Christmas we released 2.3
00:30:24.200
which has the Improvement keeping compatibility and uh we are going to release 2.4 this
00:30:32.399
year and it will be uh it will improve
00:30:37.799
uh your experience your programming experience and uh that kind of improvements keep goes on then gradually
00:30:46.559
into ruby3 so you may ask when will Ruby 3
00:30:52.279
come actually I don't know I'm sorry so my
00:30:58.799
hope is we will see Ruby 3 in this
00:31:08.399
decade yeah before the Olympics in
00:31:15.480
Tokyo but it's only my
00:31:20.720
hope so we will we'll try making the Ruby 3 we will other Ruby 3 the soft
00:31:27.279
typing and the three times F will three will be three times faster compared to the rual
00:31:33.399
all and then we will add some kind of real concurrency in the language but
00:31:40.440
the we have lot of things to do do and uh we have lot of things to be done and
00:31:47.919
we need more resource we need more power so you have to wait for
00:31:53.799
years I'm sorry but we wish your input and
00:31:58.919
contribution to keep moving forward we have to keep moving forward to survive
00:32:05.360
to make you happy and then we will uh improve the situation by working
00:32:12.279
together as a community so rails will be improved rails five will come so that we
00:32:18.919
will uh they will add many new things to improve uh the development experience
00:32:25.720
and uh as a platform the Ruby language will be improved and
00:32:33.039
then we will add many things to improve your uh development experience
00:32:43.679
experience by the way uh really to fall so this year we were
00:32:50.320
going to be releas really to point for uh hopefully as a Christmas present this
00:32:56.960
year as usual last week we we released the Ruby
00:33:03.000
2.4 preview one in that the rubby 2.4
00:33:08.080
preview is not as big as 2 2 three but we added very important changes to the
00:33:16.720
language so the one of them is The Fix N and big n unification so we will no longer have
00:33:26.080
the Fix N and big n in the language just
00:33:31.399
integers so when I first designed and implemented Ruby so I me I stole many
00:33:41.320
things from other language uh for example for from small talk and small talk has the two types of
00:33:49.600
integers like small integers and big integers and then the lisp has similar
00:33:57.480
to types of integers which is fix numes and big num which where I stole the
00:34:04.360
ideas from it so I I sto those classification without thinking deeply
00:34:12.040
but uh you know I don't want to care about small
00:34:17.720
things so the distinguish this uh distinction from small integer which is
00:34:25.079
uh in in line uh and then big integers which is big and
00:34:31.079
then the lives in uh Liv in the Hep is
00:34:36.679
small things you don't have to split them them in the in the the program side
00:34:45.720
so as after the years of conservation finally we decided to unify those two
00:34:54.280
classes so we don't want to care about small things so The Fix N and the integers are unified
00:35:03.280
the basic ideas from the flow n the idea we introduced in one n so the in
00:35:12.520
64bit plat on 64 bit platforms the float
00:35:19.000
has two uh representation implementation representation so the small small float
00:35:26.880
numbers are in line in the variable so they they are immediate values and then
00:35:34.400
other float numbers are uh allocated in the heps but uh they
00:35:43.000
are still same float class so the despite the the implementation of
00:35:50.000
representation difference so they can be a same class so that idea leads us uh to
00:36:00.480
unifying uh fix n and big n into one integer
00:36:06.240
class so the that introduced the small incompatibility so if you if you
00:36:15.720
uh use fixnum class in your program so fixum class is became a Alias the
00:36:23.920
integer class so the most of the case it just work it just work but
00:36:30.200
uh if your program is very
00:36:35.440
uh depends on the size of the fix num or something like that so it it may uh have
00:36:42.280
some kind of compatibility problem so you have to be very very care what if
00:36:48.720
your programs care about the size of the uh fix
00:36:54.400
num so the integer uh integer unification so the second one is the
00:37:00.520
smarter case conversion so we have the upase down case me or several other case conversion
00:37:08.359
method in string class so it worked only for asky characters just because know
00:37:14.480
the it is quite difficult to Define what the case is out of the asky characters
00:37:22.119
you know you English speakers doesn't care about the uh you know
00:37:28.280
weird non asky uh case characters but uh you know in the in the
00:37:37.400
Unicode con uh from the Unicode cons constution you can obtain the huge table
00:37:45.280
of case conversion so now it works for other
00:37:51.119
characters the let me uh explain about the background so
00:37:58.599
when I first designed the Ruby so unic code were there but the it is you know
00:38:07.880
it can be very ignorable so J Japan has the several uh uh character set to to
00:38:15.839
Japanese characters and Chinese has their own uh encodings and Russian has their is their encoding Indian has every
00:38:23.800
country has their encoding other than aski so so we we cannot Define any uh way to
00:38:34.800
case conversion out of aski so at at that time we have to uh
00:38:44.839
we we were able to handle aski only but
00:38:50.599
uh you know as time goes by uni the people uh using uni the number of people
00:38:57.240
using using Unicode is getting bigger and bigger now almost everyone using
00:39:02.640
Unicode especially in the web related field so
00:39:08.720
now we can uh rely on the some kind of the uni code case conversion
00:39:13.839
database so the r 2.3 and prior so hello
00:39:18.960
upase is hello but the if you uh use e with what dot Das or
00:39:30.599
something is on top so it's not converted at all so
00:39:36.200
hello but after Ruby 2.4 you will have uh floper case
00:39:43.720
conversion here here but uh if
00:39:51.079
you if we want the the old Behavior you can put ask key as an argument
00:39:58.200
so that you you can get all Behavior so no we don't want to care about small
00:40:05.119
things so the having the dots or some the accent or something like that is
00:40:10.760
Trivial for us in Daily our daily use so I want you to I want
00:40:19.560
you don't have to care about or worry about small
00:40:24.720
things actually implement has made big effort to uh make this
00:40:32.240
possible uh for example Turkish
00:40:38.960
ey uh do does anyone have any knowledge about
00:40:45.560
Turkish ey oh you do so in
00:40:50.920
Turkish the the capital I converted to I without
00:41:01.160
dot in the aski capital I in should be converted into
00:41:07.240
the eye without Dot and then you have the other
00:41:14.240
ey which can correspond to the uh I with Dot in the asky eye so in so when you
00:41:22.800
using a Turkish so you you not rely on the I to I aski I to ey conversion
00:41:33.119
so in that case you have to uh specify that uh K Turkish instead of aski where
00:41:42.000
it is ah here it is that you have to spec specify the Turkish instead of ASI so you can get
00:41:50.280
the Turkish conversion table that that made us a very
00:41:58.640
trouble anyway in anyway I
00:42:04.760
promise we promise we coits promise we will do everything to keep moving
00:42:11.920
forward just because only paranoia survives yeah we are paranoid to
00:42:20.359
survive we have to be paranoid to survive we have to keep moving forward
00:42:25.480
to survive you know there are tons of other programming languages some something is new so maybe you are
00:42:31.400
interested in other programming language like elixir or closure or scalar or JavaScript or typescript or many other
00:42:38.359
language many other lials so you know you are okay to move on to other
00:42:43.520
language but for me with a ruby I'm
00:42:52.720
nothing so I have to survive
00:42:58.240
but the the primary motivation to keep moving forward is to let us care less
00:43:04.280
about small things so to make you happy to make en to let to let you enjoy your
00:43:12.800
programming again and ever happy hacking thank you
00:43:28.319
uh thank you Matt for your entertaining uh presentation so um just curious how
00:43:35.599
many of you guys out here are of blood type
00:43:40.720
B okay you're my type
00:43:46.800
Optimist um yeah so I would like to open uh some uh for some questions uh if
00:43:55.359
anybody has any questions regarding type or Y sure please okay hi
00:44:02.359
Mets um so with uh soft typing how will it help us if we uh doesn't mean that I
00:44:08.240
don't have to write types uh write tests anymore uh for example like test like uh I expect an object to be of uh the
00:44:15.559
person class doesn't mean I don't have to write test like this anymore with soft
00:44:22.040
typing uh you you still need to write write test just because you know the
00:44:27.559
most of the test test Logics but not types but uh you can reduce some types
00:44:34.000
uh some tests just just test about the types but uh you have you still have to
00:44:40.000
write write test write test and one last question will the
00:44:47.200
types actually help the compiler to generate optimize if code generate
00:44:52.359
optimize native code uh uh currently I have no plan plan to make use it as an
00:44:58.880
optimization uh information but uh maybe in the
00:45:07.240
future hi any more questions please um don't be embarrassed or afraid to come
00:45:12.640
up here you go um so with the um more incord support
00:45:22.280
in 2.4 does it mean that now um uh there are a lot of mappings in the Ruby
00:45:28.599
repository with all those encodings yes Ruby Ruby repository
00:45:34.000
became bigger um how bigger like 10% or I don't know I didn't count but uh much
00:45:41.960
bigger thanks I think it's fantastic that you
00:45:47.960
have the um the the case conversion in other languages now that's wonderful
00:45:53.000
thank you for that um in Java there are locals which govern things like you we
00:45:58.520
were talking about the very interesting case of the reverse Turkish eye situation um in Java you can have a loal
00:46:05.160
which is the current local you can best override the current local uh for an
00:46:10.680
operation and also provides a currency formatting gate formatting decimal formatting based on the loal any
00:46:17.680
possibility we would ever see that in Ruby uh not in the core classes and uh
00:46:23.880
maybe we local has some of course Lo has some some benefits but uh as the Thee
00:46:32.280
the old C+ programmer so loal gave give me burden or pain rather than the
00:46:39.359
benefit so I personally I don't like local so I don't do that by myself but
00:46:46.119
uh I I'm not object I'm not against uh about adding local to as some kind of
00:46:53.160
the Gen or the additional Library
00:47:01.200
uh so will the integer unification break any existing code that uh uses C
00:47:08.520
extensions uh including C extension the very few
00:47:14.359
uh examples uh of the breakage and know only
00:47:19.960
one example uh report from the outside is the what the message pack
00:47:28.119
is which is which uh requires the size of the fix num by uh using the is uh
00:47:37.000
what is a method but uh this is very exceptional I
00:47:42.240
think no but say for example you're using the fixed 2 in Macro for converting fixed nums to integers yeah
00:47:49.079
we provide macros to distinguish so will that macro still be there or will it be removed from 2.4 uh
00:47:57.040
uh the current macro does work and then we provide new mcro to distinct the unified version and ununified
00:48:08.559
version um any more questions from the
00:48:16.559
audience um okay I I personally have a question for Ma so
00:48:22.480
um Ruby is generally a very polite polite language and um I'm wondering if
00:48:31.000
if you had to do anything to to enforce this politeness for your contributors
00:48:36.280
and both like developers like yeah I don't know I'm not sure
00:48:43.640
about the definition of plot here but you know the
00:48:49.799
we we commits are very straightforward each other so they actually they hit
00:48:57.880
each other so if if one of our committers make that Cod so
00:49:03.240
they they blamed so heavily so it's not the def it's not poite in that sense
00:49:11.240
okay sorry I got it wrong so um let's all oh one more
00:49:16.520
question please hi M uh Ruby is awesome and we all love it really here but you
00:49:22.920
said let's move forward a couple of times during your talk and uh like
00:49:28.440
moving forward for most of the people here is kind of hard for this uh because I'm sure like can people in in here
00:49:36.000
raise your hand if you ever contributed anything in Ruby do Source like I mean gems in Ruby not
00:49:44.680
SEO okay now who can write C good enough to actually contribute to Ruby itself
00:49:57.240
uh I would say this is a big problem can you tell us how can we as Ruby community
00:50:03.359
help with the Ruby itself because most of us unfortunately don't have enough experience with C especially to write in
00:50:10.960
the code Bas as complicated as about that yeah the you know the
00:50:17.240
information in use case is very uh we need very much the that
00:50:23.760
information uh very much so the uh if you feel something uh if you feel
00:50:32.799
somewhere to improve so let's uh tell us
00:50:37.880
through Twitter to blog or issue tracker or anything so you can tell okay there
00:50:44.799
is a room uh to Improvement in to read language so you don't you don't have to
00:50:51.079
have a knowledge of C code so just you you things you need uh to improve
00:50:59.480
here or there in the language or maybe you can uh Benchmark your your application so the
00:51:07.319
this part will Ruby is very slow you have uh the core team have to improve here or something like that that kind of
00:51:13.880
the concrete information is very crucial for us to improve uh to work on so of
00:51:19.720
course if you can write C code so you can uh send us a a p request or P
00:51:25.079
anything like that this is more than welcome but if you're not that's okay
00:51:30.280
just just uh count uh tell us your use case your benchmark your ideas or uh or
00:51:37.480
maybe your improvement for our documentation or anything like that any contribution is welcome and
00:51:44.160
uh many of those doesn't require see knowledge okay thank
00:51:52.240
you question uh so uh just want to ask one question
00:51:59.000
where where do you get that lonely operator t-shirt because I really I think I really
00:52:06.240
want yeah after I I made a a lonely operator so the the a friend of mine is
00:52:13.160
working as a t-shirt company uh and that their website is running in
00:52:20.200
Ruby so he he made this sh t-shirt for me and gave gave this for me so I don't
00:52:27.559
think you can buy it um so if um last call for
00:52:37.680
questions all right no movement okay so uh let us one once again give a round of
00:52:43.520
applause to Matt thank you