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