Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

1-based arrays always make me think of the Numerical Recipes books, specifically the one using C. They jump through all sorts of hoops to have 1-based arrays:

- Array allocations are done using helper macros which invoke malloc and return a pointer to memory one element before the beginning of the array. (I'm pretty sure this is undefined behaviour according to the standard btw; it just happens that the format of pointers isn't data-dependent anymore these days)

- Array accesses are just as usual in C, except array[1] is the first element.

- Freeing memory is again wrapped in a macro to calculate the actual beginning of the array.

- Multidimensional arrays are layers of this crap.



This is because most of the most important numerical libraries (e.g. LINPACK, EISPACK, LAPACK) are written in FORTRAN. There's (literally) decades of work in these libraries, and everyone uses them, and it's simply not worth trying to rewrite them in whatever the language du jour is.


I realise that, although I'd have to say it's not exactly the way I would have handled the situation. In my experience, linking binary Fortran libraries against C code doesn't lead to interfaces that expect such array pointers, and when porting Fortran code to C, I would have probably handled the index numbering issue with a macro for element access where converting to 0-based notation isn't completely foolproof.

Actually, I probably would have provided the numerical recipes code in two versions, one in the 1-based format, the other in idiomatic C.

But then I'm more of a software engineer than a computational physicist even though my degree certificate claims otherwise.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: