1. Post #1
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts

    Preface

    import std.stdio;
    
    void main()
    {
        writeln("hello, world!");
    }
    

    This language doesn't seem to be particularly well known among programmers of Facepunch, I thought it was about time I made a thread about it. During the last few months, D compilers have reached an impressive level of stability and usability, and I believe the language is more than ready for projects of any size on the x86 and x86_64 platforms. It's been the focus of my own programming for a while now, and I think programming in D is pretty damn enjoyable.

    D related links will be at the bottom of the post. The reason I'm writing this post instead of just posting links and inviting conversation, is to tailor the information for the Facepunch audience.

    Before getting into what D is all about, I'd like to remind everyone that this is not a post claiming that this or any language is "better" than any given other programming language, which is a notion I find ridiculous to begin with. Let's keep conversations civil and comparisons constructive. Thanks.

    The D programming language. Modern convenience. Modeling power. Native efficiency.

    D is a multi-paradigm programming language in the C syntax family, supporting the imperative, object-oriented, generic, functional and concurrent programming paradigms. In broad terms it was designed to be a more modern C++, dropping backwards-compatibility and learning from past mistakes. All current implementations compile directly to native code. D is not a minimalistic language; it takes a pragmatic approach to language design and emphasizes synergy between many differing paradigms. It iterates on the success of other C-style languages as well as inventing ideas of its own.

    Examples

    Let's start with some warm-up examples that will hopefully give you a taste of D even if you don't fully understand them.

    Boring, imperative code
    Generic, functional solution for Project Euler #2
    Various functional concepts
    Parallel Pi computation
    checkGl function

    I want to keep adding examples to this list. If you have a cool D snippet you want to share, please inform me so I can put it on the list!

    D and C

    I believe D is best introduced to this forum by first comparing it to other C-style languages that many of us are familiar with. If you just want to read about the cool stuff unique to D you might want to skip these sections.

    The most obvious comparison is with C, as C is almost a semantic subset of D. However, it is not a syntactic subset and D is not backwards-compatible with C in the general case. However, C code that is pasted into a D program is guaranteed to either compile and do the same thing as in C, or not compile at all. Hence, a lot of C code is perfectly valid D code, and porting C code to D in general is pretty straight-forward.

    D allows for free functions, structs, pointers, as well as all of C's statements like if(), switch(), for(), while(), even the dreaded goto statement.

    D has complete, native interoperability with C, just like C++. D programs can directly link with and use C libraries, and D code can provide a C interface.

    The most apparent difference between the languages is that D has a proper module system in the language, while C uses a text preprocessor and leaves all concepts of a module to the linker. D does not have the C text preprocessor (and few people miss it).

    D has several improvements to the imperative paradigm that will be explained later.

    D and C#

    D's classes are very similar to the class model used in C# and Java. Classes are implicitly reference types. There are interfaces instead of multiple inheritance. Methods are virtual by default, with explicit overrides. The syntax of all this is familiar to Java and C# programmers.

    D has operator overloading for user-defined types, much like C#.

    D has structs in addition to classes, and the separation is similar to the one in C#. Structs are value types, and do not allow for inheritance.

    D's exceptions are similar to those of C#; there are no exception specifications, they can be chained and they can be thrown from virtually anywhere.

    D has several improvements to the object-oriented paradigm that will be explained later.

    D and C++

    D's object-oriented features are mostly inspired from C# and Java, but it still has a lot of heritage from C++. D has RAII through destructors on structs (among other ways). D has the equivalent of a copy constructor, allowing for stuff like automatic reference counting implemented in library code.

    D has templates and their use is widespread throughout almost all D code. A lot of D's standard library is modelled after the C++ standard library and the boost library.

    D has the library concept of a range, which is an extension of the C++ iterator concept.

    D has some native interoperability with C++, but not all C++ code is directly bindable to D (templates, multiple inheritance etc).

    But enough comparisons, here are some interesting features that D has that doesn't appear in the above languages.

    Arrays

    Static arrays - arrays with a fixed size - are value types, and can be passed to functions or returned from functions by value, unlike in C and C++.

    Dynamic arrays in D are actually slices, and D has the full set of accompanying slice operators.

    Metaprogramming

    Templates are more powerful, and easier to read and write. The syntax is more succinct and free of the pitfalls of the syntax used in C++. Templates were designed for metaprogramming from the start, while in C++ this aspect of templates is more often said to be "discovered". Specialization is augmented with template constraints, similar to the proposed C++ feature of concepts. The static-if statement makes for easier and more readable generic code by allowing code generation decisions to be made in imperative style. Type tuples and expression tuples, as well as static-foreach, greatly diminishes the need for recursion to do loops at compile-time. Template parameters range from classic type parameters to local variable aliases in the instantiating scope, and everything in between.

    Additionally, CTFE (Compile-Time Function Execution) allows for compile-time interpretation of a well-defined subset of D, which, when coupled with string mixins (think eval but at compile-time) makes metaprogramming virtually limitless only bounded by security limitations. For example, the standard library module std.regex can convert regular expressions to D code at compile time, putting it among the fastest regex libraries out there.

    Ranges

    A range is a library concept built with D's generic programming features. In short, it can be explained as a C++ iterator except a range is (typically) bounded - it's comparable to a pair of iterators. It's the abstraction that allows code like this example from the example list.

    Functional Programming

    D has anonymous functions, lambda functions and nested functions. D has type inference. D has generic functional algorithms in the standard library.

    There are two kinds of function pointers - the plain function pointer inherited from C and C++, as well as a delegate. Delegates are fat pointers; they have a function pointer and a context pointer. Delegates are what you get when you have anonymous functions or lambda functions accessing their outer scope, or when you take the address of a member function (method) or a nested function.

    D supports transitive immutability in the type system, indispensable for both functional and concurrent programming (immutable data can be freely shared between threads).

    D supports statically enforced functional purity - pure functions are functions without side effects (endorsed by John Carmack? Cool!).

    Concurrency and Parallelization

    Module-level ("global") and static member variables are TLS (Thread-Local Storage) by default - sharing of memory is done with the transitive "shared" type qualifier, making memory sharing explicit. The standard library module std.concurrency has a general message-passing-based thread interface, allowing for Go-style message passing.

    Parallelization is easy to tap into with the standard library module std.parallelism, see the parallel Pi computation example.

    Imperative Improvements (... no pun intended)

    Imperative code is the staple style of the C family of programming languages, and D has a number of subtle improvements. D's type inference reduces code repetition (D takes the DRY principle seriously). The versatile foreach statement makes a wide variety of loops simpler and more declarative. Scope guard statements allow for RAII and transactional programming without a mess of nested try-catch-finally or dummy types only used for their destructors.

    The module system means there are no truly globally available symbols. Coupled with the multiform import declarations, programmers are given full freedom in naming their variables, functions and types. Encapsulation is available at the module level - a module can hide its module-level variables ("globals", as in global memory) and functions entirely, or choose only to share them with other modules in the same package.

    Object-Orientation

    Interfaces can have methods with implementations as long as they aren't virtual (final methods, template methods, static methods).

    D has both Java-style and C#-style nested classes (in D the latter is a static nested class), as well as Java-style anonymous classes. Structs and classes can be declared in functions, and they have access to the enclosing context.

    Mixin templates (not related to the aforementioned string mixins) allow for the mixin pattern without using multiple inheritance.

    AliasThis declarations allow for any number of non-conflicting implicit conversions. Coupled with nested classes, this is another alternative to multiple inheritance.

    Design by Contract (aka D and Eiffel)

    D supports contracts on any function, including abstract functions (like virtual interface functions).

    Low-Level Programming

    D is a systems programming language and has always aimed at being suitable for low-level programming.

    D has pointers similar to those in C++ (like C pointers but with more strict casting rules), with the full raw speed of pointers at your fingertips when you really need them.

    Structs have no implicit overhead (i.e. they are POD - Plain Old Data), with configurable padding and alignment.

    D exposes the 80-bit floating point type (on x86) through the real type, for maximum floating point precision. The real type is defined as the biggest floating point type natively available on the given platform.

    D has standardized inline assembly, meaning it's portable across compilers.

    Compilation Speed

    The lead designer of D comes from the compiler development world; D is designed to be fast to compile. The reference compiler, DMD, is amazingly fast even for non-trivial programs; D does not suffer from the compilation-time problems that C and C++ suffer from.

    Getting Started

    Interested in trying D? Good!

    Download links for the reference implementation, the DMD compiler, can be found here. If you prefer using your favourite text editor and the command line, this should be all you need. Most text editors have syntax highlighting support for D either built-in or available as an addon. Have a look at the included rdmd tool for easy, convenient compilation directly from the command line. You can add a shebang line to your programs pointing at rdmd to run your D sources as if they were scripts (as seen in the first code example).

    For IDE users, the choice depends on your platform.

    Windows users will definitely want to check out VisualD, a D plugin for Visual Studio. As explained on the website, you don't need to own a commercial edition of Visual Studio to use it. VisualD has interactive debugging support and experimental intellisense.

    The most advanced IDE for Linux users at the moment is Mono-D, a plugin for MonoDevelop. It's a cross-platform plugin with a relatively advanced intellisense feature, but debugging support is currently only working on Linux.

    A choice that works on most platforms is Code::Blocks. D support comes with the official distribution, just make sure to enable it during installation. It has basic debugging support and some rather sub-par textual auto-complete.

    I don't know what the best IDE choice is for Mac OSX. If you're a Mac OSX user and you've got it figured out, please tell us :)

    Most IDEs support the two other notable compilers, GDC (uses the GCC backend) and LDC (uses LLVM). GDC and LDC have much better code generation and allows targeting of platforms other than x86, but their compilation speed is slower than that of DMD. A useful workflow is to use DMD during development, but GDC or LDC for release builds.

    Links

    dlang.org - the official D homepage
    The homepage contains the language specification and standard library documentation among other things.

    D-Programming-Language on Github
    Official development of the reference implementation (the DMD compiler) takes place on Github, as well as development for the runtime library and standard library.

    forum.dlang.org - web interface for the official D NewsGroup, home of everything D
    Written in D, it's fast and provides both forum-style linear reading and mailing list-style tree reading modes.

    D's article on Wikipedia

    #d on FreeNode - the official IRC channel for D (my nick on FreeNode is jA_cOp)

    Phew! That was a lot of text in one sitting! Hopefully someone will be interested and this wasn't a complete waste of time. I think I'll go back and work on this post later, I'm sure you noticed some sections are thin and there are too few references, but for now I hope this at least gives you a cursory impression of what D is.

    If you have any questions about anything D related, I'd love to try answering them here. Other places to ask is on IRC, the NewsGroup or the D tag on Stack Overflow.
    Reply With Quote Edit / Delete Reply Windows 7 Norway Show Events Winner x 15Informative x 5Funny x 2Optimistic x 1Dumb x 1Useful x 1Programming King x 1 (list)

  2. Post #2
    AlienCat's Avatar
    October 2011
    508 Posts
    At last! A proper thread for this! Well I will not change to D because there are no graphic engines that support that.
    Reply With Quote Edit / Delete Reply Windows 7 Sweden Show Events Dumb Dumb x 4 (list)

  3. Post #3
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    At last! A proper thread for this! Well I will not change to D because there are no graphic engines that support that.
    Indeed there's a distinct lack of 3D game engines for D, but you can use anything that has a C interface (e.g. the Horde3D engine).

    There are plenty of bindings for libraries like SDL, SFML, Allegro, OpenGL, OpenAL and DirectX. There are both ports and bindings for Box2D and Chipmunk too, so there's no lack of 2D physics engines.

    When it comes to 3D graphics though, you're left with using an engine with a C interface or building your own engine with OpenGL or Direct3D.

  4. Post #4
    Cesar Augusto's Avatar
    January 2010
    214 Posts
    I always wanted to program in D. But I always forget to install the compiler ^^
    Reply With Quote Edit / Delete Reply Windows 7 Brazil Show Events Dumb Dumb x 9Funny Funny x 2Late Late x 1Winner Winner x 1 (list)

  5. Post #5
    Gold Member

    October 2008
    3,838 Posts
    You're making it really hard for me not to try this language out.
    Reply With Quote Edit / Delete Reply Windows 7 United States Show Events Friendly Friendly x 1 (list)

  6. Post #6
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    Some introductory talks about D on YouTube. Listening to Andrei talk about D never gets boring for me, even when I'm already familiar with the stuff being explained

    Three Cool Things About D by Andrei Alexandrescu

    Three Unlikely Successful Features of D by Andrei Alexandrescu

    The D Programming Language by Walter Bright

    Edited:

    You're making it really hard for me not to try this language out.
    Thanks, that means I'm doing something right.

  7. Post #7
    Gold Member
    Downsider's Avatar
    July 2007
    2,018 Posts
    Support makes the language, though. A lot of codebase is already written in the popular languages, so nobody's going to waste time converting over to a new language just for the sake of having some better semantics. If I can't use X library or my existing codebase in D, then I'm not even going to consider it. I guess that's part of the reason why you're doing this, to build more base in D.
    Reply With Quote Edit / Delete Reply Windows 7 United States Show Events Dumb Dumb x 5 (list)

  8. Post #8
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    Support makes the language, though. A lot of codebase is already written in the popular languages, so nobody's going to waste time converting over to a new language just for the sake of having some better semantics. If I can't use X library or my existing codebase in D, then I'm not even going to consider it. I guess that's part of the reason why you're doing this, to build more base in D.
    You can use any C library, and D has plenty of libraries on its own from various fields.

    Obviously you can't use D for your existing project if you already have a sizable C++ codebase using C++ libraries. D actually has some C++ interop which is rare among programming languages, but binding C++ code is usually not worth the effort.

    The reason I'm posting about D is because it has surprisingly little exposure on this forum despite having so many game programmers - D is exceptionally suitable for games development. It's more widespread on forums like gamedev.net, and has a lot of exposure on Reddit.

    And "some better semantics" is an understatement. Consider the ease of which you can do development in a language like C# versus C++. Wouldn't you want the best of both worlds?
    Reply With Quote Edit / Delete Reply Windows 7 Norway Show Events Artistic Artistic x 1 (list)

  9. Post #9
    my portfolio
    Dennab
    April 2012
    1,392 Posts
    Code:
    ReturnType!func checkGl(alias func, Args...)(Args args) {
    ****debug scope(success) {
    ********GLenum error_code = glGetError();
    
    ********if(error_code != GL_NO_ERROR) {
    ************stderr.writefln(`OpenGL function "%s" failed: "%s."`, func.stringof, gl_error_string(error_code));
    ********}
    ****}
    
    ****return func(args);
    }
    ReturnType!func? Alias? Debug scope? What is this.
    Reply With Quote Edit / Delete Reply United Kingdom Show Events Agree Agree x 1 (list)

  10. Post #10
    Taught by John Lua
    MakeR's Avatar
    May 2007
    2,914 Posts
    ReturnType!func? Alias? Debug scope? What is this.
    D.
    Reply With Quote Edit / Delete Reply Windows 7 United Kingdom Show Events Zing Zing x 1 (list)

  11. Post #11
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    Code:
    ReturnType!func checkGl(alias func, Args...)(Args args) {
    ****debug scope(success) {
    ********GLenum error_code = glGetError();
    
    ********if(error_code != GL_NO_ERROR) {
    ************stderr.writefln(`OpenGL function "%s" failed: "%s."`, func.stringof, gl_error_string(error_code));
    ********}
    ****}
    
    ****return func(args);
    }
    ReturnType!func? Alias? Debug scope? What is this.
    Before explaining, let me show you how it looks like at the call-site:
    checkGl!glDrawArrays(GL_QUADS, 0, quad.length);
    

    When compiled in debug mode, this would check for any OpenGL error after the call to glDrawArrays and print it to stderr. When not in debug mode, this just forwards the call to glDrawArrays.

    Here's how it works:

    ReturnType is a template resolving to the return type of the function or function type passed as the first argument. Explicit template instantiation in D looks like foo!(args) (vs C++-style foo<args>), but the parentheses are optional when only one argument is being passed and that argument consists of only one token, hence ReturnType!func is equivalent of ReturnType!(func). In equivalent C++ syntax, this might look like ReturnType<func>::result.

    The first pair of parentheses for the checkGl definition are the template parameters. Alias parameters can bind to literal values as well as any symbol, whether that be a function, type or variable. The second template argument is a type tuple (equivalent of a parameter pack in C++11).

    The second pair of parentheses are the regular, runtime parameters. It receives all arguments and puts them in the expression tuple 'args'.

    The debug statement is for inserting statements only in debug mode. Hence, the following scope(success) statement is only included in debug builds.

    The scope(success) statement is for inserting code before the function returns/the current scope terminates (but after the return expression has been evaluated). This is how the error is checked after the call to func.

    Finally, the function simply forwards all arguments to 'func' and returns whatever 'func' returned.

    The above call example passes glDrawArrays as 'func', and the arguments GL_QUADS, 0, and quad.length for 'args'. The types of the arguments, Args, are inferred from the call and don't have to be explicitly provided. When provided explicitly, it would look like: checkGl!(func, GLenum, GLint, GLsizei)(GL_QUADS, 0, quad.length).
    Reply With Quote Edit / Delete Reply Windows 7 Norway Show Events Winner Winner x 3 (list)

  12. Post #12
    Tamschi's Avatar
    December 2009
    3,606 Posts
    The language seems very nice, but the lack of good IntelliSense and auto formatting in VisualD make it really inconvenient compared to C#.

  13. Post #13
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    The language seems very nice, but the lack of good IntelliSense and auto formatting in VisualD make it really inconvenient compared to C#.
    Yeah, it's a work in progress, Mono-D has slightly more advanced IntelliSense but there's no perfect one yet.

    There are some GUI designers for D but none as good and integrated as the one for C# in Visual Studio, so that's another point.

    There are a lot of GUI libraries for D though, like WxD (WxWidgets), QtD (Qt) and DFL (D Forms Library, inspired by Windows Forms).
    Reply With Quote Edit / Delete Reply Windows 7 Norway Show Events Informative Informative x 1 (list)

  14. Post #14
    DuCT's Avatar
    September 2010
    961 Posts
    D is exceptionally suitable for games development.
    If I remember correctly, I think OpenMW was written in D for a little bit, but then switched for some reason. I remember reading about it in one of their blog posts.

  15. Post #15
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    If I remember correctly, I think OpenMW was written in D for a little bit, but then switched for some reason. I remember reading about it in one of their blog posts.
    Yeah, they were using C++ libraries, so they had to mix D and C++ but eventually just gave up and went with C++. Again, binding C++ code to any language is rarely worth the effort. They're using OGRE and Bullet - the former uses multiple inheritance heavily. I'm quite amazed they managed to use such an old version of D for such a long time with a library like OGRE.

  16. Post #16
    AlienCat's Avatar
    October 2011
    508 Posts
    Ah damn, bullet! I assume there are no other 3D physics libraries that can be used in D?

    Wow it is hard to search for anything for D.

  17. Post #17
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    Ah damn, bullet! I assume there are no other 3D physics libraries that can be used in D?

    Wow it is hard to search for anything for D.
    When searching for modern D libraries, look at Github first.

    Anyway, there is at least one 3D physics library usable in D, called ODE:

    https://github.com/D-Programming-Deimos/ODE

    Edited:

    Ah damn, bullet! I assume there are no other 3D physics libraries that can be used in D?

    Wow it is hard to search for anything for D.
    Another one you can use is Newton, which apparently has a C API:

    http://newtondynamics.com/forum/newton.php

  18. Post #18
    calzoneman's Avatar
    February 2008
    460 Posts
    I've always been interested in D. I really need to sit down and write a project in it with the documentation open on another monitor.

    Do you have any recommendations on 2D Graphics/OpenGL bindings for D? DSFML looks ancient and I'm having trouble finding any solid documentation on a D binding for SDL.

  19. Post #19
    Gold Member
    jA_cOp's Avatar
    May 2006
    2,691 Posts
    I've always been interested in D. I really need to sit down and write a project in it with the documentation open on another monitor.

    Do you have any recommendations on 2D Graphics/OpenGL bindings for D? DSFML looks ancient and I'm having trouble finding any solid documentation on a D binding for SDL.
    Derelict has both.
    Reply With Quote Edit / Delete Reply Windows 7 Norway Show Events Useful Useful x 1 (list)

  20. Post #20
    Gold Member
    TheDecryptor's Avatar
    September 2006
    4,257 Posts
    I've seen other people talk about D before, but this thread actually makes me want to try it, thanks!
    Reply With Quote Edit / Delete Reply Mac Australia Show Events Friendly Friendly x 2 (list)

  21. Post #21
    Gold Member
    gparent's Avatar
    January 2005
    3,949 Posts
    The language seems very nice, but the lack of good IntelliSense and auto formatting in VisualD make it really inconvenient compared to C#.
    You'll become a better programmer if you don't rely on babysitting tools like IntelliSense.
    Reply With Quote Edit / Delete Reply Windows 7 Show Events Agree Agree x 5Disagree Disagree x 2 (list)

  22. Post #22
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    You'll become a better programmer if you don't rely on babysitting tools like IntelliSense.
    i used to disagree, then i stopped using visual studio and it is all so clear now
    Reply With Quote Edit / Delete Reply Mac Australia Show Events Agree Agree x 3Disagree Disagree x 1 (list)

  23. Post #23
    Gold Member
    Darwin226's Avatar
    January 2009
    4,157 Posts
    i used to disagree, then i stopped using visual studio and it is all so clear now
    I think I'm at the point where I can see both sides.
    Not depending on intellisense seems like a great feeling but on the other hand, when you're not sure about some function/class name there's nothing better.
    Reply With Quote Edit / Delete Reply Windows 7 Croatia Show Events Agree Agree x 3 (list)

  24. Post #24
    Gold Member
    Dr Magnusson's Avatar
    July 2008
    2,695 Posts
    You'll become a better programmer if you don't rely on babysitting tools like IntelliSense.
    Don't take this as wanting to start a 10-page discussion or anything, but I don't quite see how?

  25. Post #25
    T3hGamerDK's Avatar
    January 2011
    2,551 Posts
    Don't take this as wanting to start a 10-page discussion or anything, but I don't quite see how?
    Because you'll start remembering and understanding your entire system without looking it up.

  26. Post #26
    Gold Member
    Darwin226's Avatar
    January 2009
    4,157 Posts
    Because you'll start remembering and understanding your entire system without looking it up.
    But you do that with intellisense too. The only difference is that you don't remember the whole name of something, just a part of it.

  27. Post #27
    Crescent fresh
    Perl's Avatar
    January 2011
    1,028 Posts
    Because you'll start remembering and understanding your entire system without looking it up.
    I still know where everything is that I need, it's just easier to write with intellisense.
    Reply With Quote Edit / Delete Reply Windows 8 Estonia Show Events Agree Agree x 5 (list)

  28. Post #28
    Gold Member
    Dr Magnusson's Avatar
    July 2008
    2,695 Posts
    I still know where everything is that I need, it's just easier to write with intellisense.
    This is pretty much my thought on it as well. Besides, it's invaluable when dealing with STL-containers for example, where you really don't want to dig through header files full of semi-unintelligible templates to figure out the member functions of a deque for instance.

  29. Post #29
    T3hGamerDK's Avatar
    January 2011
    2,551 Posts
    I'm glad you guys do well with intellisense! I found my mind wondering away when using it, hence why I avoid it.

  30. Post #30
    calzoneman's Avatar
    February 2008
    460 Posts
    I find that I am more likely to start remembering things if I have to look them up (within my project or online documenation) than if I can hit tab and scroll through a list to find it. That's just me, I'm sure it helps productivity for other people.
    Reply With Quote Edit / Delete Reply Linux United States Show Events Agree Agree x 1 (list)

  31. Post #31
    Gold Member
    gparent's Avatar
    January 2005
    3,949 Posts
    Because you'll start remembering and understanding your entire system without looking it up.
    Correct, that's what I had in mind when I wrote my post. Just to be clear, by "understanding", I mean that you should remember that what range of input is valid, what to expect from the return value if any, and what will raise an exception. You should remember function names without having to "dot-type". Simply use IntelliSense to confirm that you are correct, or maybe to remember the order of function parameters once in a while.
    But you do that with intellisense too. The only difference is that you don't remember the whole name of something, just a part of it.
    Right, your case is another example of what I mean by a better programmer. Someone who will remember and understand more rather than less. Not having IntelliSense forces you to do a lot of reading, which can helps with new programmers.

    Because in the end, what you want is this:
    I still know where everything is that I need, it's just easier to write with intellisense.
    rather than someone who relies on IntelliSense and other similar programming tools.
    Reply With Quote Edit / Delete Reply Windows 7 Show Events Agree Agree x 1 (list)

  32. Post #32
    Gold Member
    Jawalt's Avatar
    August 2007
    3,478 Posts
    I remember checking out D approx. 2 years ago. I think it was one of you, BlankTheMuffin, gparent, or jA_cOp who told me about it. Back then it wasn't very stable and was sort of fractured between two versions.

  33. Post #33
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    This is pretty much my thought on it as well. Besides, it's invaluable when dealing with STL-containers for example, where you really don't want to dig through header files full of semi-unintelligible templates to figure out the member functions of a deque for instance.
    http://www.sgi.com/tech/stl/Deque.html