I'm compiling a list of the things I'd like to see in a programming language and its surrounding environment. I'm not expecting to find one language that ticks all the boxes, but I'm hoping for one that will tick quite a few.
I have experience with the following:
- C#
- Clojure
- Go
- Racket
- Elixir
- PHP
- JavaScript
- Java
- F#
I would like to try:
- Haskell
- Elm
- LFE
- Scala
- Nim
- Lua
- CL
- Rust
- Pattern matching
- Very concise way of writing methods
- Reduces the need for formal structures/types
- Efficient
- Safe
- Immutability & value equality
- Strongly typed
- At least type annotations that can be analyzed statically
- Should have type inference to reduce verbosity
- Should support generics or traits
- Should have reflection to allow for metaprogramming
- Real parallelism and concurrency
- Not like Racket
- Not like most scripting languages
- Solid tooling for streams and lazy data structures
- Functional mindset
- LINQ/Rx
- map/reduce/filter
- Great dependency management
- Supports repeatable builds
- No need to vendor everything
- No need for dependencies in environment (Ruby/Python/Perl/PHP)
- Optional: Dependencies in source form
- Makes debugging much, much easier
- Easier to tweak external dependencies and fix bugs
- Optional: Compile/package to single deployable artifact
- No dependence on environment when deploying
- Shouldn't take up 100s of MBs for self-contained binary + dependencies
- Optional: Macros
- Allows developer to patch up the language
- Can be very concise
- Optional: CSP style parallelism
- Go's channels
- Clojure's core.async
- Optional: Message passing
- Optional: Fast compiler
- Optional: REPL
- Optional: Strong editor/IDE support
- Optional: A real debugger
- Optional: Cross-platform
- Optional: Supports in-code documentation for generating docs
- First class support, or strong libraries
- Must support on-premises deployment
- Resilient and self-healing
- Strong debugging/tracing utilities
- Optional: Reliable persistence technology
- Oracle
- Kafka
- Cassandra
- Mongo
- ElasticSearch
- RabbitMQ
- ZooKeeper
- Based on recognized reference implementation
- Robust and battle-tested
- Performant
- Supports CSS2+3 and jQuery-style CSS selectors
- Solid HTTP server(s), possibly part of the distribution
- Web frameworks like Sinatra/Express/Nancy/Plug/Ring
- Clients with streaming support
- Support for hot-code reloading
- Support for rolling upgrades
- Easy to inspect, trace and debug
- Runs on both Windows and Linux