git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Kevin Willford <kcwillford@gmail.com>,
	git@vger.kernel.org, Kevin Willford <kewillf@microsoft.com>
Subject: Re: [[PATCH v2] 1/4] patch-ids: stop using a hand-rolled hashmap implementation
Date: Tue, 02 Aug 2016 10:01:09 -0700	[thread overview]
Message-ID: <xmqqshunf6lm.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1608021013010.79248@virtualbox> (Johannes Schindelin's message of "Tue, 2 Aug 2016 12:30:36 +0200 (CEST)")

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> Hi Junio,
>
> On Mon, 1 Aug 2016, Junio C Hamano wrote:
>
>> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>> 
>> > It would be a serious bug if hashmap_entry_init() played games with
>> > references, given its signature (that this function does not have any
>> > access to the hashmap structure, only to the entry itself):
>> >
>> > 	void hashmap_entry_init(void *entry, unsigned int hash)
>> 
>> I do not think we are on the same page.  The "reference to other
>> resource" I wondered was inside the hashmap_entry structure, IOW,
>> "the entry itself".
>
> Oh, I see now.
>
>> Which is declared to be opaque to the API users,
>
> Actually, not really. We cannot do that in C: we need to define the struct
> in hashmap.h so that its size is known to the users.

What I meant was what Documentation/technical/api-hashmap.txt said.
I know that we cannot embed a true "opaque" structure in C just as
you do.

> That is the reason, I guess, why we have the documentation in
> Documentation/technical/api-hashmap.txt: it would have to talk about your
> hypothetical hashmap_entry_clear() (which would better be named
> *_release() BTW, unless I misunderstood what you want a hypothetical
> future version of that function to do).

I think there is no misunderstanding on your part.  I am following
the conclusion (as I recall) of a discussion on the list not in so
distant past about X_free(x) that frees the resource an instance of
"struct X" holds and also the instance itself, and X_clear(x) that
only frees the resources without freeing the instance (the latter of
which allows x to be on stack, you do X_init(&x) and conclude with
X_clear(&x)).  The name X_clear() is more in line with existing API
functions like string_list_clear(), argv_array_clear().  An oddball
is strbuf_release(), which I think made you make the above comment.

>> I have a slight preference to avoid the lazy "void *", but that is
>> an unrelated tangent.
>
> Oh, we are already safely in Unrelated Tangent Land for a while, I would
> think. Nothing of what we are discussing in this thread has anything to do
> with Kevin's patch series,...

Oh, no question about that.  Go back to my review, to which your
message I am responding to is a reply to.  What you wrote are all
about things after "This is a tangent, but this made me wonder if it
is safe to simply free(3) the result...", which pointed out rough
points in the hashmap API from the API user's point of view and
suggested a few possible improvement opportunities.

>> I am saying that an uneven over-enginnering is bad.
>
> Hmm. I guess that the _init() function could be replaced by an _INIT macro
> a la STRBUF_INIT. Not sure it is really worth the effort, though.

I do not think so, as X_init() and X_INIT() from the point of view
of the API user would not make much difference; as long as the
documentation does not say it is safe to make it go out of scope
without "deinitialize" it, the reader will be left wondering.

  reply	other threads:[~2016-08-02 17:06 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-29 16:19 [[PATCH v2] 0/4] Use header data patch ids for rebase to avoid loading file content Kevin Willford
2016-07-29 16:19 ` [[PATCH v2] 1/4] patch-ids: stop using a hand-rolled hashmap implementation Kevin Willford
2016-07-29 20:47   ` Junio C Hamano
2016-08-01  8:54     ` Johannes Schindelin
2016-08-01 20:04       ` Junio C Hamano
2016-08-01 22:34         ` Eric Wong
2016-08-02 10:30         ` Johannes Schindelin
2016-08-02 17:01           ` Junio C Hamano [this message]
2016-08-02 18:04             ` Junio C Hamano
2016-07-29 21:29   ` Junio C Hamano
2016-07-29 16:19 ` [[PATCH v2] 2/4] patch-ids: replace the seen indicator with a commit pointer Kevin Willford
2016-07-29 21:03   ` Junio C Hamano
2016-07-29 16:19 ` [[PATCH v2] 3/4] patch-ids: add flag to create the diff patch id using header only data Kevin Willford
2016-07-29 16:19 ` [[PATCH v2] 4/4] rebase: avoid computing unnecessary patch IDs Kevin Willford
2016-07-29 21:46   ` Junio C Hamano
2016-08-01  8:58     ` Johannes Schindelin
2016-08-01 20:11       ` Junio C Hamano
2016-08-02  9:50         ` Jakub Narębski
2016-08-02 17:06           ` Junio C Hamano
2016-08-02 10:45         ` Johannes Schindelin
2016-08-02 17:08           ` Junio C Hamano
2016-08-04  3:00             ` Junio C Hamano
2016-08-04 14:21               ` Johannes Schindelin
2016-07-29 20:22 ` [[PATCH v2] 0/4] Use header data patch ids for rebase to avoid loading file content Junio C Hamano
2016-08-01  9:01   ` Johannes Schindelin

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=xmqqshunf6lm.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=kcwillford@gmail.com \
    --cc=kewillf@microsoft.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).