Commit graph

807 commits

Author SHA1 Message Date
Takashi Kokubun
2b713dcb89 merge revision(s) d33e3d47b8: [Backport #20704]
[Bug #20704] Win32: Fix chdir to non-ASCII path

	On Windows, `chdir` in compilers' runtime libraries uses the active
	code page, but command line arguments in ruby are always UTF-8, since
	commit:33ea2646b98adb49ae2e1781753bf22d33729ac0.
2024-11-04 14:36:36 -08:00
Takashi Kokubun
a40645e115 merge revision(s) 01b13886: [Backport #20562]
[Bug #20562] Categorize `RUBY_FREE_AT_EXIT` warning as experimental
2024-07-08 15:42:06 -07:00
Peter Zhu
97b1bf9ac1
[Bug #20270] Fix --parser=prism (#10970)
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
2024-06-11 16:43:32 -07:00
Jean byroot Boussier
d0327a7224
Don't add +YJIT to RUBY_DESCRIPTION until it's actually enabled (#10920)
If you start Ruby with `--yjit-disable`, the `+YJIT` shouldn't be
added until `RubyVM::YJIT.enable` is actually called. Otherwise
it's confusing in crash reports etc.

Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2024-06-05 14:54:24 -07:00
Takashi Kokubun
64c52cd1c2 RJIT: Add --rjit-trace to allow TracePoint during JIT 2023-12-21 21:05:13 -08:00
HParker
7ef90b3978 Correct free_on_exit env var to free_at_exit 2023-12-20 14:36:32 +09:00
Aaron Patterson
df0bfde2b2 We need to load builtins so that they work
Before this commit no methods defined in Ruby were being loaded. For
example `class` or `tap` methods would not exist.

[ruby-core:115793] [Bug #20073]
2023-12-19 08:53:52 -08:00
Matt Valentine-House
893fe30ef2 [PRISM] Fix crash when --parser=prism called with stdin
[Bug #20071]

Currently Ruby crashes when the --parser=prism flag is used either with
no input, or with input that is being redirected from stdin. So all of
the following will crash

ruby --parser=prism
ruby --parser=prism < test_code.rb
cat test_code.rb | ruby --parser=prism

This commit checks whether the input is assumed to be from stdin, and
then processes that as a file.

This will fix the second and third case above, but will cause a slight
behavioural changes for the first case - Ruby will treat stdin as an
empty file in this case and exit, rather than waiting for data to be
piped into stdin.
2023-12-18 19:44:44 +00:00
Nobuyoshi Nakada
2f595c744e
Adjust styles [ci skip] 2023-12-17 00:21:00 +09:00
Adam Hess
a604fe4262 update message to clarify compiler, not parser
Co-authored-by: Ufuk Kayserilioglu <ufuk@paralaus.com>
2023-12-15 13:42:19 -05:00
HParker
55326a915f Introduce --parser runtime flag
Introduce runtime flag for specifying the parser,

```
ruby --parser=prism
```

also update the description:

```
$ ruby --parser=prism --version
ruby 3.3.0dev (2023-12-08T04:47:14Z add-parser-runtime.. 0616384c9f) +PRISM [x86_64-darwin23]
```

[Bug #20044]
2023-12-15 13:42:19 -05:00
Takashi Kokubun
e282d7b880 Avoid warning --jit when only YJIT is enabled 2023-12-13 00:05:12 -08:00
Adam Hess
6816e8efcf Free everything at shutdown
when the RUBY_FREE_ON_SHUTDOWN environment variable is set, manually free memory at shutdown.

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Peter Zhu <peter@peterzhu.ca>
2023-12-07 15:52:35 -05:00
HParker
b8b319dd1a Revert "allow enabling Prism via flag or env var"
This reverts commit 9b76c7fc89.
2023-12-06 10:21:12 +09:00
Nobuyoshi Nakada
c146da50bd
Adjust styles [ci skip] 2023-12-06 09:43:10 +09:00
HParker
9b76c7fc89 allow enabling Prism via flag or env var
Enable Prism using either --prism

    ruby --prism test.rb

or via env var

    RUBY_PRISM=1 ruby test.rb
2023-12-05 12:17:14 -05:00
Nobuyoshi Nakada
2e8a4470ae
Remove rb_libruby_selfpath for MJIT 2023-12-04 10:32:21 +09:00
Kevin Newton
ec86b2eb39
[prism] Update to use new options APIs 2023-11-03 10:13:50 -04:00
Takashi Kokubun
ad4f973ecd
YJIT: Always define method codegen table at boot (#8807) 2023-11-02 09:15:48 -07:00
Kevin Newton
55b81e419f
Use new prism prettyprint APIs 2023-10-26 15:23:46 -04:00
Jemma Issroff
2573d56884 [PRISM] Change --dump keyword to prism_parsetree 2023-10-26 13:29:04 -03:00
Jemma Issroff
8f71a5c530 [PRISM] Move scope_node itself to CRuby, create prism_compile.h 2023-10-25 18:18:35 -03:00
Takashi Kokubun
6beb09c2c9
YJIT: Add RubyVM::YJIT.enable (#8705) 2023-10-19 10:54:35 -07:00
Koichi Sasada
c9990c8d0f "+MN" in description
If `RUBY_MN_THREADS=1` is given, this patch shows `+MN` in
`RUBY_DESCRIPTION` like:

```
$ RUBY_MN_THREADS=1 ./miniruby  --yjit -v
ruby 3.3.0dev (2023-10-17T04:10:14Z master 908f8fffa2) +YJIT +MN [x86_64-linux]
```

Before this patch, a warning is displayed if `$VERBOSE` is given.
However it can make troubles with tests (with `$VERBOSE`), do not
show any warning with a MN threads configuration.
2023-10-17 17:43:52 +09:00
Jemma Issroff
d705885286
[PRISM] Add --dump=prism mode (#8643) 2023-10-13 12:24:40 -07:00
Koichi Sasada
be1bbd5b7d M:N thread scheduler for Ractors
This patch introduce M:N thread scheduler for Ractor system.

In general, M:N thread scheduler employs N native threads (OS threads)
to manage M user-level threads (Ruby threads in this case).
On the Ruby interpreter, 1 native thread is provided for 1 Ractor
and all Ruby threads are managed by the native thread.

From Ruby 1.9, the interpreter uses 1:1 thread scheduler which means
1 Ruby thread has 1 native thread. M:N scheduler change this strategy.

Because of compatibility issue (and stableness issue of the implementation)
main Ractor doesn't use M:N scheduler on default. On the other words,
threads on the main Ractor will be managed with 1:1 thread scheduler.

There are additional settings by environment variables:

`RUBY_MN_THREADS=1` enables M:N thread scheduler on the main ractor.
Note that non-main ractors use the M:N scheduler without this
configuration. With this configuration, single ractor applications
run threads on M:1 thread scheduler (green threads, user-level threads).

`RUBY_MAX_CPU=n` specifies maximum number of native threads for
M:N scheduler (default: 8).

This patch will be reverted soon if non-easy issues are found.

[Bug #19842]
2023-10-12 14:47:01 +09:00
Takashi Kokubun
7db6f448ed Use a better variable name for w 2023-10-04 10:25:46 -07:00
Takashi Kokubun
577ff858bc Make the function names consistent 2023-10-04 10:25:46 -07:00
Takashi Kokubun
01c462ce6a YJIT: Move help descriptions to options.rs 2023-10-04 10:25:46 -07:00
Nobuyoshi Nakada
49d27435d0 Split show_usage_line and add ruby_show_usage_line 2023-10-04 10:25:46 -07:00
Nobuyoshi Nakada
582369bb4b Remove magic numbers from show_usage_line 2023-10-04 10:25:46 -07:00
Maxime Chevalier-Boisvert
ea491802fa
YJIT: add heuristic to avoid compiling cold ISEQs (#8522)
* YJIT: Add counter to measure how often we compile "cold" ISEQs (#535)

Fix counter name in DEFAULT_COUNTERS

YJIT: add --yjit-cold-threshold, don't compile cold ISEQs

YJIT: increase default cold threshold to 200_000

Remove rb_yjit_call_threshold()

Remove conflict markers

Fix compilation errors

Threshold 1 should compile immediately

Debug deadlock issue with test_ractor

Fix call threshold issue with tests

* Revert exception threshold logic. Document option in yjid.md

* (void) for 0 parameter functions in C99

* Rename iseq_entry_cold => cold_iseq_entry

* Document --yjit-cold-threshold in ruby.c

* Update doc/yjit/yjit.md

Co-authored-by: Jean byroot Boussier <jean.boussier+github@shopify.com>

* Shorten help string to appease test

* Address bug found by Kokubun. Reorder logic.

---------

Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Co-authored-by: Jean byroot Boussier <jean.boussier+github@shopify.com>
2023-10-03 17:45:46 -04:00
Nobuyoshi Nakada
bab01d284c [Feature #19790] Rename BUGREPORT_PATH as CRASH_REPORT 2023-09-25 22:57:28 +09:00
Nobuyoshi Nakada
f714448be7 Honor the same option given later 2023-09-25 22:57:28 +09:00
Nobuyoshi Nakada
70e8a08295 Add --bugreport-path option
It has precedence over the environment variable `RUBY_BUGREPORT_PATH`.
2023-09-25 22:57:28 +09:00
Nobuyoshi Nakada
530b5ef6b6 Test bug_report 2023-09-25 22:57:28 +09:00
Nobuyoshi Nakada
c87f2a4f15
[Bug #19887] RUBYOPT should work without leading - 2023-09-18 10:14:46 +09:00
Peter Zhu
0aa404b957 Change heap init environment variable names
This commit changes RUBY_GC_HEAP_INIT_SIZE_{40,80,160,320,640}_SLOTS to
RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS. This is easier to use because the
user does not need to determine the slot sizes (which can vary between
32 and 64 bit systems). They now just use the heap names
(`GC.stat_heap.keys`).
2023-08-30 19:37:11 -04:00
Peter Zhu
9ea9f99248 [Feature #19785] Deprecate RUBY_GC_HEAP_INIT_SLOTS
This environment variable is replaced by
`RUBY_GC_HEAP_INIT_SIZE_%d_SLOTS`, so it doesn't make sense to keep it.
2023-08-25 21:50:56 -04:00
Nobuyoshi Nakada
6aa16f9ec1 Move SCRIPT_LINES__ away from parse.y 2023-08-25 18:23:05 +09:00
Jeremy Evans
347993e95c Call ruby_init_setproctitle before process_options
Fixes [Bug #11269]
2023-08-22 21:45:20 -07:00
Nobuyoshi Nakada
b56e5c6b94 Fix the precedence of --backtrace-limit option
In general, if the same option specifying a single value is given
multiple times at the same level, the last one overrides the earlier
ones, unless prohibited.
2023-08-13 02:26:49 +09:00
Nobuyoshi Nakada
cc0fca2729 Fix range of --backtrace-limit
Also an option command line should have precedence over `RUBYOPT`.
2023-08-11 01:56:50 +09:00
Benoit Daloze
3c41a04b6c Fix encoding switches when RUBYOPT is empty or only spaces
* Follow-up of dbbc3583ba which broke this.
2023-08-02 17:13:38 +02:00
Tom Stuart
de68e240c7 Allow -1 as the value of --backtrace-limit option
-1 is a legitimate backtrace limit — in fact, it’s the default — so it
should be possible to provide it with the `--backtrace-limit` option.
2023-07-16 00:39:01 +09:00
Tom Stuart
72a3bb7edc Allow --backtrace-limit option to appear in RUBYOPT
There’s no reason to prevent RUBYOPT from controlling the backtrace
limit. In fact, Matz said [0] he was expecting this to be possible.

[0] https://bugs.ruby-lang.org/issues/8661#note-27
2023-07-16 00:39:01 +09:00
Nobuyoshi Nakada
db3b8f84f5 Set backtrace length limit at last
Command line options should have higher precedence than the same
options in shebang and `RUBYOPT`.
2023-07-13 22:59:26 +09:00
Nobuyoshi Nakada
dbbc3583ba Preserve already set options in moreswitches 2023-07-13 22:59:26 +09:00
Nobuyoshi Nakada
1c2a4d9682 Shrink ruby_cmdline_options_t a bit 2023-07-13 22:59:26 +09:00
Takashi Kokubun
9c1776e6b0
YJIT: Use --yjit-exec-mem-size=128 by default (#8031) 2023-07-05 14:21:02 -07:00