D.gnu - bug: stringz
- d d.com (20/20) Jul 08 2005 If you pass a static char array to toStringz, the post-condition
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (11/21) Jul 09 2005 That is just because DMD doesn't have *any*
- d d.com (5/20) Jul 09 2005 Where the contract is said? If in the pre-condition, then I agree.
- d d.com (31/35) Aug 04 2005 I think the default installation should install 2 versions of libphobos....
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (6/16) Aug 05 2005 Strange, I'm pretty sure that it used to build Phobos with -frelease ?
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (11/14) Jul 10 2005 Hmm, wonder why my Mac OS X build doesn't say that ?
If you pass a static char array to toStringz, the post-condition assert(strlen(result) == string.length); maybe violated: DMD doesn't have this AssertError. ------------------------------------ $ cat strz.d import std.string; int main() { char[4] buf; buf[2] = '\000'; toStringz(buf); return 0; } $ gdmd strz.d $ ./strz Error: AssertError Failure std/string.d(230) $ gdmd gdc (GCC) 3.3.6 (gdc 0.14, using dmd 0.127) Copyright (C) 2003 Free Software Foundation, Inc.
Jul 08 2005
d d.com wrote:DMD doesn't have this AssertError.That is just because DMD doesn't have *any* contracts enabled in the Phobos library...import std.string; int main() { char[4] buf; buf[2] = '\000'; toStringz(buf); return 0; }The contract of toStringz says: no NUL chars, so that is why it is complaining about this. You can compile libgphobos.a with -release, if you want to avoid the asserts/contracts ? (just like you can recompile libphobos.a without -release, if you do want them ?) Not a bug. --anders
Jul 09 2005
Good to know that. (Cross-post to digitalmars.D.bugs)DMD doesn't have this AssertError. import std.string; int main() { char[4] buf; buf[2] = '\000'; toStringz(buf); return 0; }That is just because DMD doesn't have *any* contracts enabled in the Phobos library...The contract of toStringz says: no NUL chars,..Not a bug.Where the contract is said? If in the pre-condition, then I agree. Now it fails in the post-condition, definately a bug. This is a reason I love DbC: everything has to be explicit.
Jul 09 2005
You can compile libgphobos.a with -release, if you want to avoid the asserts/contracts ? (just like you can recompile libphobos.a without -release, if you do want them ?)I think the default installation should install 2 versions of libphobos.a: -- one optimized version with -release, so all the checking is turned-off for maximal speed. -- one debug version with checking turned-on. I just noticed my programm runs so slow with GDD. After adding -profile option, I found out that 99% (the top 7 entry) of the time is spent on checking (the top 2 takes 98.61% time on invariant): ------------------------------------------------------------------------- Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls s/call s/call name 75.52 3026.31 3026.31 _D3gcx4Pool11__invariantFZv 23.09 3951.46 925.15 _D3gcx3Gcx11__invariantFZv 0.32 3964.15 12.69 _D9invariant12_d_invariantFC6ObjectZv 0.18 3971.50 7.35 _D3gcx4Pool9InvariantFZv 0.18 3978.81 7.31 _D3gcx3Gcx11fullcollectFPvZk 0.12 3983.57 4.76 _D3gcx4Pool5opCmpFPS3gcx4PoolZi 0.09 3987.20 3.63 _D3gcx3Gcx4markFPvPvZv .. .. ------------------------------------------------------------------------- This is crazy! By any means, please provide two versions of libphobos.a in the default installation! If only one is provided, please install the ***optimized*** version!!! (How many ordinary D programmer would care about the contract inside libphobos.a? how would you expect them to do with it when the contract fails inside libphobos.a?) Otherwise, people will feel bad about D's performance claim! and nobody is going to use it.
Aug 04 2005
d d.com wrote:I think the default installation should install 2 versions of libphobos.a: -- one optimized version with -release, so all the checking is turned-off for maximal speed. -- one debug version with checking turned-on. I just noticed my programm runs so slow with GDD. After adding -profile option, I found out that 99% (the top 7 entry) of the time is spent on checking (the top 2 takes 98.61% time on invariant):Strange, I'm pretty sure that it used to build Phobos with -frelease ? Something must have changed there in the last couple of GDC versions... And I agreee, the default libgphobos.a (notice: "G") lib should be built without the contracts - perhaps another version with them on. --anders
Aug 05 2005
d d.com wrote:$ gdmd gdc (GCC) 3.3.6 (gdc 0.14, using dmd 0.127) Copyright (C) 2003 Free Software Foundation, Inc.Hmm, wonder why my Mac OS X build doesn't say that ? gdc (GCC) 3.3.6 Copyright (C) 2003 Free Software Foundation, Inc. Do I have to add something to the build or platform ? OK, found it - it had been "sneaked" into the setup-gcc.sh... Using a special setup to build the Mac OS X version (gdcmac) and do the extra patches and the installer packaging etc. etc. I'll add it to the gdc 0.15 build, or something like that. :-) --anders
Jul 10 2005