www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Shouldn't assert declarations be seen in documentation?

reply "tcak" <tcak gmail.com> writes:
I am developing a web server - web application system, and it is 
going to be running on a small system that has 256MB memory at 
maximum. Hence, I tried to use every bit of memory without 
wasting, and used align(1) on a struct type. Because it is used 
as shared, and its internal variables are updated in time, 
core.atomic.atomicOp is being used. Until today, whenever I tried 
to update variables with atomicOp, running thread was basically 
returning from that point like nothing happened. After long 
debugging, I finally saw that thread has given AssertError with a 
line number. There wasn't any information about what was going 
on. I went to core.atomic file, and found out that (not on the 
given line number), variables should be properly aligned to use 
atomicOp.
May 12 2015
next sibling parent "John Colvin" <john.loughran.colvin gmail.com> writes:
On Tuesday, 12 May 2015 at 10:40:48 UTC, tcak wrote:
 I am developing a web server - web application system, and it 
 is going to be running on a small system that has 256MB memory 
 at maximum. Hence, I tried to use every bit of memory without 
 wasting, and used align(1) on a struct type. Because it is used 
 as shared, and its internal variables are updated in time, 
 core.atomic.atomicOp is being used. Until today, whenever I 
 tried to update variables with atomicOp, running thread was 
 basically returning from that point like nothing happened. 
 After long debugging, I finally saw that thread has given 
 AssertError with a line number. There wasn't any information 
 about what was going on. I went to core.atomic file, and found 
 out that (not on the given line number), variables should be 
 properly aligned to use atomicOp.
In my opinion they should be in "in" contracts and documented, yes.
May 12 2015
prev sibling parent reply Rikki Cattermole <alphaglosined gmail.com> writes:
On 12/05/2015 10:40 p.m., tcak wrote:
 I am developing a web server - web application system, and it is going
 to be running on a small system that has 256MB memory at maximum. Hence,
 I tried to use every bit of memory without wasting, and used align(1) on
 a struct type. Because it is used as shared, and its internal variables
 are updated in time, core.atomic.atomicOp is being used. Until today,
 whenever I tried to update variables with atomicOp, running thread was
 basically returning from that point like nothing happened. After long
 debugging, I finally saw that thread has given AssertError with a line
 number. There wasn't any information about what was going on. I went to
 core.atomic file, and found out that (not on the given line number),
 variables should be properly aligned to use atomicOp.
Just out of interest, is said web server meant to be comparable to e.g. Apache httpd?
May 12 2015
parent reply "tcak" <tcak gmail.com> writes:
On Tuesday, 12 May 2015 at 10:58:08 UTC, Rikki Cattermole wrote:
 On 12/05/2015 10:40 p.m., tcak wrote:
 I am developing a web server - web application system, and it 
 is going
 to be running on a small system that has 256MB memory at 
 maximum. Hence,
 I tried to use every bit of memory without wasting, and used 
 align(1) on
 a struct type. Because it is used as shared, and its internal 
 variables
 are updated in time, core.atomic.atomicOp is being used. Until 
 today,
 whenever I tried to update variables with atomicOp, running 
 thread was
 basically returning from that point like nothing happened. 
 After long
 debugging, I finally saw that thread has given AssertError 
 with a line
 number. There wasn't any information about what was going on. 
 I went to
 core.atomic file, and found out that (not on the given line 
 number),
 variables should be properly aligned to use atomicOp.
Just out of interest, is said web server meant to be comparable to e.g. Apache httpd?
Yes. Web server and application are running separately. Web server is parsing request message, and by using host, determining which web application to route the request. Web application gets the request, does extra parsing like query, path, cookies, etc. and sends response message back to web server, and it sends those messages back to client. I am using shared memory, and named pipe for these to be able to increase performance as high as possible. Thus, it is relies on Posix and my mostly my own library codes.
May 12 2015
parent reply Rikki Cattermole <alphaglosined gmail.com> writes:
On 12/05/2015 11:02 p.m., tcak wrote:
 On Tuesday, 12 May 2015 at 10:58:08 UTC, Rikki Cattermole wrote:
 On 12/05/2015 10:40 p.m., tcak wrote:
 I am developing a web server - web application system, and it is going
 to be running on a small system that has 256MB memory at maximum. Hence,
 I tried to use every bit of memory without wasting, and used align(1) on
 a struct type. Because it is used as shared, and its internal variables
 are updated in time, core.atomic.atomicOp is being used. Until today,
 whenever I tried to update variables with atomicOp, running thread was
 basically returning from that point like nothing happened. After long
 debugging, I finally saw that thread has given AssertError with a line
 number. There wasn't any information about what was going on. I went to
 core.atomic file, and found out that (not on the given line number),
 variables should be properly aligned to use atomicOp.
Just out of interest, is said web server meant to be comparable to e.g. Apache httpd?
Yes. Web server and application are running separately. Web server is parsing request message, and by using host, determining which web application to route the request. Web application gets the request, does extra parsing like query, path, cookies, etc. and sends response message back to web server, and it sends those messages back to client. I am using shared memory, and named pipe for these to be able to increase performance as high as possible. Thus, it is relies on Posix and my mostly my own library codes.
I'm also working on a web server[0] hence why I'm asking. [0] http://github.com/dnetdev/webserver
May 12 2015
parent reply "tcak" <tcak gmail.com> writes:
On Tuesday, 12 May 2015 at 11:14:42 UTC, Rikki Cattermole wrote:
 On 12/05/2015 11:02 p.m., tcak wrote:
 On Tuesday, 12 May 2015 at 10:58:08 UTC, Rikki Cattermole 
 wrote:
 On 12/05/2015 10:40 p.m., tcak wrote:
 I am developing a web server - web application system, and 
 it is going
 to be running on a small system that has 256MB memory at 
 maximum. Hence,
 I tried to use every bit of memory without wasting, and used 
 align(1) on
 a struct type. Because it is used as shared, and its 
 internal variables
 are updated in time, core.atomic.atomicOp is being used. 
 Until today,
 whenever I tried to update variables with atomicOp, running 
 thread was
 basically returning from that point like nothing happened. 
 After long
 debugging, I finally saw that thread has given AssertError 
 with a line
 number. There wasn't any information about what was going 
 on. I went to
 core.atomic file, and found out that (not on the given line 
 number),
 variables should be properly aligned to use atomicOp.
Just out of interest, is said web server meant to be comparable to e.g. Apache httpd?
Yes. Web server and application are running separately. Web server is parsing request message, and by using host, determining which web application to route the request. Web application gets the request, does extra parsing like query, path, cookies, etc. and sends response message back to web server, and it sends those messages back to client. I am using shared memory, and named pipe for these to be able to increase performance as high as possible. Thus, it is relies on Posix and my mostly my own library codes.
I'm also working on a web server[0] hence why I'm asking. [0] http://github.com/dnetdev/webserver
I do not want to change the topic of first post though, how exactly are you storing and passing http message to CGI, and getting response from it? Are they travelling on pipes? Because pipes are managed by kernel, I try to avoid them as much as possible. Only small messages use pipes, and the rest are on shared memory. I didn't read the FastCGI's details before, though as far as I know, CGI writes its response by using stdin.
May 12 2015
parent Rikki Cattermole <alphaglosined gmail.com> writes:
On 12/05/2015 11:20 p.m., tcak wrote:
 On Tuesday, 12 May 2015 at 11:14:42 UTC, Rikki Cattermole wrote:
 On 12/05/2015 11:02 p.m., tcak wrote:
 On Tuesday, 12 May 2015 at 10:58:08 UTC, Rikki Cattermole wrote:
 On 12/05/2015 10:40 p.m., tcak wrote:
 I am developing a web server - web application system, and it is going
 to be running on a small system that has 256MB memory at maximum.
 Hence,
 I tried to use every bit of memory without wasting, and used
 align(1) on
 a struct type. Because it is used as shared, and its internal
 variables
 are updated in time, core.atomic.atomicOp is being used. Until today,
 whenever I tried to update variables with atomicOp, running thread was
 basically returning from that point like nothing happened. After long
 debugging, I finally saw that thread has given AssertError with a line
 number. There wasn't any information about what was going on. I
 went to
 core.atomic file, and found out that (not on the given line number),
 variables should be properly aligned to use atomicOp.
Just out of interest, is said web server meant to be comparable to e.g. Apache httpd?
Yes. Web server and application are running separately. Web server is parsing request message, and by using host, determining which web application to route the request. Web application gets the request, does extra parsing like query, path, cookies, etc. and sends response message back to web server, and it sends those messages back to client. I am using shared memory, and named pipe for these to be able to increase performance as high as possible. Thus, it is relies on Posix and my mostly my own library codes.
I'm also working on a web server[0] hence why I'm asking. [0] http://github.com/dnetdev/webserver
I do not want to change the topic of first post though, how exactly are you storing and passing http message to CGI, and getting response from it? Are they travelling on pipes? Because pipes are managed by kernel, I try to avoid them as much as possible. Only small messages use pipes, and the rest are on shared memory. I didn't read the FastCGI's details before, though as far as I know, CGI writes its response by using stdin.
I haven't yet got to FastCGI support. Since getting the module system and configuration is far more important. But yes, FastCGI requires pipes. The module system is already pretty much working btw via compiled in and shared libraries although it is pretty much untested.
May 12 2015