There was discussion in [1] about improvements to list manipulation in several places. But since the discussion is not related to the topic in that thread, fork a new thread here and attach a patch to show my thoughts.
Some are just cosmetic changes by using macros. The others should have performance gain from the avoidance of moving list entries. But I doubt the performance gain can be noticed or measured, as currently there are only a few places affected by the change. I still think the changes are worthwhile though, because it is very likely that future usage of the same scenario can benefit from these changes.
I doubt the performance gain from lappend_copy func. new_tail_cell in lappend may not enter enlarge_list in most cases, because we
may allocate extra cells in new_list(see the comment in new_list).
(Copying in David and Ranier. Ranier provided a patch about the changes in list.c, but I'm not using that one.)