Skip to content

Instantly share code, notes, and snippets.

@aclemmensen
Last active November 24, 2015 00:02
Show Gist options
  • Save aclemmensen/d14e5a4025300178c99d to your computer and use it in GitHub Desktop.
Save aclemmensen/d14e5a4025300178c99d to your computer and use it in GitHub Desktop.

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

Language

  • 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

Distributed systems

  • First class support, or strong libraries
  • Must support on-premises deployment
  • Resilient and self-healing
  • Strong debugging/tracing utilities
  • Optional: Reliable persistence technology

Drivers/libraries for external tools

  • Oracle
  • Kafka
  • Cassandra
  • Mongo
  • ElasticSearch
  • RabbitMQ
  • ZooKeeper

HTML parser

  • Based on recognized reference implementation
  • Robust and battle-tested
  • Performant
  • Supports CSS2+3 and jQuery-style CSS selectors

HTTP

  • Solid HTTP server(s), possibly part of the distribution
  • Web frameworks like Sinatra/Express/Nancy/Plug/Ring
  • Clients with streaming support

Deployment and ops

  • Support for hot-code reloading
  • Support for rolling upgrades
  • Easy to inspect, trace and debug
  • Runs on both Windows and Linux
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment