Vagabond


Vagabond

On-demand distribution of code (e.g. lambdas) for remote execution is a problem often exacerbated by the presence of dynamic assemblies. Dynamic assemblies appear in situations where code is emitted at runtime, such as interpreters, optimization libraries or F# type providers. By default, dynamic assemblies are not persistable. What's more, the inherently incremental nature of dynamic assemblies makes their exportation even more challenging.

Vagabond attempts to solve this problem by providing an automated dependency resolution and dynamic assembly compilation framework. It also addresses issues inherent in REPL loops. It fully supports code generated by F# Interactive and type providers.

It is based on the Cecil and FsPickler libraries and adapts code from JB Evain's AssemblySaver.

The Vagabond library can be installed from NuGet:
PM> Install-Package Vagabond

Example

To see a demo of Vagabond, build the solution and execute the thunkServer.fsx script found inside the samples folder. As the name suggests, it allows for execution of arbitrary thunks in a remote server.

Documentation & Technical Overview

A collection of tutorials, technical overviews and API references of the library.

  • API Overview An overview of the Vagabond API and examples.

  • Technical Overview A walkthrough of the library's implementation details.

  • API Reference contains automatically generated documentation for all types, modules and functions in the library.

Mono Support

Vagabond makes heavy use of the reflection API. Mono support is patchy for the moment, mostly due to a number of bugs in the mono runtime [1,2]. If you would like to see stable Vagabond support in mono soon, make sure to contribute code/nag until these bugs are resolved.

Contributing and copyright

The project is hosted on GitHub where you can report issues, fork the project and submit pull requests.

The library is available under the MIT License. For more information see the License file in the GitHub repository.

namespace System
namespace System.Reflection
Fork me on GitHub