all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: emacs-devel@gnu.org
Subject: Re: Should records be able to mimic primitive types?
Date: Mon, 12 Jun 2017 13:40:27 -0400	[thread overview]
Message-ID: <jwvink1xgy3.fsf-monnier+gmane.emacs.devel@gnu.org> (raw)
In-Reply-To: jwvwpauhjja.fsf-monnier+gmane.emacs.devel@gnu.org

>> It's not trying hard, just a simple check for a known, small, and
>> rarely-changing list of primitive symbols.
> To me, that's working very hard:
> - extra code.
> - extra maintenance
> - extra run-time checks.
> - no benefit since this doesn't catch a common situation.

More concretely: what would be a scenario where such a check would
be useful?

AFAICT, you need all 3 of:
1- First, you'd need someone to be foolish enough to set his record's
   type to be one of the primitive types.  This is the actual bug that
   your extra check would aim to catch.
2- Then you'd need to pass that object to a chunk of code which uses
   `type-of` and then checks the result for that primitive type.
   Otherwise, the type you set would behave just like any other
   non-primitive type so the "bug" would be harmless anyway.
3- Furthermore, you'd need this object to be manipulated exclusively in
   a way which also works with your record object without signaling an
   error (e.g. if the primitive type used is `integer`, it means your
   object should never be passed to the likes of `+` since otherwise the
   bug would already be discovered by `+` without any need for your extra
   check).

I haven't seen any evidence that step 1 will ever occur, even by accident.

No idea how likely is step 2.  `type-of` is very rarely used (except via
cl-defmethod) so it's fairly unlikely, but possible.

Step 3 seems again very unlikely in itself, and even more so if step
2 occurred: if you checked with type-of that your object is of type
`integer` there's a very high likelihood that you're going to then use
operations which only work on integers.

Will all 3 steps ever occur at the same time?

Do we really want to make every call to `make-record` pay the extra test
in order to hope to catch this hypothetical case?  Obviously I think
not, and I'd be curious to understand why you think otherwise.


        Stefan




  parent reply	other threads:[~2017-06-12 17:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-04 22:00 Should records be able to mimic primitive types? Paul Eggert
2017-04-05  1:09 ` Stefan Monnier
2017-04-08 15:09   ` Philipp Stephani
2017-04-08 17:57     ` Stefan Monnier
2017-05-01 11:35       ` Philipp Stephani
2017-05-01 12:03         ` Stefan Monnier
2017-06-10 11:39           ` Philipp Stephani
2017-06-10 12:43             ` Eli Zaretskii
2017-06-12 15:07               ` Philipp Stephani
2017-06-12 17:00                 ` Eli Zaretskii
2017-06-12 17:15                   ` Stefan Monnier
2017-06-12 17:22                     ` Eli Zaretskii
2017-06-12 17:47                       ` Stefan Monnier
2017-06-12 17:40       ` Stefan Monnier [this message]
2017-06-16 18:42         ` Philipp Stephani
2017-06-16 19:07           ` Stefan Monnier
2017-09-24 14:47             ` Philipp Stephani
2017-09-24 16:44               ` Stefan Monnier

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvink1xgy3.fsf-monnier+gmane.emacs.devel@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    /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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.