summaryrefslogtreecommitdiff
path: root/time.c
AgeCommit message (Collapse)Author
2024-09-06[Feature #20707] Fix negative UTC offset conversionNobuyoshi Nakada
In short, get rid of division and modulo of negative integers. Notes: Merged: https://github.com/ruby/ruby/pull/11561
2024-09-05Move Time#xmlschema in core and optimize itJean Boussier
[Feature #20707] Converting Time into RFC3339 / ISO8601 representation is an significant hotspot for applications that serialize data in JSON, XML or other formats. By moving it into core we can optimize it much further than what `strftime` will allow. ``` compare-ruby: ruby 3.4.0dev (2024-08-29T13:11:40Z master 6b08a50a62) +YJIT [arm64-darwin23] built-ruby: ruby 3.4.0dev (2024-08-30T13:17:32Z native-xmlschema 34041ff71f) +YJIT [arm64-darwin23] warming up...... | |compare-ruby|built-ruby| |:-----------------------|-----------:|---------:| |time.xmlschema | 1.087M| 5.190M| | | -| 4.78x| |utc_time.xmlschema | 1.464M| 6.848M| | | -| 4.68x| |time.xmlschema(6) | 859.960k| 4.646M| | | -| 5.40x| |utc_time.xmlschema(6) | 1.080M| 5.917M| | | -| 5.48x| |time.xmlschema(9) | 893.909k| 4.668M| | | -| 5.22x| |utc_time.xmlschema(9) | 1.056M| 5.707M| | | -| 5.40x| ``` Notes: Merged: https://github.com/ruby/ruby/pull/11510
2024-06-02Time internal representation comment removed.Tanaka Akira
2024-03-22Fix pointer incompatiblityNobuyoshi Nakada
Since the subsecond part is discarded, WIDEVAL to VALUE conversion is needed.
2024-03-07[Bug #20327] Do not count subsecond to calculate UTC offsetNobuyoshi Nakada
Assume that there will never be any time zones with UTC offsets that are subseconds. Historically, UTC offset has only been used down to the second.
2024-03-06Refactor VM root modulesJean Boussier
This `st_table` is used to both mark and pin classes defined from the C API. But `vm->mark_object_ary` already does both much more efficiently. Currently a Ruby process starts with 252 rooted classes, which uses `7224B` in an `st_table` or `2016B` in an `RArray`. So a baseline of 5kB saved, but since `mark_object_ary` is preallocated with `1024` slots but only use `405` of them, it's a net `7kB` save. `vm->mark_object_ary` is also being refactored. Prior to this changes, `mark_object_ary` was a regular `RArray`, but since this allows for references to be moved, it was marked a second time from `rb_vm_mark()` to pin these objects. This has the detrimental effect of marking these references on every minors even though it's a mostly append only list. But using a custom TypedData we can save from having to mark all the references on minor GC runs. Addtionally, immediate values are now ignored and not appended to `vm->mark_object_ary` as it's just wasted space.
2024-02-17[DOC] Functions for `Time#initialize` implementationNobuyoshi Nakada
2024-02-17Fix an argument nameNobuyoshi Nakada
2024-02-15Do not include a backtick in error messages and backtracesYusuke Endoh
[Feature #16495]
2023-12-02[DOC] Markup class name `Time` as codeNobuyoshi Nakada
2023-12-02[DOC] Include timezones document in timev.rbNobuyoshi Nakada
So that it can be referred as a part of the document of `Time`.
2023-11-21Get rid of useless dsize functionsJean Boussier
If we always return 0, we might as well not define the function at all.
2023-11-07Use embedded TypedData for Time objectsPeter Zhu
This drops the total size of a Time object from 86 bytes to 80 bytes. Running the benchmark benchmark/time_now.yml, this commit improves performance of Time.now by about 30%: ``` Time.now Branch: 13159405.4 i/s Master: 10036908.7 i/s - 1.31x slower Time.now(in: "+09:00") Branch: 2712172.6 i/s Master: 2138637.9 i/s - 1.27x slower ``` It also decreases memory usage by about 20%: ``` ary = 10_000_000.times.map { Time.now } puts `ps -o rss= -p #{$$}` ``` Branch: 961792 Master: 1196544 Co-Authored-By: Jean Boussier <[email protected]>
2023-08-16[DOC] Specify the unit of return value for `Time#-`haseponpon
Notes: Merged: https://github.com/ruby/ruby/pull/8217 Merged-By: nobu <[email protected]>
2023-08-15[DOC] Improve doc guide compliance (#8221)Burdette Lamar
2023-07-13Tighten Time.new(string) parsingJeremy Evans
Disallow: * Only year-month * Only year-month-day * Preceding whitespace * Trailing whitespace Fixes [Bug #19293] Notes: Merged: https://github.com/ruby/ruby/pull/7974
2023-06-23Prefer `0` over `NULL` as function pointersNobuyoshi Nakada
SunC warns use of `NULL`, pointer to data as function pointers. Notes: Merged: https://github.com/ruby/ruby/pull/7972 Merged-By: nobu <[email protected]>
2023-04-04Fix crash in Time on 32-bit systemsPeter Zhu
[Bug #19575] struct vtm is packed causing it to have a size that is not aligned on 32-bit systems. When allocating it on the stack, it will have unaligned addresses which means that the fields won't be marked by the GC when scanning the stack (since the GC only marks aligned addresses). This can cause crashes when the fields are heap allocated objects like Bignums. This commit moves the flags in struct time_object into struct vtm for space efficiency and removes the need for packing. This is an example of a crash: ruby(rb_print_backtrace+0xd) [0x56848945] ../src/vm_dump.c:785 ruby(rb_vm_bugreport) ../src/vm_dump.c:1101 ruby(rb_assert_failure+0x7a) [0x56671857] ../src/error.c:878 ruby(vm_search_cc+0x0) [0x56666e47] ../src/vm_method.c:1366 ruby(rb_vm_search_method_slowpath) ../src/vm_insnhelper.c:2090 ruby(callable_method_entry+0x5) [0x568232d3] ../src/vm_method.c:1406 ruby(rb_callable_method_entry) ../src/vm_method.c:1413 ruby(gccct_method_search_slowpath) ../src/vm_eval.c:427 ruby(gccct_method_search+0x20f) [0x568237ef] ../src/vm_eval.c:476 ruby(opt_equality_by_mid_slowpath+0x2c) [0x5682388c] ../src/vm_insnhelper.c:2338 ruby(rb_equal+0x37) [0x566fe577] ../src/object.c:133 ruby(rb_big_eq+0x34) [0x56876ee4] ../src/bignum.c:5554 ruby(rb_int_equal+0x14) [0x566f3ed4] ../src/numeric.c:4640 ruby(rb_int_equal) ../src/numeric.c:4634 ruby(vm_call0_cfunc_with_frame+0x6d) [0x568303c2] ../src/vm_eval.c:148 ruby(vm_call0_cfunc) ../src/vm_eval.c:162 ruby(vm_call0_body) ../src/vm_eval.c:208 ruby(rb_funcallv_scope+0xd1) [0x56833971] ../src/vm_eval.c:85 ruby(RB_TEST+0x0) [0x567e8488] ../src/time.c:78 ruby(eq) ../src/time.c:78 ruby(small_vtm_sub) ../src/time.c:1523 ruby(timelocalw+0x23b) [0x567f3e9b] ../src/time.c:1593 ruby(time_s_alloc+0x0) [0x567f536b] ../src/time.c:3698 ruby(time_new_timew) ../src/time.c:2694 ruby(time_s_mktime) ../src/time.c:3698 Notes: Merged: https://github.com/ruby/ruby/pull/7650
2023-02-19Remove (newly unneeded) remarks about aliasesBurdetteLamar
2023-02-08Replace `PACKED_STRUCT` and `PACKED_STRUCT_UNALIGNED`Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/7268
2023-02-07* remove trailing spaces. [ci skip]git
2023-02-07Make Time objects WB protectedPeter Zhu
Co-Authored-By: Jean Boussier <[email protected]> Notes: Merged: https://github.com/ruby/ruby/pull/7244
2023-02-07Remove unused code in time.cPeter Zhu
Co-Authored-By: Jean Boussier <[email protected]> Notes: Merged: https://github.com/ruby/ruby/pull/7244
2023-01-02[Bug #19296] Precheck bits of time componentsNobuyoshi Nakada
2023-01-01[Bug #19292] Re-initialize tm when wday or yday is not setNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/7051
2022-12-22Update documentation about Time#deconstruct_keysKazuki Tsujimoto
2022-12-21[DOC] fix unintentional verbatimNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6975
2022-12-19Fix guess_diff typeNobuyoshi Nakada
`unsigned_time_t` has the same size as `time_t`, but it doesn't mean these types are same except for signedness. For instance, while `long` and `long long` has the same size and `time_t` is defined as the latter on 64bit OpenBSD, `unsigned_time_t` has been defined as `long`.
2022-12-16[Feature #18033] Parse more strictly conformant with ISO-8601Nobuyoshi Nakada
* 4-digits or more is required as year * Minutes and seconds parts are not ommittable Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-12-16[Feature #18033] Make more conformant with C standardNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-12-16[Feature #18033] Add `precision:` optionNobuyoshi Nakada
Which limits the precision of subsecond. Defaulted to 9, that means nanosecond. Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-12-16[Feature #18033] More strict checksNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-12-16[Feature #18033] Name a magic numberNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-12-16[Feature #18033] Make Time.new parse time stringsNobuyoshi Nakada
`Time.new` now parses strings such as the result of `Time#inspect` and restricted ISO-8601 formats. Notes: Merged: https://github.com/ruby/ruby/pull/4825
2022-11-22Add Time#deconstruct_keyszverok
Notes: Merged: https://github.com/ruby/ruby/pull/6594
2022-11-16Using UNDEF_P macroS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/6721
2022-11-15Re-order checks for colons in UTC offsetNobuyoshi Nakada
2022-11-07[Bug #19106] Normalize time at 24:00:00 with a timezone objectNobuyoshi Nakada
2022-10-11[DOC] use the local rdoc reference than the external URINobuyoshi Nakada
2022-09-03[DOC] Remove extra page-dir prefix to fix broken linkNobuyoshi Nakada
2022-09-03[DOC] Enhanced RDoc for Time (#6320)Burdette Lamar
Treats: #yday #dst? #zone #to_a #strftime Notes: Merged-By: BurdetteLamar <[email protected]>
2022-09-02Enhanced RDoc for Tim[DOC] (#6319)Burdette Lamar
Notes: Merged-By: BurdetteLamar <[email protected]>
2022-08-31[DOC] Enhanced RDoc for Time (#6308)Burdette Lamar
More on timezones. Notes: Merged-By: BurdetteLamar <[email protected]>
2022-08-28[DOC] Enhanced RDoc for Time (#6294)Burdette Lamar
Notes: Merged-By: BurdetteLamar <[email protected]>
2022-08-25[DOC] Enhanced RDoc for Time (#6277)Burdette Lamar
Deletes the :include: files in doc/time, which became no longer workable when @nobu pointed out that some (but not all) creator methods accept string values as well as integer-like values. Changes to methods: Time.utc Time.local Time.at Time.new Notes: Merged-By: BurdetteLamar <[email protected]>
2022-08-26[DOC] Tell RDoc aliases of singleton classNobuyoshi Nakada
Since RDoc C parser cannot capture aliases which are using an expression other than a single variable as the class, use an intermediate variable for the singleton class.
2022-08-23[DOC] Remove extra page-dir prefixNobuyoshi Nakada
2022-08-22[DOC] Enhanced RDoc for Time (#6267)Burdette Lamar
Treats: #utc #getlocal #getutc #ctime #to_s #inspect Notes: Merged-By: BurdetteLamar <[email protected]>
2022-08-22[DOC] Remove extra page-dir prefixNobuyoshi Nakada
2022-08-21[DOC] Enhanced RDoc for Time (#6255)Burdette Lamar
Treats: #utc #hash #localtime Notes: Merged-By: BurdetteLamar <[email protected]>