From: Rodrigo Rosenfeld Rosas Date: 2013-07-18T23:18:02+09:00 Subject: [ruby-core:56081] Re: [CommonRuby - Feature #8640] Add Time#elapsed to return nanoseconds since creation Em 18-07-2013 10:49, Rodrigo Rosenfeld Rosas escreveu: > Em 18-07-2013 03:03, Aaron Patterson escreveu: >> On Thu, Jul 18, 2013 at 07:59:34AM +0900, phluid61 (Matthew Kerwin) >> wrote: >>> Issue #8640 has been updated by phluid61 (Matthew Kerwin). >>> >>> >>> tenderlovemaking (Aaron Patterson) wrote: >>>> On Wed, Jul 17, 2013 at 01:04:37PM +0900, phluid61 (Matthew Kerwin) >>>> wrote: >>>> > Since the discussion has moved towards defining two separate >>>> methods {#elapsed => (float)s and #elapsed_nanoseconds => (int)ns} >>>> I do prefer a keyword argument {in: :nanoseconds}. Sorry for >>>> wavering back and forth on the issue so noisily. >>>> I don't care if a method exists that has kw args, but I would >>>> not use >>>> it. The things we need to time in Rails are fairly fast (say >>>> 200ms on >>>> the slow side) and happen frequently, which means that object >>>> allocations matter. A kwarg method will end up allocating a hash on >>>> every call. >>>> If someone else wants to make a method with kwargs, I think that's >>>> great, but it's not what I'm pushing for here. My point is to >>>> reduce >>>> object allocations. :-) >>> In that case, would #8096 be a better proposal? Since that one >>> doesn't even allocate a Time object. >> I don't think so. We need subsecond resolution, which (if we used >> #8096) would require a possible bignum allocation (from what I gather in >> the ticket). > > But I believe he has a point, Aaron. Maybe we should avoid allocating > a time object (Time.now) and instead introduce something like Java's > System.currentTimeMillis(): > > start = Benchmark.start > operation > report start.since_beginning > other_operation > report start.since_beginning # from start= on > report start.since_last_report # since operation > > This new object would be lighter than Time as it would only contain > the start absolute nanoseconds or millis since epoch, maybe. > > I haven't given the names much of a thought, but that would be the > idea. Makes sense? > Also, as a side effect, this new class could have methods like nanoseconds_ellapsed, and seconds_ellapsed and the like. Also, it could bookmark some parts of the code. Example: time_recording = Benchmark.start some_code time_recording.bookmark(:a) more_code report time_recording.seconds_ellapsed_since(:a) Best, Rodrigo.