Date: Wed, 27 Jan 2016 19:43:18 -0500 (EST) From: Daniel Eischen <deischen@freebsd.org> To: Alfred Perlstein <alfred@freebsd.org> Cc: Luigi Rizzo <rizzo@iet.unipi.it>, gljennjohn@gmail.com, threads@freebsd.org, Boris Astardzhiev <boris.astardzhiev@gmail.com>, "freebsd-net@freebsd.org" <net@freebsd.org> Subject: Re: Does FreeBSD have sendmmsg or recvmmsg system calls? Message-ID: <Pine.GSO.4.64.1601271940390.18285@sea.ntplx.net> In-Reply-To: <56A944C6.1040603@freebsd.org> References: <20160118140811.GW3942@kib.kiev.ua> <CAP=KkTzLCOnJVqt5F3ZuuZUiwkmWcne2Ynpi6-daE2jTzSBtfw@mail.gmail.com> <20160120073154.GB3942@kib.kiev.ua> <CAP=KkTx3dAUuSBrJiwNAAe%2BhHSG4j5Qp7sAcgtOgmVi8a12k1A@mail.gmail.com> <20160121093509.GK3942@kib.kiev.ua> <20160121233040.E1864@besplex.bde.org> <CAP=KkTw=ML=oPo2OgFfmor_nsL3om6HvmTQjKNMrOiU_dmWc2g@mail.gmail.com> <20160124050634.GS3942@kib.kiev.ua> <20160124100747.551f8e3f@ernst.home> <CAP=KkTyHG9Rb%2BnrDC1TDxzjUQFca9NkVp8Suo1c_-C00RUtkuQ@mail.gmail.com> <20160126134005.GD3942@kib.kiev.ua> <CA%2BhQ2%2BivWYJMDUwzdZGW88-mWzSVfPzX212sOFVmxxN0hpZ%2BQQ@mail.gmail.com> <20160126182543.64050678@ernst.home> <Pine.GSO.4.64.1601261743450.12995@sea.ntplx.net> <20160127013145.36f2aaef@ernst.home> <CA%2BhQ2%2BjcGwK69jyiU3pbO4fhcnUUgA5sWm4nidb0bmGp04OD7A@mail.gmail.com> <56A944C6.1040603@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 27 Jan 2016, Alfred Perlstein wrote: > > > On 1/26/16 4:39 PM, Luigi Rizzo wrote: >> On Tue, Jan 26, 2016 at 4:31 PM, Gary Jennejohn <gljennjohn@gmail.com> >> wrote: >>> On Tue, 26 Jan 2016 17:46:52 -0500 (EST) >>> Daniel Eischen <deischen@freebsd.org> wrote: >>> >>>> On Tue, 26 Jan 2016, Gary Jennejohn wrote: >>>> >>>>> On Tue, 26 Jan 2016 09:06:39 -0800 >>>>> Luigi Rizzo <rizzo@iet.unipi.it> wrote: >>>>> >>>>>> On Tue, Jan 26, 2016 at 5:40 AM, Konstantin Belousov >>>>>> <kostikbel@gmail.com> wrote: >>>>>>> On Mon, Jan 25, 2016 at 11:22:13AM +0200, Boris Astardzhiev wrote: >>>>>>>> +ssize_t >>>>>>>> +recvmmsg(int s, struct mmsghdr *__restrict msgvec, size_t vlen, int >>>>>>>> flags, >>>>>>>> + const struct timespec *__restrict timeout) >>>>>>>> +{ >>>>>>>> + size_t i, rcvd; >>>>>>>> + ssize_t ret; >>>>>>>> + >>>>>>>> + if (timeout != NULL) { >>>>>>>> + fd_set fds; >>>>>>>> + int res; >>>>>>> Please move all local definitions to the beginning of the function. >>>>>> This style recommendation was from 30 years ago and is >>>>>> bad programming practice, as it tends to complicate analysis >>>>>> for the human and increase the chance of improper usage of >>>>>> variables. >>>>>> >>>>>> We should move away from this for new code. >>>>>> >>>>> Really? I personally find having all variables grouped together >>>>> much easier to understand. Stumbling across declarations in the >>>>> middle of the code in a for-loop, for example, takes me by surprise. >>>>> >>>>> I also greatly dislike initializing variables in their declarations. >>>>> >>>>> Maybe I'm just old fashioned since I have been writing C-code for >>>>> more than 30 years. >>>> +1 >>>> >>>> Probably should be discouraged, but allowed on a case-by-case >>>> basis. One could argue that if you need to declaration blocks >>>> in the middle of code, then that code is too complex and should >>>> be broken out into a separate function. >>>> >>> Right. >>> >>> And code like this >>> >>> int func(void) >>> { >>> int baz, zot; >>> [some more code] >>> if (zot < 5) >>> { >>> int baz = 3; >>> [more code] >>> } >>> [some more code] >>> } >>> >>> is even worse. The compiler (clang) seems to consider this to >>> merely be a reinitialization of baz, but a human might be confused. >> oh please... :) >> >> This is simply an inner variable shadowing the outer one >> (which is another poor practice, flagged with -Wshadow ). >> When you exit the scope you get the external variable >> with its value, as you can see from the following code. >> >> #include <stdio.h> >> int main(int ac, char *av[]) >> { >> int baz = 5; >> printf("1 baz %d\n", baz); >> { >> int baz = 3; >> printf("2 baz %d\n", baz); >> } >> printf("3 baz %d\n", baz); >> return 0; >> } >> > I agree wholeheartedly with Luigi. I am also surprised that shadowed > variable warnings was not more widely understood. > > It's time to move forward and make the code more readable and maintainable. > Having scoped variables just makes sense. It's true that if you see very > many of them, then it's likely time to introduce separate functions, but only > in extreme cases, not on a case-by-case basis. -1 It certainly doesn't make it more readable for me. It seems like it is done out of sheer laziness as opposed to structuring the code better. -- DE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.64.1601271940390.18285>