rabbit-slide-aycabta-rubykaigi-2018 2018.6.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.rabbit +1 -0
  3. data/README.rd +6 -0
  4. data/Rakefile +16 -0
  5. data/asakusarb.jpg +0 -0
  6. data/asakusarb.png +0 -0
  7. data/bonfire.jpg +0 -0
  8. data/config.yaml +15 -0
  9. data/gorge_0.jpg +0 -0
  10. data/gorge_1.jpg +0 -0
  11. data/irb-reboot.rab +739 -0
  12. data/locmap.gif +0 -0
  13. data/locmap_venue.png +0 -0
  14. data/pdf/rubykaigi-2018-irb-reboot.pdf +0 -0
  15. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/bindings-by-gobject-introspection.svg +499 -0
  16. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/bindings-by-swig.svg +273 -0
  17. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/cairo-gc-trigger.pdf +0 -0
  18. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/cairo-no-gc-trigger.pdf +0 -0
  19. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/clear-code-rubykaigi-2018-silver-sponsor.png +0 -0
  20. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/code-party.png +0 -0
  21. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/csv-arrow-parquet.pdf +0 -0
  22. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/csv-arrow.pdf +0 -0
  23. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/jekyll-task-i18n-red-data-tools.gif +0 -0
  24. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/pdf-clickable.png +0 -0
  25. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/rabbit-slide-show.png +0 -0
  26. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/ruby-gtk3-with-ruby-gi.svg +411 -0
  27. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/ruby-gtk3-without-ruby-gi.svg +313 -0
  28. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/rubykaigi-2017-extension-by-cpp-title.pdf +1853 -4
  29. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/rurema-search.png +0 -0
  30. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/shocker.jpeg +0 -0
  31. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-fast.png +0 -0
  32. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-good.png +0 -0
  33. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-hare.png +0 -0
  34. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-raw.png +0 -0
  35. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-slow.png +0 -0
  36. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare-tortoise.png +0 -0
  37. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare.gif +0 -0
  38. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/images/the-tortoise-and-the-hare.png +0 -0
  39. data/rabbit-slide-kou-rubykaigi-2018-2018.6.1.3/pdf/rubykaigi-2018-my-way-with-ruby.pdf +0 -0
  40. data/space-pirates-logo.svg +51 -0
  41. data/theme.rb +77 -0
  42. data/usa1.png +0 -0
  43. data/waterfall_0.jpg +0 -0
  44. data/waterfall_1.jpg +0 -0
  45. metadata +101 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5228b727f9e4e25a11e83df75ed476eb9d2cc5687538a71574577e42c72bc931
4
+ data.tar.gz: 5321d8bee33e4e3a78370a9edd118301c38b2291fd07d3da031a1fa78b75a2b5
5
+ SHA512:
6
+ metadata.gz: 613eeb0b65cce0c5ddacd51c2f553b97d2ea278b57893c4f8ecb29c3e22ac28394fc88de570c6dc7addee9934f81f9cb82211f6ae7bc3e3afa4ac254d903b2d8
7
+ data.tar.gz: d94553ed44ff44830cb15d76e3f9ea5db40ca576f1a61194413eb922340bd43ab0f07cd584866914158d184f637e158a9a29695ab2cfb2654f841125ee5a515b
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ irb-reboot.rab
@@ -0,0 +1,6 @@
1
+ = IRB Reboot: Modernize Implementation and Features
2
+
3
+ == License
4
+
5
+ CC BY-SA 4.0
6
+
@@ -0,0 +1,16 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ end
11
+
12
+ desc "Tag #{spec.version}"
13
+ task :tag do
14
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
15
+ sh("git", "push", "--tags")
16
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: rubykaigi-2018
3
+ base_name: irb-reboot
4
+ tags:
5
+ - rabbit
6
+ - rubykaigi
7
+ presentation_date: 2018-06-02
8
+ version: 2018.6.2.0
9
+ licenses:
10
+ - CC-BY-SA-4.0
11
+ author:
12
+ markup_language: :rd
13
+ name: ITOYANAGI Sakura
14
+ email: aycabta@gmail.com
15
+ rubygems_user: aycabta
Binary file
Binary file
@@ -0,0 +1,739 @@
1
+ = IRB Reboot:\nModernize Implementation and Features
2
+
3
+ :author
4
+ ITOYANAGI Sakura
5
+ :theme
6
+ .
7
+ :allotted-time
8
+ 38m
9
+ : content-source
10
+ RubyKaigi 2018
11
+
12
+ = Greeting
13
+
14
+ 1st day's morning,
15
+
16
+ it was cloudy.
17
+
18
+ = Greeting
19
+
20
+ 2nd day's morning,
21
+
22
+ it was rainy.
23
+
24
+ = Greeting
25
+
26
+ But today...
27
+
28
+ = Greeting
29
+
30
+ It's a beautiful day outside.
31
+
32
+ = Greeting
33
+
34
+ Birds are singing, flowers are blooming...
35
+
36
+ = Greeting
37
+
38
+ On days like these...
39
+
40
+ = IRB Reboot:\nModernize Implementation and Features
41
+
42
+ = Let me introduce myself
43
+
44
+ :name
45
+ ITOYANAGI Sakura
46
+ :GitHub
47
+ aycabta
48
+ :maintainer
49
+ RDoc
50
+
51
+ = Community: Asakusa.rb
52
+
53
+ # image
54
+ # src = asakusarb.jpg
55
+ # relative-height = 80
56
+ # caption = Asakusa.rb every Ruby Tuesday
57
+ # relative-padding-top = 0
58
+ # relative-padding-bottom = 0
59
+ # relative-padding-right = 0
60
+ # relative-padding-left = 0
61
+
62
+ = Company:\nSpace Pirates, LLC.
63
+
64
+ # image
65
+ # src = space-pirates-logo.svg
66
+ # relative-height = 80
67
+ # caption = Space Pirates, LLC.
68
+ # relative-padding-top = 0
69
+ # relative-padding-bottom = 0
70
+ # relative-padding-right = 0
71
+ # relative-padding-left = 0
72
+
73
+ = Hobby: Climbing
74
+
75
+ I planed to climb Mt. Zao, it's the highest mountain in Miyagi. The highest mountain is the nearest place to space. It fits for Space Pirates.
76
+
77
+ = Hobby: Climbing
78
+
79
+ But it's so far from this venue, so I went to ((*gorge*)) near here.
80
+
81
+ = Hobby: Climbing
82
+
83
+ The ((*gorge*)) means narrow river between escarpments.
84
+
85
+ = Hobby: Climbing
86
+
87
+ The Tohoku University official web site provides digging points map for fossils.
88
+
89
+ = Hobby: Climbing
90
+
91
+ # image
92
+ # src = locmap.gif
93
+ # relative-height = 75
94
+ # caption = http://www.museum.tohoku.ac.jp/exhibition_info/mini/fosss/locality/locmap.html
95
+ # relative-padding-top = 0
96
+ # relative-padding-bottom = 0
97
+ # relative-padding-right = 0
98
+ # relative-padding-left = 0
99
+
100
+ = Hobby: Climbing
101
+
102
+ # image
103
+ # src = locmap.gif
104
+ # relative-height = 75
105
+ # caption = A dozen pink points are fossils digging points.
106
+ # relative-padding-top = 0
107
+ # relative-padding-bottom = 0
108
+ # relative-padding-right = 0
109
+ # relative-padding-left = 0
110
+
111
+ = Hobby: Climbing
112
+
113
+ # image
114
+ # src = locmap_venue.png
115
+ # relative-height = 75
116
+ # caption = This venue is hemmed in by many fossils digging points.
117
+ # relative-padding-top = 0
118
+ # relative-padding-bottom = 0
119
+ # relative-padding-right = 0
120
+ # relative-padding-left = 0
121
+
122
+ = Hobby: Climbing
123
+
124
+ I went to some digging points.
125
+
126
+ = Hobby: Climbing
127
+
128
+ # image
129
+ # src = waterfall_0.jpg
130
+ # relative-height = 90
131
+ # caption = Waterfall
132
+ # relative-padding-top = 0
133
+ # relative-padding-bottom = 0
134
+ # relative-padding-right = 0
135
+ # relative-padding-left = 0
136
+
137
+ = Hobby: Climbing
138
+
139
+ # image
140
+ # src = waterfall_1.jpg
141
+ # relative-height = 90
142
+ # caption = Waterfall
143
+ # relative-padding-top = 0
144
+ # relative-padding-bottom = 0
145
+ # relative-padding-right = 0
146
+ # relative-padding-left = 0
147
+
148
+ = Hobby: Climbing
149
+
150
+ # image
151
+ # src = gorge_0.jpg
152
+ # relative-height = 90
153
+ # caption = Gorge
154
+ # relative-padding-top = 0
155
+ # relative-padding-bottom = 0
156
+ # relative-padding-right = 0
157
+ # relative-padding-left = 0
158
+
159
+ = Hobby: Climbing
160
+
161
+ # image
162
+ # src = gorge_1.jpg
163
+ # relative-height = 90
164
+ # caption = Gorge
165
+ # relative-padding-top = 0
166
+ # relative-padding-bottom = 0
167
+ # relative-padding-right = 0
168
+ # relative-padding-left = 0
169
+
170
+ = Hobby: Climbing
171
+
172
+ I burst through from 4m to 10m many waterfalls into several kilometers gorge.
173
+
174
+ = Hobby: Climbing
175
+
176
+ # image
177
+ # src = bonfire.jpg
178
+ # relative-height = 60
179
+ # caption = I bivouacked in the gorge with a bonfire for cooking rice and miso soup.
180
+ # relative-padding-top = 0
181
+ # relative-padding-bottom = 0
182
+ # relative-padding-right = 0
183
+ # relative-padding-left = 0
184
+
185
+ = Hobby: Climbing
186
+
187
+ When I was cooking rice and miso soup early morning by bonfire I was given notice "Today, we have Asakusa.rb" so I escaped the gorge quickly and went to Asakusa.rb by bullet train and joined it and went back to Sendai by midnight highway bus,
188
+
189
+ = Hobby: Climbing
190
+
191
+ in a 24 hours period.
192
+
193
+ And joined pre-party of RubyKaigi.
194
+
195
+ = Hobby: Climbing
196
+
197
+ It was the hardest experience of this RubyKaigi.
198
+
199
+ = Hobby: Climbing
200
+
201
+ In gorge, I didn't find a fossil of the aimed whale, but found so many ((*shell beds(dense shell fossils)*)) and leaf's fossils.
202
+
203
+ = Hobby: Climbing
204
+
205
+ Shell...?
206
+
207
+ = Today's topic
208
+
209
+ IRB Reboot:\nModernize Implementation and Features
210
+
211
+ = Recent years keiju-san's
212
+
213
+ In the several past RubyKaigis, keiju-san who is godfather of Ruby and the author of IRB talked about old Ruby.
214
+
215
+ = Recent years keiju-san's
216
+
217
+ He said
218
+
219
+ ((*"The first language design of Ruby was like shell."*))
220
+
221
+ in "Ruby Archaeology"\nat RubyKaigi 2013.
222
+
223
+ = Recent years keiju-san's
224
+
225
+ After that, keiju-san carries on talking about Ruby and shell.
226
+
227
+ = Recent years keiju-san's
228
+
229
+ * 2014: Reish, an unix shell for rubyist.
230
+ * 2015: Usage and implementation of Reish which is an Unix shell for Rubyist
231
+ * 2017: Irb 20th anniversary memorial session: Reish and Irb2
232
+
233
+ = Recent years keiju-san's
234
+
235
+ Next session of Hagi(#rubykaigiC) is keiju-san's one, don't miss it.
236
+
237
+ = Today's topic
238
+
239
+ Let's back up a minute.
240
+
241
+ = Today's topic
242
+
243
+ I sent 2 patches to IRB.
244
+
245
+ * #14683 IRB with Ripper
246
+ * #14787 Show documents when completion
247
+
248
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
249
+
250
+ I talked about RDoc with Ripper,
251
+
252
+ "Ruby Parser\n
253
+ In IRB 20th Anniversary...\n
254
+ Now Let Time Resume"
255
+
256
+ at RubyKaigi 2017.
257
+
258
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
259
+
260
+ Ruby syntax is very complex.
261
+
262
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
263
+
264
+ Ruby's parser is spaghetti.
265
+
266
+ * (('wait'))Lexical analyzer is tightly coupled with parser
267
+ * (('wait'))parse.y has over 11,000 lines
268
+ * (('wait'))The overwhelming weight of ((*syntax*)) to come and the uncertainty of (({((*lex_state*))})) hung over us.
269
+
270
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
271
+
272
+ Ruby's syntax is\nvery dirty.
273
+
274
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
275
+
276
+ Ruby's syntax is\nvery ๐Ÿ™…(('del:dirty'))๐Ÿ™….
277
+
278
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
279
+
280
+ Ruby's syntax is\nvery ๐Ÿ™†complex๐Ÿ™†.
281
+
282
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
283
+
284
+ Ruby's syntax\n๐Ÿ˜‰abrades๐Ÿ˜‰ parser developer.
285
+
286
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
287
+
288
+ But, the abradable syntax for parser developer\n((*is gentle for Ruby users*))\nby matz.
289
+
290
+ It's great point of Ruby.
291
+
292
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
293
+
294
+ So RDoc had very many bugs in parsing Ruby code.
295
+
296
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
297
+
298
+ I fixed so many bugs of RDoc, and replaced it fixed RDoc with Ripper version.
299
+
300
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
301
+
302
+ Ripper is one of Ruby's standard libraries of lexical analysis by parse.y.
303
+
304
+ = #14683 IRB with Ripper\n...How use RDoc use Ripper
305
+
306
+ I think that Ripper is best way for parsing Ruby code, for following latest Ruby syntax.
307
+
308
+ = #14683 IRB with Ripper
309
+
310
+ But IRB implement pure Ruby parser. It's hard to support Ruby's new syntax.
311
+
312
+ = #14683 IRB with Ripper
313
+
314
+ I thought that Ripper makes IRB's source code parsing better.
315
+
316
+ = #14683 IRB with Ripper
317
+
318
+ I discussed Ruby's REPL with matz, and matz said "I implemented mruby's REPL(mirb), learning from IRB's history".
319
+
320
+ = #14683 IRB with Ripper
321
+
322
+ REPL needs when code block will end(close) because REPL evaluates it at the timing.
323
+
324
+ = #14683 IRB with Ripper
325
+
326
+ The mirb uses
327
+
328
+ * token's (({lex_state}))
329
+ * (({parser->lstate}))
330
+ * syntax error messages
331
+ * (({parser->error_buffer[0].message}))
332
+
333
+ (The (({parser})) is a\n(({struct mrb_parser_state})))
334
+
335
+ = #14683 IRB with Ripper
336
+
337
+ In CRuby,
338
+
339
+ * token's (({lex_state}))
340
+ * (({Ripper}))
341
+ * syntax error messages
342
+ * (({RubyVM::InstructionSequence}))
343
+
344
+ = #14683 IRB with Ripper
345
+
346
+ I ported mirb's implementation to IRB.
347
+
348
+ = #14683 IRB with Ripper
349
+
350
+ IRB has some prompt features, (({PROMPT_N})), (({PROMPT_S})), and (({%NNi})).
351
+
352
+ = #14683 IRB with Ripper
353
+
354
+ * (({PROMPT_N}))
355
+ * (('wait'))Prompt when\nthe code line is continued
356
+ * (({PROMPT_S}))
357
+ * (('wait'))Prompt when\nthe code block is in literal
358
+ * (({%NNi}))
359
+ * (('wait'))Nesting level of\nthe code block
360
+
361
+ = #14683 IRB with Ripper
362
+
363
+ * (({PROMPT_N}))
364
+ * ((*Ripper*))\n
365
+ * (({PROMPT_S}))
366
+ * ((*Ripper*))\n
367
+ * (({%NNi}))
368
+ * ((*Ripper*))\n
369
+
370
+ = #14683 IRB with Ripper
371
+
372
+ In CRuby, I could resolve the parameters of prompt by Ripper.
373
+
374
+ = #14683 IRB with Ripper
375
+
376
+ The (({PROMPT_N})) is a part of "when the code block is ended" logic.
377
+
378
+ = #14683 IRB with Ripper
379
+
380
+ Inside "splitted sentence", IRB uses (({PROMPT_N})) prompt.
381
+
382
+ Like:
383
+
384
+ # enscript ruby
385
+ method(a,
386
+ b,
387
+ c)
388
+
389
+ = #14683 IRB with Ripper
390
+
391
+ The (({PROMPT_S})) is implemented by checking corresponding open and close tokens of literals.
392
+
393
+ = #14683 IRB with Ripper
394
+
395
+ Literal tokens:
396
+
397
+ * (({"}))
398
+ * (({'}))
399
+ * percent literals
400
+ * (({%q{})) and (({}}))
401
+ * (({%w{})) and (({}}))
402
+ * blah blah blah
403
+ * here-document
404
+
405
+ = #14683 IRB with Ripper
406
+
407
+ Example:
408
+
409
+ # enscript ruby
410
+ "This
411
+ is
412
+ multiline
413
+ string"
414
+
415
+ = #14683 IRB with Ripper
416
+
417
+ Example:
418
+
419
+ # enscript ruby
420
+ %w{
421
+ array
422
+ of
423
+ strings
424
+ }
425
+
426
+ = #14683 IRB with Ripper
427
+
428
+ Inside String or other literal, IRB uses (({PROMPT_S})) prompt.
429
+
430
+ = #14683 IRB with Ripper
431
+
432
+ The (({%NNi})) is implemented by count corresponding name space open and close tokens.
433
+
434
+ = #14683 IRB with Ripper
435
+
436
+ * Increase nesting level when takes open token
437
+ * (({if})), (({unless})), (({while})), (({until})), (({rescue}))
438
+ * skip post-fix version (it doesn't need (({end})))
439
+ * (({def})), (({do})), (({case})), (({for})), (({begin})), (({class})), (({module}))
440
+ * (({[})), (({{})), (({(}))
441
+
442
+ = #14683 IRB with Ripper
443
+
444
+ * Decrease down nesting level when takes open token
445
+ * (({end}))
446
+ * (({]})), (({}})), (({)}))
447
+
448
+ = #14683 IRB with Ripper
449
+
450
+ # enscript ruby
451
+ # nesting level is 0
452
+ class C # increase nesting level to 1
453
+ def m # increase nesting level to 2
454
+ if true # increase nesting level to 3
455
+ 1 if true # skip (post-fix if)
456
+ end # decrease nesting level to 2
457
+ end # decrease nesting level to 1
458
+ end # decrease nesting level to 0
459
+ # <=== evaluation!
460
+
461
+ = #14683 IRB with Ripper
462
+
463
+ Actual example by default:
464
+
465
+ # enscript ruby
466
+ โ†“ %NNi (nesting level)
467
+ irb(main):001:0> def foo(a,
468
+ irb(main):002:2* b) # PROMPT_N
469
+ irb(main):003:1> <<-EOM
470
+ irb(main):004:1" Hello, # PROMPT_S
471
+ irb(main):005:1" World! # PROMPT_S
472
+ irb(main):006:1" EOM # PROMPT_S
473
+ irb(main):007:1> end
474
+ => :foo
475
+ irb(main):008:0>
476
+
477
+ = ((*#14683*)) IRB with Ripper
478
+
479
+ https://bugs.ruby-lang.org/issues/14683
480
+
481
+ = ((*#14683*)) IRB with Ripper
482
+
483
+ This removes
484
+
485
+ * lib/irb/slex.rb (283 lines)
486
+ * lib/irb/ruby-token.rb (268 lines)
487
+
488
+ = ((*#14683*)) IRB with Ripper
489
+
490
+ This simplifies
491
+
492
+ * lib/irb/ruby-lex.rb (1181 to 287 lines)
493
+
494
+ = ((*#14683*)) IRB with Ripper
495
+
496
+ Ruby parser of IRB was shrunk from total 1732 lines to 287 lines.
497
+
498
+ = ((*#14683*)) IRB with Ripper
499
+
500
+ The simple implementation is best, because Ruby syntax is complex.
501
+
502
+ The simple implementation is easy to support and keep the gentleness of Ruby.
503
+
504
+ = #14787 Show documents when completion
505
+
506
+ This is second patch for IRB.
507
+
508
+ = #14787 Show documents when completion
509
+
510
+ I talked about this Q&A time at RubyKaigi 2017.
511
+
512
+ = #14787 Show documents when completion
513
+
514
+ First, RDoc's RI binary files are installed to Ruby's directory.
515
+
516
+ = #14787 Show documents when completion
517
+
518
+ CRuby:
519
+
520
+ $ tar xvzf ruby-2.5.1.tar.gz
521
+ $ cd ruby-2.5.1
522
+ $ autoconf
523
+ $ ./configure
524
+ $ make
525
+ $ make install # <=== RDoc runs inside
526
+
527
+ = #14787 Show documents when completion
528
+
529
+ CRuby:
530
+
531
+ $ rbenv install 2.5.1 # <=== RDoc runs inside
532
+
533
+ = #14787 Show documents when completion
534
+
535
+ RubyGems:
536
+
537
+ $ gem install rails # <=== RDoc runs inside
538
+
539
+ = #14787 Show documents when completion
540
+
541
+ But many users set:
542
+
543
+ $ gem install rails --no-document
544
+
545
+ = #14787 Show documents when completion
546
+
547
+ Many blogs recommend:
548
+
549
+ $ cat ~/.gemrc
550
+ install: --no-document
551
+ update: --no-document
552
+
553
+ = #14787 Show documents when completion
554
+
555
+ Unfortunately many users don't need documents data, but I understand it.
556
+
557
+ = #14787 Show documents when completion
558
+
559
+ Because it's ((*just*)) for RI((({ri})) command).
560
+
561
+ = #14787 Show documents when completion
562
+
563
+ Usage of class:
564
+
565
+ $ ri 'String'
566
+
567
+ = #14787 Show documents when completion
568
+
569
+ Usage of instance method:
570
+
571
+ $ ri 'String#gsub'
572
+
573
+ = #14787 Show documents when completion
574
+
575
+ Usage of class method:
576
+
577
+ $ ri 'String.new'
578
+
579
+ = #14787 Show documents when completion
580
+
581
+ Bothersome.
582
+
583
+ = #14787 Show documents when completion
584
+
585
+ I wrote on the ticket:
586
+
587
+ # blockquote
588
+ # title = #14787
589
+ RDoc installs all documents to Ruby's directory by default.
590
+
591
+ = #14787 Show documents when completion
592
+
593
+ # blockquote
594
+ # title = #14787
595
+ Many users never use it because it's just for RI("ri" command).
596
+
597
+ = #14787 Show documents when completion
598
+
599
+ # blockquote
600
+ # title = #14787
601
+ I think that it is a reason of that many users don't attach importance to documentation.
602
+
603
+ = #14787 Show documents when completion
604
+
605
+ I want to improve the importance of RDoc's data.
606
+
607
+ = #14787 Show documents when completion
608
+
609
+ shevegen (Robert A. Heiler) replied to the ticket:
610
+
611
+ # blockquote
612
+ # title = #14787 shevegen
613
+ I also do not use "ri" on the commandline.
614
+
615
+ = #14787 Show documents when completion
616
+
617
+ # blockquote
618
+ # title = #14787 shevegen
619
+ I would not know why, because I myself simply do not use local look-up ways for documentation normally.
620
+
621
+ = #14787 Show documents when completion
622
+
623
+ It's the same opinion of me.
624
+
625
+ = #14787 Show documents when completion
626
+
627
+ And the continuation of shevegen's comment:
628
+
629
+ = #14787 Show documents when completion
630
+
631
+ # blockquote
632
+ # title = #14787 shevegen
633
+ I really "just google".
634
+
635
+ = #14787 Show documents when completion
636
+
637
+ # blockquote
638
+ # title = #14787 shevegen
639
+ And using the browser is about 100x more convenient for me as well.
640
+
641
+ = #14787 Show documents when completion
642
+
643
+ It's the exact same opinion of me.
644
+
645
+ = #14787 Show documents when completion
646
+
647
+ Perfect.
648
+
649
+ = #14787 Show documents when completion
650
+
651
+ I'm actually sad.
652
+
653
+ = #14787 Show documents when completion
654
+
655
+ I want to improve the importance of RDoc's data(2).
656
+
657
+ = #14787 Show documents when completion
658
+
659
+ IRB(with Readline) completes namespace such as classes, modules, methods and so on when it caught TAB key.
660
+
661
+ = #14787 Show documents when completion
662
+
663
+ In the patch of this ticket, I use RDoc as a library.
664
+
665
+ = #14787 Show documents when completion
666
+
667
+ When you press TAB key one more just after that namespace is exact matched, RI document is shown.
668
+
669
+ = #14787 Show documents when completion
670
+
671
+ Demonstration
672
+
673
+ = #14787 Show documents when completion
674
+
675
+ This is just an aside, I want Ruby's documentation ((*design*)).
676
+
677
+ = #14787 Show documents when completion
678
+
679
+ In the ticket, I talked about language documentation design.
680
+
681
+ = #14787 Show documents when completion
682
+
683
+ # blockquote
684
+ # title = #14787
685
+ Perl has "perldoc" feature and users easily access documents of modules by "perldoc" command.
686
+
687
+ = #14787 Show documents when completion
688
+
689
+ # blockquote
690
+ # title = #14787
691
+ Python has "docstring" feature and users can access it on REPL.
692
+
693
+ = #14787 Show documents when completion
694
+
695
+ # blockquote
696
+ # title = #14787
697
+ Those are each language's design of importance.
698
+
699
+ = #14787 Show documents when completion
700
+
701
+ # blockquote
702
+ # title = #14787
703
+ Users use the language on the documentation design, so library developers write documents on the documentation design.
704
+
705
+ = #14787 Show documents when completion
706
+
707
+ # blockquote
708
+ # title = #14787
709
+ Ruby doesn't have documentation design like Perl and Python.
710
+
711
+ = #14787 Show documents when completion
712
+
713
+ # blockquote
714
+ # title = #14787
715
+ Ruby just has RDoc, IRB, and any other supports, but these are just fragmented features, these are not a documentation design.
716
+
717
+ = Documentation design
718
+
719
+ I want to improve Ruby's documentation design.
720
+
721
+ = Documentation design
722
+
723
+ This ticket is a slice of my documentation design.
724
+
725
+ = Documentation design
726
+
727
+ I want to improve\n((*the gentleness*))\nof Ruby's documentation design.
728
+
729
+ = Documentation design
730
+
731
+ I think that\n((*the gentleness for users*))\nis very important in Ruby.
732
+
733
+ = Documentation design
734
+
735
+ Please remove\n(({--no-document}))\nfor\nimprovement documentation at Ruby 2.6 or later.
736
+
737
+ = Thank you for your attention
738
+
739
+ Please write documents!