Dive Deeper — Type Theory and Distributed Programming Languages
General Ideas
- Learning Type Theory — a collection of resources
- Programming Language Theory (PLT, on Wikipedia)
- What can Programming Language Research Learn from the Philosophy of Science?
- Are we there yet? — talk from Rich Hickey
- Languages and Machines — blog entry from Robert Harper on lambda calculus, Turing machines, and functional vs imperative programming
- Concurrent by Default, Dependent Types
- Dan Ghica: Types: computation vs. interaction — Types facilitate composition, including that of modules.
- Scalable program architectures
- Strong consistency models — local copy saved on 18-May-2014
- Convergent and Commutative Replicated Data Types (CRDT) [shapiro_crdt]
- Readings in CRDTs — reading list from Christopher Meiklejohn
- What is declarative programming — an excerpt of the paradigm from the CTM book chapters 1–4
- Elixir and Concurrency
- Typestate-Oriented Programming [aldrich_typestate], or better: [garcia_typestate]
- 6 Programming Paradigms that will change how you think about coding
- Principle of Least Power — choose the least powerful technology that is still able to express your goals
- Future Of Programming Languages
- Language Ergonomics
- Paxos consensus protocol — includes many pointers to articles
- Linearity, Uniqueness, and Haskell — making linear types more accessible
- Effects bibliography — research papers dealing with computational effects
Category Theory
- Graphical Linear Algebra
- The category design pattern — category theory simply says that composition is ubiquitous
- Introduction to Categories and Categorical Logic [abramsky_categorytheory]
- Category Theory for Programmers — a book in progress by Bartosz Milewski
- Category Theory for Computer Science — draft (but extensive) course notes from the University of Calgary [cockett_ctcs]
- Foldable and Traversable
- Comonads are objects — very interesting point of view, especially the first part explaining the extender
- The State Comonad
- History of Free Applicative Functors: posts by Tom Ellis, Roman Cheplyaka, and Dave Menendez
Golang
- Why Go Is Not Good — a thorough overview of Go’s shortcomings, and why other languages are doing better in these aspects
- Introducing Go by example
- Go courses google-io-2012
- Russ Cox research: Gofmt, packages, abstractions
- Go function calls
- Go Parallelism CSP 2010.pdf
- Golang type system
- Go’s power is in emergent behavior
Rust
- A Rust Contributor Tries Their Hand at Go
- Why Rust?
- 30 minute introduction to Rust
- Rust Language Tutorial (PDF)
- Ownership in Rust: What to do with values that must not be copied.
- Concurrency Models, Rust, and Servo
- The Rust Tasks and Communication Guide
- Periodic table of Rust types
- Type inference in Rust
- 151-byte static Linux binary in Rust
- Substructural type system — Rust has affine types, corresponding to affine logic; cf linear types and linear temporal logic (LTL).
- Combining Rust and Haskell
- Using Haskell in Rust — with library curryrs to make that easier
Functional Programming
- Why functional programming did not catch on in the industry
- Learn Haskell in Y minutes
- Learn You a Haskell for Great Good!
- Introduction to Haskell (UPenn CIS194 Spring’13)
- Haskell Overview
- Intel Haskell/C comparison (PDF)
- Becoming Productive in Haskell
- Practical testing in Haskell — explains Tasty, HUnit, and QuickCheck and gives tips on integrating the components
- The algebra of algebraic data types
- A Tour Of Some Useful Recursive Types — a tour of Fix, Free and Cofree
- An Introduction to the Parsec Library
- 24 Days of GHC Extensions
- Existential types and data abstraction — article with some great insights, not really Haskell specific (also draws content from Pierce’s TAPL book and the Curry-Howard isomorphism)
- Existential type-curry — if you have ever wondered why Haskell has a
forall
keyword but noexists
keyword, this article gives you the solution based on the Curry-Howard isomorphism - Data.Typeable and Data.Data in Haskell
- What are type families?
- SSA-to-C Compiler in Haskell
- Write Yourself a Scheme in 48 Hours (in Haskell)
- Imperative Haskell
- Parallel programming in Haskell (read [marlow_partutorial] instead)
- Cooperative threads in 33 lines of Haskell Code
- Distributed actors in Clojure — Actor introduction by Hewitt
- Primitive Haskell
- How Lazy Evaluation Works in Haskell
- How Lazyness Works in Haskell (Haskell → Core → STG → C-- → Assembly)
- Hindley Milner in Clojure
- Monad Transformers FAQ (PDF)
- Gentle Introduction to Monad Transformers
- Wadler, Comprehending Monads [wadler_monads]
- Programming with Effects — good description of the state monad based on Graham Hutton’s monad tutorial lecture notes
- Haskell has no state monad because a non-trivial state monad does not exist
- Introduction to Reactive Programming (The one you have been missing)
- An introduction to reactive programming
- Breaking down FRP — an introduction to functional reactive programming (FRP) and self-adjusting computation (SAC); also see [acar_sac] and [bhatotia_ipds]
- OOP in OCaml — OOP is inherently imperative
- Haskell for OCaml programmers
- OCaml for Haskellers (2010)
- Stephen Diehl’s Dive into GHC: GHC Internals part 1, part 2, part 3
- GHC Illustrated (PDF, 117 pages)
- Edward Z. Yang’s 7-part comic series The Haskell Heap — read this if you are interested in GHC Core, thunk evaluation, or lazyness
Compiler Construction
Dataflow Programming
Further Reading
- Harper, Practical Foundations for Programming Languages [harper_proglang]
- Lee, The Problem with Threads [lee_threadsarticle]
- Finkel, Advanced Programming Language Design [finkel_apld]
- Levine, Linkers and Loaders [levine_linkersloaders]
- Brightwell and Wen, Advanced Parallel Programming Models Research and Development Opportunities [brightwell_parallelmodels]
- Pierce, Types and Programming Languages [pierce_tapl]
- Pierce, Foundational Calculi for Programming Languages [pierce_calculi]
- Van Roy and Haridi, Concepts, Techniques, and Models of Computer Programming [vanroy_ctm]
- Cardelli and Abadi, A Theory of Objects [cardelli_theoryofobjects]