Re: What's the secret to static class members

2016-06-30 Thread Dejan Lekic via Digitalmars-d-learn

On Thursday, 30 June 2016 at 01:11:09 UTC, Mike Parker wrote:


I think it's safe to say this guy is just trolling and we can 
ignore him.


I was about to say the same, Mike. He is either trolling, or 
genuinely did not even bother to learn some language basics...


Re: What's the secret to static class members

2016-06-29 Thread Mike Parker via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 19:10:18 UTC, chmike wrote:



Claiming the problems you encountered are due to bad design of 
the language is unfair if you don't expose clearly the problem 
and verify the problem is not your side. There is a deeply 
thought rationale for every rule of the D language.
If you don't understand the rationale or want to contest the 
choice of rules, then expose your point and arguments. People 
will helpfully answer you.


I did it myself and was always impressed by the quality of the 
responses and positive and helpful attitude of people in this 
forum.


I think it's safe to say this guy is just trolling and we can 
ignore him.


Re: What's the secret to static class members

2016-06-29 Thread chmike via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 17:00:49 UTC, Guido wrote:
On Wednesday, 29 June 2016 at 15:40:57 UTC, Andrea Fontana 
wrote:

On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:
The problem is actually much more profound. The classes need 
to be declared outside the main() scope. WTF?!?!?!


I put them in main() so they would be in scope. This seems 
like a *MAJOR* design flaw with the language, not to mention 
the compiler not giving useful feedback. This decision, if it 
is a decision, makes no sense given all the attention to 
scoping rules.


I'm not interested in trading one set of bad language 
decisions for another. Can someone fix this?


I wonder which language you usually use in your programming 
experience.


C++

I have all this business generally working in C++. I just 
wanted to try D for a production level quick project. So, the 
language is not ready. I'm really sad about this. I had hoped 
that I could get some useful work done. C++ is painfully slow 
to write & debug, but what can you do.


As I said, why exchange one set of bad design decisions for 
another?


On another topic, tuples seem to have a major problem as well.

Tuple!(float, float, float) test;
Tuple!(float, float, float) [] array_data;

test[0] = 1.0;  // works
array_data[i][0] = 1.0; // doesn't work. Compile-time error,


Why don't you give at least the compiler error and the full code ?
If you don't want to publish your actual code, create a very 
small program reproducing the problem and show that to us.


I understand your frustration, but understand that there are many 
people here that volunteer to help you. You have to provide them 
sufficient info for this to work.



   Tuple!(float, float, float) [] array_data;

This declares a dynamic array that is initially empty 
(array_data.length == 0).

Accessing the i'th item can't work.

I'm a bit surprised the compiler would detect this problem 
because it is usually a run time error. So I suspect there are 
other problems with your code.



You could also have written

array_data ~= test;

which appends the value test to the dynamic array that will then 
contain one element. You could then have written


array_data[0][0] = 2.0;


Or you could also have written

Tuple!(float, float, float) [10] array_data;

which would have declared array_data as a fixed sized array of 10 
tuples.

In this case writing

array_data[1][0] = 1.0;

would have worked.


D is an excellent and mature language. Every language has its 
rules that needs to be learn.


Claiming the problems you encountered are due to bad design of 
the language is unfair if you don't expose clearly the problem 
and verify the problem is not your side. There is a deeply 
thought rationale for every rule of the D language.
If you don't understand the rationale or want to contest the 
choice of rules, then expose your point and arguments. People 
will helpfully answer you.


I did it myself and was always impressed by the quality of the 
responses and positive and helpful attitude of people in this 
forum.




Re: What's the secret to static class members

2016-06-29 Thread Ali Çehreli via Digitalmars-d-learn

On 06/29/2016 10:00 AM, Guido wrote:

> doesn't work.

As others said, everything that you've mentioned do indeed work:

void main() {
class Grid {
public:
static uint xdim;
}

class Holder : Grid {
uint var;
}

Grid.xdim = 0;

auto grid = new Grid;
grid.xdim = 0;

auto holder = new Holder;
holder.xdim = 0;

import std.typecons;
Tuple!(float, float, float) test;
Tuple!(float, float, float) [] array_data;
array_data ~= tuple(1.0f, 2.0f, 3.0f);

test[0] = 1.0;
int i = 0;
array_data[i][0] = 1.0;
}

Ali



Re: What's the secret to static class members

2016-06-29 Thread ag0aep6g via Digitalmars-d-learn

On 06/29/2016 07:00 PM, Guido wrote:

On another topic, tuples seem to have a major problem as well.

Tuple!(float, float, float) test;
Tuple!(float, float, float) [] array_data;

test[0] = 1.0;  // works
array_data[i][0] = 1.0; // doesn't work.


Works just fine for me, if I add the missing pieces (imports, main, set 
i, put something in array_data).


Please post complete code, the compile command, the compiler version 
you're using, and the error message you get. This applies to the 
original post as well.


Re: What's the secret to static class members

2016-06-29 Thread Guido via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:40:57 UTC, Andrea Fontana wrote:

On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:
The problem is actually much more profound. The classes need 
to be declared outside the main() scope. WTF?!?!?!


I put them in main() so they would be in scope. This seems 
like a *MAJOR* design flaw with the language, not to mention 
the compiler not giving useful feedback. This decision, if it 
is a decision, makes no sense given all the attention to 
scoping rules.


I'm not interested in trading one set of bad language 
decisions for another. Can someone fix this?


I wonder which language you usually use in your programming 
experience.


C++

I have all this business generally working in C++. I just wanted 
to try D for a production level quick project. So, the language 
is not ready. I'm really sad about this. I had hoped that I could 
get some useful work done. C++ is painfully slow to write & 
debug, but what can you do.


As I said, why exchange one set of bad design decisions for 
another?


On another topic, tuples seem to have a major problem as well.

Tuple!(float, float, float) test;
Tuple!(float, float, float) [] array_data;

test[0] = 1.0;  // works
array_data[i][0] = 1.0; // doesn't work. Compile-time error, 
probably because the language itself doesn't have a dedicated 
extension for tuple elements that is distinguished from array 
dereferencing. This is the logical extension of how to access 
tuples. I normally use structs in C++, but since pointer 
arithmetic is really frowned upon in D, I decided to use Tuples. 
A mistake, I supposed.


So, I've spent a huge amount of time getting ready to write in D. 
That's all wasted. I'll check back in another 10 years to see if 
your hobby language is still around. In the mean time, try to 
think about improving the compiler error messages. I can write 
code any way the language demands, but it has to make sense and I 
can't be doing a research project on the language every 10 
minutes to figure out the right incantation. I already have that 
with C++.


Bye


Re: What's the secret to static class members

2016-06-29 Thread Andrea Fontana via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:
The problem is actually much more profound. The classes need to 
be declared outside the main() scope. WTF?!?!?!


I put them in main() so they would be in scope. This seems like 
a *MAJOR* design flaw with the language, not to mention the 
compiler not giving useful feedback. This decision, if it is a 
decision, makes no sense given all the attention to scoping 
rules.


I'm not interested in trading one set of bad language decisions 
for another. Can someone fix this?


I wonder which language you usually use in your programming 
experience.


Re: What's the secret to static class members

2016-06-29 Thread Mike Parker via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:

The problem is actually much more profound. The classes need to 
be declared outside the main() scope. WTF?!?!?!


It's not going to work anywhere if you type 'Class' as opposed to 
'class'. Types can be declared in any scope:


```
void main() {
class Foo {
static int x = 10;
}

assert(Foo.x == 10);
}
```


Re: What's the secret to static class members

2016-06-29 Thread Adam D. Ruppe via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:
The problem is actually much more profound. The classes need to 
be declared outside the main() scope. WTF?!?!?!


Not true.

What are you actually trying to compile?


Re: What's the secret to static class members

2016-06-29 Thread Guido via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:18:53 UTC, Guido wrote:
I'm using a static class member in a parent class, but can't 
get the compiler to see it.


Class Grid{
  public:
  uint xdim;
}

Class Holder : Grid {
  uint var;
}

Any of the following should work, but none of them do:
Grid.xdim = 0;

grid = new Grid;
grid.xdim = 0;

holder = new Holder;
holder.xdim = 0;

This is the way static class vars were intended to work. What 
magics have I forgotten?


Platform
DMD latest, Windows 7
Visual D


The problem is actually much more profound. The classes need to 
be declared outside the main() scope. WTF?!?!?!


I put them in main() so they would be in scope. This seems like a 
*MAJOR* design flaw with the language, not to mention the 
compiler not giving useful feedback. This decision, if it is a 
decision, makes no sense given all the attention to scoping rules.


I'm not interested in trading one set of bad language decisions 
for another. Can someone fix this?


Re: What's the secret to static class members

2016-06-29 Thread Adam D. Ruppe via Digitalmars-d-learn

On Wednesday, 29 June 2016 at 15:18:53 UTC, Guido wrote:
I'm using a static class member in a parent class, but can't 
get the compiler to see it.


Class Grid{
  public:
  uint xdim;
}


That's not static do `static uint xdim;` if you want it 
static (in this context, static means it is shared across all 
objects of the class)



grid = new Grid;
grid.xdim = 0;

holder = new Holder;
holder.xdim = 0;


those DO work if you declare the variable

auto grid = new Grid;
grid.xdim = 0;

auto holder = new Holder;
holder.xdim = 0;



What's the secret to static class members

2016-06-29 Thread Guido via Digitalmars-d-learn
I'm using a static class member in a parent class, but can't get 
the compiler to see it.


Class Grid{
  public:
  uint xdim;
}

Class Holder : Grid {
  uint var;
}

Any of the following should work, but none of them do:
Grid.xdim = 0;

grid = new Grid;
grid.xdim = 0;

holder = new Holder;
holder.xdim = 0;

This is the way static class vars were intended to work. What 
magics have I forgotten?


Platform
DMD latest, Windows 7
Visual D