digitalmars.D - Some fixes & questions.
- jmjmak utu.invalid.fi (60/60) Aug 14 2005 Ok, now I've finally had some time to play around again with D. I'm
- Ben Hinkle (13/38) Aug 14 2005 If you use std.boxer you have to compile with -release or rebuild phobos...
Ok, now I've finally had some time to play around again with D. I'm
especially happy with the D syntax. On the other hand, there are many
things that need more work. I hope even more volunteers could improve
the DUI, Eclipse D plugin, Doxygen support and create a good DB library
for D. DMD is an excellent reference compiler, thank you Walter.
I studied the latest dmd package and made some notes and questions,
so here we go (tried to keep it short):
N: lex.html, operatoroverloading.html: opNotations === and !== used
instead of is/!is
Q: ctod.html: Formatted printing + printf -> writef/writefln ?
Q: ctod.html: Data Structure Traversal, is it better to use
foreach in the D example?
N: std.recls: the compilation fails on linux (gcc 3.4.4)
stlsoft_null.h:line 194, func needs to be public?
Q: It seems that Phobos is missing std.inbuffer? I think most of the InBuffer
functionality is possible to achieve with std.Streams.
Q: The Phobos manual is also missing std.math2 documentation, isn't it?
N: There seems to be a bug in std.boxer. Can be easily found by
using the boxer with some primitives.
foobar.o(.gnu.linkonce.t_D3std5boxer8unbox_Aa5unboxFS3std5boxer3BoxZAa+0x4a):
In function `_D3std5boxer8unbox_Aa5unboxFS3std5boxer3BoxZAa':
foobar.d:563: undefined reference to `_assert_3std5boxer'
N: The recls_test_1.d & recls_test_2.d examples need some more work.
First, there's the old cast-syntax:
$ dmd recls_test_1.d
recls_test_1.d(221): C style cast illegal, use cast(char*)("")
recls_test_1.d(235): C style cast illegal, use cast(char*)("")
recls_test_1.d(236): C style cast illegal, use cast(char*)("")
recls_test_1.d(239): C style cast illegal, use cast(char*)("")
$ dmd recls_test_2.d
recls_test_2.d(210): C style cast illegal, use cast(char*)("")
recls_test_2.d(229): C style cast illegal, use cast(char*)("")
recls_test_2.d(230): C style cast illegal, use cast(char*)("")
recls_test_2.d(233): C style cast illegal, use cast(char*)("")
Next, the printf-thing is kind of deprecated now that we have
writef.
Finally, I can't figure it out how to link with recls.
---
Q: I would like to sort the following array:
interface A { ..., int opCmp(A other); }
class B : A { ..., int opCmp(A other) { ... } }
B[] items;
B ~= new B();
B.sort; // <-- now why does this produce a segfault?
AFAIK the sort doesn't even call the opCmp-functions.
Q: How is it possible to create a multi-threaded application in D
that doesn't eat up all CPU time? I know I can call some functions
like fork() via the C api, but what I was looking for was a nice
wait-function that could be called from the currently running thread
(just like in Java).
Q: I think the DMD has some trouble with the imports. Whenever
I create a simple class hierarchy, I need to improvise with the
import-lines to prevent some nasty forward references or conflicts.
I've never encountered anything similar with C/C++/Java. Is there
anything that could just make this work? :)
N: I managed to fix a few bugs in the dmd examples. The new versions
can be found at http://users.utu.fi/jmjmak/stuff/dmd-fixes.zip.
I hope these fixes will be included in the future dmd releases :)
---
Jari-Matti
Aug 14 2005
a subset of answers:N: There seems to be a bug in std.boxer. Can be easily found by using the boxer with some primitives. foobar.o(.gnu.linkonce.t_D3std5boxer8unbox_Aa5unboxFS3std5boxer3BoxZAa+0x4a): In function `_D3std5boxer8unbox_Aa5unboxFS3std5boxer3BoxZAa': foobar.d:563: undefined reference to `_assert_3std5boxer'If you use std.boxer you have to compile with -release or rebuild phobos without -release.Q: I would like to sort the following array: interface A { ..., int opCmp(A other); } class B : A { ..., int opCmp(A other) { ... } } B[] items; B ~= new B(); B.sort; // <-- now why does this produce a segfault? AFAIK the sort doesn't even call the opCmp-functions.you want int opCmp(Object other) I don't know why the sort would seg-v. It should use Object.opCmp.Q: How is it possible to create a multi-threaded application in D that doesn't eat up all CPU time? I know I can call some functions like fork() via the C api, but what I was looking for was a nice wait-function that could be called from the currently running thread (just like in Java).http://home.comcast.net/~benhinkle/locks/locks.html is a port of Doug Lea's concurrent (non-container) utilities like locks, conditions, barriers, latches and semaphores.Q: I think the DMD has some trouble with the imports. Whenever I create a simple class hierarchy, I need to improvise with the import-lines to prevent some nasty forward references or conflicts. I've never encountered anything similar with C/C++/Java. Is there anything that could just make this work? :)I have one word: private private private. Public imports get all tangled up very easily. By private importing wherever possible the symbols imported won't bleed into dependent modules and cause conflicts.N: I managed to fix a few bugs in the dmd examples. The new versions can be found at http://users.utu.fi/jmjmak/stuff/dmd-fixes.zip. I hope these fixes will be included in the future dmd releases :)I hope so, too. Thanks!
Aug 14 2005








"Ben Hinkle" <ben.hinkle gmail.com>