On Aug 17, 2011, at 6:18 PM, Mark F. Adams wrote: > Wow, you take an afternoon off and miss 35 emails on petsc-dev.... > > I'm a big user of const; I use it whenever I can and never thought that it > does not effect the caller for pass by value args, and I'm not sure why > anyone would think of it ... as far as "contaminating the entire code" -- > that is the purpose of header files, right?
Nope, header files are for exposing the public interface; not for exposing irrelevant internal details. In fact, for example, some people consider C++ fundamentally flawed because the details of the class data must be in the public include files and I basically agree with them. Barry > > I don't understand this fetish but I'm happy to give up my 'const PetscInt' > for the pleasure of working in a consistent rigorous environment. > > Mark > > On Aug 17, 2011, at 2:09 PM, Barry Smith wrote: > >> >> Some declarations of the form >> >> extern PetscErrorCode SAAddData(SA arr, const PetscInt len, const PetscInt >> *ia, const PetscScalar *wa, const PetscInt *ja); >> >> have crept into PETSc. const PetscInt len >> >> Do we want to have such beasties? What purpose do they serve? >> >> My understanding is that it is contaminating the entire code (because of the >> extern PetscErrorCode SAAddData(SA arr, const PetscInt len, const PetscInt >> *ia, const PetscScalar *wa, const PetscInt *ja); with the knowledge that >> internally the subroutine never changes the value of the stack variable >> function which is the opposite of encapsulation. What am I missing? Is this >> just stupid C syntax, is there a better way? >> >> Thanks >> >> Barry >> >> >