- Only values, not variables, have types — variables are simply names bound to values.
Although it is generally a good idea to return a fully initialized object from an inner constructor, incompletely initialized objects can be returned:
While you are allowed to create objects with uninitialized fields, any access to an uninitialized field is an immediate error: [emphasis mine]
Some of these, such as the arrow key thing, sound like they might be better as a github issue. I don't know what the expected behavior on windows is.
For issues with the writing/content of the manual, the most effective thing is to make a pull-request to make the changes. The source of the manual is here: https://github.com/JuliaLang/julia/tree/master/doc/manual It's convenient to edit them on github, especially if you're less comfortable with git. (The workflow on github is remarkably smooth; all you need it a github account.) I'm skipping things that sound like you just want a specific change to the manual, since you can go make those. :)
1. I'm not especially experienced with intellisense (I don't use IDEs generally), but Julia does know what methods are in scope at any given point. If you're in the REPL or IJulia, you can type something like `istext(` and then press Tab. It will show you a list of the methods of `istext`.2. As far as the undefined reference error, what needed to be changed about the manual? It looks like it continues to behave as advertised. I haven't dug into what the default printing function's implementation looks like, but that would be where I'd look for how it gets around the undefined problem.
3. Julia has first class types, so types are values in the language. Tuple types are written as a tuple of the types, which seems fairly straight-forward. Your version, Tuple{Int,Int}, would require a new type for each size of tuple (or would have a different representation than you suggested). I don't understand what you would gain by having a separate type that basically reimplements the same functionality as a tuple. Could you offer a concrete example of a problem this could cause?
4. "..." is called "splat" in Julia.
5. `x::Int = 5` evaluates both sides - `x::Int` and `5`. `x::Int` throws that error because x is not defined yet -- it's definitely not an Int. If you make it `5::Int`, you'll probably get closer to what you expected.
6. There is only one implementation of Julia, so I'm not sure why you wouldn't want "sizes are rounded up to multiples of 8 bits" in the manual. It's useful if you care about the representation of your types in memory. Since the manual can be updated at any time (such as to reflect a change in implementation details), there isn't some lock in to the specification by doing so.
3. Julia has first class types, so types are values in the language. Tuple types are written as a tuple of the types, which seems fairly straight-forward. Your version, Tuple{Int,Int}, would require a new type for each size of tuple (or would have a different representation than you suggested). I don't understand what you would gain by having a separate type that basically reimplements the same functionality as a tuple. Could you offer a concrete example of a problem this could cause?The point is that a tuple is sometimes a type-of-type and other times it is just an ordinary value. So if there were a superclass of all types of types (as is the case in most languages with reflection), some tuples would be subclasses of it and others would not be. It's just ... so ... weird. I'm not claiming it's problematic, I'm asking if it is ever problematic.
julia> f(::Any)=false
f (generic function with 1 method)
julia> f(::Type)=true
f (generic function with 2 methods)
julia> f(Int)
true
julia> f((Int,String))
true
julia> f((Int,String,2))
false
julia> [f(T) for T in (UnionType, DataType, TypeVar, TypeConstructor)]'
1x4 Array{Bool,2}:
true true true true
julia> f((Int,))
false
julia> f(((Int,String),String))
false
julia> f(((Int,String),String,Int))
false
julia> g(::Any)=false
g (generic function with 1 method)
julia> g{T}(::Type{T}) = true
g (generic function with 2 methods)
julia> g((Int,))
true
julia> g(((Int,String),String))
true