ClojureScript

Conditional compilation (or reading)

Details

  • Type: Enhancement Enhancement
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Patch:
    Code and Test
  • Approval:
    Vetted

Description

As people start trying to write libs that are portable between Clojure and ClojureScript they might need to have a bit of branching on target. N.B. supporting this means a change to Clojure, although it has general utility there as well.

Consider CL #+ #- reader macros - http://www.lispworks.com/documentation/lw50/CLHS/Body/02_dhq.htm

Patch: cljs-27.diff

Related: CLJ-1424, TRDR-14

  1. cljs-27.diff
    06/Aug/14 7:39 AM
    7 kB
    Alex Miller
  2. cljs-27-v2.diff
    11/Sep/14 9:04 AM
    10 kB
    Alex Miller
  3. conditional-compilation-clojure.diff
    19/Jul/12 9:11 AM
    6 kB
    Roman Scherer
  4. conditional-compilation-clojurescript.diff
    19/Jul/12 9:11 AM
    8 kB
    Roman Scherer

Activity

Hide
Alex Miller added a comment -

cljs-27-v2.diff adds ability to load .clj files as well as .cljs files when compiling.

Show
Alex Miller added a comment - cljs-27-v2.diff adds ability to load .clj files as well as .cljs files when compiling.
Hide
Alex Miller added a comment - - edited

Latest patch updates into current ClojureScript and use of tools.reader/tools.analyzer etc. The reader changes are all in the accompanying tools.reader patch in TRDR-14. This patch adds support to allow a new option "features" which is expected to be a set of keywords. build will inject :cljs into this set. The feature set is maintained in clojure.tools.reader/*features*. set! is enhanced to special-case an update to *features* in the code (presumably a rarely-used feature).

Because tools.reader needs the supporting patch, I left in several changes that pull in a new version of tools.reader - I don't actually expect those to be the correct versions but they are there as a reminder to update all of the proper places.

Show
Alex Miller added a comment - - edited Latest patch updates into current ClojureScript and use of tools.reader/tools.analyzer etc. The reader changes are all in the accompanying tools.reader patch in TRDR-14. This patch adds support to allow a new option "features" which is expected to be a set of keywords. build will inject :cljs into this set. The feature set is maintained in clojure.tools.reader/*features*. set! is enhanced to special-case an update to *features* in the code (presumably a rarely-used feature). Because tools.reader needs the supporting patch, I left in several changes that pull in a new version of tools.reader - I don't actually expect those to be the correct versions but they are there as a reminder to update all of the proper places.
Hide
Stuart Halloway added a comment -

Posting my comments over on the design page...

Show
Stuart Halloway added a comment - Posting my comments over on the design page...
Hide
Roman Scherer added a comment -

I started a design page for this ticket in the Clojure Dev wiki:
http://dev.clojure.org/display/design/Feature+Expressions

Show
Roman Scherer added a comment - I started a design page for this ticket in the Clojure Dev wiki: http://dev.clojure.org/display/design/Feature+Expressions
Hide
David Nolen added a comment -

If you've sent in your CA request permissions on the clojure-dev mailing list.

Show
David Nolen added a comment - If you've sent in your CA request permissions on the clojure-dev mailing list.
Hide
Roman Scherer added a comment -

Ok. If someone could give me write access to the Clojure Dev Wiki I would be happy to start such a design page.

Show
Roman Scherer added a comment - Ok. If someone could give me write access to the Clojure Dev Wiki I would be happy to start such a design page.
Hide
David Nolen added a comment -

This is an enhancement so it probably requires a design page and extended discussion before it will go anywhere. Until that happens I'm marking this is as low priority.

Show
David Nolen added a comment - This is an enhancement so it probably requires a design page and extended discussion before it will go anywhere. Until that happens I'm marking this is as low priority.
Hide
Roman Scherer added a comment -

The following patches include an implementation of Common Lisp's #+
and #- reader macros to allow conditional compilation/reading for
Clojure and ClojureScript.

The patches add a dynamic variable called features to the
clojure.core and cljs.core namespaces, that should contain the
supported features of the platform in question as keywords.

Unlike in Common Lisp, the variable is a Clojure set and not a list.
In Clojure the set contains at the moment the :clojure keyword, and in
ClojureScript the :clojurescript keyword.

I would like to get feedback on the names that are added to this
variable. Are those ok? Is :jvm for Clojure and :js for ClojureScript
better? Should ClojureScript add something like :rhino, :v8 or
:browser as well?

To run the ClojureScript tests, drop a JAR named "clojure.jar" that
has the Clojure patch applied into ClojureScript's lib directory.

Show
Roman Scherer added a comment - The following patches include an implementation of Common Lisp's #+ and #- reader macros to allow conditional compilation/reading for Clojure and ClojureScript. The patches add a dynamic variable called features to the clojure.core and cljs.core namespaces, that should contain the supported features of the platform in question as keywords. Unlike in Common Lisp, the variable is a Clojure set and not a list. In Clojure the set contains at the moment the :clojure keyword, and in ClojureScript the :clojurescript keyword. I would like to get feedback on the names that are added to this variable. Are those ok? Is :jvm for Clojure and :js for ClojureScript better? Should ClojureScript add something like :rhino, :v8 or :browser as well? To run the ClojureScript tests, drop a JAR named "clojure.jar" that has the Clojure patch applied into ClojureScript's lib directory.

People

Vote (10)
Watch (8)

Dates

  • Created:
    Updated: