Book Image

Learning ClojureScript

By : W. David Jarvis, Allen Rohner
Book Image

Learning ClojureScript

By: W. David Jarvis, Allen Rohner

Overview of this book

Clojure is an expressive language that makes it possible to easily tackle complex software development challenges. Its bias toward interactive development has made it a powerful tool, enabling high developer productivity. In this book, you will first learn how to construct an interactive development experience for ClojureScript.. You will be guided through ClojureScript language concepts, looking at the basics first, then being introduced to advanced concepts such as functional programming or macro writing. After that, we elaborate on the subject of single page web applications, showcasing how to build a simple one, then covering different possible enhancements. We move on to study more advanced ClojureScript concepts, where you will be shown how to address some complex algorithmic cases. Finally, you'll learn about optional type-checking for your programs, how you can write portable code, test it, and put the advanced compilation mode of the Google Closure Compiler to good use.
Table of Contents (15 chapters)
Learning ClojureScript
Credits
Foreword
About the Authors
About the Reviewer
www.PacktPub.com
Preface

Concurrent design patterns using core.async


Like its host language, JavaScript, and its parent language, Clojure, ClojureScript has a rich set of concurrency-oriented design patterns that are available to developers by default. In ClojureScript's case, these design patterns are heavily event-driven as an asynchronous event/message queue is the default concurrency model of JavaScript. However, it also has access to CSP-style concurrency software design primitives and options through the use of the powerful core.async library, which has been available for both Clojure and ClojureScript since mid-2013.

In this section, we'll review what these different concurrency models look like and learn how we can use core.async to author programs that are easier to reason about at scale.

Before getting started with the examples in this section, you'll want to make sure you have two dependencies in your project.clj file (at the root directory of our experiment project).

The first, core.async, should already...