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.
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?
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.
8 comments
[ 4.0 ms ] story [ 27.9 ms ] thread(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.)