Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladimir Davydov via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Timur Safin <tsafin@tarantool.org>
Cc: Vladimir Davydov <vdavydov@tarantool.org>,
	tarantool-patches@dev.tarantool.org, v.shpilevoy@tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v5 0/8] Initial datetime implementation
Date: Wed, 18 Aug 2021 11:25:37 +0300	[thread overview]
Message-ID: <20210818082537.eyhaa2awaabsje56@esperanza> (raw)
In-Reply-To: <20210818082222.mofgheciutpipelz@esperanza>

[ += tarantool-patches - sorry dropped it from Cc by mistake ]

Putting aside minor hitches, like bad indentation here and there,
I have some concerns regarding the datetime API:

 - I believe we shouldn't introduce interval in years/months, because
   they depend on the date they are applied to. Better add datetime
   methods instead - add_years / add_months.

 - The API provides too many ways to extract the same information from a
   datetime object (m, min, minute all mean the same). IMO a good API
   should provide exactly one way to achieve a certain goal.

 - AFAICS datetime.hour returns the number of hours passed since the
   year 1970. This is confusing. I don't have any idea why anyone would
   need this. As a user I expect them to return the hour of the current
   day. Same for other similar methods, like month, minute, year.

 - Creating a datetime without a date (with parse_time) looks weird:

   tarantool> dt = datetime.parse_time('10:00:00')
   ---
   ...
   
   tarantool> tostring(dt)
   ---
   - 1970-01-01T10:00Z
   ...

   Why 1970? I think that a datetime should always be created from a
   date and optionally a time. If you want just time, you need another
   kind of object - time. After all it's *date*time.

 - datetime.days(2) + datetime.hours(12) + datetime.minutes(30)

   looks cool, but I'm not sure it's efficient to create so many objects
   and then sum them to construct an interval. It's surely acceptable
   for compiled languages without garbage collection (like C++), but for
   Lua I think it'd be more efficient to provide an API like this:

   datetime.interval{days = 2, hours = 12, minutes = 30}

   (I'm not a Lua expert so not sure about this)

 - datetime.strftime, asctime, ctime - look too low level, which is no
   surprise as they come from the C API. Judging by their names I can't
   say that they present a datetime as a string in a certain format.
   Maybe, rename strftime() to format() and make it a method of datetime
   object (datetime:format)? Without a format, it could print ASCII
   time. As for asctime, ctime, I'd drop them, because one can use
   strftime to get the same result. Besides, they append \n to the
   output, which looks weird:

   tarantool> datetime.asctime(dt)
   ---
   - 'Thu Jan  1 10:00:00 1970
   
     '
   ...

  parent reply	other threads:[~2021-08-18  8:25 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-15 23:59 Timur Safin via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 1/8] build: add Christian Hansen c-dt to the build Timur Safin via Tarantool-patches
2021-08-17 12:15   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:24     ` Safin Timur via Tarantool-patches
2021-08-18  8:56       ` Serge Petrenko via Tarantool-patches
2021-08-17 15:50   ` Vladimir Davydov via Tarantool-patches
2021-08-18 10:04     ` Safin Timur via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 2/8] lua: built-in module datetime Timur Safin via Tarantool-patches
2021-08-17 12:15   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:30     ` Safin Timur via Tarantool-patches
2021-08-18  8:56       ` Serge Petrenko via Tarantool-patches
2021-08-17 16:52   ` Vladimir Davydov via Tarantool-patches
2021-08-17 19:16     ` Vladimir Davydov via Tarantool-patches
2021-08-18 13:38       ` Safin Timur via Tarantool-patches
2021-08-18 10:03     ` Safin Timur via Tarantool-patches
2021-08-18 10:06       ` Safin Timur via Tarantool-patches
2021-08-18 11:45       ` Vladimir Davydov via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 3/8] lua, datetime: display datetime Timur Safin via Tarantool-patches
2021-08-17 12:15   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:32     ` Safin Timur via Tarantool-patches
2021-08-17 17:06   ` Vladimir Davydov via Tarantool-patches
2021-08-18 14:10     ` Safin Timur via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 4/8] box, datetime: messagepack support for datetime Timur Safin via Tarantool-patches
2021-08-16  0:20   ` Safin Timur via Tarantool-patches
2021-08-17 12:15     ` Serge Petrenko via Tarantool-patches
2021-08-17 12:16   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:42     ` Safin Timur via Tarantool-patches
2021-08-18  9:01       ` Serge Petrenko via Tarantool-patches
2021-08-17 18:36   ` Vladimir Davydov via Tarantool-patches
2021-08-18 14:27     ` Safin Timur via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 5/8] box, datetime: datetime comparison for indices Timur Safin via Tarantool-patches
2021-08-17 12:16   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:43     ` Safin Timur via Tarantool-patches
2021-08-18  9:03       ` Serge Petrenko via Tarantool-patches
2021-08-17 19:05   ` Vladimir Davydov via Tarantool-patches
2021-08-18 17:18     ` Safin Timur via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 6/8] lua, datetime: time intervals support Timur Safin via Tarantool-patches
2021-08-17 12:16   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:44     ` Safin Timur via Tarantool-patches
2021-08-17 18:52   ` Vladimir Davydov via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 7/8] datetime: perf test for datetime parser Timur Safin via Tarantool-patches
2021-08-17 19:13   ` Vladimir Davydov via Tarantool-patches
2021-08-15 23:59 ` [Tarantool-patches] [PATCH v5 8/8] datetime: changelog for datetime module Timur Safin via Tarantool-patches
2021-08-17 12:16   ` Serge Petrenko via Tarantool-patches
2021-08-17 23:44     ` Safin Timur via Tarantool-patches
2021-08-18  9:04       ` Serge Petrenko via Tarantool-patches
2021-08-17 12:15 ` [Tarantool-patches] [PATCH v5 0/8] Initial datetime implementation Serge Petrenko via Tarantool-patches
     [not found] ` <20210818082222.mofgheciutpipelz@esperanza>
2021-08-18  8:25   ` Vladimir Davydov via Tarantool-patches [this message]
2021-08-18 13:24     ` Safin Timur via Tarantool-patches
2021-08-18 14:22       ` Vladimir Davydov via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210818082537.eyhaa2awaabsje56@esperanza \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=cover.1629071531.git.tsafin@tarantool.org \
    --cc=tsafin@tarantool.org \
    --cc=v.shpilevoy@tarantool.org \
    --cc=vdavydov@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v5 0/8] Initial datetime implementation' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox