July 19, 2017
On Wednesday, 19 July 2017 at 18:49:32 UTC, Johannes Pfau wrote:
>
> Can you explain why _object-level visibility_ would matter in this case?

(I'm sure you have more experience with shared libraries than me, so correct me if I'm wrong)

We can't do attribute inference for exported functions because changing the function body may easily change the function signature (-> name mangling) and break clients of the (shared) library. Therefore, it follows that attribute inference can only be done for non-exported functions.
July 20, 2017
Am Wed, 19 Jul 2017 19:18:03 +0000
schrieb Petar Kirov [ZombineDev] <petar.p.kirov@gmail.com>:

> On Wednesday, 19 July 2017 at 18:49:32 UTC, Johannes Pfau wrote:
> >
> > Can you explain why _object-level visibility_ would matter in this case?
> 
> (I'm sure you have more experience with shared libraries than me, so correct me if I'm wrong)
> 
> We can't do attribute inference for exported functions because changing the function body may easily change the function signature (-> name mangling) and break clients of the (shared) library. Therefore, it follows that attribute inference can only be done for non-exported functions.

OK, I didn't think of the stable ABI argument, that indeed does make sense. Leads to the strange consequence though that private functions called from templates need to be exported and therefore can't use inference.

OT: if a function private function is exported and called from a public template things are difficult either way. Such a function needs to be considered to be 'logically' public: As the template code instantiated in another library will not get updated when you update the library with the private function, you also have to ensure that the program logic is still valid when mixing a new implementation of the private function and an old implementation of the template function....

-- Johannes

1 2 3
Next ›   Last »