Summarized using AI

Keynote: Ruby Typing

Yukihiro "Matz" Matsumoto • June 23, 2016 • Singapore • Keynote

In this keynote presentation titled "Ruby Typing," Yukihiro "Matz" Matsumoto, the creator of Ruby, addresses the complexities of typing in programming languages, specifically focusing on Ruby's dynamic typing system. Matz emphasizes that although parts of the talk are highly technical, the main ideas are accessible and relevant to all attendees.

The talk begins with an engaging analogy comparing blood types and personality traits to programming types, aiming to illustrate how programming languages influence perception and behavior. Matz highlights the significance of dynamic typing, which allows variables to hold values of any type without strict rules governing those types:

  • Dynamic vs. Static Typing: Matz explains the difference between static typing, found in languages like Java and C, and dynamic typing, as in Ruby and Python. In static languages, types are defined at compile time, while dynamic types are evaluated at runtime.
  • Duck Typing: The cornerstone of Ruby's dynamic typing is duck typing, defined by behavior rather than strict type adherence. Matz uses the metaphor, "If it quacks like a duck, it’s a duck" to illustrate that Ruby focuses on how objects behave rather than their defined types.
  • Examples of Flexibility: Matz provides a practical example of logging functionality in Ruby, showcasing how different objects can be accepted as long as they respond to the required methods, regardless of their class structure.
  • Drawbacks of Dynamic Typing: Matz acknowledges that dynamic typing can lead to runtime errors and less documentation, contrasting it with static typing's compile-time checks that can prevent errors but at the cost of flexibility and ease of coding.
  • Future Directions: Looking ahead, Matz discusses the concept of 'soft typing', which aims to combine the benefits of static and dynamic typing by allowing type inference without the need for explicit type declarations. He expresses hope for Ruby 3 to incorporate these ideas, enhancing type-checking and performance.

In conclusion, Matz reiterates that Ruby is designed to improve the programmer's experience by reducing mental burden and restoring joy in coding. He encourages community feedback and contributions to help Ruby evolve and adapt to modern needs. The main takeaway from his keynote is the commitment to keeping Ruby a flexible and user-friendly programming language, while also progressing towards a more robust typing system in future versions of Ruby.

Keynote: Ruby Typing
Yukihiro "Matz" Matsumoto • June 23, 2016 • Singapore • Keynote

Speaker: Yukihiro (Matz) Matsumoto, Creator of Ruby, Heroku

Event Page: http://www.reddotrubyconf.com/

Produced by Engineers.SG

Help us caption & translate this video!

http://amara.org/v/ONq6/

Red Dot Ruby Conference 2016

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
Explore all talks recorded at Red Dot Ruby Conference 2016
+17