6 ms·
There are definitely people using F# on Mono in production, but it is the smaller brother still. Having said that, nearly all of the "core" projects are now be
by mmavnn 12y ago
There are definitely people using F# on Mono in production, but it is the smaller brother still.
Having said that, nearly all of the "core" projects are now being CI tested on mono as well as windows, and the fsharpbindings project provides autocompletion for Vim and Emacs (+ powers the MonoDevelop/Xamarin Studio F# support as well).
I'm having great fun writing F# code in Linux with Vim - now that .fsx (F# script) files have proper #! support you can just write fsx files with full highlighting, error checking and autocompletion in place and then run them with supervisord.
- vosper 12y agoWhat are the pain points (if any) that you've encountered? I've been wanting to use F# on Linux for a while now.
- mmavnn 12y agoThe lack of good instructions is definitely one! (Edit: although http://fsharp.org/use/linux/ http://fsharp.org/use/linux/ covers the absolute basics pretty well) Up until recently, packaging was a bit of an issue, but recently the official Mono repositories have started being much more up to date again, and now include recent versions of F# as well: http://www.mono-project.com/download/#download-lin http://www.mono-project.com/download/#download-lin Getting vim support is still a case of cloning the project from github https://github.com/fsharp/fsharpbinding https://github.com/fsharp/fsharpbinding and running make in the vim directory - Vim 7.4+, make, python and a couple of other vim plugins required. After that, things can start getting pretty nice. For (my only public) example, https://github.com/mavnn/Advent2014 https://github.com/mavnn/Advent2014 shows how you can use fsx scripts and paket (a package manager compatible with nuget.org and taking source dependencies from github) to create a nice little project without needing to get into any of the Visual Studio project file nastiness. Of course, if you need to work on an existing project, the Vim bindings know about how to handle that too - but actually editing project files is still a pain. One word of caution: there's currently a bug in the packaging for rpm: I'd go with Debian/Ubuntu packages at the moment. And as a final option, building from source is slow but has become pretty reliable over the last year or so.
- platz 12y agorelated: http://www.ganshani.com/blog/2014/12/shell-script-to-setup-net-on-linux/ http://www.ganshani.com/blog/2014/12/shell-script-to-setup-n...
- vosper 12y agoThanks for that. Having got past the setup and configuration issues, have you experienced any problems with the packages that are available? What's the ecosystem look like for F# on linux?
- mmavnn 12y agoPackages generally work fine, although if they rely on native binaries they often require a bit of tweaking to point at the Linux .so rather than the windows .dll. That's uncommon in the .net world though. The ecosystem is huge; http://nuget.org http://nuget.org hosts the main .net package collection, and it fairly comprehension. Also, to be fair to MS the standard library is pretty "batteries included"; it just doesn't always have what I would consider the nicest APIs.
- alexatkeplar 12y agoThat sounds very tempting! What's the dependency bundling story like with F#/Mono - what would be the equivalent to assembling a fatjar for the JVM, or indeed `go build` for Go?
- mmavnn 12y agoAs in a self executing file? Not the standard deploy story, but is in theory possible on Mono with a combination of F# compiler options to compile in all dependencies, and mono's "ahead of time (AOT)" build. It does mean that you lose a number of traditional clr advantages such as JITting - and I have to admit that I haven't tried this route myself. Almost all of the clr code I've written has been server side.
- alexatkeplar 12y agoAh - not necessarily a self-executing file - a fatjar still depends on having the JVM installed on the box. I guess I was asking if there is a way of packaging an F# script or app so that it can be installed on a server with a simple wget from Bintray? So all dependencies vendored in.
- mmavnn 12y agoI'd probably look into Paket (a nuget aware package/source dependency manager) for that. Sorry for the short answer, New Years celebrations beckon!
- nerdshark 12y agoF# applications are compiled to ordinary .NET executables, so you can look at how other .NET applications are packaged on *nix. Basically, you can package them as you would any other software, though it would help to either have .NET executables configured to launch with mono via binfmt_misc (on Linux), or have a small launcher script to do the 'mono myapp.exe' invocation.
- mmavnn 12y ago
- mamcx 12y agoI wish exist something like this but for Sublime...
- mmavnn 12y agoIt should be possible to plug the F# binding backend into sublime; it expects to run as a separate process and have buffer states passed back and forth as JSON. I don't know much about sublime plugins, but I believe that they're Python based and should be able to handle that reasonably elegantly.