Skip to content

Instantly share code, notes, and snippets.

@trietptm
Forked from P4/Your language sucks.md
Created October 7, 2020 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trietptm/f7078d9e5421911a8a8f85e78c9c0f8a to your computer and use it in GitHub Desktop.
Save trietptm/f7078d9e5421911a8a8f85e78c9c0f8a to your computer and use it in GitHub Desktop.
Your programming language sucks

You appear to be advocating a new...

  • Functional
  • Imperative
  • Object-oriented
  • Procedural
  • Stack-based
  • "Multi-paradigm"
  • Lazy
  • Eager
  • Statically-typed
  • Dynamically-typed
  • Pure
  • Impure
  • Non-hygienic
  • Visual
  • Beginner-friendly
  • Non-programmer-friendly
  • Completely incomprehensible

...programming language.

Your language will not work for the following reasons:

You appear to believe that:

  • Syntax is what makes programming difficult
  • Garbage collection is free
  • Computers have infinite memory
  • Nobody really needs:
    • Concurrency
    • A REPL
    • Debugger support
    • IDE support
    • I/O
    • To interact with code not written in your language
  • The entire world speaks 7-bit ASCII
  • Scaling up to large software projects will be easy
  • Convincing programmers to adopt a new language will be easy
  • Convincing programmers to adopt a language-specific IDE will be easy
  • Programmers love writing lots of boilerplate
  • Specifying behaviors as "undefined" means that programmers won't rely on them
  • "Spooky action at a distance" makes programming more fun

You don't appear to understand:

  • Basic optimization techniques
  • Basic systems programming
  • Pointers
  • Functions

Your language [(H)as/(L)acks/(O)ther/(U)nknown]:

  • Comprehensible syntax
  • Semicolons
  • Significant whitespace
  • Macros
  • Implicit type conversion
  • Explicit casting
  • Type inference
  • Goto
  • Exceptions
  • Closures
  • Tail recursion
  • Coroutines
  • Reflection
  • Subtyping
  • Multiple inheritance
  • Operator overloading
  • Algebraic datatypes
  • Recursive types
  • Polymorphic types
  • Covariant array typing
  • Monads
  • Dependent types
  • Infix operators
  • Nested comments
  • Multi-line strings
  • Regexes
  • Call-by:
    • Value
    • Name
    • Reference
    • CC

The following philosophical objections apply:

  • Programmers should not need to understand category theory to write "Hello, World!"
  • Programmers should not develop RSI from writing "Hello, World!"
  • The most significant program written in your language is its own compiler
  • The most significant program written in your language isn't even its own compiler
  • No language spec
  • The implementation is:
    • The spec
    • Closed-source
    • Covered by patents
    • Not owned by you
  • Your type system is unsound
  • Your language cannot be unambiguously parsed
    • A proof of same is attached
    • Invoking this proof crashes the compiler
  • The name of your language makes it impossible to find on Google
  • Interpreted languages will never be as fast as C
  • Compiled languages will never be "extensible"
  • Writing a compiler that understands English is AI-complete
  • Your language relies on an optimization which has never been shown possible
  • There are less than 100 programmers on Earth smart enough to use your language
  • ____________________________ takes exponential time
  • ____________________________ is known to be undecidable

Your implementation has the following flaws:

  • ____ do(es) not work that way:
    • CPUs
    • RAM
    • VMs
    • Compilers
  • Shift-reduce conflicts in parsing seem to be resolved using rand()
  • You require the compiler to be present at runtime
  • You require the language runtime to be present at compile-time
  • Your compiler errors are completely inscrutable
  • Dangerous behavior is only a warning
  • The compiler crashes if you look at it funny
  • The VM crashes if you look at it funny

Your marketing has the following problems:

  • Unsupported claims of:
    • Increased productivity
    • Greater "ease of use"
  • Obviously rigged benchmarks:
    • Graphics, simulation, or crypto benchmarks where your code just calls handwritten assembly through your FFI
    • String-processing benchmarks where you just call PCRE
    • Matrix-math benchmarks where you just call BLAS
  • Nobody really believes that your language is faster than:
    • assembly
    • C
    • FORTRAN
    • Java
    • Ruby
    • Prolog
  • Rejection of:
    • Orthodox programming-language theory without justification
    • Orthodox systems programming without justification
    • Orthodox algorithmic theory without justification
    • Basic computer science without justification

Taking the wider ecosystem into account, I would like to note that:

  • Your complex sample code would be far more compact in:
    • HASKELL
    • Python
    • Another language that out-shines yours
  • We already have a(n):
    • Unsafe imperative language
    • Safe imperative OO language
    • Safe statically-typed eager functional language
  • You have reinvented a worse version of:
    • Lisp
    • Javascript
    • Java
    • C++
    • PHP
    • Brainfuck, but non-ironically

In conclusion, this is what I think of you:

You have some interesting ideas, but this won't fly. This is a bad language, and you should feel bad for inventing it. Programming in this language is an adequate punishment for inventing it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment