Skip to content

Instantly share code, notes, and snippets.

@skull-squadron
Last active February 21, 2023 17:46
Show Gist options
  • Save skull-squadron/620ae560818228275d806fa8682801ed to your computer and use it in GitHub Desktop.
Save skull-squadron/620ae560818228275d806fa8682801ed to your computer and use it in GitHub Desktop.
Language design reading list

Reading list

  • Parsing with derivatives
  • Parser generators
    • ANTLR 4
    • The old guard of flex (lex) + bison (yacc), JavaCC + CUP
  • Data binding generators (the perils of code generation)
    • protoc
    • Prisma
  • Faster regex engines
  • Specific language (flame wars ensue)
    • Emerging
      • Pony (pdf) - Perhaps the best-engineered general GC on the planet in the form a capabilities sharing semantics language
      • V - Spirit of Go but safer, more general, more features, and faster compilation
      • Crystal - Ruby-ish but statically compiled
      • Dependent types with Idris and F*
      • Zig Compile-time functions (macroless), C++-compatible language
      • Carbon Google's C++-interop language
      • Vox D-interop language
    • Taking off
    • Took off
      • Go
    • Circling the airport
      • Ruby
      • Haskell
      • C++ pre-14
    • Never forget
      • Prolog
      • Erlang
      • FORTRAN 77
      • Fortran 90
      • Forth
      • Turbo Pascal
      • JDK 1.1 custom JNI .dll calling Win32 stuff (clutches pearls)
      • Pre ANSI C++

Prerequisite nomenclature glossary (or academic thieves' cant if you will)

  • Productions of terminals and nonterminals
  • NFAs, DFAs, and state machines
  • Venn nosology ;) of grammars (LL, LALR, CFG, not CFG)
  • Top-down vs. bottom-up
  • Syntax-directed translation
  • DIY recursive descent compilers
  • PEG
  • Scannerless parsing
  • Lexical vs. syntactic vs. semantic
  • Dataflow analysis
  • Data operation reordering and sharing hazards
  • Scoping rules
  • Heap liveness analysis (those lifetime variables Rust use as decision placeholders for malloc() and free())
  • Communicating sequential processes
  • Programming paradigms: imperative, functional, higher kinded, and metaprogramming
  • AST
  • IR
  • AST & IR transformation phases as stacked middleware

I once, circa 2012, had a recruiter arrogantly declare Go was a nothingburger. The sort of people who can't see beyond the next quarter's profit outlook have no business being in the business.

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