| Age | Commit message (Collapse) | Author |
|
https://github.com/ruby/erb/commit/bbde68fcd5
|
|
(https://github.com/ruby/erb/pull/100)
For Ractor compatibility.
https://github.com/ruby/erb/commit/43f0876595
|
|
|
|
https://github.com/ruby/erb/commit/bbaaf1f51b
|
|
(https://github.com/ruby/erb/pull/94)
This commit updates the Ruby version to follow the commit in Ruby master branch.
https://github.com/ruby/ruby/commit/6d81969b475262aba251e99b518181bdf7c5a523
https://github.com/ruby/erb/commit/a5d42484e4
|
|
https://github.com/ruby/erb/commit/332e200060
|
|
https://github.com/ruby/erb/commit/e8d382a83e
|
|
https://github.com/ruby/erb/commit/daa0e8712f
|
|
(https://github.com/ruby/erb/pull/89)
This project's `NEWS.md` file appears to be the closest thing to a
changelog file that I could find. The change here links to the file in
the released version's branch. RubyGems.org will use this metadata to
display a link to this file on the gem's release pages.
https://github.com/ruby/erb/commit/85a4f10332
|
|
https://github.com/ruby/erb/commit/3dc0bb09bf
|
|
https://github.com/ruby/erb/commit/25fdde41d6
|
|
https://github.com/ruby/erb/commit/ddfc1ba57e
|
|
https://github.com/ruby/erb/commit/9b16b2d553
|
|
https://github.com/ruby/erb/commit/7fed01c4de
|
|
The documentation must be just before the definition.
https://github.com/ruby/erb/commit/62282e32d9
|
|
https://github.com/ruby/erb/commit/e8f3e64581
|
|
foo.gemspec should be located under the `lib/foo` directory.
|
|
https://github.com/ruby/erb/commit/42f389dc45
|
|
Apparently `$LOAD_PATH.resolve_feature_path('erb/escape')` returns true
for miniruby but `require 'erb/escape'` fails on it.
I still don't want to check it and rescue LoadError at the same time
because the code looks too complicated. Let me just rescue LoadError for
platforms that don't build native extensions.
https://github.com/ruby/erb/commit/3081c6b20f
|
|
(https://github.com/ruby/erb/pull/61)"
This reverts commit https://github.com/ruby/erb/commit/1c9200aab071.
Now that we've bumped BASERUBY, we shouldn't need to rescue the
LoadError.
https://github.com/ruby/erb/commit/846b20fe0e
|
|
https://github.com/ruby/erb/commit/c2d1f82817
|
|
(https://github.com/ruby/erb/pull/61)"
This reverts commit https://github.com/ruby/erb/commit/1c393aa738f3.
https://github.com/ruby/erb/commit/1c9200aab0
|
|
https://github.com/ruby/erb/commit/08b544cdb8
|
|
Even cgi.gem publicly defines CGI::VERSION today. It's just weird that
ERB::VERSION is kept private at this point.
https://github.com/ruby/erb/commit/46801cbd47
|
|
(https://github.com/ruby/erb/pull/61)
https://github.com/ruby/erb/commit/1c393aa738
|
|
(https://github.com/ruby/erb/pull/60)
https://github.com/ruby/erb/commit/de9bb8c3cc
|
|
https://github.com/ruby/erb/commit/9152ce8db4
|
|
This commit inlines instructions for Class#new. To make this work, we
added a new YARV instructions, `opt_new`. `opt_new` checks whether or
not the `new` method is the default allocator method. If it is, it
allocates the object, and pushes the instance on the stack. If not, the
instruction jumps to the "slow path" method call instructions.
Old instructions:
```
> ruby --dump=insns -e'Object.new'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,10)>
0000 opt_getconstant_path <ic:0 Object> ( 1)[Li]
0002 opt_send_without_block <calldata!mid:new, argc:0, ARGS_SIMPLE>
0004 leave
```
New instructions:
```
> ./miniruby --dump=insns -e'Object.new'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,10)>
0000 opt_getconstant_path <ic:0 Object> ( 1)[Li]
0002 putnil
0003 swap
0004 opt_new <calldata!mid:new, argc:0, ARGS_SIMPLE>, 11
0007 opt_send_without_block <calldata!mid:initialize, argc:0, FCALL|ARGS_SIMPLE>
0009 jump 14
0011 opt_send_without_block <calldata!mid:new, argc:0, ARGS_SIMPLE>
0013 swap
0014 pop
0015 leave
```
This commit speeds up basic object allocation (`Foo.new`) by 60%, but
classes that take keyword parameters see an even bigger benefit because
no hash is allocated when instantiating the object (3x to 6x faster).
Here is an example that uses `Hash.new(capacity: 0)`:
```
> hyperfine "ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end'" "./ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end'"
Benchmark 1: ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end'
Time (mean ± σ): 1.082 s ± 0.004 s [User: 1.074 s, System: 0.008 s]
Range (min … max): 1.076 s … 1.088 s 10 runs
Benchmark 2: ./ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end'
Time (mean ± σ): 627.9 ms ± 3.5 ms [User: 622.7 ms, System: 4.8 ms]
Range (min … max): 622.7 ms … 633.2 ms 10 runs
Summary
./ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end' ran
1.72 ± 0.01 times faster than ruby --disable-gems -e'i = 0; while i < 10_000_000; Hash.new(capacity: 0); i += 1; end'
```
This commit changes the backtrace for `initialize`:
```
aaron@tc ~/g/ruby (inline-new)> cat test.rb
class Foo
def initialize
puts caller
end
end
def hello
Foo.new
end
hello
aaron@tc ~/g/ruby (inline-new)> ruby -v test.rb
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [arm64-darwin24]
test.rb:8:in 'Class#new'
test.rb:8:in 'Object#hello'
test.rb:11:in '<main>'
aaron@tc ~/g/ruby (inline-new)> ./miniruby -v test.rb
ruby 3.5.0dev (2025-03-28T23:59:40Z inline-new c4157884e4) +PRISM [arm64-darwin24]
test.rb:8:in 'Object#hello'
test.rb:11:in '<main>'
```
It also increases memory usage for calls to `new` by 122 bytes:
```
aaron@tc ~/g/ruby (inline-new)> cat test.rb
require "objspace"
class Foo
def initialize
puts caller
end
end
def hello
Foo.new
end
puts ObjectSpace.memsize_of(RubyVM::InstructionSequence.of(method(:hello)))
aaron@tc ~/g/ruby (inline-new)> make runruby
RUBY_ON_BUG='gdb -x ./.gdbinit -p' ./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems ./test.rb
656
aaron@tc ~/g/ruby (inline-new)> ruby -v test.rb
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [arm64-darwin24]
544
```
Thanks to @ko1 for coming up with this idea!
Co-Authored-By: John Hawthorn <john@hawthorn.email>
|
|
- Freeze on assignment
- Recreate Hash on registration
https://github.com/ruby/erb/commit/12d69fc2b3
|
|
https://github.com/ruby/erb/commit/b68bfed6a8
|
|
https://github.com/ruby/erb/commit/c594f2fb86
|
|
(https://github.com/ruby/erb/pull/49)
I was surprised to see erb show up when I was using memory_profiler on
my app. ERB::Compiler#compile has a blank string literal, and it
ended up allocating some 41532 blank strings for a relatively small surface
area.
https://github.com/ruby/erb/commit/b7e45c2bdc
|
|
https://github.com/ruby/erb/commit/8c8ff1551b
|
|
(https://github.com/ruby/erb/pull/42)
https://github.com/ruby/erb/commit/526885923e
|
|
https://github.com/ruby/erb/commit/3bb67009dd
|
|
(https://github.com/ruby/erb/pull/39)
* Skip using the extension for truffleruby as well
* Just skip building the C extension for TruffleRuby
* Skip rake compile for truffleruby
* Use resolve_feature_path
* Revert "Use resolve_feature_path"
This reverts commit https://github.com/ruby/erb/commit/acc1e0c0ffaf.
* Use resolve_feature_path with LoadError guard
https://github.com/ruby/erb/commit/85dcb08439
|
|
https://github.com/ruby/erb/commit/2809a54d88
|
|
(https://github.com/ruby/erb/pull/38)
Close #32
|
|
ERB::Util.html_escape has been public, but ERB::Util#html_escape had
been private.
https://github.com/ruby/erb/commit/e62210bf56
|
|
(https://github.com/ruby/erb/pull/37)
Prior to this commit, requiring erb/escape first and then requiring erb
did not work as expected.
|
|
(https://github.com/ruby/erb/pull/36)
https://github.com/ruby/erb/commit/f74833cc07
|
|
|
|
https://github.com/ruby/erb/commit/03bc4a8274
|
|
https://github.com/ruby/erb/commit/3d84ea83bc
|
|
https://github.com/ruby/erb/commit/c8aa019c26
|
|
https://github.com/ruby/erb/commit/5df06b8473
|