Hiroshi Shibata
Panel: Ruby
See all speakers
See all 4 speakers

Panel: Ruby
Yukihiro "Matz" Matsumoto, Hiroshi Shibata, Aaron Patterson, and Aman Gupta • June 04, 2015 • Singapore

Panel discussion with Matz, Hiroshi Shibata, Aaron Patterson and Aman Gupta

Help us caption & translate this video!

http://amara.org/v/Ghc8/

Red Dot Ruby Conference 2015

00:00:18.880 we're really lucky today because we have not won but we have four ruby core
00:00:24.960 committers here today and you're gonna hear from many of them individually over the next
00:00:30.080 couple of days but we wanted to take this opportunity to bring them all together up on this stage and get a sense
00:00:35.360 of where ruby is moving as a whole so it's my very very big pleasure to
00:00:42.399 invite them up onto the stage can i please invite the one and only matt let's give him a
00:00:48.800 huge round and of course hiroshi shibata
00:00:59.760 who will be speaking to you tomorrow and the one and only aaron patterson
00:01:04.799 with his selfie stick
00:01:14.960 and last but not least aman gupta who's very graciously joined us today as well
00:01:22.880 please have a seat gentlemen and joining me for this panel is winston the man who brought you this conference
00:01:29.520 so matt of course needs no introduction um i'm sure you guys all know who he is he's the
00:01:36.159 reason we're here today she bought a son next to him uh is a c ruby committer and he's gonna be
00:01:41.840 speaking to us about mrb tomorrow um aaron is a core contributor to both ruby and rails
00:01:48.560 uh he's a 2010 ruby hero and he's giving the closing keynote tomorrow and aman next to me is a 2009 ruby hero
00:01:56.960 and uh he's been working on making ruby leaner meaner and faster for you so how this is going to work is we're
00:02:03.759 going to start with a couple of questions for our seam panelists and then we will
00:02:09.840 give it over to you guys if you have any questions for them okay so uh maybe what we can do is while
00:02:16.480 we start with the first few questions if you have a question for our panel if you can line up behind the microphones
00:02:22.080 then we'll know to give you your turn at the end of the question
00:02:27.680 okay yes so thank you everyone shall we begin sure so to give a little
00:02:34.160 bit of background of why we are doing this panel this year i was sort of inspired when i went over to ruby kagi
00:02:40.959 last year and i saw this ruby computers on stage and it was overwhelming because on stage
00:02:48.080 they had like i don't know 50 people maybe around around there i don't know it was
00:02:53.519 like the stage was full of ruby commuters so i'm like oh can we do something like this in singapore
00:02:59.760 but it's difficult to you know to get 50 ruby commuters in singapore honestly so you know i'm
00:03:05.519 really honored that we have them here today and that's why i thought we shouldn't miss this opportunity
00:03:12.080 especially to interview them about the future of ruby and what they think about ruby etc
00:03:17.920 and i hope that you all will find this chance uh really awesome as well because there's a chance for you to
00:03:24.159 voice out any opinions feedback that you have about ruby as well to our panelists great um
00:03:32.000 so maybe we can begin with something a little more simple and this is a question for all of you uh what are you working on right now
00:03:37.599 what was the last thing you worked on before you came here me me let's start with you matt okay i
00:03:43.840 spent my my time uh designing ruby to the making decision about the language feature like a like a accepting
00:03:51.519 proposal objective and rejecting proposals and had a few to write a
00:03:57.040 future roadmap roadmap at the same time i'm working on as a
00:04:02.400 programmer on mlb and the stream languages
00:04:11.280 it's already on okay so i maintain so a lot of many a lot of
00:04:18.479 websites or like uh ruby rangor and ruby ci com and uh bragg's ruby wrangle uh as a
00:04:26.000 issue tracker so i operate i'm an infrastructure
00:04:31.280 engineer of ruby rank and i mentor over see ruby
00:04:37.680 and ardog and reich and revisions and ruby beers so i
00:04:44.400 supposed to build a builder issue and
00:04:51.520 synchronizing code upstream and ruby trunk
00:04:59.759 hello is it on no no okay maybe you can use one of the other
00:05:05.919 mics all right hello hello uh hi i work on a few of the
00:05:14.160 i maintain a couple of the libraries in the standard library like fiddle and psych and recently i've been
00:05:21.440 working on mean mainly i look at how ruby works
00:05:27.120 from a rails perspective so i'm on both the rails and the ruby core team so basically
00:05:32.240 i look at how our application runs performs or our rails application runs and performs and then i
00:05:37.680 think about improvements that we could do to ruby to deal with that and recently i've been looking at code
00:05:43.280 loading which i'm going to talk a lot about during my talk so i don't want to say too much more
00:05:50.840 sure uh i work mostly on performance so whenever there is we run i work at
00:05:57.280 github so we have a pretty large rails application and we have a lot of extraneous ruby
00:06:02.560 code as well so we try to optimize as much as possible on the rail side but there's times that we need to
00:06:08.560 jump down to ruby and make improvements there uh i'm most interested in the moment in boot time
00:06:14.720 uh sort of similar to the work that aaron's been doing but i'm working on a couple patches that are still very
00:06:19.759 experimental but trying to get boot time as fast as possible for our app
00:06:25.199 that's great thank you so much um so just now in the in the earlier keynote
00:06:30.880 we have already heard about meds talking about you know there are other languages out there
00:06:36.639 right now like go elixir ras etc that probably you know has some good features
00:06:42.479 that we should adopt for probably ruby 3.0 but ruby 3.0 is probably gonna be
00:06:49.840 a little bit away from now um more of looking at the whole community
00:06:55.759 in general are you worried that people are moving away from ruby to to go into other languages and this is a
00:07:03.120 question for all of you as well so feel free to jump in
00:07:08.479 i don't know actually it's the it's up to the the each individual
00:07:14.400 decision so we cannot say anything but so at least you know we often say the open
00:07:22.720 source community is kind of like a shark so if we stop swimming we will die so
00:07:28.720 we have to indicate we so to the community or to the world we
00:07:34.080 are live we are improving we are moving forward so that's the things i i'm thinking of
00:07:42.840 always it's it's in my opinion it's hard not to
00:07:48.560 get worried about stuff like that i think maybe because i spend way too much time reading hacker news
00:07:56.479 seriously though because you read it and they're like oh one day it's a javascript the next day it's rust the
00:08:01.680 next day it's you know whatever so you always think about that but then i remember like well i'm actually building real
00:08:08.720 applications not you know some blog so
00:08:13.919 it's it's difficult to say it's difficult to say for sure i i think probably
00:08:18.960 sorry mats i think probably ruby's not cool anymore i mean i love i love it i love
00:08:25.039 programming in ruby it's just i'm maybe i'm not very cool i don't know
00:08:30.160 do you guys think ruby is cool yeah a little more enthusiastic please come
00:08:36.000 on it's not it's not cool for hacker news
00:08:42.159 i agree you know maybe 10 years ago when rails came in to
00:08:47.680 the world so the everyone is new to ruby basically and it it it appears very cool
00:08:56.320 new nifty things but you know these days you know we have ruby for a long time
00:09:03.200 so really hasn't changed drastically for a long time so you know but uh but
00:09:10.160 it's how we earn money okay great i would
00:09:17.839 say that competition is definitely a good thing you know like i'm not worried because it's cool to see all these new
00:09:24.000 ways of approaching programming and we can learn a lot from them and at the end of the day you know like when you're trying
00:09:29.279 to get something done there's advantages to using one thing over another so for instance i maintain
00:09:35.120 the event machine jam and for a long time like ruby developers that tried to do vented
00:09:40.800 programming in event machine had a really hard time because it was a very different way of thinking about stuff and it was very easy for those
00:09:47.040 developers to use a blocking library or use a gem off the shelf and then try to fit that into event machine and those
00:09:53.600 two paradigms didn't work as well and so for me it was actually nice to see people start to use go or node.js or other
00:10:01.920 technologies for those applications because they were better suited towards getting those types of things done
00:10:07.600 and that doesn't mean that ruby is not as good or or any less because you know like for me i write a lot of c
00:10:13.600 i do a little bit of go but at the end of the day i still think in ruby and there's certain class
00:10:18.800 applications where ruby is my go-to whereas there's other sorts of applications where if i'm very performance sensitive or i
00:10:25.440 am thinking about getting something done in two megs of ram then maybe ruby's not the right solution there and i can
00:10:31.760 experiment with these other things learn concepts there and then bring those back to ruby to improve ruby in the long term
00:10:38.560 that's great um this is a question for mats since we're going to do one for
00:10:44.959 each of you and then we're gonna jump back to the audience and see what you guys have for us
00:10:50.079 um have you ever thought about creating another new language from scratch so you talked a little bit about that
00:10:55.920 yeah we i just created the stream programming language last december so it was you know
00:11:03.360 this is it was just experiment i have no i had no intention to to make it public
00:11:10.720 but uh you know as a as a you know workplace i i put my source code into
00:11:17.680 the github so the someone found found the the repository and then he passed it to
00:11:24.959 the hack and yes so it became cool again yeah
00:11:31.760 at that time it was the 200 lines of code you know it's just it just it was just a toy
00:11:38.640 with the you know the the huge threat in the hakka news or the reddit and everyone gave a style
00:11:47.120 in a toy program program i had a 3 000 style github stars 200 lines of
00:11:54.839 code that's funny i thought episodes was that
00:12:00.639 you know the community around some kind of the workable working code
00:12:07.839 but the stream proved it was wrong you know
00:12:14.480 it was just it's quite easy to be popular if the
00:12:20.160 haqqanis found it um to follow up um would you have done
00:12:26.639 anything differently looking back now that you know um everything that you know about uh how ruby has progressed and now starting
00:12:33.120 this new thing from scratch as as i mentioned in keynote
00:12:38.160 that 1993 was a totally different situation and then we had the single we had single
00:12:45.839 core machine and we had this very simple programs but if i saw the 2000
00:12:52.959 back then so i would have to do differently for concurrency and i
00:12:58.720 would do different from the i i would have less inherited from pro
00:13:06.079 as a scripting features you know the you know the importance of the scripting feature is uh getting less and less important
00:13:14.079 do you think that m ruby is sort of something you know that would solve some of the
00:13:19.120 problems uh some of them yes the mrb is confirming to the iso standard we
00:13:27.680 defined in 19 2012 and that it lacks
00:13:32.720 the definition of the some kind of the dollar special variables or something like that so the and even
00:13:40.480 regular expression is optional so in that sense uh emerald is much simpler and smaller
00:13:48.800 this is a question for shibata-san you're using ruby from a very practical angle
00:13:54.079 what do you think is the most important benefit that ruby gives you
00:14:22.079 so maybe the question would be why are you still using ruby
00:14:30.639 yeah i will be an interpreter
00:14:36.079 so i think uh ruby rank is also i feel uh i i write
00:14:42.959 a ruby code so i feel uh fun so it's i think most important thing for
00:14:49.920 our ruby so
00:14:58.079 so he feels his coding when he called in ruby you know
00:15:04.720 okay so that means if you're working in other languages you're probably working
00:15:09.839 rather than coding okay you know sometimes we feel that we as we are doing some kind of
00:15:16.480 bookkeeping okay so uh i feel uh
00:15:21.600 i feel uh i wrote uh other languages uh some wrong it is so i feel uh
00:15:28.800 i'm working that i write already i'm programming right so i feel so i
00:15:35.199 guess i guess a lot of us probably share the same sentiments exactly which is why we are all still here
00:15:40.639 right some from even the first ever red dot recon because we all felt that you know using ruby is really productive really fun
00:15:47.839 which is why we continue to do it even though there might be you know other languages out there as
00:15:53.279 well yep um this question is for aaron um
00:16:00.240 a lot of people depend on the improvements that you make to the code and the work that you do every day
00:16:06.720 and people closely follow um what you're doing and what all of you are doing to a certain extent
00:16:12.079 how do you decide what you're working on next
00:16:19.199 oh dear tough questions well so usually i mean basically the way
00:16:26.720 that it works is i take the specific features that i want to do
00:16:32.560 and then i have a system of levers and coins that i flip
00:16:44.079 no basically the stuff that i choose to work on is driven by well it'll either
00:16:50.720 be uh there's a few different things that drives me first off it'll be things that we need for our application
00:16:57.120 so that'll be that's one of the things that i'll work on uh other times it'll just be like somebody files a bug
00:17:02.959 and it's like oh this is a pretty bad bug like we should probably fix that so that's that'll be something i work on
00:17:08.400 and then the probably the third category is where i just get i get distracted and i'm like
00:17:13.760 oh this is such an interesting problem and i just dive in and spend probably too much time on that on that
00:17:19.360 particular thing so it's it's typically one of those three things um but yeah i think most of the time it's
00:17:27.919 driven by the applications that we use at work so that's that's where i put most of the
00:17:34.160 weight um so one last question for amman
00:17:42.320 so you have done a lot of work on performance tuning and you know debugging for for ruby what has been
00:17:48.640 your biggest challenge so far uh when you were doing this performance related work
00:17:53.760 oh that's interesting um
00:17:59.039 the one that comes to mind right away is not even it's a little bit technical but i think so there was a point of like about three
00:18:06.240 to four months before the 2.1 release where i was working very closely with koichi-san and
00:18:12.960 uh we it was a really good collaboration but it was challenging in one in terms of time zones because i
00:18:20.080 found myself basically waiting the entire day for 5 p.m my time because i was like okay koichi says i'm going to wake up
00:18:25.440 and i have like 10 so that was interesting and then also like the language barrier was definitely
00:18:30.799 a big part of it and uh we so we we collaborated on the garbage collector for a long time and
00:18:36.880 a lot of the first couple months was really talking about variable names and doing
00:18:41.919 renamings and refactorings and cleaning up the code so that it was much more easy to understand a lot of it was
00:18:47.840 like you know he would uh ask me questions about like what is the subtle difference
00:18:53.360 between this word and this word in the english language and try to get like the exact right naming but uh it felt kind of cumbersome for
00:19:00.880 for a while but i think it ended up in a really good place where a lot of the commits during
00:19:05.919 that time were like search and replace in like one word to another word and but the end result was after a few
00:19:12.799 weeks of that the code was much easier to read much easier to understand you could look at a function name
00:19:18.000 and really get a sense okay this is what it's doing and so i think that was the most challenging in terms of even
00:19:24.720 understanding a lot of the code understanding why it was written in that way and then getting to a point where we could
00:19:29.760 simplify it i think it ended up in a spot where now it's much easier for anybody who has a basic understanding of c
00:19:36.000 to be able to go in and read that code even though it is you know gt.c is one of the largest most complicated files
00:19:41.840 in the vm right now yeah that's great um and uh to round off back to mats for
00:19:49.600 one more question for you um in a previous interview you mentioned that for the first few years you wrote
00:19:54.960 ruby largely on your own and then people start started to to join and contribute can you tell us a little
00:20:00.320 bit more about how this first community formed right after the i i put
00:20:07.520 right after i put the ruby on the internet on december 95 so i formed the
00:20:15.679 mailing list and i didn't expect many people to to have interest in the
00:20:22.559 new unknown programming language but uh unexpectedly that more than 200 people has joined the
00:20:28.799 mailing list and then the first the first mail in the mailing list is from my friend
00:20:34.159 so the congratulations to me to open your software then the second one is the okay i found
00:20:40.400 the bug the third one was for me and i'm sorry i
00:20:47.039 fixed that bug and first one i find another part
00:20:52.480 so i i realized that it's kind of difficult to to implement the programming language which is
00:20:58.880 the you know the most applications is has intention so the purpose but a
00:21:05.520 programming language can do anything so the it's quite difficult to to predict the
00:21:11.840 combination of the features so the you know the
00:21:17.039 and then back thing i i i we didn't have any test of the language so
00:21:25.440 in that sense you know ruby's is kind of working but uh
00:21:32.159 has a lot of bugs so and easier to find easier to fix so the people uh helping me
00:21:39.520 to fix the bag okay i found the bug and this is the patch to fix that so in
00:21:45.440 that kind the involvement is can uh could become a core
00:21:52.799 of the the core core development team now so we
00:22:01.039 just in that sense that ruby had many
00:22:07.120 smart developers involved in so then from the gradually from the
00:22:12.720 community of the developers and users then their popularity was formed and then
00:22:18.960 dave thomas found the ruby they wrote the book and then dhh found ruby and
00:22:24.720 wrote
00:22:32.159 awesome and now we're here today yeah so it seems like if you want to have form a community you should release
00:22:38.480 buggy software first which people can help fakes no i'm kidding actually i got one question um
00:22:44.799 because we are all doing open source um have you ever felt discouraged
00:22:49.840 when you're doing open source you know ever thought of i don't want to do this anymore it
00:22:54.880 doesn't you know like people are not appreciative of me etc have you ever felt like this and almost
00:23:01.360 wanted to give up well 15 15 years ago
00:23:07.760 the term open source was invented in 1908 i think and then uh soon after that
00:23:15.760 i had a lot of things misunderstanding of the source or free software free as in free beer
00:23:23.280 for the you know or they didn't trust of any open source so that
00:23:29.840 they consider open source as a toy software or something like that it's it's kind of you know discouraging
00:23:36.640 me but not that big to to stop the project but you know i i was back then i was tired
00:23:44.000 to uh explain about the benefit of open source and
00:23:49.440 trustworthiness not the open source software or something like that but you know the situation has changed a lot
00:23:54.960 in the last 15 years what about the rest do you have anything you'd like to add
00:24:03.600 i can give you an earful i suppose ask me tomorrow night after a few years
00:24:10.640 i'll tell you i'll really tell you no the worst honestly the worst for me is like
00:24:16.840 uh so uh maybe you saw andre's talk this morning about security
00:24:21.919 issues for me that's the most i think that's probably the most discouraging thing um
00:24:26.960 especially because like well
00:24:32.320 it's hot it's hard it's hard because somebody comes to you and says like okay i've got a bug and you have to keep it secret uh and by
00:24:39.520 the way i'm gonna tell the world about the bug in on a certain date so now you need to
00:24:46.559 make sure to fix it by that date or everybody's going to know that it's broken and then
00:24:51.600 since you have to do it in secret or since you have to fix it in secret it's harder to get people to review it so
00:24:56.720 it's possible that you the thing that you release is actually broken which this has absolutely happened to me
00:25:04.480 and then you also have the potential of breaking people's software with the security release so maybe you do you fix
00:25:10.159 the bug you release it and then all of a sudden you get people reporting and saying well you actually ruined our application
00:25:16.559 sorry this happened to me with a high profile
00:25:22.720 company who sits to my right
00:25:29.600 uh so yeah i mean that that sort of stuff is that sort of stuff is really discouraging and especially you'll get a
00:25:35.760 lot of people who say like oh how did you how could you have written that book that bug exists
00:25:41.360 when it's just like i don't know i mean it just does so but i think so
00:25:48.400 that's in my opinion that's very discouraging but you just have to remember like well you know we wrote the software it's been
00:25:55.200 there for how who knows how long and i mean it's not my fault that it existed it's your fault
00:26:00.720 for not noticing so
00:26:06.960 i mean that's that's basically just the way i have to think about it but yeah i think after this question we're
00:26:14.000 gonna throw things back to you guys so if you have a question for our panelists please head up to the mics right now so
00:26:20.080 that we can uh go right straight to you afterwards so come on um this is a question for all of you as
00:26:26.960 well the ruby community is really nice because well
00:26:32.640 matt's is very nice and so we are all very nice
00:26:40.159 well if that's the case that leads me to my question so what are some common sources of disagreements between you guys among the contributors
00:26:47.440 within the community and how do you solve them
00:26:53.919 so i try to consider the the everyone is among uh the same team
00:27:00.960 like uh you know sometimes the people complaining about the movie or the the
00:27:06.559 reporting a bug with with very angry feeling but i consider
00:27:13.520 them to be a member of a team like a the team of the big the broader
00:27:20.640 ruby community so the by thinking like that so i don't have to react
00:27:29.120 with the angry nest so i don't have to reflect their feeling
00:27:35.760 so okay okay i'm sorry but uh you can solve the problem solve the issue
00:27:41.120 together so in that sense so we can
00:27:46.480 we at least try to be nice do you think that adding emojis
00:27:53.520 emoji is a great invention
00:28:01.039 in a github it did have issues we have a lot of sushi as a reward okay
00:28:09.520 got it so that makes me wonder when are so when are we going to add macros
00:28:21.279 um great uh so maybe we can go to the questions um if you could let us know who the
00:28:26.559 question is addressed to and what your name is uh this can be for anybody my name is casey
00:28:32.720 ruby i've found has been a fantastic language for people that are brand new to programming because it takes away a
00:28:38.640 lot of the boilerplate a lot of the extra syntax and just lets you start thinking and typing
00:28:44.640 but part of that simplicity um can make it difficult for people that are brand new to programming as well because as
00:28:50.960 soon as you get past that surface layer and you actually try to be a core committer or be a committer to some
00:28:58.880 gem and not just a consumer of these products the complexity gets pretty deep pretty quick and it's been
00:29:05.360 hard for me as a mentor to get people from that first step to the second step of
00:29:11.440 going back and contributing again what advice do you have for me as the mentor and for the people that i
00:29:18.399 mentor in ish that to get past that first step of now you've learned how to code but maybe
00:29:24.960 ruby is your first language and it made things easier for you how do you get to the next part
00:29:37.600 you know i have never been a beginner at least in newbie
00:29:44.640 but right in programming so we often see the very
00:29:51.440 deep complexity often but i think it's reflects the fact the world itself
00:29:59.919 is complex so the problem we are going to solve is complex so the we have to face it so but
00:30:07.840 you know the we have the power of abstraction so the the most of the cases
00:30:15.360 uh that we can abstract away the uh the complexity of the world on
00:30:21.279 the issues but when we first solved those questions uh issues and we have to struggle with that
00:30:29.200 complexity then the only strategy we can take is a
00:30:34.720 divide and conquer so divide the complexity into the small pieces and then abstract away
00:30:41.200 the inside detail into the say class or library or framework the i think that
00:30:47.600 is the only way so we have to step forward bit by bit so then we have to face the complexity
00:30:55.360 of the world i'm not sure i answered the question or not i'll i'll try all right so
00:31:04.080 the question was about getting new ruby developers to contribute to open source
00:31:09.840 stuff essentially we so on the rails team we kind of have to deal with that we get a
00:31:17.279 lot of students every year or so well i think we have them all year honestly but we get a lot of students
00:31:23.519 who are there some of them are new to programming many of them are not new to programming but
00:31:29.519 they're new to ruby and we have to get them working working on rail source code itself
00:31:35.200 one of the biggest challenges for that is you can't ask them to just go look through the bugs that's impossible
00:31:40.640 with a project like rails because it's it's so big or it's so popular that any bugs that
00:31:46.320 are left over i guarantee are hard the reason they are still in the tracker is because they are harmful
00:31:51.360 so it's difficult you can't just point the students straight at that so typically what we do is we come up with
00:31:58.080 particular projects that we want we features we want them to add that we know that they can like
00:32:04.880 basically tailored for their particular skill level so if they're super like if they're
00:32:10.720 really really beginner maybe we'll have them start refactoring tests or something like that just something that's very you know
00:32:17.919 it's still contributing but not not too deeply right not deep into the apis and then if
00:32:23.600 they're more advanced we'll put them you know put them further down but some of the things we'll do is like
00:32:29.039 since they're new projects it'll be a little bit more well i don't want to say greenfield but
00:32:34.720 less brown
00:32:39.760 and then of course we have to make sure that we don't ever put those projects in the bug tracker
00:32:45.039 but that's that's typically our our process for onboarding new new people with development on rails
00:32:52.960 what about for github right i'm sure you have a lot of new developers as well with very old codebase uh yeah that's
00:33:00.480 definitely it's tricky i mean in terms of advice i would say the biggest advice i would give is don't give up right like even to you as
00:33:07.200 a mentor and to the people that are trying to get caught up it's it's not like i
00:33:12.799 started in programming and i was a great opponent i it took me a really long time to learn the basics and put
00:33:18.559 all the building blocks together to a point now where i can jump into the vm and understand what's
00:33:24.720 going on and it just it takes a lot of practice and so um you know like i really like what matt
00:33:32.399 said about divide and conquer i think that's really the only way to approach it is to find those small pieces find the smaller
00:33:37.919 projects and start to put those building blocks together such that you can actually even
00:33:44.000 approach because that's what it is when you're going after a large project like that that's that mindset that you have to go into it
00:33:50.159 with is understanding okay like how do i break this up into maybe five tests or five different libraries or
00:33:56.559 five different smaller pieces and then try to tackle them one by one because if you try to
00:34:02.399 go at it all together and even try to fit the whole problem in your head it's just impossible there's too much to
00:34:07.519 it to try to understand and grapple with thank you so much
00:34:13.280 can we have the next question thank you hi i'm peter and my question is for formats
00:34:20.079 so considering all the progress that has happened on j ruby and robinhood is there a future for mri
00:34:28.159 and if so what is that future if
00:34:34.879 i don't know yeah there you go
00:34:43.280 at least the mri or c ruby will remain as a reference experimentation
00:34:49.919 and then the you know the original series is optimized for the
00:34:56.800 scripting so that the memory footprint and then the
00:35:03.680 startup time is much smaller than the saying will be if so
00:35:10.960 i don't think we use the jailbreak for the tiny script text processing but it does siri
00:35:17.280 also serves that purpose and then you know the new idea is come from uh
00:35:23.920 the creepy always just because you know i i'm a c programmer then my core team is
00:35:29.599 g programmer so the so the crb will remain the breathing edge
00:35:37.200 implementation of ruby language thank you we have a question on this
00:35:43.680 side right hi i'm joel like to pose this
00:35:49.520 question to the entire team um so when
00:35:54.560 in the design of ruby language say someone comes up with a new say language feature
00:36:01.119 that would bring the language forward but at the same time could potentially break backwards
00:36:07.359 compatibility what would be or how would we how would the team tackle such a proposal
00:36:16.560 the right now we are basically rejecting any backwarding compatible changes just
00:36:23.280 because you know that we have the millions of blue users including us
00:36:28.320 here in auditorium and you know we have the tens of millions of lines of
00:36:36.560 recalled so we cannot break them so the we
00:36:43.040 cannot introduce any the background coverable change uh the huge impact incredible change
00:36:51.040 except for the big reasons so maybe uh maybe we
00:36:58.800 i will make it some kind of decision to make a huge background incredible change but in
00:37:04.720 that sense we will see the situation like a python 3 and python 2 or even power 5 and part
00:37:11.920 6. so that's the situation i am not pleased to see
00:37:17.280 so probably i'm i'm not going to make that kind of decision
00:37:22.720 right thank you very much we have one more question here and then one on this side
00:37:27.920 uh this question is for the panel um with all the different versions of ruby out there mri jruby
00:37:34.960 rubinius are there any plans to allow are there any plans to uh
00:37:41.119 formalize the some of the properties of the ruby language in in some kind of form specification
00:37:48.160 yeah so as a standard the jewel we have the iso which is uh
00:37:55.040 the this is kind of subset of the green language though and then we are working on the the
00:38:00.240 updating the iso spec uh 3 3 3 or 1 27 or something like that
00:38:09.359 and then then that is that's that's back you know the
00:38:16.000 the spec comes from iso it's the nothing but stack and then the standard default
00:38:24.400 we are working on will be spec so the wii record team
00:38:31.359 received the administration the ruby spec and we are updating it as a standard executable spec
00:38:40.480 so and then we still have some problems and the corner cases in the
00:38:47.119 respect but we are working on it i hope i hope that there is never a
00:38:52.880 formalized formalized spec because one of the things i really enjoy
00:38:58.079 about ruby programming language the ruby programming language as it seems or the culture is it seems like
00:39:04.079 a very hacker centric culture like it's it's a programming language
00:39:09.680 for hackers by hackers and i'm afraid that introducing some sort of formal like this is how you do it thing would
00:39:17.040 ruin that feeling so i agree so the iso only defined the
00:39:22.640 core so not the corner cases and it it also allows the enhancements
00:39:29.200 for each implementation thank you hi so maybe this time question
00:39:36.320 for committers accept formats imagine that you live in a perfect world
00:39:41.599 where you don't have to care about backwards compatibility what ruby features would you remove from
00:39:47.359 the language two things two things i'm thinking uh
00:39:57.200 the polish variables like a dollar something and then the second one is thread
00:40:07.680 what about the rest of it the others i like threads
00:40:16.800 i would add so if there was something i could add well i would remove the dollar variables for sure what else
00:40:24.400 i don't know but what i would add is a good way to do immutable shareable
00:40:30.079 data structures so that you could share among threads and not break stuff
00:40:36.839 hopefully yeah i'm trying to think uh there's a
00:40:43.520 lot of features that i don't use which maybe removing would make the language simpler and the implementation
00:40:49.119 simpler there's like uh the go-to equivalent the catch and throw stuff
00:40:54.720 there's uh co routines or something right there's
00:41:00.240 there's fibers but there's also the legacy uh close cc
00:41:09.440 it's still live but you have to uh require the continuation
00:41:14.560 yeah continuation correct yeah continuation yeah i'd love to
00:41:22.560 remove that operator yeah
00:41:28.960 i like the flip-flop i don't know why people hate that operator so much i like that
00:41:34.000 operator so i just sorry i didn't have a mic i was saying that i like the flip-flop
00:41:39.359 operator there's a lot of people that hate the flip-flop operator but i like it and i don't know why people hate it so
00:41:44.640 much that if you don't know what it is it's the 2.2 dots and you have a conditional on either
00:41:49.760 side of that maybe it's three dots but you just you do that two dots and you flip it flips back and forth and i like that
00:41:56.240 operator a lot and i don't know why people hate it so much anyway don't remove that
00:42:05.599 something doesn't have the flip top for example anyone we don't have
00:42:10.880 what about you shabbat sun is there anything you'd like to remove
00:42:19.040 so different topics so i hope to
00:42:26.000 minimize standard rivalry so and replace uh obsolete driver into a
00:42:32.720 new r and the model driver is a example for a net hdb to our party
00:42:38.800 so that it's a big incompatible changes so i
00:42:47.040 he's traveling yeah he's trying to solve those problems so we introduced uh in ruby two
00:42:54.960 two two o we introduced a bundle gem so that you can download it as a
00:43:00.079 standard distribution but it's it's a it's implemented by gem
00:43:05.200 so you can replace by gem update so we are making some old uh libraries like
00:43:12.640 a net telnet net http into the into jam and then making it the bundle exams so
00:43:19.520 gradually we can remove it from the standard distribution since they are all in wise and in aspect-wise
00:43:30.720 do we have more questions from the floor
00:43:39.280 i love this reaction i have a question for matt about uh about typing in review 3.0
00:43:47.839 so you say that adding type annotations in ruby feels uh redundant because it's not required
00:43:56.640 but in common lisp comma lisp command is passed as type
00:44:02.240 annotations but they are used as you know in the object system to to
00:44:07.359 specialize methods in generic functions and
00:44:13.040 so they are there but they are used and then they can be used for uh type checking or compiler
00:44:18.319 optimizations so i was wondering if you thought about that for maybe a future version of ruby
00:44:24.640 about introducing something like that like generic functions instead of the small talk like
00:44:32.480 object system yeah the the idea of genetics that
00:44:38.960 genetic fraction is considered before and uh actually
00:44:46.079 i don't know between most 18 years ago 17 years ago the guy named
00:44:53.280 the guy deku implemented the genetic function there are multiple dispatchers in ruby
00:44:58.880 and it's based on the class and he didn't disclose the uh he didn't
00:45:05.359 disclose the implementation he just implemented by himself and he
00:45:10.400 just uh report the result and he reported it it was failure that i
00:45:18.079 back then i didn't understand what he said but uh thinking yeah and then he passed away a
00:45:24.480 few years ago and i'm thinking right now the the genetic function dispatch is
00:45:32.079 based on class so which is totally against the dark typing so that i think that is the the reason
00:45:41.280 guy is considered it was failure well from a user's perspective
00:45:48.000 it's different than having classes right yeah you have to yeah in multiple spots you have to
00:45:53.440 uh specify class to to dispatch but uh the dispersed
00:45:59.760 baseline class is against the duct typing okay and what about the micro system uh
00:46:07.760 i recommended some kind of a transpiler okay okay thank you
00:46:18.560 this is a question i guess kind of to the panel um ruby comes with mutable strings by
00:46:24.000 default and a lot of the new languages out there are just giving up on this concept and going with
00:46:30.400 non-mutable strings by default and you have to opt in and is this something that could be considered
00:46:37.200 removed from let's say ruby for ruby 3 in favor of performance or is this one
00:46:44.160 of those cases where elegance is always going to win uh the compatibility wins like
00:46:49.359 unfortunately but uh we have some kind of optimization says that uh
00:46:55.440 freeze does not uh invoke the method and then freeze by in compile time
00:47:02.079 like uh we we we may add some kind of the prefix or suffix to say this this one
00:47:09.440 this uh strings is frozen okay i'm immutable and then the things
00:47:16.720 would come in in the future or maybe we have some kind of the magic variable
00:47:22.319 so that all the literals in this file is immutable or something like that
00:47:27.680 so we are thinking about those kind of ideas but uh you know it always in the the
00:47:34.720 explicit path of the you know transition otherwise we cannot
00:47:44.400 do any progress in the sake for the sake of
00:47:50.839 incompatibility any more questions from the floor we have time for maybe one more question
00:48:02.000 nope come on come on come on don't be shy
00:48:08.800 we're all very nice you don't see matt and aaron and you know shibara-san aman in town every
00:48:14.720 day so okay if not then i'll ask a question
00:48:20.559 yeah we'll ask that question so as you can see a lot of you know us over here are
00:48:26.640 pretty shy and at the same time probably most of us are involved in building applications rather than going deep into
00:48:34.000 ruby itself how for people who really want to get
00:48:39.440 into ruby into committing to ruby and contributing to ruby what do you think
00:48:45.599 is the best thing for them to do so you know the
00:48:53.839 the for the first step so don't consider yourself uh do don't exclude yourself from the
00:49:01.920 core community so you are part of our team so in a broader broader ruby community
00:49:10.160 which is the is a bridge to the core community so
00:49:16.400 the the problem you see is the framework program for us and the program we see is probably for
00:49:22.960 you guys so the you you can do many things so use ruby and see the
00:49:30.800 the uh you can think about the how to improve the
00:49:38.160 language or to find out the the com the complaint about the okay this this this is
00:49:46.079 this is too slow or something like that and then then go submit your proposal complaint to the
00:49:53.520 the back trackers and then then we start discussing about discuss about the uh the issue
00:50:01.760 so in that sense we can move on we can improve the language so we have we can have the flesh in
00:50:09.440 aspect fresh insight from the community so that that is the driving force of the core
00:50:16.079 community called core developers so to consider yourself uh
00:50:22.160 involved in the core developers
00:50:28.240 i would say if you run into things so if you want to get involved what you should do is if you ever run
00:50:34.880 into something you don't understand why it's working or you just want to understand how something works
00:50:41.119 you should always be asking why it does that so say okay why is this particular thing
00:50:46.240 slow or why is this you know why does it behave this way and this probably won't sound very fun
00:50:53.359 but you should just keep researching it and don't give up until you understand exactly why it behaves that way
00:50:59.599 and once you do that you're going to start finding yourself digging into eventually digging deeper and deeper into the thing trying to understand that
00:51:06.400 particular thing that you're dealing with and once you do that maybe you'll discover why and then you'll
00:51:11.599 fix it send a patch or if you finally do understand why and there's a valid
00:51:16.720 reason for it you've gained some knowledge about the internals or the thing that you're trying to deal with
00:51:21.920 but the important thing is to be persistent about it as iman was saying earlier
00:51:28.640 well thank you so much i think uh you have something to add yeah so
00:51:35.280 the conversation is not the only uh core language code so we have our
00:51:42.079 ruby rank website and api documentation so you can contribute to uh
00:51:50.160 translation or to uh www rank so example for uh emoji guys
00:51:57.920 junior portas he leads to uh translate chinese language from our english
00:52:05.440 on www rank so i think uh east asia have a lot of
00:52:13.599 languages so our thailand philippines and
00:52:21.119 japan chinese so but wwe rank main language is
00:52:27.200 uh english so that roka ranges is not available on our website
00:52:34.240 the please contribute uh translate uh these rank these
00:52:40.960 translate your language from english so we are welcome to uh
00:52:47.920 your contribute on our github www.rank or is available on github
00:52:55.200 we accept via our pro requests please i'm on anything to add
00:53:02.800 i was just gonna echo what aaron and uh um there's a lot of different ways to
00:53:08.559 contribute right like you can contribute in terms of vm code but there's also like we talked earlier about standard
00:53:14.640 library we're trying to clean up a lot of the code in there is legacy it's very old going in there helping split it out into
00:53:20.480 gem or even just improving it rewriting it to match style guys writing more tests for it
00:53:26.319 doing documentation doing even the english documentation a lot of it has typos or was written by non-native
00:53:32.400 english speakers and so there's parts where it's hard to parse and someone can easily go in and you know like a lot of
00:53:38.960 times if you're reading documentation you see something like that make it a point to go in and open a
00:53:44.319 pull request and just rewrite those two words in that one sentence because it really pays it forward and next time
00:53:50.319 somebody is reading through that it makes it that much easier for them to understand but at the same time if you are
00:53:55.839 interested in getting into the deep vm level stuff uh ruby is a great way of doing that you
00:54:02.000 know i started as an application developer and i just had that itch like aaron said i was like
00:54:07.280 writing all this application code and i wanted to know what is it actually doing under the hood when i write this one line of ruby that's so
00:54:12.800 expressive a lot of things are happening and there's n number of objects being created how does object actually exist
00:54:19.680 how does ruby allocate them get rid of them and you can dive into the implementation and
00:54:26.480 there's a lot of good resources in terms of ruby under the microscope and other books like that that really
00:54:32.640 explain how the language is implemented and even if you don't end up contributing at that level just
00:54:38.000 knowing how that works really can inform how you write ruby code because if you
00:54:43.520 understand that you know like if you're writing a line of ruby and there's a string on there and you understand that
00:54:48.960 under the hood every time that a loop is being iterated over there's a new object being created over it because you didn't
00:54:55.200 call freeze at the end you know that really informs and makes it makes you that much more aware of
00:55:00.559 when you're writing ruby code if whether or not it's going to be performed because you actually understand what is it doing out of the hood how is it being
00:55:05.839 executed and that's a scratch you know an issue that i've scratched a lot and i've written a lot of tools
00:55:11.920 that i would encourage you to also check out you know sam up there has some tools as well a lot of profilers and debuggers and tracers
00:55:19.440 and those really give you that level of insight where you have an application you know all of us have big applications you can attach these
00:55:25.680 debuggers and stuff to it and start to understand okay like when this request is being processed what's
00:55:30.720 happening and that's really the best way to get in there and a lot of times you'll find random bugs and
00:55:35.839 things that can be made easily better you know like even a few months ago i attached a very
00:55:43.040 simple c memory profiler and found that 20 megs of ram was just being wasted
00:55:48.079 because uh every time you require a file uh we would expand the file name and we were
00:55:53.599 allocating a four kilobyte buffer for the file name even if the file name was four bytes there was a four kill by
00:55:59.359 buffer and our app had thousands and thousands of requires added up to 20 megs you know all i did was attach a memory profiler and just
00:56:06.160 saw that's what was happening uh so at this point i want to give a plug as well um
00:56:12.319 because even though i said you know the people here don't really contribute back to ruby actually in the last year we have
00:56:18.640 seen a very promising project coming out from singapore itself it's called ruby bench which is working
00:56:24.559 on profiling the various ruby pool requests and making sure that you know they don't
00:56:30.559 regress in terms of performance so it's actually done by uh gosiang over there and it's probably
00:56:35.920 going to talk about it more in his talk tomorrow yeah
00:56:44.960 uh yeah i'm pretty bullish i hope we can see more people over here as well participating and contributing more to
00:56:50.960 ruby as well next year it could be you um i think that the folks here on stage
00:56:57.520 have done so much hard work to make sure that we don't have to so let's give them a big thanks
00:57:17.119 you
Explore all talks recorded at Red Dot Ruby Conference 2015
+18