Maybe I'm misreading this, but does that mean you're not a fan of the "pure" directive, Jonas?

My reasoning for including it as a directive and it not being automatic is that having the compiler determine if a function is pure or not is going to be an expensive operation and will also potentially cause problems akin to what I mentioned in another topic in that the nodes will be exposed in the PPU files.

To explain, the first pass of "pure" would probably be to just look for nodes that would be illegal, such as referencing pointers or calling other functions that aren't pure themselves - this will catch most cases, but not all of them.  The second pass is whenever a pure function is called, attempting to run through the nodes like it were an interpreted language to calculate the result, but it might then hit an infinite loop, or something that is not infinite but takes a disproportionately long time to compute (e.g. the Ackermann function, which would necessitate an upper limit on nodes parsed)... or hits a division by zero error, for example.

All in all, it feels to me that declaring a function as pure is best left in the hands of the user rather than the compiler.

Gareth aka. Kit

On 25/06/2019 20:27, Jonas Maebe wrote:
On 25/06/2019 21:23, denisgolovan wrote:
Complex types are built from primitive types. And if FPC can verify the
"pure" attribute is valid, then LLVM can probably also come up with it.
In fact, if FPC can verify it is valid, it can also come up with it
itself and add it as an annotation in the LLVM bitcode.
AFAIU, "pure" attribute is planned to be user's responsibility and that's 
probably ok.
That would definitely not be okay.


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel



---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to