Welcome to the fifth issue of The Left Fold, a weekly programming article digest. Submissions for future issues are solicited.
Programming Languages
Closures in Java 7:
Sun has announced it intends to add closures to Java 7, primarily to support concurrency through the Fork Join framework. There is no concrete proposal yet. The announcer indicated mutable variables would not be captured, so this may end up just being anonymous functions or first-class methods.
This comes as a surprise to a number of commentators because Sun has not previously indicated a strong interest in adding the feature and because the likely implementation from Sun is not one of the several already proposed.
Scratch, Programming for Everyone: "the goal of Scratch is to get kids programming" by making reusable building blocks that can be combined in a GUI and making programming social. (LtU, reddit)
Programming Language Implementations
Factor: Mark-compact garbage collection for oldest generation, and other improvements: implementation details.
Mono: Compacting GC: an explication of a two-generation copying garbage collector (long).
GC, allocation, cache effects, immutables, numerics!: a discussion thread between JRuby and Clojure developers (amongst others) discussing JVM design decisions, future directions, and how they would impact dynamic languages using the JVM. (reddit)
Testing
- An Empirical Investigation into the Effectiveness of Assertions: quick summary of a Microsoft Research technical report that found more assertions meant fewer defects in Microsoft code. Read the conclusions from the paper starting on page six.
Hardware
Memory Barriers: a Hardware View for Software Hackers: an introduction to memory ordering constraints.
Quantum computing for everyone: why you can't give a simple explanation of how quantum computers work.
Algorithms and Theory
An Introduction to Communicating Sequential Processes: CSP is a formal language for concurrency and has been used most recently in the author's CHP library for Haskell and in Go.
Next permutation: a discussion of the smarts in C++'s std::next_permutation.
Miscellaneous
Out of Memory safety: why you probably shouldn't care about OOM conditions.
Compiling AVL trees into LLVM: JIT compilation of AVL trees into executable code, and the associated tradeoffs. (reddit)
The Pyramids and the Bazaar: a reflection on Eric Raymond's "The Cathedral and the Bazaar" and free software / open source development.