git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Brian Gernhardt <brian@gernhardtsoftware.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	Thomas Rast <trast@student.ethz.ch>,
	Ryan Anderson <rda@google.com>,
	Jay Soffian <jaysoffian@gmail.com>
Subject: Re: [PATCH 00/16] git-send-email cleanups
Date: Thu, 30 Sep 2010 15:11:43 +0000	[thread overview]
Message-ID: <AANLkTikDFJ8jWnuSc9U3hZCRSA971h5Zc2FfJmNiqTUN@mail.gmail.com> (raw)
In-Reply-To: <18E0A903-D625-4C7A-A575-AC5C5EF448C9@gernhardtsoftware.com>

On Thu, Sep 30, 2010 at 14:30, Brian Gernhardt
<brian@gernhardtsoftware.com> wrote:

> None of these subroutines strictly need the prototype, but it does
> allow Perl to warn us if we send incorrect arguments.  Why remove
> them?  Are they causing problems somewhere?

As Jeff pointed out prototypes are troublesome. If you want to be
warned about too many arguments a better way is:

    sub foo {
        warn sprintf "You gave me %d arguments", scalar @_ if @_ != 1;

Or something like that, but there's no reason to do that for these
subs in particular. There are 32 subroutines in git-send-email.perl,
these weren't in any way more special than the rest.

They probably had prototypes in the first place because they were
added by someone who was under the mistaken impression that Perl
prototypes were remotely similar to C-like prototypes, they're not.

The purpose of Perl prototypes is to rewrite the *caller* code, so
that e.g. if you have:

    sub blah ($$) { ... }

Perl will rewrite this call:

    blah @foo, @bar;

As:

    blah(scalar(@foo), scalar(@bar))

While a blah without prototypes would just be:

    blah(@foo, @bar);

Using prototypes superfluously like this makes it harder to read the
code, because you end up checking every call site for every subroutine
call that uses prototypes to see if rewriting the argument list like
this is producing some unexpected logic error.

  parent reply	other threads:[~2010-09-30 15:16 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-30 13:42 [PATCH 00/16] git-send-email cleanups Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 01/16] send-email: use lexical filehandle for opendir Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 02/16] send-email: use lexical filehandles for $compose Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 03/16] send-email: use lexical filehandles during sending Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 04/16] send-email: get_patch_subject doesn't need a prototype Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 05/16] send-email: file_declares_8bit_cte " Ævar Arnfjörð Bjarmason
2010-09-30 13:42 ` [PATCH 06/16] send-email: unique_email_list " Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 07/16] send-email: cleanup_compose_files " Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 08/16] send-email: use \E***\Q instead of \*\*\* Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 09/16] send-email: sanitize_address use $foo, not "$foo" Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 10/16] send-email: sanitize_address use qq["foo"], not "\"foo\"" Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 11/16] send-email: use (?:) instead of () if no match variables are needed Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 12/16] send-email: is_rfc2047_quoted use qr// regexes Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 13/16] send-email: extract_valid_address use qr// regexes and /o Ævar Arnfjörð Bjarmason
2010-09-30 16:19   ` Jeff King
2010-09-30 16:33     ` Ævar Arnfjörð Bjarmason
2010-10-01  5:40       ` Jeff King
2010-09-30 17:25     ` Junio C Hamano
2010-09-30 18:56       ` Ævar Arnfjörð Bjarmason
2010-09-30 19:03   ` [PATCH v2 13/16] send-email: extract_valid_address use qr// regexes Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 14/16] send-email: send_message die on $!, not $? Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 15/16] send-email: make_message_id use "require" instead of "use" Ævar Arnfjörð Bjarmason
2010-09-30 13:43 ` [PATCH 16/16] send-email: use Perl idioms in while loop Ævar Arnfjörð Bjarmason
2010-09-30 14:30 ` [PATCH 00/16] git-send-email cleanups Brian Gernhardt
2010-09-30 14:52   ` Jeff King
2010-09-30 15:15     ` Brian Gernhardt
2010-09-30 15:11   ` Ævar Arnfjörð Bjarmason [this message]
2010-09-30 14:30 ` Jay Soffian
2010-09-30 16:21 ` Jeff King

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=AANLkTikDFJ8jWnuSc9U3hZCRSA971h5Zc2FfJmNiqTUN@mail.gmail.com \
    --to=avarab@gmail.com \
    --cc=brian@gernhardtsoftware.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jaysoffian@gmail.com \
    --cc=rda@google.com \
    --cc=trast@student.ethz.ch \
    /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).