www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - forward references...again

reply kede <nobody devnull.com> writes:
Hi all,

I know this has been flagged as a bug before, but it doesn't seem to be getting
fixed.
So I'm gonna see if i can fix it myself.

In its simplest form the following three files won't compile:

----
[ vec.d ]
module vec;
import mat;

struct Vec { 
  float x, y, z; 
  Mat mat() { Mat m; return m; }
}

[ mat.d ]
module mat;
import vec;

struct Mat { Vec cols[3]; }

[ main.d ]
import vec, matrix;

int main() { Vec v; Mat m; return 0; }
---- 

dmd -c matrix.d; will compile
dmd -c vec.d;  fails

However, its the parsing of matrix.d that fails when u try to compile vec.d.

Basically, on the first semantic pass of vec.d the module mat will get parsed
causing
a semantic pass on struct Mat, which flags errors because it cannot determine
the size of the struct.  Then it returns back down to the vec module and
successfully determines the size of the Vec struct as 12, and returns back to
the main driver
[d-lang.c:d_parse_file()] which exits because of the flagged errors.


Anyways, I'm looking for some feedback concerning how to fix this in an
acceptable fashion.  From what I can see, this problem seems to have already
made the code in many modules somewhat less than readable, to me at least.  So
rather than placing another hack into the code my initial idea is to add an
addition semantic pass prior to the first, to scan through each module, tail
recursing through the imports only if they are needed to determine the size of
aggregate types... or maybe this will just end up being a hack too and the
first semantic pass should really be able to handle this... :D

Thoughts or feedback before I start on this, or reasons why I shouldnt waste my
time ;)

kede
Jan 29 2008
next sibling parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"kede" <nobody devnull.com> wrote in message 
news:fnont6$9om$1 digitalmars.com...

 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source. :(
Jan 29 2008
parent reply Bill Baxter <dnewsgroup billbaxter.com> writes:
Jarrett Billingsley wrote:
 "kede" <nobody devnull.com> wrote in message 
 news:fnont6$9om$1 digitalmars.com...
 
 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source.
Backend, I think you meant to say. --bb
Jan 29 2008
parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Bill Baxter" <dnewsgroup billbaxter.com> wrote in message 
news:fnoqnb$guj$1 digitalmars.com...
 Jarrett Billingsley wrote:
 "kede" <nobody devnull.com> wrote in message 
 news:fnont6$9om$1 digitalmars.com...

 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source.
Backend, I think you meant to say. --bb
Well the frontend is open-source but it's not like anyone but Walter actually has the authority to change it. You can submit patches but whether they make it in is entirely up to one guy.
Jan 29 2008
next sibling parent Bill Baxter <dnewsgroup billbaxter.com> writes:
Jarrett Billingsley wrote:
 "Bill Baxter" <dnewsgroup billbaxter.com> wrote in message 
 news:fnoqnb$guj$1 digitalmars.com...
 Jarrett Billingsley wrote:
 "kede" <nobody devnull.com> wrote in message 
 news:fnont6$9om$1 digitalmars.com...

 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source.
Backend, I think you meant to say. --bb
Well the frontend is open-source but it's not like anyone but Walter actually has the authority to change it. You can submit patches but whether they make it in is entirely up to one guy.
I see what you mean. Still, technically it does satisfy the definition of "open-source". Practicality aside, anyone is free to start a new fork if they so choose, right? --bb
Jan 29 2008
prev sibling parent Robert Fraser <fraserofthenight gmail.com> writes:
Jarrett Billingsley wrote:
 "Bill Baxter" <dnewsgroup billbaxter.com> wrote in message 
 news:fnoqnb$guj$1 digitalmars.com...
 Jarrett Billingsley wrote:
 "kede" <nobody devnull.com> wrote in message 
 news:fnont6$9om$1 digitalmars.com...

 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source.
Backend, I think you meant to say. --bb
Well the frontend is open-source but it's not like anyone but Walter actually has the authority to change it. You can submit patches but whether they make it in is entirely up to one guy.
If you submitted a patch that fixed the issues & had tests to prove it, I'm sure Walter wouldn't hesitate to integrate it. OTOH, given the way the frontend is architectured, those sorts of things would be a lot of work.
Jan 30 2008
prev sibling parent reply kede <nobody devnull.com> writes:
Hey Jarrett,

Yeah I have been sticking everything into one module, but its really annoying
me having to scroll though huge files and I'm really enjoying programming in D
lately, other than this and not being able to return a ref type I have nothing
to complain about ;)

As for closed source, we also have gdc, so I figured I would fix it for gdc and
I'm sure Walter would patch up the dmd code accordingly. I just want a go ahead
for adding another partial semantic pass, or hacking through the existing first
semantic pass to fix it,
or some other completely different approach to take.

Have fun,
kede

<div class='subliminal'>opensource it</div>


Jarrett Billingsley Wrote:

 "kede" <nobody devnull.com> wrote in message 
 news:fnont6$9om$1 digitalmars.com...
 
 Anyways, I'm looking for some feedback concerning how to fix this in an 
 acceptable fashion.
A way of fixing it in an _un_acceptable fashion would be to stick everything into one module.
 Thoughts or feedback before I start on this, or reasons why I shouldnt 
 waste my time ;)
Well, Walter doesn't feel that fixing this kind of bug is of the highest priority, despite its being the one that is run into the most often and which has no real workarounds. But what can you do, the frontend's closed-source. :(
Jan 29 2008
parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"kede" <nobody devnull.com> wrote in message 
news:fnoq68$g1j$1 digitalmars.com...

 As for closed source, we also have gdc, so I figured I would fix it for 
 gdc and I'm sure Walter would patch up the dmd code accordingly.
Well, you can go ahead and try, I guess. There's no guarantees, though :\
Jan 29 2008
parent reply renoX <renosky free.fr> writes:
Jarrett Billingsley a écrit :
 "kede" <nobody devnull.com> wrote in message 
 news:fnoq68$g1j$1 digitalmars.com...
 
 As for closed source, we also have gdc, so I figured I would fix it for 
 gdc and I'm sure Walter would patch up the dmd code accordingly.
Well, you can go ahead and try, I guess. There's no guarantees, though :\
Even in "full opensource" programs like Linux kernel, there's no guarantee that other will take your code.. So IMHO patching gdc then providing those patch to Walter is a very sensible approach. renoX
Jan 30 2008
parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"renoX" <renosky free.fr> wrote in message 
news:fnqong$2o28$1 digitalmars.com...

 Even in "full opensource" programs like Linux kernel, there's no guarantee 
 that other will take your code..
Funny you chose the Linux kernel, because AFAIK it's a very similar situation to the DMD frontend -- only one guy (Linus) actually directs what code gets in or not. Yes, it's more "open" in the sense that there are more people working on it, but there's still a one-person bottleneck. By "truly" open-source, I mean virtually anyone can work on it and contribute code, and that code is no less "official" than any other. An example would be Tango. Just about anyone can be a Tango dev as long as they ask (and aren't obviously a prat).
Jan 30 2008