[isabelle-dev] New Code Generator Target: F#

Achim D. Brucker adbrucker at 0x5f.org
Mon Aug 22 12:32:55 CEST 2022

Dear Isabelle Developers, 
(CC Makarius and Florian - to ensure that you are aware of this email, as I assume you 
    are likely to be the most qualified people to advise.)

You might have seen my announcement on the Isabelle User's mailing list: I added F# 
as a new target language to the code generator.  This includes initial system tooling 
for managing a "sandboxed" dotnet environment within Isabelle (similar to the setup 
for, e.g., OCaml). The changeset is available at (I am currently trying to update 
it to the latest Isabelle development version every couple of days):


The current setup successfully passes the "bin/isabelle build -a" test on Linux (well 
tested) and Windows (infrequent, tests on a VM running Windows 10). Due to lack of 
hardware, I cannot test it on macOS (trusting the documentation from Microsoft, the 
macOS setup should work out of the box, sharing the configuration/implementation for 

I would appreciate your general opinion on F# as a new code generator target and,
in particular, your opinion and recommendations on future maintenance/development
models. I see, in principle two approaches:

1) integrating it into the main distribution of Isabelle or 
2) keeping it as a separate "component" (theoretically, it could even be an AFP 
   entry, if users install dotnet themselves and configure the ISABELLE_DOTNET 
   environment variable - i.e., without the sandboxed dotnet installation) 

Integrating it into the main Isabelle distribution has the advantage that the code 
generator setup for F# would "live" next to the setup for the other target languages. 
This could be beneficial for the future maintenance (if the setup for ML/OCaml changes, 
it would be obvious that F# likely needs to be updated as well) and also would allow 
for using the "ml_program_of_program" function in the structure Code_ML without duplicating 
it. The disadvantage is that it adds quite some weight to the Isabelle distribution and 
its release process (i.e., a non-trivial component, namely dotnet, would be added). 

Keeping it separate has the advantage that it does not require any changes to the main 
distribution. The disadvantage that I see is that maintenance is most likely harder 
and more error-prone (in the sense of following the Isabelle development is a more 
manual process) and installation for end-users is likely to be more inconvenient as 

I consider, personally, F# to be an interesting member of the ML-family, as it provides
a step into the world of dotnet-based frameworks and languages (as Scala opens a door 
into the world of JVM-based languages and frameworks).

Thanks a lot!


PS: Just to be clear - my focus is to understand how to maintain such a component 
    best, and if there is interest in shipping it as a part of Isabelle itself. My 
    focus is not to just "throw-it-over-the-fence" and forget it (i.e., to 
    off-load maintenance to somebody else).

More information about the isabelle-dev mailing list