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
>> 
>> 
> 


Reply via email to