Typing
not the languages which invented these things, just the ones which inspired me:
- Haskell for the idea of tracking functional purity
- Java for interfaces and Haskell for typeclasses, which inspired interfaces
- Qi for the idea of just having an actual theorem-prover in the type system (although we don't use this) (later: yes, mb we'll use a port of Coq)
- Mileski for his race-free type system
- Lisp for macros
- Perl's regexps for raw text macros
- Perl for being good for writing commandline oneliners in
- Python, for annoying me by being a good language that is not good for writing commandline oneliners in
- Regexps and Haskell's patterns for patterns
- Lisp and Haskell for showing clearly the idea of a language with one unifying data structure, compared to Python, which had two (lists and dicts)
- Python, for showing me the problem with not having one unifying data structure, by annoying me with the need to convert back and forth between numpy arrays and Python lists
- Python, for list comprehensions
- Python, for showcasing the usefulness of dicts as a fundamental data structure
- Python, for 'object protocols' as a way to extend basic language features
- Python, for annoying me with its distinction between function calling ('()') and lookup ('[]')
- Python for keyword arguments, which seemed to me to sit well with the dict datastructure but not the list one
- Basic, for GOTO and labeled lines of code
- Haskell for laziness
- Haskell for syntactically easy partial function application
- Haskell, for Maybe
- Python, for nullable types
- Perl, for the idea of looking for abbreviating conventions in human language and porting them to programming languages
- Haskell, for equational control flow, combined with sequential control flow inside of do blocks
- C, for & and *
- Haskell, for the value of syntax
- Lisp, for the value of simple syntax
- Python, for the value of readability
- Java, for automatic memory management
- C++, for object orientation
- Java, for checked exceptions
- Scheme, for call/cc
- Lisp, for the importance of implementing the languge in the language concisely
- Haskell, for tail recursion and using recursion instead of loops
- Haskell, for the Haskell prelude
- Haskell, for annoying me with the difference between concise core syntax and non-concise typeclass syntax
- Haskell, for annoying me with debugging memory leaks with lazy evaluation
- Haskell, for annoying me with difficult-to-understand compiler messages
- Haskell, for annoying me with the difficulty of tracing type inference-caused errors to their root source
- Curry, for combining logic programming with other paradigms
- Haskell, for comment syntax using unshifted characters
- Aspect-oriented programming, for liberally sprinkled hooks, and the idea that exception handling should be done in 'margins'
This is not a complete list, there were other inspirations.
There's also some various stuff that i at least partially came up with myself and then later found that others had thought of similar things:
- Go also does everything-is-an-interface
- Clojure has mostly simple syntax but does have syntactic sugar for annotations, quoting, lambdas, some stuff related to function definitions, and some core data stuff