4 ms·
in what sense is ocaml production ready? does it have the tooling? ecosystem? is there even another stl than jane street's library?
by mlevental 9y ago
in what sense is ocaml production ready? does it have the tooling? ecosystem? is there even another stl than jane street's library?
- noncoml 9y agoAs much as I like Ocaml and would love to use it for everything, I tend to agree with you. The ecosystem is severely lacking, making it impractical as your general, everyday language.
- yawaramin 9y ago> does it have the tooling? Yup. Opam (package manager) + Merlin (editor integration, type hints, error messages) + VSCode are a killer combo. And if you use ReasonML you also get refmt, which is the equivalent of gofmt. > ecosystem? Yup. The opam ecosystem is high-quality, growing, and has all the essentials. If you need something out of the ordinary you can call out to C libraries, or even compile to JavaScript and use (almost) the entire npm ecosystem with BuckleScript. > is there even another stl than jane street's library? That's odd. Usually people criticise OCaml for having more than one stdlib. But yes, there's a minimal but useful stdlib that ships with the OCaml compiler: https://caml.inria.fr/pub/docs/manual-ocaml/libref/index.html https://caml.inria.fr/pub/docs/manual-ocaml/libref/index.htm... . And there's also the community-driven Batteries library: http://batteries.forge.ocamlcore.org/ http://batteries.forge.ocamlcore.org/
- Tomte 9y agoI think last time I looked OPAM wasn't available for Windows. Has that changed, yet?
- kryptiskt 9y agoThere are builds here: http://fdopen.github.io/opam-repository-mingw/ http://fdopen.github.io/opam-repository-mingw/
- yawaramin 9y agoAlso, you can use the Windows Subsystem for Linux to get opam: http://themargin.io/2017/02/02/OCaml_on_win/ http://themargin.io/2017/02/02/OCaml_on_win/
- 35bge57dtjku 9y agoHow many stls do you want? I thought Jane Street's replaced the default one.
- aidenn0 9y agoAs a meta comment, there will always be detractors of any even slightly esoteric language. The author of pgloader[1] said the other day "When I told people I was going to use Lisp, I was told it was stupid because there weren't any libraries; when I packaged it for Debian, I was told that I had too many external dependencies" It was probably different groups, but there were complaints both about not enough and too many libraries! 1: http://pgloader.io/ http://pgloader.io/
- sanxiyn 9y agoFYI, here is list of pgloader (direct) dependencies (35 of them): abnf, alexandria, asdf, asdf-finalizers, asdf-system-connections, bordeaux-threads, cffi, command-line-arguments, csv, db3, drakma, esrap, fad, flexi-streams, interpol, local-time, log, lparallel, markdown, md5, metabang-bind, postmodern, ppcre, py-configparser, qmynd, quri, simple-date, split-sequence, sqlite, trivial-backtrace, trivial-utf-8, unicode, usocket, utilities, uuid.
- aidenn0 9y agoList of what they do, summary first, then detailed: Portability libraries[1]6: bordeaux-threads, CFFI, command-line-arguments, trivial-utf-8, trivial-backtrace, usocket Parsing 6: abnf, esrap, markdown, py-configparser, simple-date, quri Database interfacing 5: csv, db3, postmodern, qmynd, sqlite Build-tool/dependency management 3: asdf, asdf-finalizers, asdf-system-connections utilities 3: alexandria, split-sequence, utilities portable I/O & character encoding 3: unicode, fad, flexi-streams sugaring 2: metabang-bind, interpol Other 6: drakma(HTTP), log, lparallel, md5, ppcre(regex), uuid abnf: parser generater for augmented BNF alexandria: utility library asdf-*: build-tool bordeaux-threads: mutithreading primitives cffi: foreign function (i.e. calling C) command-line-arguments: exactly what it says on the tin csv: comma separated variables (also supports similar things like tsv) db3: dBASE III reader drakma: http client esrap: Parser generator fad: Files And Directories (portable file-system) flexi-streams: in-memory streams (file-like objects) and encoding interpol: interpolated strings (e.g. variable substitution in strings). Also includes regex literals. local-time: timestamps &c. log: logging lparallel: high-level threading markdown: markdown md5: md5 metabang-bind: macro library for doing various fancy bindings (setting a variable to a value for a particular lexical or dynamic scope) in a single construct. postmodern: Postgresql interface library ppcre: perl compatible regex py-configparser: parser for .ini like files (compatible with the python "configparser" library) qmynd: MySQL library quri: fast URI parsing/emitting library ("quicker" than puri, the Portable URI parsing library) simple-date: date/time; not sure what it offers that local-time doesn't split-sequence: Splits sequences based upon value or function of value sqlite: sqlite3 interfacing trivial-backtrace: tool for getting backtraces trivial-utf-8: Portability for UTF-8 unicode: things like character classes for Unicode usocket: socket library utilities: utilities library uuid: UUID library 1: wraps commonly available, but not standardized behavior in lisp implementations: sockets, threads, debugger &c. often named "trivial-"