Things I Want In A Programming Language
I feel like I’m a simple human being and not asking for much.
I’m just looking for a programming language that has exactly the right set of features:
- Pattern matching in every reasonable binding position (Elixir Style)
- Everything is an expression, and every scope returns its last element (aka. no
return
fuckery) - Strong and Static Gradual typing with me basically never having to write down types
- explicit modules that can be defined, nested, and imported in the most sensible way. That is:
- Modules aren’t coupled with file names
- You can import a module locally in another module
- You can nest modules
- Some way to do piping:
(-> )
(Clojure),->
(ReScript),|>
(Elixir) and&
(Haskell) are all fine. - Some very easy way to extend my standard language:
import MyPrelude
,open Utils
, …, all fine. - Some very direct way to interact with client-side JS
- No commas in lists. Seriously. It’s not that hard to write a parser that handles that sensibly and correctly.
- No. lazyness. by. default.
I know what I’m doing, and I’ll gladly litter my code
memoize
s to make it go faster if I really need it. But lazyness by default makes my code harder to reason about, and I’m not willing to pay that price.
Draft in Progress
§ Nice to haves I could work around
- good documentation that’s not hidden in some markdown files in a repo.
- immutability by default
- Type Classes
§ Things I’m unsure about
§ being able to drop down machine level
- Rust-style or C-style
§ lambdas vs non-lambdas
§ (parens (syntax))
I think I want Racket-style macros (or at least I see their case pretty clearly, and if you want any Macros, you should have Racket Macros), but I’m way less sure about syntax here. Elixir’s syntax seems to go a long way here.
§ Simplicity
§ Syntax Likings
- Elixir’s syntax, basically.
Is that really too much to ask?
Draft in Progress