Hacker News new | ask | show | jobs
by bmitc 1689 days ago
I think F#, Clojure, and Elixir are languages that show it's possible to stop adding major features to.
2 comments

Scheme as well. Notably, these languages are (mostly) capable of letting developers add new models of computing or software design on top of the base language in a way that appears natural as a user.

If you want OO in Scheme, you can do it (and various models of OO at that). If you want a concurrent model, you can do it. If you want a relational programming model, you can have it.

Try doing the same with, for example, C. You can accomplish it, but you have to jump through hoops or rely on OS libraries or other things. And it will rarely, if ever, feel "natural" within the language.

I don't think F# did that by choice. The reference compiler implementation is simply too complicated, which makes it hard to add new features. It is, ironically, also written in F#.
From what I have seen, Don Syme is a very pragmatic language designer and doesn't want to include features just to add them, and he holds .NET interoperability extremely high on the priority list, which further limits adding more functional programming features.

I imagine the compiler implementation is complicated, and I would guess it is due to the .NET interoperability.

You can just check out Roslyn code and compare it with FSC code. Trust me, compiler code quality/complexity is the main cause.