Suffix-based literal syntax

Reiner Pope some at address.com
Wed May 30 04:57:21 PDT 2007


Here's a small thought to improve the syntax for some user-defined 
types: can we perhaps overload the suffix on literals, to give some user 
types nicer literals?

One of Walter's rationale for natively supporting complex numbers is to 
get nice looking literals:
    3 + 5i
  instead of
    3 + 5 * i
  or the more realistic
    complex(3, 5)


I propose that, for number and string literals (which already sport 
suffixes at the moment) if a suffix is found not from the language, it 
be rewritten as an opSuffix call, so
        5km
    turns into
        opSuff_km(5)

For reasons of sanity, the suffix should probably only be alphabetical, 
upper and lower case.


This isn't a general solution to literals for user types, but I can 
imagine it as useful for:

1. Complex numbers:
You could get the same syntax as we currently get, but in a library. 
That seems pretty impressive.

2. SI units libraries:
Instead of (acceptable) 5 * km, you can write 5km as a literal.

3. Some kind of native type wrapper:
Perhaps for dstring, or some other class that wraps strings, you could 
write:
    "foo"s
denoting a dstring literal, as opposed to char[]/wchar[]/dchar[] literal.

Similarly, you might want to write a vector class for this:
     [5, 4, 3]v
being the same as Vec([5, 4, 3]) but much more visually pleasing.

4. Wacky syntax extensions. I remember seeing Bill Baxter use the suffix 
'i' to denote 'inclusive' for ranges. I'm sure many other (ab)uses could 
come to mind.

----

If problems come with suffix clashes, renaming of imports could help:

import foo.string: opSuff_fs = opSuff_s;
import bar.string: opSuff_bs = opSuff_s;

...
auto a = "abc"fs; // a is a foo string
auto b = "abc"bs; // b is a bar string


I think it's kind of a nice idea, since it can give some user types a 
nicer syntax without creating any new ambiguities.


Of course, given how much is going on with const et al at the moment, I 
don't expect anything to come of this at the moment, but I hope someone 
likes it.


    -- Reiner



More information about the Digitalmars-d mailing list