Commit graph

2180 commits

Author SHA1 Message Date
Samuel Williams
c12b2703bc Add RB_ prefix for size_t to number conversion. 2020-09-06 15:37:54 +12:00
Koichi Sasada
79df14c04b Introduce Ractor mechanism for parallel execution
This commit introduces Ractor mechanism to run Ruby program in
parallel. See doc/ractor.md for more details about Ractor.
See ticket [Feature #17100] to see the implementation details
and discussions.

[Feature #17100]

This commit does not complete the implementation. You can find
many bugs on using Ractor. Also the specification will be changed
so that this feature is experimental. You will see a warning when
you make the first Ractor with `Ractor.new`.

I hope this feature can help programmers from thread-safety issues.
2020-09-03 21:11:06 +09:00
Yukihiro "Matz" Matsumoto
21c62fb670
Version number bumped to 3.0.0 from 2.8.0 (tentative).
We have decided to go forward to 3.0 this year.
2020-08-31 16:38:13 +09:00
Kazuhiro NISHIYAMA
c2011d1a51
Fix a typo [ci skip] 2020-08-29 12:31:05 +09:00
卜部昌平
5ca44076f4 include/ruby/backward/2/rmodule.h: deprecate
Only one function in only one file uses contents of this public header.
That is not a wise idea.  Let's just free the header's soul.
2020-08-27 16:42:06 +09:00
卜部昌平
1035a3b202 RUBY_SHOW_COPYRIGHT_TO_DIE: flip the default
Commit 7aab062ef3 says:

> ruby_show_version() will no longer exits the process, if
> RUBY_SHOW_COPYRIGHT_TO_DIE is set to 0.  This will be the default in
> the future.

3.0 is a good timing for that "future".
2020-08-27 15:04:00 +09:00
卜部昌平
cd1d6d9029 include/ruby/backward/2/r_cast.h: deprecate
Remove all usages of RCAST() so that the header file can be excluded
from ruby/ruby.h's dependency.
2020-08-27 15:03:36 +09:00
卜部昌平
442525527e improve deprecation warning
We should not recommend RBIMPL_*.
2020-08-27 15:02:52 +09:00
卜部昌平
21b3bc10d3 DEPRECATED_TYPE: is deprecated
Nobody uses this macro any longer.
2020-08-27 15:02:52 +09:00
卜部昌平
3437e6247d RClassDeprecated: delete
It has been deprecated for 5 years since 1f22556040.
2020-08-27 15:02:52 +09:00
卜部昌平
5ae2c1b093 git rm include/ruby/backward/rubyio.h 2020-08-27 14:27:21 +09:00
卜部昌平
6ec6dd3ed7 git rm include/ruby/backward/rubysig.h 2020-08-27 14:11:59 +09:00
卜部昌平
5ca7b6abde git rm include/ruby/backward/{st,util}.h 2020-08-27 14:09:18 +09:00
卜部昌平
4bc3846389 git rm include/ruby/backward/classext.h 2020-08-27 14:08:04 +09:00
卜部昌平
0da2a3f1fc sed -i '\,2/extern.h,d' 2020-08-27 14:07:49 +09:00
卜部昌平
b2e1688e7d git rm include/ruby/backward/2/extern.h 2020-08-27 14:07:49 +09:00
卜部昌平
8b022da518 HAVE_STMT_AND_DECL_IN_EXPR: not for Sun C++
Because we check HAVE_STMT_AND_DECL_IN_EXPR in configure, it is peoven
to work in C.  But C++ situation can be different.  Oracle Developer
Studio is another example of such things.
2020-08-21 11:04:54 +09:00
卜部昌平
01826b3fda RBIMPL_HAS_CPP_ATTRIBUTE: handle SunPro
Oracle Developer Studio's C++ preprocessor started to understand
__has_cpp_attribute since version 12.5, and is broken.  After looking
around for a while I found Boost and ICU also had this issue before.
Let me add workaround for it.
2020-08-21 11:04:54 +09:00
卜部昌平
6649677eb9 ROBJECT_IV_INDEX_TBL: convert into an inline function
Former ROBJECT_IV_INDEX_TBL macro included RCLASS_IV_INDEX_TBL, which is
not disclosed to extension libraies.  The macro was kind of broken.  Why
not just deprecate it, and convert the internal use into an inline
function.
2020-08-19 14:30:57 +09:00
卜部昌平
ff30358d13 RARRAY_AREF: convert into an inline function
RARRAY_AREF has been a macro for reasons.  We might not be able to
change that for public APIs, but why not relax the situation internally
to make it an inline function.
2020-08-15 12:09:26 +09:00
AGSaidi
511b55bcef
Enable arm64 optimizations that exist for power/x86 (#3393)
* Enable unaligned accesses on arm64

64-bit Arm platforms support unaligned accesses.

Running the string benchmarks this change improves performance
by an average of 1.04x, min .96x, max 1.21x, median 1.01x

* arm64 enable gc optimizations

Similar to x86 and powerpc optimizations.

|       |compare-ruby|built-ruby|
|:------|-----------:|---------:|
|hash1  |       0.225|     0.237|
|       |           -|     1.05x|
|hash2  |       0.110|     0.110|
|       |       1.00x|         -|

* vm_exec.c: improve performance for arm64

|                               |compare-ruby|built-ruby|
|:------------------------------|-----------:|---------:|
|vm_array                       |     26.501M|   27.959M|
|                               |           -|     1.06x|
|vm_attr_ivar                   |     21.606M|   31.429M|
|                               |           -|     1.45x|
|vm_attr_ivar_set               |     21.178M|   26.113M|
|                               |           -|     1.23x|
|vm_backtrace                   |       6.621|     6.668|
|                               |           -|     1.01x|
|vm_bigarray                    |     26.205M|   29.958M|
|                               |           -|     1.14x|
|vm_bighash                     |    504.155k|  479.306k|
|                               |       1.05x|         -|
|vm_block                       |     16.692M|   21.315M|
|                               |           -|     1.28x|
|block_handler_type_iseq        |       5.083|     7.004|
|                               |           -|     1.38x|
2020-08-14 02:15:54 +09:00
卜部昌平
504e632a15
sync NDEBUG, RUBY_DEBUG, and RUBY_NDEBUG (#3327)
- When NDEBUG is defined that shall be honoured.
- When RUBY_DEBUG is defined that shall be honoured.
- When both are defined and they conflict, warnings shall be rendered.
- When nothing is specified, nothing shall happen.
2020-08-07 14:01:13 +09:00
卜部昌平
c4fc737f75 include/ruby/util.h: delete unused codes
- util.h includes defines.h,
- ... which includes ruby/backward/2/stdarg.h,
- ... which always defines _.

This `#ifndef _` must never happen.
2020-07-23 14:30:12 +09:00
Samuel Williams
1b3a6847be Move declarations to private internal/thread.h header. 2020-07-20 13:20:58 +12:00
Samuel Williams
f3462d99a3 Rename rb_current_thread_scheduler to rb_thread_scheduler_if_nonblocking.
Correctly capture thread before releasing GVL and pass as argument to
`rb_thread_scheduler_if_nonblocking`.
2020-07-20 13:20:58 +12:00
卜部昌平
1ce9c37257 Revert "RBIMPL_UNREACHABLE_RETURN: evaluate the argument"
This reverts commit c8dc2bf140.

No longer necessary.
2020-06-29 12:33:17 +09:00
卜部昌平
c8dc2bf140 RBIMPL_UNREACHABLE_RETURN: evaluate the argument
Prevent casual typos inside of UNREACHABLE_RETURN(...).
2020-06-29 11:05:41 +09:00
Koichi Sasada
d300a73441 RUBY_ASSERT_NOASSUME
If __builtin_assume() is enables and RUBY_DEBUG=0, RUBY_ASSERT(expr)
will be compiled to __builtin_assume(expr) and compiler can assume
expr is true and apply aggressive optimizations. However we observed
doubtful behavior because of compiler optimizations, we introduce
new macro RUBY_ASSERT_NOASSUME to disable __builtin_assume().
With this macro, we can try without __builtin_assume().
2020-05-29 13:50:58 +09:00
Nobuyoshi Nakada
4cabd77e33
Removed a trailing space [ci skip] 2020-05-27 14:30:45 +09:00
Nobuyoshi Nakada
17d17de0e8
Get rid of redefinition of memcpy on mingw 2020-05-26 16:58:40 +09:00
Koichi Sasada
4ac42874bc Update include/ruby/assert.h
Co-authored-by: 卜部昌平 <shyouhei@ruby-lang.org>
2020-05-26 03:21:14 +09:00
Koichi Sasada
21991e6ca5 Use RUBY_DEBUG instead of NDEBUG
Assertions in header files slows down an interpreter, so they should be
turned off by default (simple `make`). To enable them, define a macro
`RUBY_DEBUG=1` (e.g. `make cppflags=-DRUBY_DEBUG` or use `#define` at
the very beggining of the file. Note that even if `NDEBUG=1` is defined,
`RUBY_DEBUG=1` enables all assertions.
[Feature #16837]
related: https://github.com/ruby/ruby/pull/3120

`assert()` lines in MRI *.c is not disabled even if `RUBY_DEBUG=0` and
it can be disabled with `NDEBUG=1`. So please consider to use
`RUBY_ASSERT()` if you want to disable them when `RUBY_DEBUG=0`.
2020-05-26 03:21:14 +09:00
卜部昌平
06321ea26c RBIMPL_ATTR_DEPRECATED: disable for GCC10
GCC 10.x seems buggy here.  See also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95302
2020-05-25 10:17:51 +09:00
Nobuyoshi Nakada
62b47196e4
Added UNREACHABLE_RETURN
To get rid of a void function at the end of non-void function.
2020-05-21 13:31:36 +09:00
卜部昌平
43725c6091 rb_scan_args_set: make it slightly readable
This is a pure refactoring that improves understanding of what is going
on.  Not a big win though.
2020-05-21 09:58:54 +09:00
Koichi Sasada
67d259c5dc Use __bultin_assume() from clang-7
We observed combination of multiple __builtin_assume() can cause
strange compile results on clang-6 (-DNDEBUG exposed this issue).
To avoid this problem, __builtin_assume() is from clang-7.
https://github.com/ruby/ruby/pull/3120#issuecomment-630821333
2020-05-20 10:29:38 +09:00
Samuel Williams
0e3b0fcdba
Thread scheduler for light weight concurrency. 2020-05-14 22:10:55 +12:00
Nobuyoshi Nakada
237bee9d40
Removed extra stringization
Argument of RUBY_ASSERT_FAIL is already stringized message, so no
more extra stringization should be applied.
2020-05-12 10:23:33 +09:00
卜部昌平
4fbb344156 fix sunpro pragma
SunPro's #pragma does_not_return(...) needs an argument.  That does not
fit the attribute syntax we employ.
2020-05-11 16:47:25 +09:00
卜部昌平
233c2018f1 drop varargs.h support
This header file is simply out of date (for decades since at least
1989).  It's the 21st century.  Just stop using it.
2020-05-11 14:56:51 +09:00
卜部昌平
534277fa7b rb_str_new: hoist RB_CONSTANT_P out of function
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html says:

> GCC never returns 1 when you call the inline function with a string
> constant or ...

Because rb_str_new and familiy take string constants, it was a bad idea
for them to contain RB_CONSTANT_P.  We should instead do so in
corresponding macros. [ruby-core:98212]
2020-05-11 11:07:37 +09:00
卜部昌平
9e41a75255 sed -i 's|ruby/impl|ruby/internal|'
To fix build failures.
2020-05-11 09:24:08 +09:00
卜部昌平
b85fd1d690 mv include/ruby/{impl,internal}
Devs do not love "impl".
2020-05-11 09:24:08 +09:00
卜部昌平
0d88fe3a72 spaces in comments [ci skip] 2020-05-11 09:24:08 +09:00
卜部昌平
122f96c362 sed -i s/ruby3/rbimpl/g 2020-05-11 09:24:08 +09:00
卜部昌平
97672f669a sed -i s/RUBY3/RBIMPL/g
Devs do not love "3".  The only exception is RUBY3_KEYWORDS in parse.y,
which seems unrelated to our interests.
2020-05-11 09:24:08 +09:00
卜部昌平
d7f4d732c1 sed -i s|ruby/3|ruby/impl|g
This shall fix compile errors.
2020-05-11 09:24:08 +09:00
卜部昌平
dca234a5dc mv include/ruby/{3,impl}
Devs do not love "3".
2020-05-11 09:24:08 +09:00
Marc-Andre Lafortune
adf709a785 Classes made from Struct should have default new singleton method.
[Bug #16465] [Bug #16801]
[Fix GH-2795] [Fix GH-2944] [Fix GH-3045] [Fix GH-3093]

Note: Backporting shouldn't modify object.h and instead can use
struct_new_kw which is basically a duplicate implementation of
rb_class_new_instance_pass_kw

Co-authored-by: Yusuke Endoh <mame@ruby-lang.org>
Co-authored-by: John Hawthorn <john@hawthorn.email>
Co-authored-by: Adam Hess <HParker@github.com>
Co-authored-by: Jose Cortinas <jacortinas@gmail.com>
Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2020-05-08 04:18:45 -04:00
Nobuyoshi Nakada
76d9be9ce9
Get rid of -Wgnu-zero-variadic-macro-arguments errors
As zero variadic macro argument, `rb_scan_args(argc, argv, "")`
(or `"0"`), means 0-arity method and should be defined so, that
case doesn't need to consider.
2020-05-01 18:39:08 +09:00