[#115244] [Ruby master Feature#19987] add sample method to Range — "horv77@... (Andras Horvath) via ruby-core" <ruby-core@...>
Issue #19987 has been reported by horv77@protonmail.com (Andras Horvath).
6 messages
2023/11/05
[#115247] [Ruby master Feature#19988] AI for inner code behavior analysis at runtime — "horv77@... (Andras Horvath) via ruby-core" <ruby-core@...>
Issue #19988 has been reported by horv77@protonmail.com (Andras Horvath).
3 messages
2023/11/05
[#115404] Ruby 3.2.2 - rbconfig.rb's MAKEFILE_CONFIG — Jay Mav via ruby-core <ruby-core@...>
Hello Ruby Dev Team,
4 messages
2023/11/17
[ruby-core:115501] [Ruby master Feature#20005] Add C API to return symbols of native extensions resolved from features
From:
"tagomoris (Satoshi Tagomori) via ruby-core" <ruby-core@...>
Date:
2023-11-28 07:48:13 UTC
List:
ruby-core #115501
Issue #20005 has been updated by tagomoris (Satoshi Tagomori).
nobu (Nobuyoshi Nakada) wrote in #note-9:
> `dln_sym` has been used only to resolve and call immediately `Init_xxx` functions, and it would be reasonable to split error handling.
That makes sense.
> > My expectation: libraries should raise LoadError under their own responsibility when this API returns NULL
>
> What do you mean by "libraries" here?
I meant extensions, that call this API.
The diff you pasted is really helpful. Just one point I have a question:
```diff
+#define dln_sym_call(rettype, argtype, handle, symbol) \
+ (*(rettype (*)argtype)dln_sym_func(handle, symbol))
```
This actually does not call the symbol but returns a callable symbol. So I think it's better to either:
A. rename it to `dln_sym_callable`
B. add `()` at the end of the line, and remove `()` from the code about `"ruby_abi_version"` and `init_fct_name`.
@nobu What do you think?
----------------------------------------
Feature #20005: Add C API to return symbols of native extensions resolved from features
https://bugs.ruby-lang.org/issues/20005#change-105430
* Author: tagomoris (Satoshi Tagomori)
* Status: Open
* Priority: Normal
----------------------------------------
I want an API to resolve symbols of other native extensions by a feature name and a symbol name (just like `dlsym`).
(`rb_dln_resolve_symbol` is an example function name of this feature in the example below)
```c
// "a_client_open" is a function defined in "/..../a_client.so", that should be loaded in Ruby beforehand.
// in the extension to be "a.so"
VALUE (*a_client_open)(VALUE);
void Init_a(void)
{
a_client_open = (VALUE(*)(VALUE))rb_dln_resolve_symbol("a_client", "a_client_open");
// the return value may be NULL if the symbols is not found
}
```
This API is to replace direct reference of external symbols.
Currently, native extensions have to just call the function of other extensions directly on the assumption of:
* The dependency native extension is already loaded
* The symbol is defined correctly in the dependency (the version of dependency is correct&expected)
Otherwise, it crashes.
This API provides a way for developers to raise exceptions if the resolved symbol is `NULL`, and these exceptions can display meaningful messages and instructions to the users of extensions.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/