Ask HN: What programming language features or ideas do you wish were mainstream?

4 points by Austin_Conlon ↗ HN

8 comments

[ 4.0 ms ] story [ 27.9 ms ] thread
Sum-types and an exhaustive pattern-matching construct. It's borderline criminal to design a language with a static type system in this century and leave that out.
Having used Erlang for a side project recently: pattern matching and supervision trees.
Pattern match, curry by default, function composition, metaprogramming through custom operators, Sum types.
Get rid of retched compulsory nullability and offer optionally optional types. Could be via ADT style Maybe a = Just a | Nothing, or just a language feature eg Mytype vs Mytype?
Software Transactional Memory like Clojure has

  * Structural typing
  * Uniform access
  * Lazy evaluation
Macros (including both preprocessor and coprocessor kinds, and both hygienic and unhygienic), goto, parameterized types (especially GADTs; what restrictions apply depend on the program language), inline assembly code (and perhaps also inline C, SQL, LLVM, or whatever is applicable to the particular programming language in use), pattern matching, currying, byte arrays, lambda functions, range limited types (for purposes of program optimization), conditional compilations (by use of macros), evasive and non-evasive exceptions, setjmp/longjmp, compile-time calculations and assertions, zero-length arrays, non-Unicode mode, better bit manipulation operators, having enough ropes to hang yourself and also a few more just in case, etc.

(Note, however, there are different program languages for different uses, and some things may be not applicable, or only partially applicable, to some kind of programming languages, I think.)

Homoiconicity, like that found in Lisp or TCL. I have this small system orchestration framework of sorts that I use to maintain my network-wide configuration and send commands to multiple machines. I wish I didn't have to work with code in quote-delimited strings and all the escaping involved. It wouldn't be a problem in either Lisp or TCL.