[Issue 3813] Bad writeln of arrays
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Sep 5 19:11:47 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3813
Andrei Alexandrescu <andrei at metalanguage.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
--- Comment #23 from Andrei Alexandrescu <andrei at metalanguage.com> 2011-09-05 19:11:33 PDT ---
(In reply to comment #22)
> (In reply to comment #21)
>
> > more consistency is better than less consistency.
>
> Consistency is good when the situations don't change. But in our discussions
> the conditions weren't invariant, because the range types (random access or
> not) are different.
This doesn't make sense, so I wouldn't know how to answer.
Anyhow, first you wanted ';' to denote lazy vs. eager ranges. Now you want it
to denote random access vs. other ranges - all irrelevant features to printing
ranges. This forces someone who e.g. wants to parse some range to special-case
things because the emitter of the string used a random-access range or not.
This, again, makes no sense. For all I can tell you'd be happy as long as ';'
vs. ',' differentiates _some_ aspect of a range, it doesn't really matter
which.
> The different separators is not an important feature, so if you aren't
> interested I'll stop asking for it. It's just a cute little thing that I think
> gives a little help.
Please don't frame me as the arbiter. I'm just pointing out some nonsense.
> > You keep on asking for arbitrary differentiation of kinds of ranges in their
> > textual representation without any rationale. The burden is on you to justify
> > the inconsistency, not on Kenji to justify consistency.
>
> The desire to tell apart lazy ranges from random access ranges comes from the
> desire to give more information to the person that reads the textual output.
> This is expecially useful in dynamically typed languages, but it's useful in D
> too, because you use "auto" definition, template type values, and generally
> reading textual outputs it's not always easy to know what part of the printout
> is generated by a specific writeln.
So you want differentiation, it doesn't matter on what feature. Numeric vs.
non-numeric seems fair game too.
> Currently D allows implicit casts between float/double/real. But you can't
> implicitly cast an int to float. So while float and double are two different
> types just as int and double are two different types, in D double and real are
> less different than a double and an int. So the D definition of "different
> type" is not fully binary, it's a bit fuzzy.
No, it's quite binary. Two types are identical or not.
> (It can be argued that a good textual representation of floats/reals has to
> contain a leading "F"/"L". I think this is a bit overkill, but it's not so
> bad.)
>
>
> > One paragraph below (!) you are asking for the exact opposite: less type
> > differentiation. You want to change
> >
> > > Tuple!(int,string)(1, xx)
> >
> > to
> >
> > > tuple(1, "xx")
> >
> > Both changes have pros and cons, but there's no guiding rationale behind them.
>
> There is a rationale: I'd like
What one likes is not rationale.
> the textual representation to be as informative
> as possible, and possibly to be "invertible" too (so "unprinting" it gives back
> the original value or data structure), unless this goes too much against other
> practical considerations (like output space, output readability, etc).
But in the same breath you propose tuple(1, "hello") instead of Tuple!(int,
string) although it could originate from a Tuple!(short, char[]). Your own
requests are dissonant with your own desiderata. To be frank, you quite
literally don't know what you want. Why are we spending our valuable time on
this?
> Writing on default a double as 2.0 instead of 2 is good because it tells me
> that I have printed a value of one of the floating point types
> (float/double/real or some other library defined FP value). In several
> situations it's useful to know if a value is integral or not.
It's also bad because it takes more space.
> Printing a tuple like:
>
> Tuple!(int,string)(1, xx)
>
> Is bad because the second argument is not what you see in the code, so if you
> "unprint" it you get an error (unless you add a special case for this
> situation, but this is not good and it doesn't scale).
>
> (Doing the same for a TypeTuple is acceptable, in my opinion.)
>
> So this is a better textual representation:
>
> Tuple!(int,string)(1, "xx")
I agree that printing a tuple should produce unambiguous representation of its
fields, but that's different from your request that the type of Tuple is
replaced with the word "tuple".
> Currently if you print an array of strings you get:
>
> ["xx", "yy"]
>
> Because this allows unprinting, is more readable, etc. For consistency with
> string array printing, I'd like tuples to do the same (while TypeTuples are
> very different from arrays).
So now you list unprinting as a desideratum yet it's only seconds after you
asked for making that gratuitously difficult by using ';' vs. ',' on some
arbitrary criterion.
> Now think about an array of tuples, if you print one of them you get something
> like:
>
> [Tuple!(int,string)(1, "aa"), Tuple!(int,string)(2, "bb"),
> Tuple!(int,string)(3, "cc"),
> Tuple!(int,string)(4, "dd"), Tuple!(int,string)(1, "ee"),
> Tuple!(int,string)(1, "ff"),
> Tuple!(int,string)(1, "gg"), ...]
>
> Here in my opinion there is too much noise, most of the space is used by
> redudant things. This is why I have suggested to print tuples, when they are
> inside a collection, in a shorter way:
>
> [tuple(1, "aa"), tuple(2, "bb"), tuple(3, "cc"),
> tuple(4, "dd"), tuple(1, "ee"), tuple(1, "ff"),
> tuple(1, "gg"), ...]
>
> Or even (but this can't be unprinted, so this is probably eccessive):
>
> [(1, "aa"), (2, "bb"), (3, "cc"), (4, "dd"), (1, "ee"), (1, "ff"), (1, "gg"),
> ...]
>
>
> On the other hand if I print a single tuple, outside of collections, then
> showing the full typing is usually acceptable:
>
> Tuple!(int,string)(1, "xx")
>
>
> In arrays of FP values the ".0" adds add just two chars and only to numbers
> that don't already have one or more decimal digit. So the added ".0" doesn't
> add too much noise (unlike adding "Tuple!(int,string)").
Quite honestly I think the noise is in this discussion. I am closing this
report. Sorry.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list