Successfully reported this slideshow.
Your SlideShare is downloading. ×

How to specify `frozen_string_literal: true`

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 13 Ad
Advertisement

More Related Content

Slideshows for you (20)

Similar to How to specify `frozen_string_literal: true` (20)

Advertisement

More from Kazuhiro Nishiyama (20)

Recently uploaded (20)

Advertisement

How to specify `frozen_string_literal: true`

  1. 1. How to specify frozen_string_literal: true Kazuhiro NISHIYAMA RubyKaigi 2017 LT 2017/09/19 Powered by Rabbit 2.2.1
  2. 2. self.introduce One of Ruby committers Twitter, GitHub: @znz 1/12
  3. 3. What’s frozen_string_literal magic comment Specify string literals are frozen or not per file Frozen string literals are faster Generate less objects Reduce GC 2/12
  4. 4. Example After coding if exist example: # -*- coding: utf-8 -*- # frozen_string_literal: true p ''.frozen? #=> true 3/12
  5. 5. Past release Add frozen_string_literal: false for almost *.rb files when Ruby 2.3.0 For compatibility with --enable=frozen-string- literal command line option of ruby 4/12
  6. 6. Changes in this year Recent Ruby programs tend to specify true, but ruby standard libraries are false. So I changed to frozen_string_literal: true in some files which assigned to no maintainer in doc/ maintainers.rdoc. 5/12
  7. 7. Review points before change Almost RuntimeError: can't modify frozen String points are: String#<< bang methods (e.g. String#sub!) 6/12
  8. 8. Overlooked modification IO#read(length, out_buffer) this buffer is overlooked 7/12
  9. 9. Find modified string literal --debug=frozen-string-literal command line option is very useful examples: ruby --debug=frozen-string-literal test.rb make test-all TESTS='-v base64' RUBYOPT=--debug=frozen-string-literal 8/12
  10. 10. Tests --debug=frozen-string-literal needs to run codes. So tests are very important. 9/12
  11. 11. No change if can’t If no tests, there is no need to forcibly change it. I think working codes are useful than broken faster codes. 10/12
  12. 12. mkmf.rb mkmf.rb has many tests But mkmf.rb is too complex to me in a short time So I remain false 11/12
  13. 13. Conclusion No tests may overlook modifications Use frozen_string_literal: true if you can You can use frozen_string_literal: false in some cases for compatibility for --enable=frozen- string-literal 12/12Powered by Rabbit 2.2.1

×