erlang improvement - objective c (or smalltalk) syntax

Joe Armstrong <>
Thu Jun 4 11:10:55 CEST 2009


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


More information about the erlang-questions mailing list