Wow clearly I misunderstood a lot of stuff.
On Sunday, 3 August 2014 at 08:07:04 UTC, Rikki Cattermole wrote:
On 3/08/2014 7:36 p.m., Bayan Rafeh wrote:
A small background on this:
I'm a university student about to start my graduation project
with two
teammates, both of which have a C/Java/Python background and I
suggested
we use D for our project. They're not familiar with it, so I
wrote a
short tutorial for them here:
https://github.com/bayanr/d-tutorial.
I wanted to see what you guys thought, and if this could be a
useful
introduction for people with similar backgrounds. It's a first
draft so
it probably has a lot of mistakes, omissions, etc. so any
criticism is welcome.
Your introduction to templates is far too simplistic.
What you introduced was template blocks. But showing them as
templated classes.
There is also templated functions, methods ext. After all.
It may also be wise to introduce CTFE as well. But not so
important.
That's definitely going in there but I'm just making sure I fix
everything I have so far. If the responses so far are any
indication there is a lot of fixing that needs to be done.
I.e.
class ArrayList(T) {
T[] l;
}
alias IntList = ArrayList!int;
IntList list = new IntList();
would probably be better.
Could you give any suggestions for some example use cases that
can properly demo templates? If not I'll think of some.
Everything else looks good including mixin templates. But just
for food for thought. With statements are cool.
I'll be sure to add those as well. I just remembered I forgot to
add scope too.
Hope to hear more of how the project goes.
We're presenting at the end of the next spring semester, I'll be
sure to share it here once it's complete.
-- Functions --
Ref implies the type is a reference type, i.e. changes inside
the functions will change the variable outside the function.
in means immutable out is an alias for ref(preferably used for
parameters)
`ref` doesn't "imply" a reference, it "declares" or "states" or
something.
I'm basing this on the wiki: http://dlang.org/function.html
"ref parameter is passed by reference"
If that is not the case, in practical terms what does that mean
exactly?
`in` doesn't mean immutable, it means scope const.
`out` is similar to `ref`, but it's not an alias. Unlike `ref`,
an out "parameter is initialized upon function entry with the
default value for its type".
Sorry I'll fix those shortly.
-- Operator Overloading --
The wording suggests that the list of operators is supposed to
be
exhaustive. It's not.
I intended it to be comprehensive(with regard to types at least).
What am I missing regarding the different types of operators
besides the opAssigns?
unitary
unary
Ah crap, ok will fix that as well.
-- Templates --
Templates are D's response to Java generics and C++ templates.
At least put C++ first if you have to include Java ;)
Riots would ensue. To put it lightly we're not fans of C++. Well
we're not exactly fans of Java either :p
Basically templates are metaclasses that take types as
parameters.
Template parameters are not restricted to types. They can also
be values or symbols.
I guess I need a more exhaustive list of examples.
alias List!int.ArrayList IntList;
Maybe use the more fashionable assignment syntax:
alias IntList = List!int.ArrayList;
-- Arrays --
a[x..y] is an array containing a[x] all the way to a[y]
To avoid confusion: all the way up to, but not including, a[y].
Will fix that as well.
PS. I applied some of the changes, though I left the stuff that I
need clarification on.
Thank you very much for the comments so far, please keep them
coming.