summaryrefslogtreecommitdiff
path: root/include/ruby/internal
AgeCommit message (Collapse)Author
2020-12-09Tweaked `Process::Status.wait`Nobuyoshi Nakada
* revert `rb_last_status_set` * renamed the new function as `rb_process_status_new` * `rb_process_status_new` always freezes the return value * marked `Process::Status.wait` as EXPERIMENTAL, as it has not been discussed totally yet.
2020-12-09Removed declaration of non-existent symbolNobuyoshi Nakada
2020-12-09Add support for non-blocking `Process.wait`.Samuel Williams
Notes: Merged: https://github.com/ruby/ruby/pull/3853
2020-12-07Removed deprecated Time#succNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3841
2020-12-07Doxygen terminology update [ci skip]卜部昌平
Follow N2328 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2328.pdf
2020-12-07Revert getaddrinfo_a()Masaki Matsushita
getaddrinfo_a() gets stuck after fork(). To avoid this, we need 1 second sleep to wait for internal worker threads of getaddrinfo_a() to be finished, but that is unacceptable. [Bug #17220] [Feature #17134] [Feature #17187]
2020-12-06Call cleanup function for getaddrinfo_a(3) only before fork()Masaki Matsushita
Previously, rb_getaddrinfo_a_before_exec() is called from before_exec(). However, the function needs to be called only before fork(). The change moves it to before_fork().
2020-12-04Add a hook before fork() for getaddrinfo_a()Masaki Matsushita
We need stop worker threads in getaddrinfo_a() before fork(). This change adds a hook before fork() that cancel all outstanding requests and wait for all ongoing requests. Then, it waits for all worker threads to be finished. Fixes [Bug #17220]
2020-12-04Fix typos [ci skip]Kazuhiro NISHIYAMA
2020-12-03include/ruby/internal/xmalloc.h: add doxygen卜部昌平
Thought it was not a bad idea to document these CAPI. [ci skip]
2020-12-01Fix docs about movement for rb_gc_register_mark_object()Alan Wu
This API in fact pins objects passed to it. See vm.c:2546. Notes: Merged: https://github.com/ruby/ruby/pull/3815
2020-12-01rb_ext_ractor_safe() to declare ractor-safe extKoichi Sasada
C extensions can violate the ractor-safety, so only ractor-safe C extensions (C methods) can run on non-main ractors. rb_ext_ractor_safe(true) declares that the successive defined methods are ractor-safe. Otherwiwze, defined methods checked they are invoked in main ractor and raise an error if invoked at non-main ractors. [Feature #17307] Notes: Merged: https://github.com/ruby/ruby/pull/3824
2020-11-17Expose the rb_interned_str_* family of functionsJean Boussier
Fixes [Feature #13381] Notes: Merged: https://github.com/ruby/ruby/pull/3586
2020-11-06Add docs for some C extension GC APIsAlan Wu
Notes: Merged: https://github.com/ruby/ruby/pull/3733
2020-10-30Add warning for str_new_static functionsAlan Wu
Many functions in string.c assume that capa + termlen to be readable memory. Add comment in header to communicate this to extension authors. See also: comment in str_fill_term() Notes: Merged: https://github.com/ruby/ruby/pull/3698
2020-10-21Ractor.make_shareable(obj)Koichi Sasada
Introduce new method Ractor.make_shareable(obj) which tries to make obj shareable object. Protocol is here. (1) If obj is shareable, it is shareable. (2) If obj is not a shareable object and if obj can be shareable object if it is frozen, then freeze obj. If obj has reachable objects (rs), do rs.each{|o| Ractor.make_shareable(o)} recursively (recursion is not Ruby-level, but C-level). (3) Otherwise, raise Ractor::Error. Now T_DATA is not a shareable object even if the object is frozen. If the method finished without error, given obj is marked as a sharable object. To allow makng a shareable frozen T_DATA object, then set `RUBY_TYPED_FROZEN_SHAREABLE` as type->flags. On default, this flag is not set. It means user defined T_DATA objects are not allowed to become shareable objects when it is frozen. You can make any object shareable by setting FL_SHAREABLE flag, so if you know that the T_DATA object is shareable (== thread-safe), set this flag, at creation time for example. `Ractor` object is one example, which is not a frozen, but a shareable object. Notes: Merged: https://github.com/ruby/ruby/pull/3678
2020-10-21Feature #16812: Allow slicing arrays with ArithmeticSequence (#3241)Kenta Murata
* Support ArithmeticSequence in Array#slice * Extract rb_range_component_beg_len * Use rb_range_values to check Range object * Fix ary_make_partial_step * Fix for negative step cases * range.c: Describe the role of err argument in rb_range_component_beg_len * Raise a RangeError when an arithmetic sequence refers the outside of an array [Feature #16812] Notes: Merged-By: mrkn <mrkn@ruby-lang.org>
2020-10-17remove rb_obj_iv_index_tblKoichi Sasada
(1) nobody uses it (gem-codesearch) (2) the data strucuture will be changed. Notes: Merged: https://github.com/ruby/ruby/pull/3662
2020-10-07Revert "Don't export rb_callable_receiver"Nobuyoshi Nakada
This reverts commit c839168b1141db53bedef771d1bc78908b6ac782. `rb_callable_receiver` does not need to be exposed under include.
2020-10-06Don't export rb_callable_receiverChris Seaton
Notes: Merged: https://github.com/ruby/ruby/pull/3629
2020-10-06Moved rb_callable_receiver internalNobuyoshi Nakada
2020-09-29fix typo [ci skip]卜部昌平
Reported by Mau Magnaguagno See: https://github.com/ruby/ruby/pull/3570#discussion_r495465903
2020-09-28Add rb_category_warn{,ing} for warning messages with categoriesJeremy Evans
This adds the following C-API functions that can be used to emit warnings with categories included: ```c void rb_category_warn(const char *, const char*, ...) void rb_category_warning(const char*, const char*, ...) ``` Internally in error.c, there is an rb_warn_category function that will call Warning.warn with the string and the category keyword if it doesn't have an arity of 1, and will call Warning.warn with just the string if it has an arity of 1. This refactors the rb_warn_deprecated{,_to_remove} functions to use rb_warn_category. This makes Kernel#warn accept a category keyword and pass it to Warning.warn, so that Ruby methods can more easily emit warnings with categories. rb_warn_category makes sure that the passed category is a already defined category symbol before calling Warning.warn. The only currently defined warning category is :deprecated, since that is what is already used. More categories can be added in later commits. Notes: Merged: https://github.com/ruby/ruby/pull/3508
2020-09-26RBIMPL_ALIGNAS: reorder #ifdef blocks卜部昌平
Since r63443, `-std=gnu99 -D_XOPEN_SOUCE=x00` is added to Solaris' `CPPFLAGS`. `CPPFLAGS` is shared among `CC` / `CXX`. This results in both `__STDC_VERSION__` and `__cplusplus` to be defined at the same time for a C++ compilation, only on Solaris. It seems the `CPPFLAGS` addition is intentional. We sould not touch that part. Instead we need to reroute this by always check for `__cplusplus` first.
2020-09-25should not check taint flag on rubyspec.Koichi Sasada
Now taint flag is obsolete and it is used fro shareaable flag. So we should not check this flag. Notes: Merged: https://github.com/ruby/ruby/pull/3575
2020-09-25enrich comment卜部昌平
Added description and URL about nested flexible array member. Notes: Merged: https://github.com/ruby/ruby/pull/3570
2020-09-25RBIMPL_ALIGNOF: do not use constexpr卜部昌平
Was definitely a bad idea to use constexpr. It is not ubiquitous. Notes: Merged: https://github.com/ruby/ruby/pull/3570
2020-09-25ALLOCA_N: do not use RUBY_ALIGNOF卜部昌平
Now that RUBY_ALIGNOF behaves like C11's _Alignof. This is not necessarily the best stack arrangement. We can just give up using __builtin_alloca_with_align(), and let alloca choose what is optimal. Notes: Merged: https://github.com/ruby/ruby/pull/3570
2020-09-25RBIMPL_ALIGNOF: do not use __alignof__卜部昌平
It is reported that on a system of i386 System V ABI, GCC returns 8 for __alignof__(double). OTOH the ABI defines alignments of double to be 4, and ISO/IEC 9899:2011 reads that _Alignof(double) shall return 4 on such machine. What we want in ruby is 4 instead of 8 there. We cannot use __alignof__. Additionally, both old GCC / old clang return 8 for _Alignof(double) on such platforms. They are their bugs, and already fixed in recent versions. But we have to support older compilers for a while. Shall check sanity of _Alignof. Notes: Merged: https://github.com/ruby/ruby/pull/3570
2020-09-23Removed rb_find_file_ext_safe and rb_find_file_safeHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3537
2020-09-16Warn on a finalizer that captures the object to be finalizedChris Seaton
Also improve specs and documentation for finalizers and more clearly recommend a safe code pattern to use them. Notes: Merged: https://github.com/ruby/ruby/pull/3444
2020-09-06Add `RB_` prefix for size_t to number conversion.Samuel Williams
Notes: Merged: https://github.com/ruby/ruby/pull/3519
2020-09-03Introduce Ractor mechanism for parallel executionKoichi Sasada
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. Notes: Merged: https://github.com/ruby/ruby/pull/3365
2020-08-29Fix a typo [ci skip]Kazuhiro NISHIYAMA
2020-08-21HAVE_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. Notes: Merged: https://github.com/ruby/ruby/pull/3433
2020-08-21RBIMPL_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. Notes: Merged: https://github.com/ruby/ruby/pull/3433
2020-08-19ROBJECT_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. Notes: Merged: https://github.com/ruby/ruby/pull/3427
2020-08-15RARRAY_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. Notes: Merged: https://github.com/ruby/ruby/pull/3419
2020-08-14Enable arm64 optimizations that exist for power/x86 (#3393)AGSaidi
* 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| Notes: Merged-By: nurse <naruse@airemix.jp>
2020-08-07sync 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. Notes: Merged-By: shyouhei <shyouhei@ruby-lang.org>
2020-07-20Move declarations to private `internal/thread.h` header.Samuel Williams
Notes: Merged: https://github.com/ruby/ruby/pull/3323
2020-07-20Rename `rb_current_thread_scheduler` to `rb_thread_scheduler_if_nonblocking`.Samuel Williams
Correctly capture thread before releasing GVL and pass as argument to `rb_thread_scheduler_if_nonblocking`. Notes: Merged: https://github.com/ruby/ruby/pull/3323
2020-06-29Revert "RBIMPL_UNREACHABLE_RETURN: evaluate the argument"卜部昌平
This reverts commit c8dc2bf1401fc01d35a4a7587ed224f1f2fe29e6. No longer necessary.
2020-06-29RBIMPL_UNREACHABLE_RETURN: evaluate the argument卜部昌平
Prevent casual typos inside of UNREACHABLE_RETURN(...). Notes: Merged: https://github.com/ruby/ruby/pull/3247
2020-05-26Get rid of redefinition of memcpy on mingwNobuyoshi Nakada
2020-05-26Use RUBY_DEBUG instead of NDEBUGKoichi Sasada
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`. Notes: Merged: https://github.com/ruby/ruby/pull/3124
2020-05-25RBIMPL_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-21Added UNREACHABLE_RETURNNobuyoshi Nakada
To get rid of a void function at the end of non-void function.
2020-05-21rb_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-14Thread scheduler for light weight concurrency.Samuel Williams
Notes: Merged: https://github.com/ruby/ruby/pull/3032 Merged-By: ioquatix <samuel@codeotaku.com>