Computer Science.

This is a collection of blog articles about misc computer science topics.

Practically though, this is 50% about re-wiring the brain to learn
functional programming (Haskell).

20200824 Futamura projections
20200712 Staging a flat description
20200406 Chunking coroutines
20200219 cache invalidation
20200125 cbuf.h
20200110 Freer monads and extensible effects
Having an Effect by Oleg Kiselyov
20200105 Sperber on CML
Wingo on CML
20200102 Incremental lambda calculus
Theory of events
20200101 Eventually consistent
20191223 Revisit: Twitter thread on "derivatives"
Erlang, CSP
20191222 OpenComRTOS
20191117 Reinventing lenses
20190815 Hierarchical state machines
20190614 Futamura projection
20190515 Folds for mutually recursive types
20190510 Path indexing vs. nested dictionaries
20190429 Lock free programming
20190327 Decision Tables
State machines, groups and geometry
20190326 Metamorphic testing
20190325 Is all state just cache?
What are services?
Fold with cons into queue
20190313 representing algebraic data types as folds
20190228 glue code
20190220 Processor vs. generated state machines
20190209 difference structures
20181209 transforming blocking code into state machines: Rust Async transform
20180904 Glue code isn't "dirty"
20180823 Effects
20180805 optimizer generators
20180712 Incremental Relational Lenses
20180701 Monoids
20180630 Idris
Circuit netlists: structural and semantic operations
20180628 A theorem in a context
20180627 Haskell graphs
Representing I/O
Pattern matching netlists
20180531 Tree to DB
20180505 Transactions, diffs, editable views, lenses
20180415 Presentation model from #{}
20180409 Equality is relative
20180304 Loops: MIMO
20180228 Embedding Erlang in Haskell
20180222 Foldee?
20180219 Hans meeting
20180106 bloom filters
20171230 haskell dsp
20171228 merging forks
20171226 category theory is type theory
contained vs. association
20171219 Transitioning
20171202 LALR parsers
Broadcast events are late binding
20171130 parsing
20171129 Are monads just sequential execution?
20171126 the real problem is integration
20171124 Fibers are not Threads
20171120 Functional vs. Idempotent
20171116 Unknowingly making the wrong assumptions
Treat things that are isomorphic as the same
20171110 Stream processing patterns
20171104 Dependent types and proofs
20171024 hans followup
20171023 source.erl vs unfold.erl
20171009 Re-inventing computing: no I/O
20170924 Why is cache invalidation so hard?
20170908 Twitter thread on "derivatives"
20170907 Trees vs. Paths: derivatives?
20170902 Trees vs. Paths
20170829 differentiating constructors
20170826 Declarative vs. OO
Paths: trees as flat key-value maps
20170825 Decarative vs OO
20170807 CCC Conal
20170717 Just put the constructors in a dictionary
20170715 Intersection between igen.erl and source.erl
20170711 definition control-dominates use
20170710 line assembler iteration pattern
20170705 Manual parser
6 Iteration structures
The most general I/O processor?
Parser combinators
recursive descent parsers
20170701 Code is data because of right fold
20170308 Extending timer capture values
20170306 State machines
State machine notation
Pi Calculus
20170221 Tree diffing
20170220 Nested folds and intermediate results
Sequences as Folds -> Fused Loops
20170211 GUIs: constraint vs. reactive
20170120 Make illegal states unrepresentable
20161231 Joscha Bach 4rth C3 lecture
20161207 event-driven systems
20161128 idempotency and desired state
20161125 Joe Armstrong & Alan Kay - Joe Armstrong interviews Alan Kay
device drivers
Eliminate the OS
20160829 TDM closed formulas and derivatives
Streams vs. coordinates (transposes)
Blocking tasks to state machines
20160825 Declarative distributed programming
20160820 Futures in Rust
20160708 why does printing code look so ugly?
20160605 unique identifiers
20160514 Distributed systems theory for the distributed systems engineer
20160428 CRDT: eventual consistency
20160324 A state machine language
20160322 Sequences vs. folds
20160226 USB and acks
20160223 LL,LR polish,reverese polish
20160212 Sequences as folds.
20151003 Ownership is Theft: Experiences Building an Embedded OS in Rust
20150905 CPS in Javascript
Two-object state?
20150812 Simplicity
20150718 LING: Erlang on bare metal
20150717 The How and Why of Fitting Things Together - Joe Armstrong
20150712 Reactive Programming
20150711 folds
20150102 Static actors
20141006 Mirage
20140928 LLVM haskell
State machines
20140920 The mess we're in
20140814 CoArbitary
20140627 State machine compiler
20140619 A rust project: blog database!
20140617 Qt Pyside layoutChanged recursion
20140525 Dynamic typing / eval and polymorphism
20140301 Data Direction and Control Flow: 2 x 2 = 4
20131229 Good Tech Blogs
20131213 Loop transformation algebra
20130921 Iterator Blocks
20130908 Objects are names for things you don't control
20130825 Salea Logic in Racket?
20130816 Tasks vs state machines
20130811 State machine translator - how to start?
20130806 Suspend / Resume syntax translation
20130804 State machine generator
20130803 MyHDL
20130802 State Machines
20130529 Computers for Cynics - Ted Nelson
20130510 Don't write a one-pass compiler
20130220 Love the Lambda
20130217 Promises
20130123 Ad-hoc polymorphism is higher order abstract syntax
20121225 ping-pong layouter in C
20121224 Problem with FP
Model-View-Controller vs. functional GUI
20120514 Representing self-delimiting numbers
Forth Direct vs. Indirect threading?
20120425 Params with defaults
20120423 Database (push vs. pull)
Resist structure
Compiling FRP to state machines
20120422 Real-world programming in Haskell
20120418 Maybe and monoid
Updateable state by name
20120416 Monad transformers
Just update state.
20120413 Stateful iteration (for / forM) or unfold?
20120408 Monoidal
Experimenting with Applicative
Applicative Functors
Duality: values <-> continuations
20120407 Applicative and Functor in terms of Monad
Reverse State monad
foldr from traverse + monad
Left/Right confusion in mapAccum
Are state space models Applicative?
Applicative and sequential operations
Data.Traversable vs. Data.Foldable
20120406 forM
Why are "stateful maps" not part of standard functions?
Equations for box layout
20120405 Interesting Recursion Patterns
20120403 Product of State and ST?
Imperative programming in Haskell
20120401 Node binding (equation solving) : sequential approach
20120326 Indexing binomial combinations
The ST monad
Compile time mutable operations
20120325 Evaluation of equation network
The usefulness of local state / working with graphs in Haskell
Adding arrows to a network
Pierce's lenses - Bidrectional programming
20120324 Invertible nodes constraint solver: limitations?
Invertibility through sparseness
Relational, Logic, Constraint: CTM
20120323 Constraint programming, layout & choreography
20120219 Monad transformers
20120218 Forking a random number generator?
Functor in terms of Arrow
State Space Models: Arrow and generalized functors.
Reader monad and order
20120126 State machines / parallellism and resource allocation
20120125 State machines
20120111 Register Allocation
20111231 Mapping trees to integers
20111227 Functors
20111218 Continuation Monad & compilation
20111215 Composite return values in C
20111210 Condition Variables are not Semaphores
20111115 Elementary function evaluation
20111111 Integer Programming
20111107 Lifting & subclassing
20111102 Relational Databases
20111101 Ad-hoc syntax design
Edge filtering for Interrupt On Change
Generalized Arrows
20111031 DB normalization
Cross Stage Persistence
20111030 Continuations
20111028 Type Scoping
Functional Dependencies
20111027 Sussman: We Really Dont Know How To Compute
Invertible Functor?
20111026 OverlappingInstances, IncoherentInstances
20111025 Zipper: data structure derivatives.
20111024 Monad transformers
20111015 Functional Dependencies and Undecidable Instances
20111013 Types
Lifting pure functions to dataflow functions
20111009 CBN & CBV
Haskell overlapping type class instances
20111007 Apply pure function in monad
Learning Haskell
20111004 Function arity
20111002 Inductive inputs / outputs
20110924 Embedded patterns and translation
20110923 Minimal erase binary counter for Flash memory
20110920 Protocol-oriented programming (part 2)
20110910 Logic
State Space model vs. Mealy Machine
a -> M b vs. M a -> M b
20110902 Cover Condition
20110830 Needing GHC extensions
20110829 The Essence of Functional Programming
20110826 The List Monad - Generate and Test
Haskell tuples vs. lists
Streams with extra input.
Are recursive signal processors applicative?
20110825 Stream transformers
Learning Haskell
Streams and the Reader Monad
Eliminating Existentials
20110822 Concatenarrow
>>= vs. >=>
20110821 Numeric Prelude
From Applicative to Num
ArrowApply and ArrowMonad
20110820 Existential Monad problem: solved!
20110818 Existential types
20110816 Monad from Kleisli Arrow
Kleisli arrows
20110815 From Applicative to Monad
The Haskell Learning Curve
20110814 Existential types
Arrow = Applicative + Category
Applicative Transformers
QuickCheck as an API design guide
20110808 Flattening expressions using liftM2
Type-level computations / meta systems
20110807 SSA vs CPS
20110806 Generalized Algebraic Data Types
Phantom types
20110804 initial / final
Lambda or struct?
20110802 CPS vs SSA
Awesome Prelude
20110801 do notation algebra
20110724 Learning Haskell
20110723 Composing monads
Monad is a type class
Monads and evaluation order
20110722 Getting used to Monads
20110716 A letter to a C programmer
20110710 Referential transparency and object identity
20110616 intension / extension
20110614 Fault-tolerant, stateful code
20110522 Simple checksums
20110509 Haskell: functions vs. structures
20110505 Object Identity
20110427 Low-level C : Exceptions or error codes?
20110423 Protocol-oriented programming
20110415 Reforestation
20110409 Parser-oriented programming
20110406 0,1,2 stacks : 3 kinds of programming?
20110330 Filling in gaps
20110302 Merging
20110212 Functional Programming is Fantastic
20110114 Understanding Referential Transparency
20101202 Representation of impedance/admittance duality
Algebraic Datatypes
20101026 fexprs
20101019 Pure functional programming and object identity
20101010 Refactorer: dependency graph visualisation
20101008 Real Time GC
Pointer Reversal for Graph Traverse
20100927 Values and Transitions
20100925 void events
20100919 Mark-sweep GC
Always-on / Image-based computing
20100918 Treasure trove: Faré Rideau's pointers
20100826 Graphs without mutation
20100814 Coroutines
20100812 Condition variable vs. semaphore
20100807 Models of dataflow
20100805 What does that mean? -- Denotational semantics
20100511 S K combinators and the Reader monad
20100510 Tree Grafting (Monads)
Syntax directed vs. Semantics directed (fold vs. monad)
20100508 Left folds in Haskell
State monad with unit output
Map + state threading.
Data Parallel Haskell
20100506 Memoizing (==) in Haskell
20100504 Object identity in Haskell
20100425 Polymorphy & Functors (lifting)
20100418 Clock Calculus
Stream Fusion
20100417 Abstract Machines and Semantics
Lambda Calculus for Electrical Engineers
Functional Reactive Programming
20100411 Databases and Normalization
GUIs and modules
20100408 A History of Haskell: Being Lazy with Class
20100328 Bottom up vs. Top down
20100327 Functional programs / stateful debugging
Computation (pattern matching) vs. types
20100323 Clojure
20100319 The Arbiter Problem
20100317 Hardware Mapping
Mathematical Logic and Compilation
20100314 Ziggurat
20100313 State breaks composition
20100307 Writing compilers
System F vs. Hindley–Milner
Simply Typed LC is Strongly Normalizing
20100303 The Actor model is not composable
20100224 Applicative programming with effects.
20100222 How to explain Monads
20100218 Generalized Algebraic Data Type (GADT)
20100217 Typeful symbolic differentiation of compiled functions
20100214 Haskell pointer equality
20100213 Recursion and Co-recursion for filters (s,a) -> (s,b) on a list [a]
Name my recursion pattern
20100130 Open, extensible object models
20100125 Scheme compilers
Indulge yourself: Scheme literature
Type aliases for Java Generics
Higher order functions in Java
Representing control: a study of the CPS transformation.
20100124 Convert a static library to a shared library
20100123 Relational lenses and partial evaluation (generating VMs)
20100122 Common expression elimination
20100119 Functional programming with GNU Make
20100115 Can functional programming be liberated from the von Neumann paradigm?
20100113 Beautiful differentiation
20100112 Recursive make Considered Harmful
20100110 Applicative Functor
20100109 Avi Bryant: Don't build stuff for developers
20100105 Java and CPS vs callbacks.
20100103 Two kinds of optimizations
20091221 Peter Landin
20091109 LL and LR parsing vs. binary protocol design
20091027 Language oriented development
20091024 Linearizability
20091014 Java vs. Other
20091012 OpenComRTOS
20091009 Componend Based Software Engineering
20091007 Linear types
Coq & Dependent types
20091004 Signal Processing Functions, Algorithms and Smurfs: The Need for Declarativity
The Two Towers.
20091003 Formal methods
20090927 Logic
20090925 Pico
20090924 Scheme implementation
Recent Scheme papers from NU
20090923 FISh & Squigol
Staging & Typing
20090922 Constraint Programming from CTM Chap. 12
20090921 Partial Evaluation for the Lambda Calculus
Dynamic Programming
Understanding Expression Simplification
The Design and Implementation of Typed Scheme
20090920 Theorems for free!
DSLs as compiler hints
Software pipelining: An effective scheduling technique for VLIW machines
Galois Connection
Algebra of Programming
20090918 Controlling Effects
Sparse Conditional Constant Propagation
20090915 Proof Assistants / Constructive Analysis
20090914 Delimited Continuations and Staging
20090913 CPS vs. A-normal form
Control-Flow Analysis of Higher-Order Languages (Shivers)
20090911 Staging Control Flow
Bananas, Lenses, Envelopes and Barbed Wire
20090909 Environment / Continuation vs. Param stack / Return stack
Towards the best collection traversal interface
20090907 APL & J
20090906 Monads vs. delimited control
20090903 Local consistency
Metaprogramming Patterns
Types vs. Staging vs. Abstract Interpretation
20090831 Syntax vs. Semantics
Stackless Extensional Joy
Recent discussions with Dominikus about Concatenative Languages
20090830 Dynamic vs. Static Types
Dependent Types
Proof Calculus
Linear Type Systems
Linear Lisp and Uniqueness Types
20090828 Monads and shift/reset
Partial Continuations
Parser Combinators
20090827 Monad transformers / Arrows
20090824 Eager rewriting vs. ``something more general''
20090823 Tagless Interpreters
20090817 Concurrency
20090816 Finalizers
20090803 EWD concurrency
Task-based C interface
Engine vs. Coroutines
20090802 Connected Ideas
Managing External Resources
20090716 Constraint Programming
Small-step vs. Big-step operational semantics
20090715 Partial Evaluation
20090709 64bit
20090618 GC and Cache
20090615 Goodbye Smalltalk?
Filesystems as Graphs
Cached Continuations and Synchronized VMs
20090605 Stacks
20090504 The 2 x 2 of functional programming.
Futamura Projections
invertable data structure pack/unpack
20090408 Evaluation Strategies or Lambda Calculi?
20090403 CTM
20090322 data - codata
20090310 coroutines and "join"
20090227 YACC
20090216 Parsing and Automata