unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Andy Wingo <wingo@pobox.com>
To: guile-devel@gnu.org
Cc: Zefram <zefram@fysh.org>, 16357@debbugs.gnu.org
Subject: bug#16357: insufficient print abbreviation in error messages
Date: Tue, 21 Jun 2016 14:17:30 +0200	[thread overview]
Message-ID: <87ziqezqg5.fsf@pobox.com> (raw)
In-Reply-To: <20140105230032.GB30283@fysh.org> (zefram@fysh.org's message of "Sun, 5 Jan 2014 23:00:32 +0000")

Not really sure what to do here.

Ideally we could just use ~@y in the format messages.  However we can't
rely on having a full format loaded up, only simple-format.  We could
lazily load the full format when needed, but I don't know if we should
train users that the full `format' is always around.

We could define well-known parameters for specifying that we should
truncate the output of a `write' procedure, and have pair / vector /
bytevectors use that parameter when needed.  Perhaps that's the thing?

Or, we could use print states.  But print states are not so great and
ideally we would remove them eventually.

Thoughts?

Andy

On Mon 06 Jan 2014 00:00, Zefram <zefram@fysh.org> writes:

> When guile is constructing error messages that display offending objects,
> in version 2.0.9 it never abbreviates long or deep structures.  This can
> easily lead to pathologically-long messages that take stupid amounts of
> time and memory to construct and to display.  By contrast, guile-1.8
> applies abbreviation at a reasonable level, and objects appearing in
> stack traces have reasonable abbreviation on both versions.  Two very
> mild examples:
>
> $ guile-1.8 --debug -c "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons n v)))))"
> Backtrace:
> In current input:
>    1: 0* [read {(1 2 3 4 5 6 7 8 9 ...)}]
>
> <unnamed port>:1:1: In procedure read in expression (read (# 100 #)):
> <unnamed port>:1:1: Wrong type argument in position 1 (expecting open input port): (1 2 3 4 5 6 7 8 9 10 ...)
> $ guile-2.0 --debug -c "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons n v)))))"
> Backtrace:
> In ice-9/boot-9.scm:
>  157: 7 [catch #t #<catch-closure d68400> ...]
> In unknown file:
>    ?: 6 [apply-smob/1 #<catch-closure d68400>]
> In ice-9/boot-9.scm:
>   63: 5 [call-with-prompt prompt0 ...]
> In ice-9/eval.scm:
>  432: 4 [eval # #]
> In unknown file:
>    ?: 3 [call-with-input-string "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons n v)))))" ...]
> In ice-9/command-line.scm:
>  180: 2 [#<procedure c83ac0 at ice-9/command-line.scm:175:6 (port)> #<input: string b495b0>]
> In unknown file:
>    ?: 1 [eval (read (let aaa (# #) (if # v #))) #<directory (guile-user) d5cc60>]
>    ?: 0 [read (1 2 3 4 5 6 7 8 9 ...)]
>
> ERROR: In procedure read:
> ERROR: In procedure read: Wrong type argument in position 1 (expecting open input port): (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100)
> $ guile-1.8 --debug -c "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons v n)))))"
> Backtrace:
> In current input:
>    1: 0* [read {(((# . 3) . 2) . 1)}]
>
> <unnamed port>:1:1: In procedure read in expression (read (# 100 #)):
> <unnamed port>:1:1: Wrong type argument in position 1 (expecting open input port): (((((((# . 7) . 6) . 5) . 4) . 3) . 2) . 1)
> $ guile-2.0 --debug -c "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons v n)))))"
> Backtrace:
> In ice-9/boot-9.scm:
>  157: 7 [catch #t #<catch-closure 1c71400> ...]
> In unknown file:
>    ?: 6 [apply-smob/1 #<catch-closure 1c71400>]
> In ice-9/boot-9.scm:
>   63: 5 [call-with-prompt prompt0 ...]
> In ice-9/eval.scm:
>  432: 4 [eval # #]
> In unknown file:
>    ?: 3 [call-with-input-string "(read (let aaa ((n 100) (v '())) (if (= n 0) v (aaa (- n 1) (cons v n)))))" ...]
> In ice-9/command-line.scm:
>  180: 2 [#<procedure 1c89da0 at ice-9/command-line.scm:175:6 (port)> #<input: string 1a505b0>]
> In unknown file:
>    ?: 1 [eval (read (let aaa (# #) (if # v #))) #<directory (guile-user) 1c65c60>]
>    ?: 0 [read (((# . 3) . 2) . 1)]
>
> ERROR: In procedure read:
> ERROR: In procedure read: Wrong type argument in position 1 (expecting open input port): ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((() . 100) . 99) . 98) . 97) . 96) . 95) . 94) . 93) . 92) . 91) . 90) . 89) . 88) . 87) . 86) . 85) . 84) . 83) . 82) . 81) . 80) . 79) . 78) . 77) . 76) . 75) . 74) . 73) . 72) . 71) . 70) . 69) . 68) . 67) . 66) . 65) . 64) . 63) . 62) . 61) . 60) . 59) . 58) . 57) . 56) . 55) . 54) . 53) . 52) . 51) . 50) . 49) . 48) . 47) . 46) . 45) . 44) . 43) . 42) . 41) . 40) . 39) . 38) . 37) . 36) . 35) . 34) . 33) . 32) . 31) . 30) . 29) . 28) . 27) . 26) . 25) . 24) . 23) . 22) . 21) . 20) . 19) . 18) . 17) . 16) . 15) . 14) . 13) . 12) . 11) . 10) . 9) . 8) . 7) . 6) . 5) . 4) . 3) . 2) . 1)
>
> Debian incarnation of this bug report:
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=734128
>
> -zefram





       reply	other threads:[~2016-06-21 12:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20140105230032.GB30283@fysh.org>
2016-06-21 12:17 ` Andy Wingo [this message]
2016-06-21 12:38   ` bug#16357: insufficient print abbreviation in error messages Zefram
2016-06-21 15:10     ` Andy Wingo
2016-06-23 16:57   ` Mark H Weaver
2016-06-23 17:59     ` Andy Wingo
2016-06-26  1:05       ` Mark H Weaver

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: https://www.gnu.org/software/guile/

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

  git send-email \
    --in-reply-to=87ziqezqg5.fsf@pobox.com \
    --to=wingo@pobox.com \
    --cc=16357@debbugs.gnu.org \
    --cc=guile-devel@gnu.org \
    --cc=zefram@fysh.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.
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).