Dynamically choosing the main function

Ben Gamari ben at smart-cactus.org
Sun Nov 12 22:17:03 UTC 2017


Harendra Kumar <harendra.kumar at gmail.com> writes:

> On 12 November 2017 at 23:18, Ben Gamari <ben at smart-cactus.org> wrote:
>
>> In general it's not easy to get a reference to a an arbitrary function
>> in an object file by it's source name. Unless the symbol is exported the
>> compiler is free to optimize the function or even drop it altogether.
>>
>
> I understand that. I was also wondering if there is way (some sort of
> annotation, pragma or any other workaround) to keep the symbols around
> without actually exporting them.  Exporting either clobbers the module
> interface from user point of view or the modules need a wrapper to avoid
> exporting such symbols in user exposed modules. I would also expect an
> option to remove the effect of any such annotation so that the production
> build is not under optimized because of this. This is in fact one of the
> problems that I have been facing in general. I do not know of a good way to
> hide symbols from users but use them in tests and benchmarks during dev.
> What is the GHC recommended way to achieve this?
>
The usual way of dealing with this is to expose the symbols from a
`.Internal` module.

>> If you can guarantee that the functions you are about are exported then
>> in principle you could probably do what you ask from a library. Just
>> `dlopen` the executable (which would need to be compiled as a position
>> independent exectuable), and dlsym the appropriately mangled name.
>>
>
> Yeah that is a good option for dynamically linked executables. In fact I
> have been using dlopen to implement Haskell plugins but did not think of
> using it for this use case. Thanks for reminding me. In a static
> executable, does it make sense to make the RTS choose an exported symbol as
> entry point using an RTS option?
>
I don't see much precedent for this in other compilers. Moreover, I am
generally not convinced that it should be the compiler's job to provide
such a feature when the same end could be reached with far less magic by
the user.

Cheers,

- Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20171112/c8a29741/attachment.sig>


More information about the ghc-devs mailing list