anchor.diff:  
   == Namespaces
   
  -Namespaces are the other big pain point for sharing code between Clojure and ClojureScript. ClojureScript has different syntax for https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure#lisp[requiring macros] than Clojure. To use these macros in a `.cljc` file, you'll need Reader Conditionals in the namespace declaration.
  -
  -https://github.com/VesaKarvonen[Vesa Karvonen] has a https://github.com/VesaKarvonen/poc.cml/blob/6c80c55aa16ab1253ad3e85705b5360fbed73f7e/src/poc/cml/sem.cljc[neat trick] for this, taking advantage of the fact you can have multiple `:require`'s in one Clojure ns form. **N.B.: ClojureScript ns forms can only have one `:require` in them.**
  -
  -[source,clojure]
  -----
  -(ns poc.cml.sem
  -  (#?(:clj :require :cljs :require-macros)
  -    [poc.cml.macros :refer [go sync!]])
  -  (:require
  -    [poc.cml :refer [choose wrap]]
  -    [poc.cml.util :refer [chan on put!]]))
  -----
  -
  -Here is a larger example showing more conventional usage from a https://github.com/lymingtonprecision/route-ccrs/blob/c579aea05504736f2cfbd31c3c755f7e25fdad77/test/route_ccrs/schema/ids/part_no_test.cljc[test] in https://github.com/lymingtonprecision/route-ccrs[route-ccrs]
  +Namespaces are the other big pain point for sharing code between Clojure and ClojureScript. ClojureScript has different syntax for https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure#lisp[requiring macros] than Clojure. To use macros that work in both Clojure and ClojureScript in a `.cljc` file, you'll need Reader Conditionals in the namespace declaration.
  +
  +Here is an example from a https://github.com/lymingtonprecision/route-ccrs/blob/c579aea05504736f2cfbd31c3c755f7e25fdad77/test/route_ccrs/schema/ids/part_no_test.cljc[test] in https://github.com/lymingtonprecision/route-ccrs[route-ccrs]
   
   [source,clojure]
   ----
  
positive.code:   (:require #?(:clj  [clojure.test :refer :all]
                 :cljs [cljs.test :refer-macros [is]])
              #?(:cljs [cljs.test.check :refer [quick-check]])
              #?(:clj  [clojure.test.check.clojure-test :refer [defspec]]
                 :cljs [cljs.test.check.cljs-test :refer-macros [defspec]])
              #?(:clj  [clojure.test.check.properties :as prop]
                 :cljs [cljs.test.check.properties :as prop
                         :include-macros true])
              [schema.core :as schema :refer [check]]
              [route-ccrs.schema.ids :refer [PartNo]]
              [route-ccrs.generators.part-no
               :refer [gen-part-no gen-invalid-part-no]]))
  ----
  
  In this example, we want to be able to use the `rethinkdb.query` namespace in Clojure and ClojureScript. However we can't load the required `rethinkdb.net` in ClojureScript as it uses Java sockets to communicate with the database. Instead we use a reader conditional so it's only required when read by Clojure programs.
  
  [source,clojure]
  ----
  (ns rethinkdb.query
    (:require [clojure.walk :refer [postwalk postwalk-replace]]
              [rethinkdb.query-builder :as qb :refer [term parse-term]]
              #?(:clj [rethinkdb.net :as net])))
  
  ;; snip...
  
negative.code: 
  == Exception handling
  
  Exception handling is another area that benefits from reader conditionals. ClojureScript supports `(catch :default)` to catch everything, however you will often still want to handle host specific exceptions. Here's an https://github.com/runexec/lemon-disc/blob/c24c6638f1d476a0f5470387e52a2b702117c4a9/src/lemon_disc/core.cljc#L65-L72[example] from https://github.com/runexec/lemon-disc[lemon-disc].
  
  [source,clojure]
  ----
  