5 ms·
> or any other kind of offset that you so desire This is too often the attitude of Julia people. But zero-based indexing is not just some arbitrary offset. Pro
by red-tea 8y ago
> or any other kind of offset that you so desire
This is too often the attitude of Julia people. But zero-based indexing is not just some arbitrary offset. Programmers just like it. You say that many things are more intuitive with one-based indexing, but many things are less intuitive too. I don't think python ever would have become popular without zero-based indexing.
The thing is, we really don't know why people prefer certain types of language. All we know is that they do. Computer languages can't evolve gradually like natural languages, but if they could I really don't think we'd go to one-based indexing.
- stdbrouw 8y ago> But zero-based indexing is not just some arbitrary offset. Programmers just like it. Um, that's the definition of "arbitrary".
- red-tea 8y agoProgrammers might like it for no known reason and as such the preference might be arbitrary, but the choice for a language to reflect that preference is not.
- lucozade 8y ago> This is too often the attitude of Julia people And it's a good attitude for the Julia people to have. Their target audience is not just (or even mainly) full time developers. They're targeting scientists, statisticians etc. As such, it makes sense for Julia to use conventions that are appropriate to their audience. This pervades the whole of Julia, not just indexing although the latter is exceptionally rich for this reason. > Programmers just like it That's a reason for having 0-based indexing but not an especially good one. And for Python it was an arbitrary decision. That's not to say that 0-based indexing is necessarily an arbitrary decision, it wasn't for C, for example, but it often is.
- geezerjay 8y ago> And it's a good attitude for the Julia people to have. Their target audience is not just (or even mainly) full time developers. They're targeting scientists, statisticians etc. I don't see how scientists or staticians would be unable to understand a basic knowledge like zero-based indexing. In fact, zero-based indexing already is widely used in basic areas such as series and sequences. Why are freshmen quite capable of understanding such a fundamental convention but somehow seasoned scientists and statitians are not?
- lucozade 8y ago> I don't see how scientists or staticians would be unable to understand a basic knowledge like zero-based indexing Of course they can. In fact, they tend to have a complex relationship with indexing which is why Julia supports such a rich indexing language. But the default the Julia team chose was the natural, mathematical default rather than the natural memory addressing default. Which, given what they were trying to achieve, was entirely sensible. And, on a side note, just because something is physically possible, it doesn't follow that it's the most sensible choice. Otherwise language development would have stopped at the first Turing complete language. What the Julia team is attempting to do is make the transition for their target audience as seamless as possible. This can be seen in their indexing language but also in their choice of dispatch, their type conversion architecture etc. A great deal of thought goes into these decisions (you can see it in their issue/RFC trackers). "A CS freshman could work it out" doesn't even come close.
- conjectures 8y agoThe truth is that everyone who programs seriously at any level can deal with both 0- and 1- based indexing. It's just not that hard to get used to. And science has lots of 1- based indexing: Matlab, Fortran, R, most math...
- jimbokun 8y agoI don't see how programmers wouldn't be able to understand 1 based indexing.
- FridgeSeal 8y agoDo you know how much easier it is for me to look at the mathematical definition of something and transcribe it (almost) quite literally directly into Julia code because of it's 1 based indexing? I'll tell you: it's very, very, very easy. And when a language makes things easy, people tend to like it (that's one of the reasons people like Python after all).
- 0-_-0 8y agoWell for one, most situations I can think of when an index is calculated a 0-based index is more useful. Addressing an element T[h][w][c] in a linearized 3D tensor with 0-based indexing: T[h*W*C+w*C+c] with 1-based indexing: T[(h-1)*W*C+(w-1)*C+c] Or let's say you want to take a string "abc" and repeat it until the length is 10, getting "abcabcabca". With 0-based indexing: a,b = "abc", [" "]*10 for i in range(0,10): b[i]=a[i%3] In a 1-based language that's: for i in range(1,11): b[i]=a[(i-1)%3+1] Here's what Dijkstra has to say about it: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EW...
- leiroigh 8y agoOne-based indexing obviously means that ranges are inclusive on the right, and you iterate by `for i = 1:length(x)`. That being said, I also abhor 1-based indexing in julia. Well, you get used to it, and it is imho a small price to pay for julia's other cool things. In the end, julia needs to access arrays through pointers, and indirect adressing / LEA use zero-based indexing. Somewhat amazingly, llvm manages to remove/hoist most of the extraneous subtractions. But still, it would be much more transparent if julia simply reflected the hardware standard of zero-based addressing (when in doubt, stay as close to the silicon as reasonably possible). Offset arrays are a bad choice when avoidable, because (1) they incur an additional pointer load, (2) most julia code uses 1-based indices (conforming to common language idioms is always good), and (3) you will trigger all sorts of bugs in all sorts of packages that falsely assume that all AbstractArray are one-based.
- mkborregaard 8y agoIn fact, almost every solid julia package uses arbitrary indexing for input arrays. `for i = 1:length(x)` is discouraged in production code, instead the ideom is `for i in eachindex(x)`.
- mkborregaard 8y agoSome algorithms work better with 0-based indexing. But maybe, just maybe, there are other aspects to look at when evaluating a programming language than "it doesn't by default follow my favourite indexing type". Especially given that 0-based indexing is very easy to use for any array you may wish to use it for.
- deleted 8y ago[deleted]