Re: [PATCH v2 00/10] Use a structure for object IDs.
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Mar 13, 2015, 22:45 UTC
- Message-ID
- <20150313224524.GG46326@vauxhall.crustytoothpaste.net>
- In-Reply-To
- <xmqqk2yn5l39.fsf@gitster.dls.corp.google.com>
On Wed, Mar 11, 2015 at 01:35:06PM -0700, Junio C Hamano wrote:
Show 19 quoted lines
>Michael Haggerty <mhagger@alum.mit.edu> writes: >> 4. We continue to support working with SHA-1s declared to be (unsigned >> char *) in some performance-critical code, even as we migrate most other >> code to using SHA-1s embedded within a (struct object_id). This will >> cost some duplication of code. To accept this approach, we would need an >> idea of *how much* code duplication would be needed. E.g., how many >> functions will need both (unsigned char *) versions and (struct >> object_id *) versions? > >Ideally, only the ones that knows the underlying hash function is >SHA-1 (i.e. anybody who mentions git_SHA_CTX), moves bytes from/to >in-core object name field and raw range of bytes (e.g. sha1hash()); >everybody else like hashcpy() and hashcmp() should be able to do its >thing only on structs and a generic-looking constant that denotes >how many bytes there are in the hash (or even sizeof(struct oid)). > >I do not know what kind of code duplication you are worried about, >though. If a callee needs "unsigned char *", the caller that has a >"struct object_id *o" should pass o->hash to the callee.
That's the plan. My goal (which may or may not be achievable) is to make hashcpy, hashcmp, and similar functions an implementation detail of struct object_id functions. If we have to use o->hash somewhere, okay. I'm much more interested in practicality than theoretical purity. I want these changes to provide easier-to-change, more maintainable code, not more complex and difficult code.
>And please do not suggest switching to C++; all it would do to >overload these into a single name is to make the callers harder to >read.
I'm not considering that. I've attempted to compile git with g++ before as an idle curiosity, and I gave up almost immediately because it looked like a bunch of work.
-- brian m. carlson / brian with sandals: Houston, Texas, US +1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187