9 ms·
Comparing Objective Caml and Standard ML
- deleted 4y ago[deleted]
- eterps 4y agoIf you are looking for an ML dialect that has a more 'familiar' syntax, check out Rescript: https://rescript-lang.org/docs/manual/latest/overview https://rescript-lang.org/docs/manual/latest/overview Although personally I prefer the syntax of F# (but I don't like the .NET focus of it).
- giraffe_lady 4y agoRescript extremely underrated imo. For self-contained projects it's strictly superior to typescript: its type system is simultaneously easier to work with and more sound, with better type inference. The tooling isn't better per se but it's easier to use. If you have dependencies it depends. Writing bindings to all of them can take up a lot of time. Gentype from typescript types is often enough, but not always. Hope to see this one catch on a lot more. It's an incredible alternative to typescript.
- eterps 4y ago> For self-contained projects it's strictly superior to typescript: its type system is simultaneously easier to work with and more sound, with better type inference. Exactly, typescript is a highly complex addition to a relatively messy language (JS). Rescript feels like what Typescript could have been, a cleanup of JS and a sound typesystem and excellent type inference. (however breaking compatibility as a consequence) IMO Rescript is easier to read than plain JS and still it's fully typed.
- haskellandchill 4y agoThere aren't degrees of soundness, it's either unsound (TypeScript) or sound (Rescript).
- giraffe_lady 4y agoI mean zero to one is still "more" right? Anyway thanks idk shit about type theory and I didn't go to college I just write code for money.
- hencq 4y agoIf you like F# but not .NET, Fable might also be worth a look: https://fable.io/ https://fable.io/
- deleted 4y ago[deleted]
- pjmlp 4y agoThat is exactly the kind of thing I refer to, with guest languages coming up with their alternatives instead of embracing the platform, and in this case F# isn't even a guest language.
- jhvkjhk 4y agoRecently I tried to use it until I found out it doesn't support inheritance. The only option is using the include keyword in modules but that's discouraged.
- sshine 4y agoThis is an oldie but a goodie. I remember reading this page making up my mind when choosing between the two. OCaml has, unlike Standard ML, grown quite a lot since this page was made. In particular, the section "Standard libraries", I'd recommend looking at: https://dev.realworldocaml.org/ https://dev.realworldocaml.org/ A couple of places where the comparison is outdated: - OCaml using Base [1] allows for result-type oriented programming - OCaml using Base uses less language magic and more module system While there was and is truth to the distinction that SML is for scientists and OCaml is for engineers, this dichotomy is getting dated: OCaml is under active development, which means that scientists who want better tooling will choose OCaml. For example, 1ML [2] by Andreas Rossberg was built in OCaml. [1]: https://opensource.janestreet.com/base/ https://opensource.janestreet.com/base/ [2]: https://github.com/rossberg/1ml https://github.com/rossberg/1ml
- cmrdporcupine 4y agoI remember reading this many years ago. TBH I always felt SML was a nicer language, syntactically -- more readable (mainly because of the let..in..end scoping syntax) -- and I really liked its Basis library; something about the API choices there seemed to be one of the better collections libraries I've ever used. The "object" part of OCaml didn't feel necessary to me. But OCaml has had more momentum, and I don't know if anybody is even using SML anymore? Interesting to look back with a bit of history now, too. Choices like having objects/classes and exceptions (instead of result types) added into OCaml were probably seen as modernizing and adding in features that people expected; but now the pendulum seems to have swung against those features. OOP hype has passed -- e.g. Rust and Go don't have 'classes' with inheritance. And exceptions are also lacking in Rust etc, in favour of Option/Result type + pattern matching, so that control flow is more explicit and easier to reason about.
- zarzavat 4y agoIf I've learned anything as a programmer, is that these things move in fashions. People will get sick of result types and exceptions will be hot again. OOP will be fashionable once again. The grass is always greener on the other side of the fence.
- cmrdporcupine 4y agoThis is quite possibly true, but I feel like exceptions are one of those things... people are just finally cluing into the fact that this is a non-local GOTO, and the consequences for reasoning about program flow can be terrifying, like Djikstra already told us. If exceptions have a "comeback" (they have not gone away in mainstream languages like Java, C#, Python etc.) I hope they come back in a way where they're bundled with static analysis features that help with the reasoning process. When I worked in Java, 10+ years ago, checked exceptions were considered an obnoxious "no-no", and bad style. Mostly because people just wrapped and rethrew them as runtime exceptions. But, like, runtime exceptions are awful, and almost every application I worked in had buckets of garbage in the logs which consisted of uncaught or "caught & logged" exceptions. Such exceptions are particularly troublesome in highly concurrent applications. Exceptions should be exceptional. I think Rust has made the right call here. Handle the error, or panic. Don't make it somebody else's problem.
- forgotpwd16 4y agoInterestingly in syntax OCaml is considered purer only once for its choice of not using overloaded operators.
- octachron 4y agoIn this comparison, "purer" more often than not means that the choice simplified the formalization of SML. And for the context, many people from the OCaml side considers that the SML formalization has been for a good part responsible for the freezing of SML since 1997.
- ggerules 4y agoFor those wanting more comparison examples between OCaml and SML, these additional web sites might be of interest. [1] needs updating with OCaml's newest features, but is still very good. [2] and [3] are useful to see more examples in those respective languages. [1] https://hyperpolyglot.org/ml https://hyperpolyglot.org/ml [2] https://rosettacode.org/wiki/Category:OCaml https://rosettacode.org/wiki/Category:OCaml [3] https://rosettacode.org/wiki/Category:Standard_ML https://rosettacode.org/wiki/Category:Standard_ML
- smlnj_help 4y agoPerhaps the wrong place to ask, but, does anyone have a good reference on working with the NJ CM that is more tutorial than the linked manual? Was just getting started with the NJ compiler and was getting frustrated with the REPL. Will it still be as nice as he claims coming from more modern build systems?
- weatherlight 4y agoI've been using SML with millet language server and VScode. you can highlight your code and run just the highlighted bits, in your REPL. https://github.com/azdavis/millet https://github.com/azdavis/millet
- smlnj_help 4y agoThis looks great. Gonna try it later with the toml file. Thanks!
- smasher164 4y agoRemember that this is only comparing the languages. If you actually try to write code in Standard ML, you come to a rude awakening as to how poor the tooling is. Libraries are underdocumented and unavailable. The build system and package management is arcane. SML feels like a toy language compared to working in OCaml.
- weatherlight 4y agoSML has the nicer syntax though, and the millet language server is really really nice.
- marktangotango 4y agoPolyML has a lot more "stuff" build in like threads, multiprocess, and sockets. If I were to use SML in anger I'd use PolyML. Sadly I've never had the need. https://www.polyml.org/documentation/Reference/Basis.html https://www.polyml.org/documentation/Reference/Basis.html