Commit graph

9854 commits

Author SHA1 Message Date
Jean Boussier
73771e4b19 ObjectSpace.dump_all: dump shapes as well
I see several arguments in doing so.

First they use a non trivial amount of memory, so for various memory
profiling/mapping tools it is relevant to have visibility of the space
occupied by shapes.

Then, some pathological code can create a tons of shape, so it is
valuable to have a way to have a way to observe shapes without having
to compile Ruby with `SHAPE_DEBUG=1`.

And additionally it's likely much faster to dump then this way than
to use `RubyVM::Shape`.

There are however a few open questions:

- Shapes can't respect the `since:` argument. Not sure what to do when
  it is provided. Would probably make sense to not dump them.
- Maybe it would make more sense to have a separate `ObjectSpace.dump_shapes`?
- Maybe instead `dump_all` should take a `shapes: false` argument?

Additionally, `ObjectSpace.dump_shapes` is added for the use case of
debugging the evolution of the shape tree.
2022-12-08 18:46:16 +01:00
Sutou Kouhei
b9d055d760 [ruby/stringio] bump up to 3.0.4
5ba853d6ff
2022-12-08 05:12:15 +00:00
Hiroshi SHIBATA
9fce6014b5 [ruby/psych] Bump version to 5.0.1
bdf20e6042
2022-12-08 02:08:25 +00:00
Daniel Colson
64cdf8bae7 Update dependencies 2022-12-06 12:37:23 -08:00
Jemma Issroff
e4aba8f519 Add shape_id to heap dump 2022-12-05 14:33:16 -08:00
Hiroshi SHIBATA
fa865f5752 [ruby/bigdecimal] Bump version to 3.1.3
25a75c2033
2022-12-05 10:44:30 +00:00
Hiroshi SHIBATA
3f8dad0463 [ruby/zlib] Bump version to 3.0.0
f1ce5e3e8d
2022-12-05 08:26:21 +00:00
Hiroshi SHIBATA
3396b10ff1 [ruby/win32ole] Bump version to 1.8.9
e4a1f3a2bf
2022-12-05 08:22:51 +00:00
Hiroshi SHIBATA
faafb7b740 [ruby/stringio] Revert "Bump version to 3.0.4"
This reverts commit aeb7e1a0bd.

003dd0d003
2022-12-05 08:03:29 +00:00
Hiroshi SHIBATA
95e272baf8 [ruby/stringio] Bump version to 3.0.4
aeb7e1a0bd
2022-12-05 08:02:25 +00:00
Hiroshi SHIBATA
40ee1eea76 [ruby/psych] Bump version to 5.0.0
4fed0941b9
2022-12-05 07:44:39 +00:00
Hiroshi SHIBATA
0d5ad44ac3 [ruby/pathname] Bump version to 0.2.1
7e796cc78e
2022-12-05 16:33:43 +09:00
Hiroshi SHIBATA
ccb41a0a36 [ruby/nkf] Bump version to 0.1.2
98607bd2be
2022-12-05 06:51:37 +00:00
Hiroshi SHIBATA
8c596369e8 [ruby/io-nonblock] Bump version to 0.2.0
46c0ec245e
2022-12-05 06:22:15 +00:00
Hiroshi SHIBATA
f6dad39544 [ruby/fcntl] Bump version to 1.0.2
20fd776303
2022-12-05 06:09:41 +00:00
Hiroshi SHIBATA
a0deb64909 [ruby/etc] Bump version to 1.4.1
b3e9d9ceb0
2022-12-05 06:07:32 +00:00
Hiroshi SHIBATA
fcbafe7f4a [ruby/digest] Bump version to 3.1.1
fad16582ea
2022-12-05 05:56:58 +00:00
Hiroshi SHIBATA
774dad4915 [ruby/date] Bump version to 3.3.0
ac1642cf39
2022-12-05 05:19:16 +00:00
Nobuyoshi Nakada
b8a73e704d [ruby/pathname] [Misc #19155] [DOC] Addion of absolute paths
3cb5ed2576
2022-12-03 15:53:20 +00:00
Nobuyoshi Nakada
678bcfcaa6 [ruby/io-console] Check rawmode option names strictly
aa8fc7e947
2022-12-02 10:33:35 +00:00
S-H-GAMELINKS
1a64d45c67 Introduce encoding check macro 2022-12-02 01:31:27 +09:00
Hiroshi SHIBATA
c8bfbbc25e
Removed documentation for incomplete option about [Feature #17134] 2022-11-30 17:20:38 +09:00
Takashi Kokubun
d2c62426e5 [ruby/erb] Skip using the extension for truffleruby as well
(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 acc1e0c0ff.

* Use resolve_feature_path with LoadError guard

85dcb08439
2022-11-27 06:30:48 +00:00
Takashi Kokubun
574896a0ce [ruby/erb] Define ERB::Escape module
(https://github.com/ruby/erb/pull/38)

Close #32
2022-11-26 05:32:25 +00:00
Takashi Kokubun
addb1cbbfd [ruby/erb] Keep ERB::Util#html_escape private
ERB::Util.html_escape has been public, but ERB::Util#html_escape had
been private.

e62210bf56
2022-11-25 08:54:18 +00:00
Nobuyoshi Nakada
1a47521c44
Use rb_sprintf instead of deprecated sprintf 2022-11-25 08:51:14 +09:00
Takashi Kokubun
c480f589c2 [ruby/erb] Rename erb.so to erb/escape.so
(https://github.com/ruby/erb/pull/35)

1280046952
2022-11-24 23:22:00 +00:00
Nobuyoshi Nakada
612aa5c24a
Use class methods of File over Kernel.open and IO.read 2022-11-21 22:16:49 +09:00
Yudai Takada
29e6d97517
Fix typos (#6775)
* s/Innteger/Integer/

* s/diretory/directory/

* s/Bufer/Buffer/

* s/defalt/default/

* s/covearge/coverage/
2022-11-20 21:07:18 -08:00
yui-knk
d8601621ed Enhance keep_tokens option for RubyVM::AbstractSyntaxTree parsing methods
Implementation for Language Server Protocol (LSP) sometimes needs token information.
For example both `m(1)` and `m(1, )` has same AST structure other than node locations
then it's impossible to check the existence of `,` from AST. However in later case,
it might be better to suggest variables list for the second argument.
Token information is important for such case.

This commit adds these methods.

* Add `keep_tokens` option for `RubyVM::AbstractSyntaxTree.parse`, `.parse_file` and `.of`
* Add `RubyVM::AbstractSyntaxTree::Node#tokens` which returns tokens for the node including tokens for descendants nodes.
* Add `RubyVM::AbstractSyntaxTree::Node#all_tokens` which returns all tokens for the input script regardless the receiver node.

[Feature #19070]

Impacts on memory usage and performance are below:

Memory usage:

```
$ cat test.rb
root = RubyVM::AbstractSyntaxTree.parse_file(File.expand_path('../test/ruby/test_keyword.rb', __FILE__), keep_tokens: true)

$ /usr/bin/time -f %Mkb /usr/local/bin/ruby -v
ruby 3.2.0dev (2022-11-19T09:41:54Z 19070-keep_tokens d3af1b8057) [x86_64-linux]
11408kb

# keep_tokens :false
$ /usr/bin/time -f %Mkb /usr/local/bin/ruby test.rb
17508kb

# keep_tokens :true
$ /usr/bin/time -f %Mkb /usr/local/bin/ruby test.rb
30960kb
```

Performance:

```
$ cat ../ast_keep_tokens.yml
prelude: |
  src = <<~SRC
    module M
      class C
        def m1(a, b)
          1 + a + b
        end
      end
    end
  SRC
benchmark:
  without_keep_tokens: |
    RubyVM::AbstractSyntaxTree.parse(src, keep_tokens: false)
  with_keep_tokens: |
    RubyVM::AbstractSyntaxTree.parse(src, keep_tokens: true)

$ make benchmark COMPARE_RUBY="./ruby" ARGS=../ast_keep_tokens.yml
/home/kaneko.y/.rbenv/shims/ruby --disable=gems -rrubygems -I../benchmark/lib ../benchmark/benchmark-driver/exe/benchmark-driver \
            --executables="compare-ruby::./ruby -I.ext/common --disable-gem" \
            --executables="built-ruby::./miniruby -I../lib -I. -I.ext/common  ../tool/runruby.rb --extout=.ext  -- --disable-gems --disable-gem" \
            --output=markdown --output-compare -v ../ast_keep_tokens.yml
compare-ruby: ruby 3.2.0dev (2022-11-19T09:41:54Z 19070-keep_tokens d3af1b8057) [x86_64-linux]
built-ruby: ruby 3.2.0dev (2022-11-19T09:41:54Z 19070-keep_tokens d3af1b8057) [x86_64-linux]
warming up..

|                     |compare-ruby|built-ruby|
|:--------------------|-----------:|---------:|
|without_keep_tokens  |     21.659k|   21.303k|
|                     |       1.02x|         -|
|with_keep_tokens     |      6.220k|    5.691k|
|                     |       1.09x|         -|
```
2022-11-21 09:01:34 +09:00
Samuel Williams
ea8a7287e2
Add support for sockaddr_un on Windows. (#6513)
* Windows: Fix warning about undefined if_indextoname()

* Windows: Fix UNIXSocket on MINGW and make .pair more reliable

* Windows: Use nonblock=true for read tests with scheduler

* Windows: Move socket detection from File.socket? to File.stat

Add S_IFSOCK to Windows and interpret reparse points accordingly.
Enable tests that work now.

* Windows: Use wide-char functions to UNIXSocket

This fixes behaviour with non-ASCII characters.
It also fixes deletion of temporary UNIXSocket.pair files.

* Windows: Add UNIXSocket tests for specifics of Windows impl.

* Windows: fix VC build due to missing _snwprintf

Avoid usage of _snwprintf, since it fails linking ruby.dll like so:

  linking shared-library x64-vcruntime140-ruby320.dll
  x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol snwprintf
  x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol vsnwprintf_l

whereas linking miniruby.exe succeeds.

This patch uses snprintf on the UTF-8 string instead.

Also remove branch GetWindowsDirectoryW, since it doesn't work.

* Windows: Fix dangling symlink test failures

Co-authored-by: Lars Kanis <kanis@comcard.de>
2022-11-17 14:50:25 -08:00
Nobuyoshi Nakada
dc1c4e4675 Clean extension build directories and exts.mk file 2022-11-16 18:42:46 +09:00
Nobuyoshi Nakada
be65cf5325 Remove -j option from MFLAGS for sub-makes 2022-11-16 18:42:46 +09:00
Kenta Murata
c75de1e330 [ruby/bigdecimal] Add fallback definition of MAYBE_UNUSED
b2123faa52
2022-11-15 06:59:11 +00:00
Kenta Murata
3c60e030b5 [ruby/bigdecimal] Replace sprintf by snprintf
d6f5bb40c7
2022-11-15 04:02:01 +00:00
Kenta Murata
3147a3900f [ruby/bigdecimal] Mark some functions MAYBE_UNUSED
d70a4d53e5
2022-11-15 00:34:23 +00:00
Kenta Murata
8d82f4ba1c [ruby/bigdecimal] Add specific value allocators
* Add NewZero* and NewOne* function families
* Use them instead of VpAlloc for allocating 0 and 1

9276a94ac7
2022-11-13 12:33:29 +00:00
Kenta Murata
802dce4acd [ruby/bigdecimal] Add and use specific value allocators
* Add rbd_allocate_struct_zero for making 0.0
* Add rbd_allocate_struct_one for making 1.0
* Use them to replace VpAlloc calls
* Renmae VpPt5 to VpConstPt5

40c826f5e6
2022-11-13 06:01:27 +00:00
Kenta Murata
019f53de5c [ruby/bigdecimal] Make VPrint function always available
5391f7e92c
2022-11-13 06:01:27 +00:00
Kenta Murata
d1f55dea86 [ruby/bigdecimal] Tweak VpAlloc
* Stop reusing mx and mf
* Check szVal == NULL first
* Treat special values before checking the leading `#`

14f3d965f8
2022-11-13 04:29:19 +00:00
Kenta Murata
bbb9f72353 [ruby/bigdecimal] Rewrite allocation functions
* Rename them
* Make allocation count operations atomic

a5ab34a115
2022-11-13 03:47:40 +00:00
Kenta Murata
2703410289 [ruby/bigdecimal] Twak GetPrecisionInt and rename it to check_int_precision
69d0588a3b
2022-11-13 02:46:42 +00:00
Kenta Murata
ef1c6109b1 [ruby/bigdecimal] Tweak check_rounding_mode_option
e1c6c9be25
2022-11-13 02:02:02 +00:00
Kenta Murata
74c6e6e565 [ruby/bigdecimal] Rewrite check_rounding_mode function
Use table-lookup algorithm instead of consecutive if-statements.

23eaff3ae5
2022-11-13 02:02:01 +00:00
Kenta Murata
b89769b978 [ruby/bigdecimal] [Doc] Fix the document of n_significant_digits
91b72a9341
2022-11-13 02:02:00 +00:00
Kenta Murata
977aac057f [ruby/bigdecimal] Make GetVpValue inline
1b642e2e59
2022-11-13 02:02:00 +00:00
Kenta Murata
0d5248673d [ruby/bigdecimal] Make BigDecimal_double_fig inline
4ecf04da7a
2022-11-13 02:01:59 +00:00
Jemma Issroff
c726c48a3d Remove numiv from RObject
Since object shapes store the capacity of an object, we no longer
need the numiv field on RObjects. This gives us one extra slot which
we can use to give embedded objects one more instance variable (for a
total of 3 ivs). This commit removes the concept of numiv from RObject.
2022-11-10 10:11:34 -05:00
Jemma Issroff
5246f4027e Transition shape when object's capacity changes
This commit adds a `capacity` field to shapes, and adds shape
transitions whenever an object's capacity changes. Objects which are
allocated out of a bigger size pool will also make a transition from the
root shape to the shape with the correct capacity for their size pool
when they are allocated.

This commit will allow us to remove numiv from objects completely, and
will also mean we can guarantee that if two objects share shapes, their
IVs are in the same positions (an embedded and extended object cannot
share shapes). This will enable us to implement ivar sets in YJIT using
object shapes.

Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
2022-11-10 10:11:34 -05:00
Peter Zhu
68bd1d6855 Fix compiler issues in test on C99
Fixes the following issue when compiling using C99:

ext/-test-/rb_call_super_kw/rb_call_super_kw.c
ext/-test-/random/loop.c:16:39: error: extra ';' outside of a function [-Werror,-Wextra-semi]
RB_RANDOM_DEFINE_INIT_INT32_FUNC(loop);
2022-11-10 09:07:20 -05:00