First Impressions
Geoff Carlton
gcarlton at iinet.net.au
Thu Sep 28 17:23:32 PDT 2006
Hi,
I'm a C++ user who's just tried D and I wanted to give my first
impressions. I can't really justify moving any of my codebase over to
D, so I wrote a quick tool to parse a dictionary file and make a
histogram - a bit like the wc demo in the dmd package.
1.)
I was a bit underwhelmed by the syntax of char[]. I've used lua which
also has strings,functions and maps as basic primitives, so going back
to array notation seems a bit low level. Also, char[][] is not the best
start in the main() declaration. Is it a 2D array, an array of
arrays? Then there is the char[][char[]]. What a mouthful for a simple
map!
Well, now I need to find elements.. I'd use std::string's find() here,
but the wc example has all array operations. Even isalpha is done as
'a', 'z' comparisons on an indexed array. Back to low level C stuff.
A simple alias of char[] to string would simplify the first glance code.
string x; // yep, a string
main (string[]) // an array of strings
string[string] m; // map of string to string
I believe single functions get pulled in as member functions? e.g.
find(string) can be used as string.find()? If so, it means that all the
string functionality can be added and then used naturally as member
functions on this "string" (which is really just the plain old char[] in
disguise).
This is a small thing, but I think it would help in terms of the mindset
of strings being a first class primitive, and clear up simple "hello
world" examples at the same time. Put simply, every modern language has
a first class string primitive type, except D - at least in terms of
nomenclature.
2.)
I liked the more powerful for loop. I'm curious is there any ability to
use delegates in the same way as lua does? I was blown away the first
time I realised how simple it was for custom iteration in lua. In
short, you write a function that returns a delegate (a closure?) that
itself returns arguments, terminating in nil.
e.g. for r in rooms_in_level(lvl) // custom function
As lua can handle multiple return arguments, it can also do a key,value
sort of thing that D can do. What a wonderful way of allowing any sort
of iteration.
It beats pages of code in C++ to write an iterator that can go forwards,
or one that can go backwards (wow, the power of C++!). C++09 still
isn't much of an improvement here, it only sugars the awful iterator syntax.
3.)
From the newsgroups, it seems like 'auto' as local raii and 'auto' as
automatic type deduction are still linked to the one keyword. Well in
lua, 'local' is pretty intuitive for locally scoped variables. Also
'auto' will soon mean automatic type deduction in C++. So those make
sense to me personally. Looks like this has been discussed to death,
but thats my 2c.
4.)
The D version of Scintilla and d-build was nice, very easy to use.
Personally I would have preferred the default behaviour of dbuild to put
object files in an /obj subdirectory and the final exe in the original
directory dbuild is run from.
This way, it could be run from a root directory, operate on a /src
subdirectory, and not clutter up the source with object files. There is
a switch for that, of course, but I can't imagine when you would want
object files sitting in the same directory as the source.
Well, as first impressions go, I was pleased by D, and am interested to
see how well it fares as time goes on. Its just a shame that all the
tools/library/IDE is all in C++!
Thanks,
Geoff
More information about the Digitalmars-d
mailing list