I know there are slowly ongoing efforts on improving OCaml support of Windows platform, but so far they look patchy and incomplete. And Windows users have to stuck to F# which is only a bleak shadow of OCaml obviously. Is there any roadmap or comprehensive plan to overturn the tables and beat F# on its own territory?
Apparently Esy works on Windows (I don’t have a Windows machine handy so haven’t tried it): https://esy.sh/docs/en/what-why.html . It could be a good way for you to bootstrap.
There’s experimental support for building pure-opam projects: https://esy.sh/docs/en/opam-workflow.html
Feel free to give bsb-native a try as well. Version 4.0.7000 should fully work on windows, without needing WLS or Cygwin. You should be able to just npm install bsb-native
and it’ll work on your .ml
files.
I have used OCaml on Windows with Cygwin for years now. I think it is decent.
Opam for Windows works fine. Don’t know what kind of more compatibility is necessary, or is being worked on, but I haven’t hit any serious issues, despite pretty complex use-cases.
CSML makes it quite easy to make .NET bindings.
Merlin and Visual Studio Code work very well on Windows.
I’ve also used Dune, Lwt, Cohttp on Windows.
@keleshev What configuration do/did you use for vscode + merlin under opam for Windows? Last time I tried it didn’t work well but I haven’t tried in a while.
Outside of editing, I’ve used the same tools and libraries @keleshev mentioned for building tools and services on Windows. I haven’t tried esy yet but I plan to soon.
@hcarty I make sure that ocamlmerlin-server
is on PATH
in my Cygwin console, then I call code
from within the console so that it inherits the path. In the editor settings I have only this:
"reason.path.ocamlmerlin": "ocamlmerlin-server",
Cygwin is not native Windows development. I am speaking about proper port, with complete native support.
@XVilka just to make sure we are on the same foot here, OCaml for Windows uses a cross-compiler version of GCC to produce native Windows executables which are independent of Cygwin and do not link to cygwin1.dll
.
A Unix shell is needed during the build step for many packages: OCaml itself, every package that uses ocamlbuild, zarith, and many more. Even packages that use dune, frequently rely on something like (bash <cmd>)
or (run sh ./foo.sh)
. If you want to get rid of something like WSL or cygwin, you have to convince them to switch their build system (OCaml 4.08.0 just switched to autoconf ).
Also opam internally relies on programs that are not available as native Windows application: rsync, git,…