Re: Allows the use of part of the language keywords?

2016-08-29 Thread Dominikus Dittes Scherkl via Digitalmars-d

On Sunday, 28 August 2016 at 13:35:59 UTC, ketmar wrote:
it has nothing to do with compiler: parser skips comments when 
peeking tokens. the only thing affected is simplistic syntax 
highlighter that can't do proper lookup.


I have anyway never seen the necessity of the keyword "body" 
anyway. I fact, I very much dislike it. You could write a function


Fn()
in {}
out() {}
{}

or even better (or at least what I would prefer):

Fn()
{}
in {}
out() {}

The parser will always take the block without preceeding keyword 
as the body.
If you leave out "in" and "out", you also don't need the keyword 
body. As soon as you add a contract, suddenly you have to add 
that nasty "body". As I learned D this was confusing and I still 
fail to see the benefit.
If you really feel the need to make explicit where the body 
starts, you can add a comment:


Fn()
in
{
}
// body:
{
}
out()
{
}



Re: Allows the use of part of the language keywords?

2016-08-28 Thread ketmar via Digitalmars-d

On Sunday, 28 August 2016 at 13:26:26 UTC, Chris Wright wrote:

On Sun, 28 Aug 2016 08:35:06 +, ketmar wrote:

i have a perfect solution to this: don't write such code!


It would reflect poorly on the compiler if it failed to compile 
something simply because you added a few comments. Especially 
since each C-style comment is likely its own token. A 
not-absurd usecase is a person condensing several functions 
into one, which might involve separately commenting out several 
function bodies.


it has nothing to do with compiler: parser skips comments when 
peeking tokens. the only thing affected is simplistic syntax 
highlighter that can't do proper lookup.


Re: Allows the use of part of the language keywords?

2016-08-28 Thread Chris Wright via Digitalmars-d
On Sun, 28 Aug 2016 08:35:06 +, ketmar wrote:
> i have a perfect solution to this: don't write such code!

It would reflect poorly on the compiler if it failed to compile something 
simply because you added a few comments. Especially since each C-style 
comment is likely its own token. A not-absurd usecase is a person 
condensing several functions into one, which might involve separately 
commenting out several function bodies.


Re: Allows the use of part of the language keywords?

2016-08-28 Thread Cauterite via Digitalmars-d

On Sunday, 28 August 2016 at 08:25:38 UTC, Basile B. wrote:
to think that it can be detected with a simple lookup backward 
(or forward from the KW) is too simplistic.


I'm not saying it'd necessarily be easy to distinguish keyword 
'body' from identifier 'body' in the lexer, I'm just saying a 
'look-behind' feature in a lexer would be trivial to implement.


Re: Allows the use of part of the language keywords?

2016-08-28 Thread ketmar via Digitalmars-d

On Sunday, 28 August 2016 at 08:25:38 UTC, Basile B. wrote:

On Sunday, 28 August 2016 at 08:07:27 UTC, Cauterite wrote:

On Sunday, 28 August 2016 at 04:32:46 UTC, Basile B. wrote:
You must keep track of the previous token, which is not 
usually done in a scanner.


That sounds like a pretty trivial feature to me. There's no 
way that's a legitimate obstacle.


Look at this, this is perfectly valid D code:

void main()
in {}
body /**/ #line 8
/**/
//
/+
/+
+/
+/
{}

to think that it can be detected with a simple lookup backward 
(or forward from the KW) is too simplistic.


i have a perfect solution to this: don't write such code!


Re: Allows the use of part of the language keywords?

2016-08-28 Thread Basile B. via Digitalmars-d

On Sunday, 28 August 2016 at 08:07:27 UTC, Cauterite wrote:

On Sunday, 28 August 2016 at 04:32:46 UTC, Basile B. wrote:
You must keep track of the previous token, which is not 
usually done in a scanner.


That sounds like a pretty trivial feature to me. There's no way 
that's a legitimate obstacle.


Look at this, this is perfectly valid D code:

void main()
in {}
body /**/ #line 8
/**/
//
/+
/+
+/
+/
{}

to think that it can be detected with a simple lookup backward 
(or forward from the KW) is too simplistic.


Re: Allows the use of part of the language keywords?

2016-08-28 Thread Cauterite via Digitalmars-d

On Sunday, 28 August 2016 at 04:32:46 UTC, Basile B. wrote:
You must keep track of the previous token, which is not usually 
done in a scanner.


That sounds like a pretty trivial feature to me. There's no way 
that's a legitimate obstacle.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread ketmar via Digitalmars-d

On Sunday, 28 August 2016 at 04:32:46 UTC, Basile B. wrote:
sorry, i cannot find where exactly i was asked about workaround 
for "stolen body" case. maybe it's 'cause i DIDN'T ASKED FOR 
WORKAROUND?


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Chris Wright via Digitalmars-d
On Sun, 28 Aug 2016 04:32:46 +, Basile B. wrote:
> Once again, the D style says to add a "_" after the keyword. If it's a
> problem with the reflection it's also easy to check if an identifier
> ends with "_" and then to remove it.

Or use UDAs, which would be more general.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Walter Bright via Digitalmars-d

On 8/27/2016 7:35 PM, ketmar wrote:

getting our precious `body` back will be invaluable!


You are not of the body!

https://www.youtube.com/watch?v=m48xii7ndcg


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Basile B. via Digitalmars-d

On Sunday, 28 August 2016 at 02:35:57 UTC, ketmar wrote:

On Saturday, 27 August 2016 at 20:45:56 UTC, Meta wrote:
On Saturday, 27 August 2016 at 19:21:52 UTC, Walter Bright 
wrote:

It also:

1. mucks with the usability of syntax highlighting, which is 
often based merely on tokens.
2. makes it potentially much more difficult to add features 
to the language, which is often done by finding new uses for 
the same keywords

3. is just plain confusing to the person learning the language
4. makes correctly diagnosing syntactic errors harder

There are a million words in the english language. Having a 
handful of reserved words should not be a burden.


Could we at least make body a contextual keyword? It's a 
commonly used word in many different areas.


YEAH! PLEASE-PLEASE-PLEASE-PLEASE! i did that, and it never 
broke anything for years. as for syntax highlighters -- it's 
not too hard to check if `body` is followed by `{`.


You must keep track of the previous token, which is not usually 
done in a scanner.
Once again, the D style says to add a "_" after the keyword. If 
it's a problem with the reflection it's also easy to check if an 
identifier ends with "_" and then to remove it.


The examples of contextual keywords given by W.Bright in a 
previous message are totally different from the "body" case 
because in `extern(C)`, "C" is an identifier that becomes a 
keyword in the context, while what you propose is that a keyword 
becomes an identifier out of the context.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread ketmar via Digitalmars-d

On Saturday, 27 August 2016 at 20:45:56 UTC, Meta wrote:
On Saturday, 27 August 2016 at 19:21:52 UTC, Walter Bright 
wrote:

It also:

1. mucks with the usability of syntax highlighting, which is 
often based merely on tokens.
2. makes it potentially much more difficult to add features to 
the language, which is often done by finding new uses for the 
same keywords

3. is just plain confusing to the person learning the language
4. makes correctly diagnosing syntactic errors harder

There are a million words in the english language. Having a 
handful of reserved words should not be a burden.


Could we at least make body a contextual keyword? It's a 
commonly used word in many different areas.


YEAH! PLEASE-PLEASE-PLEASE-PLEASE! i did that, and it never broke 
anything for years. as for syntax highlighters -- it's not too 
hard to check if `body` is followed by `{`. but getting our 
precious `body` back will be invaluable!


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Meta via Digitalmars-d

On Saturday, 27 August 2016 at 19:21:52 UTC, Walter Bright wrote:

It also:

1. mucks with the usability of syntax highlighting, which is 
often based merely on tokens.
2. makes it potentially much more difficult to add features to 
the language, which is often done by finding new uses for the 
same keywords

3. is just plain confusing to the person learning the language
4. makes correctly diagnosing syntactic errors harder

There are a million words in the english language. Having a 
handful of reserved words should not be a burden.


Could we at least make body a contextual keyword? It's a commonly 
used word in many different areas.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Walter Bright via Digitalmars-d

On 8/27/2016 6:36 AM, ZombineDev wrote:

As Timon said, this won't make the grammar context dependent. Also,
C# has the concept of contextual keywords. Such keywords have special meaning in
certain contexts but are otherwise available for use as identifiers. C# also
allows to use normal keywords as identifiers, but you have use the @for syntax
to disambiguate (e.g. see http://rextester.com/JBOTC21251). From my experience
of using C# the system is well designed and I have never seen problems in
practice. I'm sure something similar can successfully be implemented for D.
Though I would consider such enhancement with low priority.

See https://msdn.microsoft.com/en-us/library/x53a06bb.aspx for more info.


D has contextual keywords, too, and has had them since the beginning:

   extern (C)
   pragma (msg, ...)
   scope (exit)

etc.

Microsoft has tried to patent contextual keywords in C#, but I don't think they 
have a case.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Walter Bright via Digitalmars-d

On 8/27/2016 6:01 AM, Timon Gehr wrote:

then not-entirely-trivial disambiguation has to be added to the parser. There's
no ambiguity for the example in the OP though.


It also:

1. mucks with the usability of syntax highlighting, which is often based merely 
on tokens.
2. makes it potentially much more difficult to add features to the language, 
which is often done by finding new uses for the same keywords

3. is just plain confusing to the person learning the language
4. makes correctly diagnosing syntactic errors harder

There are a million words in the english language. Having a handful of reserved 
words should not be a burden.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread ZombineDev via Digitalmars-d

On Friday, 26 August 2016 at 18:58:25 UTC, Jonathan M Davis wrote:
On Friday, August 26, 2016 17:59:39 Cauterite via Digitalmars-d 
wrote:

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:
> package application.module.user.model;

I get "Error: identifier expected following '.' instead of
'module'"
So I'm not sure how that compiles for you.


I think that he's looking for a language change that would 
allow you to use keywords in contexts where the keyword would 
not be valid. It's been suggested before, but it was rejected. 
If nothing else, it doesn't at all play nicely with how lexers 
and parsers normally work. It's _far_ cleaner if the compiler 
can treat a keyword as a keyword in all contexts that it's 
used. Not doing so makes the grammar context-dependent, whereas 
Walter has gone to great lengths to make it completely 
context-free.


- Jonathan M Davis


As Timon said, this won't make the grammar context dependent. 
Also,
C# has the concept of contextual keywords. Such keywords have 
special meaning in certain contexts but are otherwise available 
for use as identifiers. C# also allows to use normal keywords as 
identifiers, but you have use the @for syntax to disambiguate 
(e.g. see http://rextester.com/JBOTC21251). From my experience of 
using C# the system is well designed and I have never seen 
problems in practice. I'm sure something similar can successfully 
be implemented for D. Though I would consider such enhancement 
with low priority.


See https://msdn.microsoft.com/en-us/library/x53a06bb.aspx for 
more info.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Timon Gehr via Digitalmars-d

On 26.08.2016 20:58, Jonathan M Davis via Digitalmars-d wrote:

On Friday, August 26, 2016 17:59:39 Cauterite via Digitalmars-d wrote:

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:

package application.module.user.model;


I get "Error: identifier expected following '.' instead of
'module'"
So I'm not sure how that compiles for you.


I think that he's looking for a language change that would allow you to use
keywords in contexts where the keyword would not be valid. It's been
suggested before, but it was rejected. If nothing else, it doesn't at all
play nicely with how lexers and parsers normally work. It's _far_ cleaner if
the compiler can treat a keyword as a keyword in all contexts that it's
used. Not doing so makes the grammar context-dependent, whereas Walter has
gone to great lengths to make it completely context-free.

- Jonathan M Davis



No, this would not introduce any context-dependence.

https://en.wikipedia.org/wiki/Context-free_grammar

That doesn't mean it is necessarily a great idea though.
It increases ambiguity of the grammar, and hence, if you want to be able 
to parse things like


auto enum = 3;
enum +=2;

then not-entirely-trivial disambiguation has to be added to the parser. 
There's no ambiguity for the example in the OP though.


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Mike Parker via Digitalmars-d

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:



PS: editor don't support markdown or bbcode?- -


See this:

http://dlang.org/blog/2016/06/10/core-team-update-vladimir-panteleev/


Re: Allows the use of part of the language keywords?

2016-08-27 Thread Basile B. via Digitalmars-d

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:

Allows the use of part of the language keywords, example:
[code]
sturct module
{
// TODO
}
[code]


The D style as used in phobos says that you must add a "_" at the 
end of the keyword that you wish to use as identifier.


When the problem happens because of linkage to an object or to a 
static library there's the pragma(mangle):


https://dlang.org/spec/pragma.html#mangle


PS: editor don't support markdown or bbcode?- -


No, but people use several tricks to denote a code block: github 
style block code, html tags etc. This times I use 
°°





Re: Allows the use of part of the language keywords?

2016-08-26 Thread Ali Çehreli via Digitalmars-d

On 08/26/2016 11:58 AM, Jonathan M Davis via Digitalmars-d wrote:

On Friday, August 26, 2016 17:59:39 Cauterite via Digitalmars-d wrote:

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:

package application.module.user.model;


I get "Error: identifier expected following '.' instead of
'module'"
So I'm not sure how that compiles for you.


I think that he's looking for a language change that would allow you to use
keywords in contexts where the keyword would not be valid. It's been
suggested before, but it was rejected. If nothing else, it doesn't at all
play nicely with how lexers and parsers normally work. It's _far_ cleaner if
the compiler can treat a keyword as a keyword in all contexts that it's
used. Not doing so makes the grammar context-dependent, whereas Walter has
gone to great lengths to make it completely context-free.

- Jonathan M Davis



My understanding is completely different: The OP is looking for code 
highlight support on the forum. :D (Which actually is a newsgroup but I 
think the forum does support highlighting.)


Ali



Re: Allows the use of part of the language keywords?

2016-08-26 Thread Jonathan M Davis via Digitalmars-d
On Friday, August 26, 2016 17:59:39 Cauterite via Digitalmars-d wrote:
> On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:
> > package application.module.user.model;
>
> I get "Error: identifier expected following '.' instead of
> 'module'"
> So I'm not sure how that compiles for you.

I think that he's looking for a language change that would allow you to use
keywords in contexts where the keyword would not be valid. It's been
suggested before, but it was rejected. If nothing else, it doesn't at all
play nicely with how lexers and parsers normally work. It's _far_ cleaner if
the compiler can treat a keyword as a keyword in all contexts that it's
used. Not doing so makes the grammar context-dependent, whereas Walter has
gone to great lengths to make it completely context-free.

- Jonathan M Davis



Re: Allows the use of part of the language keywords?

2016-08-26 Thread Cauterite via Digitalmars-d

On Friday, 26 August 2016 at 14:16:27 UTC, Brian wrote:

package application.module.user.model;


I get "Error: identifier expected following '.' instead of 
'module'"

So I'm not sure how that compiles for you.


Allows the use of part of the language keywords?

2016-08-26 Thread Brian via Digitalmars-d

Allows the use of part of the language keywords, example:

```D
package application.module.user.model;

class User
{
// TODO
}
```

[code]
sturct module
{
// TODO
}
[code]

PS: editor don't support markdown or bbcode?- -