[erlang-questions] erlang improvement - objective c (or smalltalk) syntax
Bengt Kleberg
bengt.kleberg@REDACTED
Fri Jun 5 08:50:08 CEST 2009
Greetings,
In the beginning I missed the point that
string:substring( string:S start:I length:J )
is not part of the documentation but of the source. Now I get it. That
makes it worthwhile.
bengt
On Fri, 2009-06-05 at 17:00 +1200, Richard O'Keefe wrote:
> On 4 Jun 2009, at 10:08 pm, Bengt Kleberg wrote:
> > The thought of getting a new standard library with less clutter and
> > inconsistency is very welcome. So that, alone , makes this is a good
> > idea. Presumably there are a lot of other good things in this
> > suggestion
> > since it comes from Joe. However, I must have missed them since I can
> > not help but think that the benefits presented are not enough.
> >
> > 1) I would still need to look in the documentation. No longer to find
> > the position, but to find out the names/spelling of the arguments.
> > Is it
> > string: or str:, start: or first: and is it length: or chars:?
>
> This is true. But if you misremember the names of the argument
> packets, there simply isn't a function by that name, whereas if
> you misremember the order of arguments in a packet, you don't
> discover the mistake until later, if ever.
> >
> >
> > 2) I do not find it more beneficial to write
> > string:substring( string:S start:I length:J ), instead of
> > string:substring( String, Start, Length ).
>
> Consider the following variations on substring:
> (0) Is the first integer a 0-origin offset, or
> (1) is it a 1-origin index?
> (a) Is the second argument a length, or
> (b) is it a 0-origin index of the last included character, or
> (c) is it a 1-origin index of the last included character, or
> (d) is it a 0-origin index of the first excluded character, or
> (e) is it a 1-origin index of the first excluded character?
>
> That's 10 possibilities, and it's not exhaustive.
> BASIC often used (1,c). AWK uses (1,a). Scheme uses (0,d).
> Icon has rules that allow the use of negative integers.
>
> The proposal I've presented several times is due to Paul Lyons,
> who was a Masters student at the University of Auckland back
> when I was. He called it "split procedure names". I know he
> wrote it up; I don't know if in SIGPLAN Notices or where. He
> himself would have been the first to admit that the idea
> actually goes back to Algol 60, where you could write things
> like
> integral of(f)from:(lb)to:(ub)step:(h)
> where the rule was that ")[a-zA-Z ]+:(" was equivalent to ",".
> So in Algol 60, the idea was just cosmetic. Burroughs Algol,
> with which Paul Lyons and I were familiar, didn't _quite_ do
> that. It said that ")" <string> "(" was equivalent to ",",
> so you'd write
> integral_of(f)"from"(lb)"to"(ub)"step"(h).
> It was Paul who noticed that you didn't need the colons and
> that you could take the thing _seriously_ and wouldn't need
> any special syntax for keywords. This would have been about
> 1977.
>
> Why is
> string:substring(S) start(I) length(J)
> better than
> string:substring(S, Start, Length)?
>
> Because (a) what if it's another argument which you *thought* was
> a length but was actually a Scheme-like "end"? And (b) variables
> are often arguments of more than one function, and it's not always
> possible to choose the name to suit both equally well.
>
> Writing Smalltalk, where you'd write
> aString copyFrom: start to: stop
> I have found that I make almost no function-interface mistakes,
> because the name of the function I'm calling reminds me what
> the arguments are supposed to be. (I make plenty of other mistakes!)
>
>
>
>
>
>
> >
> >
> >
> > bengt
> >
> > On Thu, 2009-06-04 at 11:10 +0200, Joe Armstrong wrote:
> >> I've been writing some objective-C and like the method calling
> >> syntax.
> >> Objective-C (and smalltalk) code is very readable without lot's of
> >> comments
> >>
> >> Could we do something similar in Erlang?
> >> This was (I think) discussed a long time ago but can't find the
> >> discussion.
> >>
> >> Imagine a function like string:substring/3. A call to this looks
> >> like:
> >>
> >> string:substring(Str, I, J)
> >>
> >> The problem with this is that it's difficult to remember the
> >> argument order
> >> and you have to consult the documentation *to find out the order of
> >> the arguments*
> >> I *know* what the arguments are (a string, a start index and a
> >> length)
> >> but I have to
> >> consult the documentation to find the order.
> >>
> >> Solution: write the call like this.
> >>
> >> string:substring( string:S start:I length:J)
> >>
> >> This could be expanded into a canonical form:
> >>
> >> string:substring_start_string_length(S, I, J)
> >>
> >> where the tags are sorted.
> >>
> >> This would also make the definitions of functions *shorter*
> >> and almost self-documenting
> >>
> >> ie: today I might write something
> >>
> >> f123(FileName, Mode) ->
> >> Fin = FileName ++ ".erl",
> >> Fout = FileName ++ ".beam",
> >> compile(Fin, Fout, Mode).
> >>
> >> whereas I could write
> >>
> >> f123(filename:F mode:M) ->
> >> Fin = F ++ ".erl",
> >> Fout = F++ ".beam",
> >> compile(Fin, Fout, M).
> >>
> >> whose canonical expansion is:
> >>
> >> f123_filename_mode(F, M) ->
> >> Fin = F ++ ".erl",
> >> Fout = F++ ".beam",
> >> compile(Fin, Fout, M).
> >>
> >> This change has many advantages:
> >>
> >> + forces use of meaningful tag names in arguments
> >> + don't have to remember argument order
> >> + variable names in the body of a function become shorter
> >>
> >>
> >> If we were to make this change we would have to rewrite all the
> >> standard libraries
> >> but this would be a *good thing* - since this time we could get
> >> them right.
> >>
> >> This is would also be a backwards compatible change (I think)
> >>
> >> /Joe
> >>
> >> ________________________________________________________________
> >> erlang-questions mailing list. See http://www.erlang.org/faq.html
> >> erlang-questions (at) erlang.org
> >>
> >
> >
> > ________________________________________________________________
> > erlang-questions mailing list. See http://www.erlang.org/faq.html
> > erlang-questions (at) erlang.org
> >
> >
>
More information about the erlang-questions
mailing list