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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>