D - Dynamic arrays
- Karl Bochert (6/6) Dec 04 2002 Is there any word on when dynamic arrays might be functional?
- Evan McClanahan (17/26) Dec 05 2002 afaik, both dynamic arrays and and alloc/free are in D at the moment.
- Karl Bochert (14/42) Dec 05 2002 Thanks -- I keep thinking that if its not in the manual it doesn't exist...
- Evan McClanahan (43/58) Dec 05 2002 yeah, sometimes you have to dig or ask to find anything. But it's a
- Karl Bochert (19/36) Dec 05 2002 Nope
- Mike Wynn (53/88) Dec 05 2002 been using WinMain for a while (with a .def file so you don't get a cons...
- Karl Bochert (5/14) Dec 05 2002 Its a miracle! Not only does it work fine, but the information has magic...
- Walter (4/6) Jan 17 2003 magically
Is there any word on when dynamic arrays might be functional? I wish to start a D project, but with neither alloc-free nor dynamic arrays I seem to be unable to do anything at all. Are dynamic arrays due in days? weeks? months? unknown? Thanx Karl Bochert
Dec 04 2002
Karl Bochert wrote:Is there any word on when dynamic arrays might be functional? I wish to start a D project, but with neither alloc-free nor dynamic arrays I seem to be unable to do anything at all. Are dynamic arrays due in days? weeks? months? unknown? Thanx Karl Bochertafaik, both dynamic arrays and and alloc/free are in D at the moment. To get to malloc and free (which aren't the way that D is meant to be used, but to each his own) you do : import c.stdlib; and either: var * varp = malloc(var.size); or: var * varp = stdlib.malloc(var.size); which should give you your system standard malloc (also calloc, free, alloca, and realloc). if it is the second one, and the stdlib. annoys you, you can always do this: alias stdlib.malloc malloc; etc. I'm not sure I understand which problems you're having with dynamic arrays. Care to describe them in more detail? Evan
Dec 05 2002
afaik, both dynamic arrays and and alloc/free are in D at the moment. To get to malloc and free (which aren't the way that D is meant to be used, but to each his own) you do : import c.stdlib; and either: var * varp = malloc(var.size); or: var * varp = stdlib.malloc(var.size); which should give you your system standard malloc (also calloc, free, alloca, and realloc). if it is the second one, and the stdlib. annoys you, you can always do this: alias stdlib.malloc malloc; etc.Thanks -- I keep thinking that if its not in the manual it doesn't exist, but of course D isn't at that point yet. I would much prefer dynamic arrays if they worked.I'm not sure I understand which problems you're having with dynamic arrays. Care to describe them in more detail?See my 'Stuid Question' thread. Basically my system instantly crashes when I try to do anything that involves enlarging a dynamic array. For instance: char[] s; char[4] t = "test" s = t.dup; // bomb s.length = 6; // bomb Is this problem unique to me? Is it only a problem in the latest release?Karl
Dec 05 2002
Karl Bochert wrote:Thanks -- I keep thinking that if its not in the manual it doesn't exist, but of course D isn't at that point yet. I would much prefer dynamic arrays if they worked.yeah, sometimes you have to dig or ask to find anything. But it's a small project as of yet, and I'm sure that the documentation will improve over time.See my 'Stuid Question' thread. Basically my system instantly crashes when I try to do anything that involves enlarging a dynamic array. For instance: char[] s; char[4] t = "test" s = t.dup; // bomb s.length = 6; // bomb Is this problem unique to me? Is it only a problem in the latest release?ok, I've tried some things. Here are some suggestions. char[] s; char[] t = "test"; s = t[0..4]; s.length = 7; s[4] = '!'; printf("%.*s\n", s); //prints 'test!' this works. char[] s; char[] t = "test"; s ~= t; s.length = 7; s[4] = '!'; printf("%.*s\n", s); this also works. char[] s; char[4] t = "test"; s ~= t; s.length = 7; s[4] = '!'; printf("%.*s\n", s); that too... char[] s; char[] t = "test"; s = t.dup; s.length = 7; s[4] = '!'; printf("%.*s\n", s); and here as well. so I think that the problem is that char[4] isn't the same type as char[], and the compiler isn't catching it and warning you (or giving you an error) at compile time. Which I think that it should, rather than just puking at runtime, but that's something to take up with Walter. I hope that this has been helpful, at least a little. Actually, trying something else, check the formatting on your original printf() because I just tried your original example again, and it worked. Note the printing discussion on the Arrays page in the Docs, down at the bottom. We really need a native printf() implementation. Evan
Dec 05 2002
On Thu, 05 Dec 2002 17:25:58 +0100, Evan McClanahan <evan dontSPAMaltarinteractive.com> wrote:Karl Bochert wrote:ok, I've tried some things. Here are some suggestions. char[] s; char[] t = "test"; s = t[0..4]; s.length = 7; s[4] = '!'; printf("%.*s\n", s); //prints 'test!' this works.Nope void foo () char[] s; char[] t = "test"; s = t[0..4]; // ok -- s is just a reference s.length = 7; // fails -- involves re-allocation s[4] = '!'; // fails -- s[3] = '!'; is ok printf("%.*s\n", s); //No output (Gui app??) } Called from WinMain() bombs. Is it just Windows applications? Walter said that he would look into it, so I guess I'll just have to be patient. I had hoped that it was just a typo in the latest release (dynamic arrays must have worked by now!). Is it just my system or am I really the first to try WinMain() ?? Karl
Dec 05 2002
been using WinMain for a while (with a .def file so you don't get a console) though this might be the reason my D directX app only runs for 5 mins then exits without error, BUT the code works fine for console apps int main( char[][]args ) { ..... } on ver 0.50 the following works ( compiled in one go with 'dmd test2.d test2.def ' ) import windows; import c.stdio; extern (C) void gc_init(); extern (C) void gc_term(); extern (C) void _minit(); extern (C) void _moduleCtor(); extern (C) void _moduleUnitTests(); char[256] buf; void begin() { char[] s; char[] t = "test"; s = t[0..4]; s.length = 7; s[4] = "!"; sprintf((char *)buf, "%.*s\n", s); MessageBoxA(null, (char *)buf, "what ?", MB_OK | MB_ICONEXCLAMATION); } extern (Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int result; gc_init(); // initialize garbage collector _minit(); // initialize module constructor table try { _moduleCtor(); // call module constructors _moduleUnitTests(); // run unit tests (optional) begin(); } catch (Object o) // catch any uncaught exceptions { MessageBoxA(null, (char *)o.toString(), "Error", MB_OK | MB_ICONEXCLAMATION); result = 0; // failed } gc_term(); // run finalizers; terminate garbage collector return 1; } "Karl Bochert" <kbochert copper.net> wrote in message news:1103_1039111393 bose...On Thu, 05 Dec 2002 17:25:58 +0100, Evan McClanahan<evan dontSPAMaltarinteractive.com> wrote:Karl Bochert wrote:ok, I've tried some things. Here are some suggestions. char[] s; char[] t = "test"; s = t[0..4]; s.length = 7; s[4] = '!'; printf("%.*s\n", s); //prints 'test!' this works.Nope void foo () char[] s; char[] t = "test"; s = t[0..4]; // ok -- s is just a reference s.length = 7; // fails -- involves re-allocation s[4] = '!'; // fails -- s[3] = '!'; is ok printf("%.*s\n", s); //No output (Gui app??) } Called from WinMain() bombs. Is it just Windows applications? Walter said that he would look into it, so I guess I'll just have to be patient. I had hoped that it was just a typo in the latest release (dynamic arrays must have worked by now!). Is it just my system or am I really the first to try WinMain() ?? Karl
Dec 05 2002
On Thu, 5 Dec 2002 18:23:36 -0000, "Mike Wynn" <mike.wynn l8night.co.uk> wrote:on ver 0.50 the following works ( compiled in one go with 'dmd test2.d test2.def ' ) import windows; import c.stdio; ....Its a miracle! Not only does it work fine, but the information has magically appeared in the manual!! Thanx for your patience. Karl Bochert
Dec 05 2002
"Karl Bochert" <kbochert copper.net> wrote in message news:1104_1039120628 bose...Its a miracle! Not only does it work fine, but the information hasmagicallyappeared in the manual!!I love it when that happens. The gnomes have been at work <g>.
Jan 17 2003