Thread: [HACKERS] assorted code cleanup
Here are a few assorted patches I made while working on the stdbool set, cleaning up various pieces of dead code and weird styles. - Drop excessive dereferencing of function pointers - Remove endof macro - Remove unnecessary casts - Remove unnecessary parentheses in return statements - Remove our own definition of NULL - fuzzystrmatch: Remove dead code -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Attachment
On Fri, Aug 18, 2017 at 1:56 AM, Peter Eisentraut <peter.eisentraut@2ndquadrant.com> wrote: > Here are a few assorted patches I made while working on the stdbool set, > cleaning up various pieces of dead code and weird styles. > > - Drop excessive dereferencing of function pointers - (*next_ProcessUtility_hook) (pstmt, queryString, + next_ProcessUtility_hook(pstmt, queryString, context, params, queryEnv, dest, completionTag); But this... Personally I like the current grammar which allows one to make the difference between a function call with something declared locally and something that may be going to a custom code path. So I think that you had better not update the system hooks that external modules can use via shared_preload_libraries. > - Remove endof macro Its last use is 1aa58d3a from 2009. > - Remove unnecessary casts Those are also quite old things: src/include/access/attnum.h: ((bool) ((attributeNumber) != InvalidAttrNumber)) src/include/access/attnum.h: ((bool) ((attributeNumber) > 0)) src/backend/utils/hash/dynahash.c: *foundPtr = (bool) (currBucket != NULL); [... etc ...] > - Remove unnecessary parentheses in return statements So you would still keep parenthesis like here for simple expressions: contrib/bloom/blutils.c: return (x - 1); No objections. Here are some more: contrib/intarray/_int_bool.c: return (calcnot) ? contrib/ltree/ltxtquery_op.c: return (calcnot) ? And there are many "(0)" "S_ANYTHING" in src/interfaces/ecpg/test/ and src/interfaces/ecpg/preproc/. src/port/ stuff is better left off, good you did not touch it. > - Remove our own definition of NULL Fine. c.h uses once NULL before enforcing its definition. > - fuzzystrmatch: Remove dead code Those are remnants of a323ede, which missed to removed everything. Looks good to me. -- Michael
> And there are many "(0)" "S_ANYTHING" in src/interfaces/ecpg/test/ and > src/interfaces/ecpg/preproc/. I might have missed something here, but where/why is S_ANYTHING a problem? Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Meskes at (Debian|Postgresql) dot Org Jabber: michael at xmpp dot meskes dot org VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
On Mon, Aug 21, 2017 at 1:11 AM, Michael Paquier <michael.paquier@gmail.com> wrote: > On Fri, Aug 18, 2017 at 1:56 AM, Peter Eisentraut > <peter.eisentraut@2ndquadrant.com> wrote: >> Here are a few assorted patches I made while working on the stdbool set, >> cleaning up various pieces of dead code and weird styles. >> >> - Drop excessive dereferencing of function pointers > > - (*next_ProcessUtility_hook) (pstmt, queryString, > + next_ProcessUtility_hook(pstmt, queryString, > context, params, queryEnv, > dest, completionTag); > But this... Personally I like the current grammar which allows one to > make the difference between a function call with something declared > locally and something that may be going to a custom code path. +1. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
The following review has been posted through the commitfest application: make installcheck-world: tested, passed Implements feature: tested, passed Spec compliant: tested, passed Documentation: tested, passed I've reviewed the code changes, and it's pretty clear to me that they clean things up a bit while not changing any behavior. They simplify things in a way that make the code more comprehensible. I've run all the tests and they behave thesame way as they did before the patch. I also trying manually playing around the the function in question, `metaphone`,and it seems to behave the same as before. I think it's ready to commit! The new status of this patch is: Ready for Committer
On 8/29/17 03:32, Ryan Murphy wrote: > The following review has been posted through the commitfest application: > make installcheck-world: tested, passed > Implements feature: tested, passed > Spec compliant: tested, passed > Documentation: tested, passed > > I've reviewed the code changes, and it's pretty clear to me that they clean things up a bit while not changing any behavior. They simplify things in a way that make the code more comprehensible. I've run all the tests and they behave thesame way as they did before the patch. I also trying manually playing around the the function in question, `metaphone`,and it seems to behave the same as before. > > I think it's ready to commit! > > The new status of this patch is: Ready for Committer Pushed, except the one with the function pointers, which some people didn't like. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
On 8/21/17 01:11, Michael Paquier wrote: >> - Drop excessive dereferencing of function pointers > > - (*next_ProcessUtility_hook) (pstmt, queryString, > + next_ProcessUtility_hook(pstmt, queryString, > context, params, queryEnv, > dest, completionTag); > But this... Personally I like the current grammar which allows one to > make the difference between a function call with something declared > locally and something that may be going to a custom code path. So I > think that you had better not update the system hooks that external > modules can use via shared_preload_libraries. Do you mean specifically the hook variables, or any function pointers? I can see your point in the above case, but for example here - if ((*tinfo->f_lt) (o.upper, c.upper, flinfo)) + if (tinfo->f_lt(o.upper, c.upper, flinfo)) I think there is no loss of clarity and the extra punctuation makes it more complicated to read. >> - Remove unnecessary parentheses in return statements > > So you would still keep parenthesis like here for simple expressions: > contrib/bloom/blutils.c: return (x - 1); > No objections. > > Here are some more: > contrib/intarray/_int_bool.c: return (calcnot) ? > contrib/ltree/ltxtquery_op.c: return (calcnot) ? > > And there are many "(0)" "S_ANYTHING" in src/interfaces/ecpg/test/ and > src/interfaces/ecpg/preproc/. Thanks, I included these. >> - Remove our own definition of NULL > > Fine. c.h uses once NULL before enforcing its definition. Actually, that would have worked fine, because the earlier use is a macro definition, so NULL would not have been needed until it is used. >> - fuzzystrmatch: Remove dead code > > Those are remnants of a323ede, which missed to removed everything. Good reference, makes sense. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes: > Do you mean specifically the hook variables, or any function pointers? > I can see your point in the above case, but for example here > - if ((*tinfo->f_lt) (o.upper, c.upper, flinfo)) > + if (tinfo->f_lt(o.upper, c.upper, flinfo)) > I think there is no loss of clarity and the extra punctuation makes it > more complicated to read. At one time there were C compilers that only accepted the former syntax. But we have already occurrences of the latter in our tree, and no one has complained, so I think that's a dead issue by now. I do agree with the idea that we should use the * notation in cases where the reader might otherwise think that a plain function was being invoked, ie I don't like some_function_pointer(args); Even if the compiler isn't confused, readers might be. But in the case of structname->pointerfield(args); it's impossible to read that as a plain function call, so I'm okay with dropping the extra punctuation there. regards, tom lane
On Wed, Sep 6, 2017 at 4:12 AM, Peter Eisentraut <peter.eisentraut@2ndquadrant.com> wrote: > On 8/21/17 01:11, Michael Paquier wrote: >>> - Drop excessive dereferencing of function pointers >> >> - (*next_ProcessUtility_hook) (pstmt, queryString, >> + next_ProcessUtility_hook(pstmt, queryString, >> context, params, queryEnv, >> dest, completionTag); >> But this... Personally I like the current grammar which allows one to >> make the difference between a function call with something declared >> locally and something that may be going to a custom code path. So I >> think that you had better not update the system hooks that external >> modules can use via shared_preload_libraries. > > Do you mean specifically the hook variables, or any function pointers? > I can see your point in the above case, but for example here > > - if ((*tinfo->f_lt) (o.upper, c.upper, flinfo)) > + if (tinfo->f_lt(o.upper, c.upper, flinfo)) > > I think there is no loss of clarity and the extra punctuation makes it > more complicated to read. I am referring only to hook variables here. For functions only used internally by the backend, I agree that using a direct point to those functions makes things better, because it is more easily possible to make a difference with the hook paths. Keeping a different grammar for local code and hook code allows readers to make a clearer difference that both things have different concepts. -- Michael
On 9/5/17 15:32, Tom Lane wrote: > At one time there were C compilers that only accepted the former syntax. Correct. Explanation here: http://c-faq.com/ptrs/funccall.html > I do agree with the idea that we should use the * notation in cases where > the reader might otherwise think that a plain function was being invoked, > ie I don't like > > some_function_pointer(args); > > Even if the compiler isn't confused, readers might be. But in the case of > > structname->pointerfield(args); > > it's impossible to read that as a plain function call, so I'm okay with > dropping the extra punctuation there. Committed that way. Thanks. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes: > On 9/5/17 15:32, Tom Lane wrote: >> I do agree with the idea that we should use the * notation in cases where >> the reader might otherwise think that a plain function was being invoked, >> ie I don't like >> some_function_pointer(args); >> Even if the compiler isn't confused, readers might be. But in the case of >> structname->pointerfield(args); >> it's impossible to read that as a plain function call, so I'm okay with >> dropping the extra punctuation there. > Committed that way. Thanks. Is it worth memorializing this in the docs somewhere, perhaps "53.4. Miscellaneous Coding Conventions" ? regards, tom lane
On 9/7/17 14:53, Tom Lane wrote: > Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes: >> On 9/5/17 15:32, Tom Lane wrote: >>> I do agree with the idea that we should use the * notation in cases where >>> the reader might otherwise think that a plain function was being invoked, >>> ie I don't like >>> some_function_pointer(args); >>> Even if the compiler isn't confused, readers might be. But in the case of >>> structname->pointerfield(args); >>> it's impossible to read that as a plain function call, so I'm okay with >>> dropping the extra punctuation there. > >> Committed that way. Thanks. > > Is it worth memorializing this in the docs somewhere, perhaps > "53.4. Miscellaneous Coding Conventions" ? done -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers