From: Eric Wong Date: 2018-06-05T00:50:58+00:00 Subject: [ruby-core:87400] Re: [Ruby trunk Feature#14819] Efficient cstring to RVALUE typecasting for c extension gems lars@greiz-reinsdorf.de wrote: > However while implementing the [time decoder for pg](https://github.com/ged/ruby-pg/blob/master/ext/pg_text_decoder.c#L551-L715) I wished to have a fast version of: > > rb_funcall(rb_cTime, rb_intern("new"), 7, INT2NUM(year), INT2NUM(mon), INT2NUM(day), INT2NUM(hour), INT2NUM(min), sec_and_usec_rational, INT2NUM(gmt_offset)); > We have `rb_time_timespec_new(ts, offset)` since ruby-2.3, > which is more than 10 times faster than the above, but it > requires to convert the time to timespec first. This > conversion is pretty difficult and involves some less standard > functions (timegm() and mktime()) which didn't work as > expected on Windows and termix/Android. I think a better path would be to bundle timegm for systems without it. It avoid increasing the C-API footprint of Ruby and reduces the cognitive overhead for anybody reading the code. Unfortunately the Ruby community doesn't like GPL; since gnulib provides exactly the functionality required (and much more in terms of portability) in a well-organized repo: https://git.savannah.gnu.org/cgit/gnulib.git But at least for timegm, musl and any BSDs have it, too. Unsubscribe: