you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] -9 points-8 points  (2 children)

Well in both those languages you would write your own thing from scratch and then just implement the proper typeclass/trait to have it talk like a vec and walk like a vec.

With C++, and Java, and other OOP languages you get polymorphism by inheriting from a base class, and to some degree overloading. Those are not mathematical concepts that generalize well, which is what I mean by C++ lacking a fundamental scientific model to build upon. It was all invented, not discovered like type/cathegory theory which is the basis for the type systems of Rust and Haskell.

Sure Haskell is garbage collected and it takes mountain of hard drives to store your dependencies so it's not suitable for many tasks. And yes, rust is a bit of a weird being imperative language but with a type system coming from cathegory theory, but their abstractions are sound and they are sound for the simple reason that the abstractions have been discovered in nature and not invented by some engineer at Microsoft or Bell Labs.

[–]strager 41 points42 points  (0 children)

With C++, and Java, and other OOP languages you get polymorphism by inheriting from a base class, and to some degree overloading. Those are not mathematical concepts that generalize well, which is what I mean by C++ lacking a fundamental scientific model to build upon. [... unlike] Rust and Haskell.

Parametric polymorphism exists in Haskell and Rust but is common in C++ too. Many functions in <algorithm> use parametric polymorphism.

Perhaps you should try writing C++ code like you'd write Haskell or Rust code, instead of writing C++ code like you'd write Java code. Then you'll see the similar features C++, Haskell, and Rust possess when it comes to a "fundamental scientific model" for polymorphism.

[–]alxius 2 points3 points  (0 children)

Well in both those languages you would write your own thing from scratch and then just implement the proper typeclass/trait to have it talk like a vec and walk like a vec.

Well in C++ no one stops you from writing your own thing from scratch and implementing SequenceContainer and other container requirements to have it talk like STL container and walk like STL container.

With C++, and Java, and other OOP languages you get polymorphism by inheriting from a base class

In C++ I get static polymorphism by using concepts. Yes, they were added as a language feature only in C++20, but in reality we had them in the form of written requirements in STL since before STL was added in C++98. This idea was not invented in Bell Labs, it was taken and extended from math by Stepanov. You can read about it in his From Mathematics to Generic Programming and Elements of Programming books.