Proposal: Function declaration with keyword
Hans W. Uhlig
huhlig at gmail.com
Sat Apr 12 13:14:38 PDT 2008
boyd wrote:
>> So anyway, if it is going to become required on every function, let's
>> at least make it something shorter than 'function'.
>
> I personally prefer the keyword 'function', it's not that long and it's
> clear. Shorter is okay as long as it doesn't decrease readability. I'm
> wary of using 'func', as it could also indicate functor. I have no Idea
> what a functor is but i've seen it used around here several times.
> Anyway, are those 8 characters really such a pain to write?
>
> Regardless of what keyword will be used, the main reason for using a
> keyword in the first place is readability. Not just for the user, but
> also for the parser. I'm not an expert on parsing, but I'm pretty sure
> this keyword could help identifying functions more easily.
>
> Plus there won't be any need for those special case storage classes like
> 'pure' and 'const' to be written at the end of the function, decreasing
> the overal complexity of the D Language. Decreasing complexity of the
> basic features becomes more and more important when more features are
> added to D.
>
>> I think the chances of it happening are slim and none, though. Unless
>> you can come up with some more compelling reasons for it. Heck we
>> can't even get Walter to remove 'printf' from Object.d.
>
> Having a keyword for function declarations is a completely different
> matter from removing one lousy function in the standard library.
>
> The chances of this feature from happening depends on whether this
> proposal appeals to the ideas of the designers of D, and partly on what
> the D community thinks of it. So, there's really no telling what kinds
> of odds we're dealing with here.
>
>> I just hope I don't ever have to type this in D:
>>
>> protected override invariant pure function invariant(double)[]
>> func(invariant (double)[]) {...}
>
> This function would be even better if the implementation was: { return
> _myArray; } :P
> Seriously, I don't think the function declaration keyword really affects
> this problem.
>
> Anyway, thanks for the feedback.
>
> Cheers,
> Boyd
>
>
>
> --------
> On Sat, 12 Apr 2008 14:16:29 +0200, Bill Baxter
> <dnewsgroup at billbaxter.com> wrote:
>
>> boyd wrote:
>>> Okay, so I've been working with D for a while now. I stumbled upon it
>>> when I was searching for a better language for me to use.
>> >
>>> Other languages always seemed to lack some crucial feature. D is
>>> generally easy to use, easy to read and has all the options I wanted.
>>> I also love the attention it has given to little details that just
>>> make things so much easier.
>>> It's not perfect by any means, but overal it's better than anything.
>>> I currently have gripes with mixins, which are a pain to use. From
>>> what I hear Macros are gong to replace them, so for now I'll avoid
>>> that subject.
>>
>> Heartily agree with you there. For all the complaining I do here, I
>> still keep using D, because I really haven't found anything better.
>>
>>> Instead I've been wondering about a problem that, to my knowledge,
>>> hasn't gotten any attention yet: function declaration keyword.
>>> One thing I never really liked about C++ is the way function
>>> declarations look. You can't easily differentiate them from variable
>>> declarations. Maybe it's partly because I started with Object Pascal
>>> rather than C++, but I never got used to it.
>>> Anyway, why not use a keyword for function declarations?
>>> function void DoSomething(int someParam);
>>
>> I just hope I don't ever have to type this in D:
>>
>> protected override invariant pure function invariant(double)[]
>> func(invariant (double)[]) {...}
>>
>> Scarily, it's looking like that's probably going to be quite a
>> reasonable signature for a D2 pure method to have. (Except for the
>> 'function' part from your suggestion).
>>
>> For whatever else, K&R knew the value of keeping common keywords
>> short, even if it meant using abbreviations. That's why we have
>> - int not integer
>> - char not character
>> - const not constant
>> - enum not enumeration
>> - float not floating_point
>> and later, thanks to Stroustrup, I guess:
>> - bool not boolean
>>
>>
>> So anyway, if it is going to become required on every function, let's
>> at least make it something shorter than 'function'.
>>
>> I think the chances of it happening are slim and none, though. Unless
>> you can come up with some more compelling reasons for it. Heck we
>> can't even get Walter to remove 'printf' from Object.d.
>>
>> --bb
Update to my prior notes:
<modifier ...> <type> <identifier><(parameter, ...)> <property ...>
<{block}>
where modifier is:
const, static, pure, invariant(can a function or class be invariant?),
etc...
where type is:
class, function, etc...
where identifier is:
the human identifier of the declaration
where parameter defined as:
<modifier ...> <type> <identifier>
where modifier is:
const, static, final, invariant, volitile(cpu optimization for
loops?), etc.
where type is:
int, double, float, void, etc.
where identifier is:
the human identifier of the declaration
where property is:
<property <entry, ...>>
returns <parameter, ...>, throws?, (more later?)
where block is:
code!
curious, someone mentioned before using in, out and ref... These are
unknown to me, could someone give me a quick gist or point me to a page,
if so I will update this.
More information about the Digitalmars-d
mailing list