[erlang-questions] erlang improvement - objective c (or smalltalk) syntax

Torben Hoffmann torben.lehoff@REDACTED
Thu Jun 4 11:36:04 CEST 2009


I second Joe's proposal.

I have the same issues with having to consult the documentation all the
time.

Regarding the re-write of the standard libraries: that could be an excellent
opportunity to get QuickCheck specifications of all the standard library
modules and ensure that the implementation just works.
(In addition to the welcomed clean-up...)

Cheers,
Torben

On Thu, Jun 4, 2009 at 11:10 AM, Joe Armstrong <erlang@REDACTED> 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
>
>


More information about the erlang-questions mailing list