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-v6.diff

Related: CLJ-1424, TRDR-14

  1. conditional-compilation-clojurescript.diff
    19/Jul/12 9:11 AM
    8 kB
    Roman Scherer
  2. conditional-compilation-clojure.diff
    19/Jul/12 9:11 AM
    6 kB
    Roman Scherer
  3. cljs-27-v6.diff
    21/Jan/15 4:36 PM
    12 kB
    Alex Miller
  4. cljs-27-v5.diff
    07/Jan/15 12:28 PM
    11 kB
    Alex Miller
  5. cljs-27-v4.diff
    06/Jan/15 3:04 PM
    12 kB
    Alex Miller
  6. cljs-27-v3.diff
    07/Nov/14 10:55 AM
    10 kB
    Alex Miller
  7. cljs-27-v2.diff
    11/Sep/14 9:04 AM
    10 kB
    Alex Miller
  8. cljs-27.diff
    06/Aug/14 7:39 AM
    7 kB
    Alex Miller

Activity

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.
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 -

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 -

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 -

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
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
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
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 -

Fresh patch, switch to take .cljc files.

Show
Alex Miller added a comment - Fresh patch, switch to take .cljc files.
Hide
Alex Miller added a comment -

Freshened patch for current CLJS.

Show
Alex Miller added a comment - Freshened patch for current CLJS.
Hide
David Nolen added a comment -

Alex the freshened patch includes modifications to the compiler version dynamic var and compiler version fn. Can we remove these? Thanks!

Show
David Nolen added a comment - Alex the freshened patch includes modifications to the compiler version dynamic var and compiler version fn. Can we remove these? Thanks!
Hide
Alex Miller added a comment -

Yep, updated to -v5 patch.

Show
Alex Miller added a comment - Yep, updated to -v5 patch.
Hide
Alex Miller added a comment -

Updated to use new tools.reader patch and to remove the ability to dynamically set the features set. The active set of features can be set on startup and are held in the features var in the analyzer.

Show
Alex Miller added a comment - Updated to use new tools.reader patch and to remove the ability to dynamically set the features set. The active set of features can be set on startup and are held in the features var in the analyzer.

People

Vote (12)
Watch (10)

Dates

  • Created:
    Updated: