People keep implementing map, filter and other fundamental algorithms in different contexts - eagerly over collections, over lazy sequences, in parallel, over enumerables/iterables, over observables, over channels/streams etc. In addition to duplication of effort, this yields bloated APIs, and, when implemented in the classic way, often involves the creation of expensive intermediate objects/values that can be difficult to optimize away. Most problematic is that this approach keeps us from composing core algorithms in a context-independent way which would facilitate reuse and engender greater flexibility. This talk will describe transducers, a new library feature for Clojure (but of interest to other languages) that emphasizes composable, context-free, intermediate-free notions like 'mapping' and 'filtering' and their concrete reuse across all of the contexts above.

Related Talks

Making Games at Runtime with Clojure

Zach Oakes
38 minutes
Making Games at Runtime with ClojureGames are a modern art form, and like other artists, game designers need to experience their work as they create it. This talk will explore the benefits of making games "at runtime". Through both abstract discussion and concrete demonstration, we will see why Clojure is uniquely suited to the task. Zach ...

Clojure Library Core.async for Asynchronous Programming

Clojure Library Core.async for Asynchronous ProgrammingIn this talk, we hear from David Nolen from the New York Times about core.async, the new library for asynchronous programming in Clojure and ClojureScript. He'll be talking about Clojure, Communicating Sequential Processes & Responsive Design. This talk was recorded at the NY Clojure Users Group meetup at Two Sigma ...

The Functional Final Frontier

David Nolen
27 minutes
The Functional Final FrontierThe Model-View-Controller (MVC) approach to user interfaces was first proposed by Trygve Reenskaug in a 1979 Xerox PARC note. As Object Oriented methodologies gained popularity, MVC too gained traction as a natural and logical way to construct user interfaces despite obvious shortcomings. Even though OO researchers moved forward with alternative ...

Om Next

David Nolen
39 minutes
Om NextRationale and high level design of Om Next. About the speaker: David Nolen is a software engineer for Cognitect. He enjoys making music, writing JavaScript, writing ClojureScript, and exploring new approaches to user interface programming. ...

ClojureScript: Lisp's Revenge

David Nolen
32 minutes
ClojureScript: Lisp's RevengeMore than 55 years ago John McCarthy had an insanely great idea called Lisp. Lisp marked the beginning of functional programming, interpreters, high-level metaprogramming, garbage collection, and much more. Yet after such auspicious beginnings the idea of Lisp has since faded and many of its innovations have been adopted by ...

The Language of the System

Rich Hickey
an hour
The Language of the SystemRich Hickey compares value-oriented programming with place-oriented programming concluding that the time of imperative languages has passed and it is the time of functional programming. ...

Clojure Concurrency

Rich Hickey
3 hours
Clojure ConcurrencyA presentation by Rich Hickey to the Western Mass. Developers Group on Clojure and concurrency. Brief overview of Clojure, discussion of concurrency issues, locking, and immutabiity. In-depth look at Clojure's refs, transactions and agents. Demonstration and review of code for a multithreaded ant colony simulation.Be sure to grab the slides ...

Hammock Driven Development

Rich Hickey
40 minutes
Hammock Driven DevelopmentRich Hickey's second, "philosophical" talk at the first Clojure Conj, in Durham, North Carolina on October 23rd, 2010. Many thanks to Matt Courtney, who graciously provided the equipment and expertise that made this recording possible. ...

Immutability, interactivity & JavaScript

Immutability, interactivity & JavaScriptThis is a talk from Barcelona FutureJS 2014 ( Surprisingly the high performance mutation available in modern JavaScript engines is a great foundation for building high performance immutable collections. Even more surprisingly efficient immutable collections permit new ways of approaching user interface programming. While the details will be in Om, an ...

Transducers: from Clojure to C++

Juan Pedro BolĂ­var Puente
an hour
Transducers: from Clojure to C++Transducers allow to express transformations on sequential inputs (like std::transform, std::filter, most of boost::range::adators and more) in a way that is independent of the input source. They are simple high order functions agnostic of the notion of iterator or collection and can be combined by simple function composition. They can ...