Comment by nequo
3 months ago
That’s interesting because F#’s OOP, as someone who knows neither C# nor Java, makes it more intimidating to me than OCaml.
Also interesting that when FP is mentioned, Hindley-Milner is implicitly understood to be part of FP too even though it doesn’t have to be. Clojure emphasizes immutability and FP but with dynamic typing and everything that comes with that.
Doesn't the "O" in OCaml stand for "Object", though? I think you could pick up either F# or OCaml just as easily.
The nuances of OOP in F# can be ignored by beginners, so I really wouldn’t let yourself be intimidated coming from Clojure.
[0] https://ocaml.org/docs/objects
OCaml classes and objects are (ironically) rarely used and generally discouraged. There are some cases where they’re practically required, such as GUI and FFI (js_of_ocaml). But otherwise, most code does encapsulation and abstraction using modules and functor modules (which are more like Haskell and Rust typeclasses than traditional OOP classes).
I don’t know much about F#, but last time I used it most of its standard library was in C# and .NET, so F# code would interact with objects and classes a lot. AFAIK F# also doesn’t have functor modules, so even without the dependence on C# code, you still can’t avoid classes and objects like you can with OCaml (e.g. you can’t write a generic collection module like `List` or `Set` without functors, it would have to be a collection of a specific type or a class).
F# uses .NET's generics, so the statement regarding List/Set is completely incorrect (all base collections are generic).
5 replies →
> Clojure emphasizes immutability
Is "emphasizes" just another word for second-class support?
C++ emphasizes the importance of memory safety.
Immutability is definitely first class in clojure, but you can work with mutable structures when you need to.
This is sounds like memory safety in C++.
https://www.infoworld.com/article/3714401/c-plus-plus-creato...
3 replies →
> Is "emphasizes" just another word for second-class support?
I don't know what's your personal definition of "second-class support" but what it means is that it's explicitly supported by the language.
C++ explicitly supports memory-safe programming. You can choose whether you want to mess around with raw pointer arithmetic.
What safeguards does the language actually put in-place?
5 replies →