Summarized using AI

Keynote: Ruby 2 in Ruby on Rails

Akira Matsuda • June 23, 2017 • Singapore • Keynote

In the keynote presentation titled 'Ruby 2 in Ruby on Rails,' Akira Matsuda discusses new features introduced in Ruby 2 and how they impact Ruby on Rails development. Matsuda, a notable Ruby committer and event organizer, emphasizes the importance of upgrading to the latest Ruby version to take advantage of these enhancements. Key points include:

  • Module Prepend: A significant new feature that improves monkey patching by allowing developers to prepend modules rather than using alias method chains, thus providing a clearer and more reliable method extension. However, mixing module prepend with alias method chain can lead to infinite loops, and it's advised to phase out the latter.

  • Refinements: These allow scoped monkey patching, but Matsuda notes some complexities and limitations in how refinements behave, encouraging caution when using them.

  • Method Visibility Enhancements: Improvements like the ability to define private methods more succinctly have made Ruby cleaner and less verbose. This includes using a new syntax to declare private methods, which Matsuda notes is now available in Rails.

  • Keyword Arguments: Ruby now natively supports keyword arguments, simplifying methods that previously relied on hashes for arguments. This improvement enhances method signatures and helps with documentation clarity.

  • Strings and Encodings: The presentation touches on how Ruby 2.4 improved handling strings with multiple encoding support, allowing Rails to focus primarily on UTF-8. This focus on UTF-8 can streamline support for web applications.

  • Performance Improvements: Commenting on frozen strings, Matsuda discusses plans to encourage their use in Rails for efficiency, while also considering the introduction of magic comments to streamline code.

  • Community Engagement: Matsuda concludes by inviting developers to participate in Ruby and Rails development, noting that continued contributions are vital for the evolution of these technologies.

Overall, the keynote underscores the necessity for Rails developers to embrace new Ruby features to enhance performance and code quality, advocating for a proactive approach to adopting updates and participating in community discussions.

Keynote: Ruby 2 in Ruby on Rails
Akira Matsuda • June 23, 2017 • Singapore • Keynote

Speaker: Akira Matsuda

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

Produced by Engineers.SG

Help us caption & translate this video!

http://amara.org/v/8HYH/

Red Dot Ruby Conference 2017

00:00:04.360 messing up or OOP thank you so I mean
00:00:15.230 let me do this myself on Akira from Japan um like this on the internet other
00:00:24.380 countries on the Ruby committer lives in
00:00:29.539 a rubyist village in the Ruby island um also a rails commuter well I guess Aaron
00:00:39.410 Aaron Patterson and me are the only Clippers and we have the direct commit
00:00:46.160 access to both of these repositories I mean Ruby and rails I also am a gem
00:00:53.660 author mainly rails plugins like the one
00:00:59.660 of the top community the page national library for rails but my recent role is
00:01:08.350 like an event organizer mainly rather than a code writer I'm organizing the
00:01:15.770 Ruby conference in Japan as the main person so let me promote my dance a
00:01:22.939 little bit it's called really Chi Chi and it's gonna be held in September in
00:01:30.290 Hiroshima tickets are on sale you can find more information here on that our
00:01:37.579 beautiful website looking like this and
00:01:42.640 so just don't miss it okay so this is me
00:01:48.950 I'm really glad to be here and be able to do a keynote here today thank you
00:01:55.100 very much for having me so today I'm going to show you things
00:02:02.640 like these the new features that Ruby team is and introducing the major major
00:02:10.500 version 2 to the language and and hell
00:02:16.010 rails uses these new features of Ruby right and I am things I did for it like
00:02:25.950 round these new features okay so let's begin firstly about both of these versions of
00:02:34.050 Ruby on Rails is all the rough fine line
00:02:48.240 so you see rails for came together with
00:02:55.060 Ruby - and the important part is this
00:03:00.670 square rails five supports only Ruby
00:03:06.069 clue - as I said so in other words we
00:03:13.030 want up the major version of rails because we wanted to drop support for
00:03:18.310 Ruby - oh and ribbit to go through one so these others supported version of
00:03:23.650 Ruby also in rails 4 in five this means that rails 5 can use real 5
00:03:34.870 can use Ruby like less than 3 features and betrayal 5 cannot use Ruby three
00:03:43.390 three new features into four new features and two five new features right the it's a stealth support ravit - -
00:03:50.620 right so what are the new features in
00:03:56.040 recent versions these are some of the new things that I'm going to cover in
00:04:02.049 myself today okay so let's start off
00:04:08.410 with module prepend exactly one of my
00:04:13.780 favorite features Ruby - now let's go
00:04:18.910 back to history a little bit and see how we were doing dealing with monkey patches before really
00:04:24.850 I mean prepend being introduced into Ruby okay the four modules band we were
00:04:34.150 using something called alias method chain to extend existing methods it's a
00:04:43.120 part of active support and the inflammation was just this theory
00:04:51.450 Elias methods it was initially implemented back in 2006
00:04:58.580 so was as I showed you it was very
00:05:03.860 beautifully simply implemented simply implementation not just it's super
00:05:10.740 useful it is very simple indeed and this
00:05:15.960 is how we use the feature for example arm where is a method called foo you can
00:05:24.570 extend food behavior with defining food with bars and calling through without
00:05:32.400 bars and inside with door okay but this
00:05:40.980 feature actually had a little bit of downside I mean like pitfall because
00:05:47.760 this feature was not a language core feature it was just a workaround basically and it so it creates some like
00:05:57.080 intermediate methods in the previous example through with bar include without
00:06:03.630 bar these methods aren't actually publicly called from outside and you can tell
00:06:10.980 what's going to happen when these methods are called what I'm talking
00:06:16.140 about is like these methods through with bar and food without bar it's actually
00:06:28.870 so what's wrong with these methods here's a example that I showed you
00:06:36.129 extending food with bar okay it looks
00:06:56.509 food with bar and with bass for the first example and next example is
00:07:01.520 extending the same method with best first and then barring next and you see
00:07:09.469 that the result changes right when you
00:07:15.919 called foo without bonus method right so
00:07:23.560 like this you cannot really tell what's going to happen with that calling when
00:07:30.020 you call that public method through without part let's still callable so the
00:07:38.539 real world example for example think of this case um you have two rails plugins
00:07:45.740 that extend one same method listed in your gem file and when it changed the
00:07:53.089 order of these like our gems in the gem file your code may may break in some
00:08:01.250 case so we needed more robust monkey-patching tool and so yahuda cots
00:08:10.419 proposed modular pants as the Ruby language core feature in ruby 2.0 so
00:08:18.669 this is the future module prepend uses
00:08:24.339 module instead of aliases for thing out I guess
00:08:30.780 it's a very green way of making monkey patching good not got grade in like ugly
00:08:39.120 methods like way to something without something okay but still there's a
00:08:48.900 pitfall when you mix it
00:08:53.970 alias method chain and prepend so this is an example of mixing so if you um
00:09:03.020 there's a existing Class C and firstly you extend the methods with Taylor's
00:09:10.590 method chain and then extend it with pretend it just works right
00:09:21.180 but if you put three pans first then Euler's method chain is going to die
00:09:27.690 it's going to cause infinite loop so
00:09:34.000 this means alias method chain and prepend can never coexist you're going
00:09:40.899 to be killed okay so so alias method chain is armed
00:09:52.740 so so dangerous so you on you discourage
00:09:57.970 to use it if please did never use it anymore and especially if your ball game
00:10:06.820 author or library author please stop using a leaf method chain right now and
00:10:16.529 actually you can use both in one code base if you really would like to buy
00:10:23.529 like switching by ruby version but since
00:10:29.170 that it's slightly different so it's exactly hard to support both so because
00:10:40.450 with this many gems stop supporting ruby one because it's hard to support both
00:10:45.730 one and two this is the reason I like
00:10:51.839 this feature because it kills Ruby - Tom sorry Ruby one
00:10:59.490 by the way um I showed you some code calling module prepend but actually
00:11:09.339 these methods are public since ruby to one so there was a small room of
00:11:17.770 improvement in the code I showed you previously this send include or send ribbon was
00:11:25.990 known as a very common idiom in Ruby but um so yeah it's so so popular but I
00:11:36.370 didn't like it I wanted to do the simpler so I proposed to make them public so here's my proposal for Ruby
00:11:45.190 3-1 and in the Ticketmaster wrote he
00:11:50.350 didn't write like it but he still kindly accepted my proposal and but Matthew
00:11:58.839 still don't like this right so I know a
00:12:06.730 public include is available in Ruby so
00:12:12.850 you can find x-acto fine um dot included calls everywhere in Ruby
00:12:18.910 arms are in rails and in plugging in gems so just forget send include okay
00:12:28.920 connects topic refinements refinements is another new strategy for your monkey
00:12:35.440 patching with very I mean unique -
00:12:41.800 unique scope it's it's known as file scope monkey patching let me explain um
00:12:52.440 we have ever actually used refinements by yourself have you ever used
00:12:58.270 refinements okay only two in this room
00:13:04.470 I know I don't know what if use it so I
00:13:10.610 actually created some gems using refinements one is called database remar
00:13:20.370 rewinder so it defines a method in
00:13:26.420 active record connection called execute multiple and it calls execute monic
00:13:35.760 multiple inside the blonde one but so
00:13:41.700 this execute multiple method is actually a public method that it's only visible
00:13:47.210 from inside the plugin users can never touch this method so it's very useful
00:13:54.450 right so I personally call this a super private method it's private inside the
00:14:03.120 plug-in more accurately it's actually file scope inside each file in the 14
00:14:16.340 cell so it's about plugging and in the rails
00:14:24.279 code base I introduced refinements for rails 5.1 to extend a rage song this is
00:14:34.149 the code it recently was creating
00:14:39.689 something called a rig some public way but I change this information
00:14:47.220 implementation to use refinement in order they not to reveal that or exam
00:14:52.660 method to the users so in this case I'll
00:15:00.910 it already told this I guess yeah so
00:15:07.149 refinements was used to conceal that
00:15:14.730 internal method so I investigated this
00:15:23.939 feature when implementing this and I found something weird its I found it's
00:15:32.350 actually not file scoped the documentation was lie and so I reported
00:15:40.360 to the red line
00:15:46.139 yeah well I told in its path curves but July I'm sorry
00:15:56.140 so here's an example showing the lie
00:16:03.550 when you you can define a refinement in
00:16:09.800 a module in this case a anonymous module extending object and then define the
00:16:18.830 object that is being refined then it works okay so what if we like to turn
00:16:27.050 them around like this firstly define a
00:16:32.080 method then define the refinements extending the methods then it doesn't
00:16:40.070 work so it's not actually false code but
00:16:45.920 like file scope plus physical positions code am I correct meant I thought it's a bug
00:16:55.940 but matt said it's an intended behavior I think this is very annoying behavior
00:17:07.819 it's so complex but but
00:17:20.100 but it's said to be incentive by Matt's so anyway please mind this and please
00:17:32.350 beware when you're actually using my appointment I guess it's the weirdest
00:17:39.340 future in Ruby so far so just be careful
00:17:47.880 anyway this funny feature was proposed and implemented by mr. Shue go Maya who's
00:17:57.040 Matt's boss and his company and this guy
00:18:02.140 created another weird feature in relief called protected so here's another topic
00:18:10.240 concerning method visibility and another
00:18:15.540 real feature in Ruby so here's an
00:18:23.380 example taking firm Hisle Andrew because like this is the correct way of using
00:18:32.760 protected but it's never used in this
00:18:38.020 way and math again he created if he
00:18:46.419 would design Ruby again he will not include Ruby in the language feature
00:18:55.260 because I guess he didn't like a teacher
00:19:00.299 so actually protected is very very
00:19:05.620 frequently used inside the rails code base but almost these use cases of
00:19:14.820 protected is misusing protected you just
00:19:20.500 can rewrite protected sits private and you could should still work so I tried
00:19:27.850 doing this growls like three years ago but I had to
00:19:36.409 change like 140 files and like about 200
00:19:43.249 additions 200 deletions and the tests were still working still passing but I
00:19:52.149 gave up pushing this top string because um it kind of broke some documentation
00:20:04.089 that hasn't happened three years ago but I finally pushed this last year by
00:20:11.869 separating that huge patch into like several small patches so it's actually
00:20:20.029 in reel five one well five one dozen does no longer abuse protected scope so
00:20:30.200 protective dead in Braille faster so he also should never use protected again by
00:20:39.200 the way sugar the period of these funny features is written on his another
00:20:46.460 project recently it's a text editor in reading so he's going to do a
00:20:59.089 presentation about the his new project text editor in next coming with the
00:21:04.999 conference called Ruby Taiji so don't miss it okay
00:21:11.460 so here's another topic mmm
00:21:20.530 private dick yes there's a tiny improvement around method visibility in
00:21:26.320 Ruby trail so in order to define a
00:21:31.570 private method we have to define the method like this in this case all
00:21:38.500 methods defined below that private or I'll become all private right or if it's
00:21:45.100 done like this you can do this also in this case the private call takes a
00:21:52.210 symbol of the method name right so just
00:21:59.170 like C++ or Java recent Ruby's can do this private test or public test right
00:22:08.610 it's rebel evolutionally handy right so
00:22:14.500 you don't have to repeat the method name twice so it's a very simple trick he
00:22:28.000 just the authorized attach just change the return value of the DEF statement so
00:22:35.950 it it sincerely actually doing this right testing the return value of death DEF
00:22:43.270 statement to the private segment right
00:22:49.290 so this patch was written four years ago
00:22:54.690 and I suppose this feature is very much important for especially period of rails
00:23:00.970 team again because this is the rail
00:23:07.150 style Oh does it is a kind of group of people
00:23:16.520 who want to write private this way in
00:23:21.830 this unique style oh I'm not sure if
00:23:27.679 it's a group of people and maybe anyway
00:23:33.070 there's always kind of like the devil between this style and this traditional
00:23:41.840 style so everybody is happy with this right we don't have to fight anymore
00:23:52.460 okay so that's why I said this feature
00:24:00.140 is very important for you for you Aaron
00:24:05.650 but private service actually very rarely used in side rails I just get bread
00:24:14.770 today and I found only 17 occurrences in private shift in rails the reason is
00:24:25.340 because there was a documentation problem in in private chef and so very
00:24:33.169 recent so rails users are docked to generate segmentation documents and also
00:24:42.410 couldn't properly generate the the documents private methods if it's
00:24:50.840 defined that way and it breaks with rails API judgment if you use this so
00:24:59.419 the problem is like this to use private search and then if you define any public
00:25:06.830 method below that public method also is like treated as a private method so that
00:25:24.820 because the parser is different from the Ruby Sparkle classic it because our duck
00:25:32.000 has its own really puzzle okay the parser is this this thing Ruby
00:25:41.419 likes done RB actually collects it the file is like this
00:25:48.610 it's a according to the comments it's a
00:25:53.690 ruby lexical analyzer written by K JSON who's the author of IRB and it requires
00:26:06.620 IRB Liam sighs right it's not a console
00:26:12.500 so it's a it's a dutchman generators it requires IRB can you use IV Parsons
00:26:19.640 teaching so there are three positives in
00:26:24.710 maybe pause why and Victor there's Santa libraries and they are be possible from
00:26:33.370 actually Ritter is a ruby posture in the
00:26:40.220 styling library so I guess they are
00:26:47.120 about should use this instead of creating its own positing right
00:26:52.240 so why what isn't our doc because Azoff was created before people is being
00:27:00.320 created this is the history so I tried
00:27:08.330 serum right the positive our doc to use wizard but I just failed was so tough to
00:27:18.260 talk good so I gave up to admit that I
00:27:24.289 brought this task to my Ruby Meetup and actually someone is using I mean working
00:27:31.549 on this to replace our dog possible to use gripper and it's going to be and this
00:27:40.610 person will present about this and the next Ruby cages so don't miss it so
00:27:50.180 anyway this is the history of Ruby posters and yes this one episode IRB was
00:28:00.320 created in the last century if it's been 20 years approximately from the first
00:28:08.450 birth of IRB so everyone let's celebrate the 20th birthday
00:28:14.030 higher be yeah and I guess be the
00:28:25.010 anniversary events is going to be happen in Ruby Tai Chi by the creator of IRB
00:28:35.120 himself anyway let's go back to the privates of problem how much when it's
00:28:46.220 go ahead twenty minutes okay okay okay
00:28:52.970 so I said I gave up replacing good are those possible but I just instead I just
00:29:01.700 made a tiny patch resolving my problem to Rails this is my patch you can check
00:29:07.880 online um so this patch enables just
00:29:14.620 correctly parsing our private self on our dock without replacing the whole
00:29:21.560 posture so this happened last year so it
00:29:27.410 took like three more than three years to support private chef and being rails
00:29:34.850 communities to allowing those communities to use this news
00:29:40.260 sex but it's now available because our
00:29:45.630 other have been released with this with my pet and rails 5-1 depends on that
00:29:54.270 version so you're free to use private test now yeah okay so the next topic is
00:30:06.390 keyword arguments this something looks
00:30:12.510 like she word arguments and rails since it's version one like this so these are
00:30:19.470 the met method definitions is some kind of keyword arguments or like this takes
00:30:28.590 very well there are your needs so it
00:30:34.410 certainly users ruby hash to pass in something looks like arguments
00:30:39.600 I mean keyword arguments it allows the
00:30:45.630 method call that's better than like passing in these arguments little names
00:30:54.110 but on the other hand the method definition looks like very weird I mean itself nothing to the users just
00:31:02.960 like pass in some kind of hash named options or you can pass in everything
00:31:11.580 like star arts it's it really sells the
00:31:17.400 method signature itself nothing to the users and it's actually included in
00:31:26.850 rails tool chain in active support so this is how rail extracts the options
00:31:35.640 from the given borrowings this method on
00:31:40.770 array called exact options since it's just a hash you can define a
00:31:48.100 default value inside the method like this and um yes inside a method and also
00:32:00.279 never forget to write a documentation about the default values outside the
00:32:07.600 document on the I'm solid method so you can also verify the option keys in this
00:32:14.019 way to make sure um you haven't gotten unexpected cheese this just raises when
00:32:25.360 an expected Keith looks given again you have to write both the code and the
00:32:32.710 document so so then Ruby to finally got
00:32:42.190 the core language feature key Bernard means was implemented by mummy three men
00:32:50.919 and insane so we can now rewrite the key
00:32:58.629 arguments ish something in rails from this to be like this here is a pet the
00:33:06.970 writings will talk to the methods so you see the method signature becomes more
00:33:13.570 like clear to the users what to take what key is to take and what default
00:33:19.629 values to take right also that implementation becomes shorter right and
00:33:26.529 I guess it won't answered because it's always like hash man equation and very
00:33:33.460 manipulation is written on feet thanks
00:33:41.170 so I created a branch using keyword arguments I mean introducing cumulative
00:33:48.140 in serial school days back in four years
00:33:53.420 ago before the agree to release and then upon some problem some specification
00:34:00.830 problem arose to our arguments in reading rails very often defines a key
00:34:08.020 method key that that is exactly like
00:34:13.040 Ruby keyword like if like validate if valid unless etc so the key argument
00:34:23.899 accurate method is actually can be defined like this and it can be called
00:34:29.210 like this but you can never like access that that variable and call this syntax
00:34:38.690 agree
00:34:45.320 so with qi now we can create a never can
00:34:50.570 access variable in Ruby okay I brought
00:34:56.480 this problem to record and discuss the bliss and so we introduced a new feature
00:35:02.810 in review one it's called binding local variable get this way we can get the
00:35:11.270 value this example defines a local
00:35:16.520 variable named meal so works right and
00:35:22.880 so I'd like to propose to rails to use
00:35:27.950 keyword arguments as the first class citizen API email thank you I haven't
00:35:36.620 actually proposed this yet but I'll work on this maybe after this conference
00:35:42.790 again run faster should make the code more readable and Queen and should
00:35:50.180 make more obvious documentation so I guess I'm going to do this so the next
00:35:58.580 topics require relatives
00:36:04.130 Hey yes reply relative this feature is originally introduced
00:36:09.900 into Ruby because of rails and it's
00:36:18.950 supposed to run faster than normal required because if the implementation is much more simple but rails doesn't
00:36:27.839 really use this feature today most of
00:36:32.869 requires in Ruby is normally required instead we put the cobalt in so there's
00:36:40.829 a huge room for performance improvement against using River relative so I
00:36:46.470 created a pant doing this I rewrote all requires in Kaiba Corps abilities and
00:36:53.720 benchmark the result was no significant
00:37:00.839 performance agreements so I haven't
00:37:07.529 posted this to upstream but I know why not can I just got with cogent he said
00:37:18.119 maybe bunglers doing good jobs redefining require and making it faster ok ok oh
00:37:31.950 you guessed it more investigate more after this conference anyway require
00:37:38.999 elective is basically a good thing so you may use it I I recommend you to use
00:37:45.509 it instead of you required should be faster again here's another topic
00:37:54.170 instruction sequence load and dumping load okay
00:38:00.150 these are public API things will be to see you again and koishi created something using this
00:38:07.339 but he said his version doesn't really make real sastras so this year
00:38:15.440 on Shopify created something resembles touka which is long and they say it's
00:38:21.520 making rails boots and faster very interesting it's kind of still veiled
00:38:31.150 mysterious but I heard one of the creative this plug-in is coming to Ruby
00:38:37.339 Kaiji and so if you'd like to know more about this plug-in I mean this feature
00:38:43.700 just come to really high key because I'm a very huge topic in coding in Ruby so
00:38:54.230 in recent versions of Ruby every string object has its own encoding okay and we
00:39:05.420 use various encoding actually even Maps uses other encoding other than utf-8
00:39:10.790 until like 5 years ago but Rails has to
00:39:21.349 be basically utf-8 only our framework
00:39:27.130 rails doesn't has to deal with multiple encodings internally I mean this can be
00:39:37.190 the best basic strategy against encodings in rails just keep everything
00:39:42.829 to be utf-8 and converts everything from the outside to utf-8
00:39:56.160 so for example you can use any encoding
00:40:02.500 food writing you templates by using
00:40:08.860 another file a killing word putting magic comments on the top but I mean
00:40:18.390 nobody's doing this in rails nobody is writing non-new tf8 templates so I guess
00:40:28.300 I told this like two years ago in Ralph's gone but I'm planning to drop
00:40:33.760 including multiple including support for action view actually there's the kind of
00:40:39.910 kind of 70% done quiet patch in my machine and have so haven't created a
00:40:46.440 like test testing catch sorry I'm just
00:40:52.360 so lazy I'll do this after so anyway
00:41:01.140 this library in access aboard I called X of the board multibyte since
00:41:08.350 like ten years ago which includes a huge
00:41:14.260 set of Unicode database in this file
00:41:24.940 so since the encoding handling has been improved in Ruby like this and it has
00:41:33.250 recently very important improvements in 2.4 so by using these features we can
00:41:44.540 totally remove these remove the active support version of multiple encoding
00:41:50.720 supports from EXO support and use the Ruby core feature are getting arms or M
00:41:56.540 sensing and instead actually we need to
00:42:02.480 do this as soon as possible because the maintain of the maintainer of the exit supports multiplied has just retired
00:42:11.360 remote solution so currently nobody is maintaining that Eclipse support
00:42:16.850 multiple something so I'd like to
00:42:23.930 propose to totally remove the web-accessible board multiply trim rails
00:42:30.050 and the maybe in the next version we've already created a pull request it's
00:42:36.830 still on the discussion but I hope to merge this into the next version okay
00:42:44.570 next topic frozen strings so we've got so many like
00:42:49.880 let me freeze some strings in rails kind of request in the past few years because
00:42:58.370 it makes it kind of makes rels faster orbit
00:43:04.330 so these are pros and cons of that freedom strings in the rails code base
00:43:11.470 it really makes the code ugly for example like this but calls jump restart
00:43:18.290 restart restart restart restart brief Dumfries for every string literals it's
00:43:24.230 just really quick honestly I really really don't like I don't want to see
00:43:29.720 this anymore so so I'm supposed to introduce a new
00:43:37.010 magic comment feature in Ruby just because I didn't want to see that code
00:43:43.000 to be more accurate there was already existing proposal adding them as a
00:43:50.030 comment and I just locate a strong platform for this proposal and some
00:43:59.660 maths accepted this proposal and so it wasn't introduced to Ruby 2 3 as a full
00:44:05.450 feature this is the magic comments frozen string literal through also Ruby
00:44:13.580 2 3 introduced a less known feature -
00:44:19.910 operator free screen literal the - string literal you've never heard of
00:44:26.600 this before I guess it's actually a little bit faster than calling doc freeze method on
00:44:34.070 string maybe never had should be care
00:44:41.390 about this but it's just a tip so anyway I would like to put the magic comment to
00:44:48.380 all files in rails but it is a little
00:44:53.780 bit too fast I mean really real or else fine because they'll file social
00:44:59.210 supports a ruby that does not support Moe are frozen screaming medic comment
00:45:07.390 so maybe we should wait until well 6 to do this
00:45:13.940 now here's another topic concerning performance so l5 does not support will
00:45:26.249 be younger than q1 just because we betrayed to introduce this feature repeatedly collects the symbol garbage
00:45:37.400 and due to this of the sword before
00:45:45.299 symbol GC Ralph was abusing like strings
00:45:50.759 instead of symbols like it rails converts every symbols in the outside
00:45:56.849 world to strings but I guess we don't have to do this in one this thing you
00:46:03.029 symbol as it is everywhere in the valves in the process we could do this and we
00:46:11.460 could reduce coverage strings by doing this I guess I just guess it's another
00:46:19.380 idea making real simpler so here is
00:46:24.420 another recent topic ruby is just unified six long and big mountains with
00:46:30.420 Imperium so if your code still access is fixed
00:46:37.859 number big nom it warns so if you find any ruby gem that warns just don't you
00:46:46.049 stop using it and find an alternative ok
00:46:51.749 finally its next topic I like to talk about something some methods that it
00:46:57.509 recently implemented in xsf words and then pour it into Ruby like this object
00:47:05.609 try called new liberal and ribbon or script here doc also get near it'll play
00:47:12.749 bro um here's another minor methods numeric positive and negative
00:47:21.390 or array the pens and pretend and as Nick stated the HH sold something like
00:47:33.100 this on Twitter accessport can survey experimental lab for a future cool
00:47:39.130 features in really ok on judges hold two more minutes here's another method fun
00:47:48.910 erase Holliman innumerable fun so this case is a little bit complex there used
00:47:55.600 to be a activesupport version of song and really kind of ported arrays from an
00:48:02.860 innumerable phone but in a different spec so that the behavior is slightly
00:48:11.590 different the first between the review version and rail surgeon but the ruby
00:48:18.850 version is faster than the rails one so we want to call the GUI version as
00:48:25.750 possible and then fall back to the browser is in if something's wrong with
00:48:31.180 ruby version so here is the situation as
00:48:38.500 I told you before I found out somehow done using refinements it kind of works
00:48:48.670 but it's so complex that implementation is so complex maybe we can make the
00:48:55.060 simpler when we dropped supports for the Ruby that doesn't have race home so
00:49:05.260 anyway there is such difficulties for real scene to support multiple version
00:49:11.620 of Ruby but further users it just can use the newest movie and use every new
00:49:19.480 features with Ruby you can do that for your applications so
00:49:26.080 like I showed ruby is getting better and
00:49:31.099 better same day and introducing new features for every blue agent so I
00:49:36.550 encourage you to upgrade your Ruby immediately to the newest one and use
00:49:42.470 new features enjoy new features so this is the end of my talk will be evolving
00:49:51.410 in rails also getting there and as a
00:49:57.410 commuter of both I'm kind of doing some like works for the both team and there's
00:50:08.050 so many more other things to do for both Ruby and rails so if you're interested
00:50:14.510 in myself I encourage you to join us the development of these language and plugin
00:50:21.440 and frameworks right that's it thank you very much so thank you for having me for
00:50:34.460 this conference and see you hopefully at another conference at Ruby tightly thank
00:50:42.440 you very much all right do have any questions we have time so we will take a
00:50:52.640 few questions in anyone
00:50:58.740 oh yeah yeah just opposed to mine
00:51:04.020 actually my first question today actually it's a comment so I did I did a
00:51:13.680 lot of benchmarks with keyword arguments in ruby 1.9 2.0 2.1 2.2 with the
00:51:19.470 representable gem because we started switching from the options equal hash to
00:51:24.599 the keyword argument and it was like four times slower than game ok because there was some improvement in 2.2 but it
00:51:32.010 was so slow that we had to stay with me with the like hash thing because they
00:51:37.920 used ruby hash in reaction implementation true yeah yeah yeah right
00:51:43.859 so it's been improved since two three I guess dude zero to three it exactly is
00:51:50.310 still slow in micro benchmark remind remind that slowness
00:52:01.020 okay I just promised to run the benchmarks again with 2.3 2.4 okay I'll
00:52:09.580 send you a pull request cool does anyone
00:52:19.510 else have questions yeah you can push
00:52:27.100 the mic so you mentioned with keyword
00:52:32.260 arguments if you use a ruby keyword at the key you will create some unreachable
00:52:39.960 variable there yes if you're running verbose mode will there be a warning from Ruby I don't think so okay thank
00:52:49.390 you all right I think there are no more questions thank you very much Matsuda
Explore all talks recorded at Red Dot Ruby Conference 2017
+12