Live data from Hacker News

Reflections on my first completed application in OCaml

discuss.ocaml.org

31–40 of 42 posts

Re: Reflections on my first completed application in OCaml

#31
post #30

Earlier quoted context omitted.

I get the distinct feeling that Ocaml’s leadership isn’t very interested in making a practical language, but rather playing with abstract type system ideas. Which is too bad because it clearly has a lot of potential. At this point, I think Rust will end up eating a lot of Ocaml’s potential market—Rust’s weakness is that memory management is harder than OCaml, but even that has become significantly easier between non-…

Well for example in the upcoming 4.12, the core team has integrated plenty of "practical" language features (such as support for iOS/OSX ARM64, or many changes related to multicore).

No doubt, but why are there still so many “standard” libraries? Where are is of the guides for building production applications? Why is the documentation so poor? How do the editor plugins compare to those for Go, Rust, etc? How familiar is the syntax to the broader body of developers? I’m not saying the Ocaml community never does anything practical; only that they don’t do enough to make their language mainstream.

And maybe they don’t want their language to be mainstream—that’s perfectly fine, but that undermines all of the arguments that this or that project should be (re)written in Ocaml or that Ocaml is otherwise a better language than $x for general software development.

Re: Reflections on my first completed application in OCaml

#32
post #15

Earlier quoted context omitted.

It's funny that I could say the opposite about Rust if you asked what I enjoy most about the ecosystem - many third party libraries have outstanding documentation. Wonder why is that - in the end, it's just some folks like you and me spending their free time writing those. Why is it different for different languages then, is it the tooling like rustdoc and docs.rs or just the standards set by the community? Not sure.

Some of it is probably accident of history. Some of it can be driven by external factors: javascript was the only choice for an important domain for a long time. Some if it I think is due to attractive syntax, or tooling. Python for example, horrible runtime performance, but people were drawn to it for probably syntax and tooling reasons. Comparing Rust and OCaml: The OCaml syntax is a bit odd. I was quite taken by F…

> looking at OCaml it just felt horrible

care to elaborate?

Re: Reflections on my first completed application in OCaml

#33
post #6

Earlier quoted context omitted.

Yes, it does. However a lot of it is driven by long-time ecosystem contributors and they generally work somewhat behind the scenes, presenting on the progress ~annually at conferences like ICFP. Here's the latest progress report, in case you're interested: https://www.youtube.com/watch?v=E8T_4zqWmq8 Now this is not the same language/community improvement system that many popular projects nowadays use, but OCaml has b…

> many applications just don't need it. Those that do can of course use libraries, but many (say, backend servers) don't really need to process Unicode strings I can't speak for actual Ocaml users, but I've personally rejected Ocaml for my user-facing webapps because of things like this. Treating unicode as something optional was fine for early 2000s, but it's really not fine today. Most user facing applications need…

> Treating unicode as something optional was fine for early 2000s, but it's really not fine today.

The issues are:

* how unicode support is implemented in third party libraries: how easy it turns out to manipulate this datatype with those libraries

* how easy it is to integrate third party libraries in a project

OCaml went a long way in both accounts since the early 2000s, perhaps you should give it a second look?

Re: Reflections on my first completed application in OCaml

#34
post #6

Earlier quoted context omitted.

> many applications just don't need it. Those that do can of course use libraries, but many (say, backend servers) don't really need to process Unicode strings I can't speak for actual Ocaml users, but I've personally rejected Ocaml for my user-facing webapps because of things like this. Treating unicode as something optional was fine for early 2000s, but it's really not fine today. Most user facing applications need…

Actual ocaml user here. User-facing web apps just aren’t a core application target for most people who use Ocaml, and probably won’t ever be. There are many perfectly good languages out there that address that need, so if ocaml doesn’t, so be it. Maybe I’m just in the minority - I like the fact that there are lots of languages out there, some of which choose not to cater to every possible development scenario. This i…

> User-facing web apps just aren’t a core application target for most people who use Ocaml, and probably won’t ever be.

I wouldn't be so sure. The way that the ReasonML and ReScript communities have been attracting frontend developers, webapps may already be the single biggest target platform for OCaml (well, a derivative) today.

Re: Reflections on my first completed application in OCaml

#35

Earlier quoted context omitted.

Actual ocaml user here. User-facing web apps just aren’t a core application target for most people who use Ocaml, and probably won’t ever be. There are many perfectly good languages out there that address that need, so if ocaml doesn’t, so be it. Maybe I’m just in the minority - I like the fact that there are lots of languages out there, some of which choose not to cater to every possible development scenario. This i…

are there any advantages to using OCaml for making web apps?

Yes, especially in the ReScript toolchain ( rescript-lang.org/ ), there are many benefits:

- Super-fast compiler

- Readable and succinct JS output with nearly 1-to-1 mapping from OCaml source

- Simple module system with no need to explicitly import modules--the compiler takes care of it for you

- High-quality React and other bindings

- The standard advantages of the type system like expressive power of data types and pattern matching with exhaustivity checking

- Tons of super useful built-in lints like 'unused variable', 'unused function parameter', 'discarding a value', etc.

Re: Reflections on my first completed application in OCaml

#36
post #15

Earlier quoted context omitted.

It's funny that I could say the opposite about Rust if you asked what I enjoy most about the ecosystem - many third party libraries have outstanding documentation. Wonder why is that - in the end, it's just some folks like you and me spending their free time writing those. Why is it different for different languages then, is it the tooling like rustdoc and docs.rs or just the standards set by the community? Not sure.

I've not been deeply involved in either so take my hunch for what it is: OCaml is an academic language like Haskell. Academics tend to neglect documentation in general, be it because what they're working on is mostly self-serving, lack of time/enthusiasm or a tinge of elitism on that "this should be obvious and if not just read the code". Rust adherents seem to really want to take over the world and they realize that…

Disagree, somewhat. You should check out the OCaml manual: https://ocaml.org/releases/4.11/htmlman/

It is a complete and up-to-date manual of the entire OCaml distribution, including executables, language, runtime, and standard library. It's rare to find modern industry-driven languages with this level of coherent documentation.

But regarding third-party library documentation, that is indeed spotty. Some people publish it, some don't. I have to reluctantly conclude it's due to a lack of tooling which automates the tedious processes.

Re: Reflections on my first completed application in OCaml

#37
post #30

Earlier quoted context omitted.

Well for example in the upcoming 4.12, the core team has integrated plenty of "practical" language features (such as support for iOS/OSX ARM64, or many changes related to multicore).

No doubt, but why are there still so many “standard” libraries? Where are is of the guides for building production applications? Why is the documentation so poor? How do the editor plugins compare to those for Go, Rust, etc? How familiar is the syntax to the broader body of developers? I’m not saying the Ocaml community never does anything practical; only that they don’t do enough to make their language mainstream. A…

> why are there still so many “standard” libraries?

There is one standard library--the one that ships with OCaml. You can use replacement libraries if you really need them--I haven't yet needed to, but for heavy-duty production use maybe one day I will.

> Where are is of the guides for building production applications?

Is the emphasis on 'building' here, as in 'build tool'? If so, then https://dune.build/ is what you need. If the emphasis is on 'production application', then I'm sure there are others but https://shonfeder.gitlab.io/ocaml_webapp/ comes to mind immediately.

> Why is the documentation so poor?

Which documentation specifically? If you mean OCaml itself, then you should check out https://ocaml.org/ , it has tons of high-quality documentation. If you mean third-party libraries, then it's probably mostly a lack of tooling that publishes docs automatically, but I think this is starting to change.

> How do the editor plugins compare to those for Go, Rust, etc?

The OCaml Language Server and its main editor plugin (for VSCode) are nearly feature-complete. The older Merlin tooling has been used for a long time.

> How familiar is the syntax to the broader body of developers?

Syntax can be learned, but for those who don't want to try, there is always ReasonML syntax that uses semicolons and curly braces to make OCaml look like JavaScript.

> I’m not saying the Ocaml community never does anything practical; only that they don’t do enough to make their language mainstream.

It's easy to make assertions without actually knowing anything, but it's better to do the research first to back them up, instead of asking a bunch of questions ;-)

Re: Reflections on my first completed application in OCaml

#38

Earlier quoted context omitted.

No doubt, but why are there still so many “standard” libraries? Where are is of the guides for building production applications? Why is the documentation so poor? How do the editor plugins compare to those for Go, Rust, etc? How familiar is the syntax to the broader body of developers? I’m not saying the Ocaml community never does anything practical; only that they don’t do enough to make their language mainstream. A…

> why are there still so many “standard” libraries? There is one standard library--the one that ships with OCaml. You can use replacement libraries if you really need them--I haven't yet needed to, but for heavy-duty production use maybe one day I will. > Where are is of the guides for building production applications? Is the emphasis on 'building' here, as in 'build tool'? If so, then https://dune.build/ is what you…

> There is one standard library--the one that ships with OCaml. You can use replacement libraries if you really need them--I haven't yet needed to, but for heavy-duty production use maybe one day I will.

You're mistaken (or you're making an unrelated semantic argument because you don't want to argue the actual point; not sure which); there are multiple "standard" libraries used across the ecosystem (because the ecosystem has deemed "the one that ships with OCaml" to be inadequate) which makes integrating libraries throughout the ecosystem tedious and painful, especially to new OCaml developers.

> Is the emphasis on 'building' here, as in 'build tool'?

No, I expect an abundance of tutorials that explain how to build production-grade applications, soup to nuts. E.g., for a generic CRUD app, what are the best frameworks, ORMs, etc to use, how to integrate them, etc?

> The older Merlin tooling has been used for a long time.

Yes, but it's incredibly difficult to configure properly, or at least that was my experience when I got started. I'm actually not sure if I ever got it working with vim.

> Syntax can be learned, but for those who don't want to try, there is always ReasonML syntax that uses semicolons and curly braces to make OCaml look like JavaScript.

It can, but it's a burden with no advantage. Last I checked, ReasonML's support was pretty abysmal--it seemed like native compilation was neglected altogether in favor of something called "bucklescript" (presumably compilation to JS) and the integrations with the rest of the ecosystem (e.g., how to build native programs, link against ocaml dependencies, integrate with editor tools, etc) were either poorly documented or inadequate/incomplete or both. No doubt some of that has improved in the intervening years, but I'm doubtful that it has significantly improved.

> It's easy to make assertions without actually knowing anything, but it's better to do the research first to back them up, instead of asking a bunch of questions ;-)

You've provided the same unhelpful, pat answers that the OCaml community provides. For example, "Just use ReasonML!" as though setting up or using Reason is trivial or well documented or otherwise comparable to using Rust or Go out of the box. For another example, you altogether dodged the issues associated with multiple "standard" libraries. It would be great if the OCaml community were as committed to making their language useful for production applications as they were on convincing everyone else that it already was.

Re: Reflections on my first completed application in OCaml

#39
post #28

Earlier quoted context omitted.

Some of it is probably accident of history. Some of it can be driven by external factors: javascript was the only choice for an important domain for a long time. Some if it I think is due to attractive syntax, or tooling. Python for example, horrible runtime performance, but people were drawn to it for probably syntax and tooling reasons. Comparing Rust and OCaml: The OCaml syntax is a bit odd. I was quite taken by F…

> Python for example, horrible runtime performance, but people were drawn to it for probably syntax and tooling reasons. Tooling? How so? Like the REPL? Because when I think of tooling, I think of things like IDEs, dependency management, and distribution. Python has one of those things now (IDEs/notebooks), but even that took a while, IMO. Python is a weird case study for me. I'm not trying to flame war or anything-…

I think it's worth keeping in mind that when Python got popular, there weren't options like Go or Node (or any other big player in server-side JS) that might hit different points on the performance versus ease of writing tradeoff. My understanding is that Python took off in a world where the other choices for languages were things like Perl and Java. Compared to Perl, Python does have a reputation of being much more readable, and compared to Java, it has the reputation of being much easier to write. People were attracted to the language initially for that, and then as the community grew, other benefits started appearing, like a rich ecosystem of third-party packages. Nowadays, other languages have appeared that offer different productivity tradeoffs, some with much better performance, so it's possible that Python won't be the first choice of as many people as before, but I don't think it's particularly surprising that people who have used it and been productive with it for years still continue to enjoy working in it. The experience of working in a language like Python hasn't actually gotten worse just because something like Go exists; it's just that some people who might have picked Go over Python 20 years ago picked Python back then because Go didn't exist yet.

Re: Reflections on my first completed application in OCaml

#40

Earlier quoted context omitted.

> why are there still so many “standard” libraries? There is one standard library--the one that ships with OCaml. You can use replacement libraries if you really need them--I haven't yet needed to, but for heavy-duty production use maybe one day I will. > Where are is of the guides for building production applications? Is the emphasis on 'building' here, as in 'build tool'? If so, then https://dune.build/ is what you…

> There is one standard library--the one that ships with OCaml. You can use replacement libraries if you really need them--I haven't yet needed to, but for heavy-duty production use maybe one day I will. You're mistaken (or you're making an unrelated semantic argument because you don't want to argue the actual point; not sure which); there are multiple "standard" libraries used across the ecosystem (because the ecosy…

> as though setting up or using Reason is trivial or well documented

It's both trivial and well documented. There is an installation page and a tutorial on the Reason website. The installation in itself is one npm command.

> For another example, you altogether dodged the issues associated with multiple "standard" libraries.

There is only one standard library. It's the one shipped with the compiler. It is also significantly more battery included now than it used to be.

> It would be great if the OCaml community were as committed to making their language useful for production applications as they were on convincing everyone else that it already was.

The OCaml community as a whole is one of the least vocal on the internet. It does very little outreach. I never see any of the people I consider relevant to the community on HN for example.

No one cares about convincing you that OCaml is ready for production use. It doesn't need to be argued, it can just be shown. OCaml is not an up and coming language, it's a 25 years old one. It powers a lot of Jane Street infrastructure. It is used to develop Coq and Frama-C. It is transpiled to javascript at Facebook and Bloomberg. Heck, Rust which you apparently hold dear was originally written in it.

Post reply on HN