<< Back to previous view

[CLJS-22] closures act like js not clojure Created: 19/Jul/20  Updated: 22/Jul/11  Resolved: 22/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Blocker
Reporter: Anonymous Assignee: Rich Hickey
Resolution: Completed Votes: 0
Labels: None


 Description   

(loop [i 0 j ()]
(if (< i 5)
(recur (inc i) (conj j (fn [] i)))
(map #(%) j)))

In Clojure, this returns: `(4 3 2 1 0)`

In ClojureScript it returns: `(5 5 5 5 5)`

Imported from github issue #85



 Comments   
Comment by Chouser [ 19/Jul/20 12:00 AM ]

Comment by richhickey, Tue Jul 19 14:41:05 2011:

in loops

Comment by Chouser [ 19/Jul/20 12:00 AM ]

Comment by Chouser, Tue Jul 19 18:50:18 2011:

Claggett and I wrote a patch, producing this for the snippet above:

(function (){
var G__1061,repeat1054;
var i__10521055 = 0;
var j__10531056 = cljs.core.List.EMPTY;
var G_1060 = function(i1052,j_1053){
repeat1054 = false;
cljs.user.PLUS.call(null,55);
if(cljs.core.truth_(cljs.user.LT.call(null,i__1052,5)))
{
{
repeat1054 = true;
i_10521055 = cljs.user.inc.call(null,i_1052);
j__10531056 = cljs.user.conj.call(
null,j__1053, (function (){ return i__1052; }));
}
}
else
{
return cljs.user.map.call(
null,(function (p1_1049_SHARP){ return p1__1049_SHARP_.call(null); }),j__1053);
}
};
do{G__1061 = G__1060(i__10521055,j__10531056)}while(repeat1054);
return G__1061;
})()





[CLJS-23] Inconsistent munging of namespaces with dashes Created: 19/Jul/20  Updated: 28/Jul/11  Resolved: 28/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Brenton Ashworth
Resolution: Completed Votes: 0
Labels: None

Approval: Screened

 Description   

When creating a file with a namespace like `foo.bar-baz` the compiled file will have a dash in the `goog.provide` but then use underscores within the code.

goog.provide('foo.bar-baz');
foo.bar_baz.something = ....

When requiring this namespace in another file the `goog.require` and the code both use dashes.

goog.require('foo.bar-baz');
var x = foo.bar-baz.something();

Assuming that file names must use underscores instead of dashes, as in Clojure on the JVM, there is a related issue in the `cljs.closure` namespace where it incorrectly creates file names from namespaces with dashes. The first line in the let form of the `get-compiled-cljs` function is the problem and can be replaced with a call to something like:

```clj
(defn ns->file-name [s]
(let [ns (name s)
path (string/replace (munge ns) \. java.io.File/separatorChar)]
(str path ".cljs")))
```

Imported from github issue #86



 Comments   
Comment by Brenton Ashworth [ 25/Jul/11 7:28 AM ]

I think this is fixed.

Munge emitted var names and emitted names in goog.provide and goog.require.

https://github.com/clojure/clojurescript/commit/389b7289391413104574a5f4c4d94d01098abf8d

Create the correct file name for namespaces with dashes.

Munge the namespace names which are output to a dependency file.

Fix the get-compiled-cljs function so that it will only compile files on the classpath. The purpose of get-compiled-cljs is to compile ClojureScript dependencies. All ClojureScript dependencies should be on the classpath. Compiled files are stored in the output directory. If a file exists in the output directory then it will not be compiled but will instead be read from that location. Before this fix, compiled files from the user's project were being read from the output directory by this function. When dashes were used in the namespace this caused duplicates to appear in the final list of files which is sent to the Closure compiler. In the new version, get-compiled-cljs will only be passed files which are on the classpath.

https://github.com/clojure/clojurescript/commit/184e6d838326be9895434a3517b34742cffba0c4





[CLJS-21] implement memoize Created: 18/Jul/20  Updated: 25/Jul/11  Resolved: 25/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Frank Failla
Resolution: Completed Votes: 0
Labels: None


 Description   

Imported from github issue #84



 Comments   
Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by ffailla, Mon Jul 18 14:32:00 2011:

also implemented rand so that i can test memoize. changes are on the 84-memoize branch





[CLJS-20] Implement rem, mod, quot Created: 18/Jul/20  Updated: 28/Jul/11  Resolved: 28/Jul/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Devin Walters
Resolution: Completed Votes: 0
Labels: None


 Description   

rem, mod, and quot might be useful for the demo app.

Imported from github issue #83



 Comments   
Comment by Devin Walters [ 28/Jul/11 12:52 PM ]

rem, mod, and quot are all present in core.cljs and have adequate tests around them.





[CLJS-17] move to public clojure org repo Created: 15/Jul/20  Updated: 22/Jul/11  Resolved: 22/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect
Reporter: Anonymous Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None


 Description   

Clone current repo. Needs to be live with talk Wed night

Will wiki and other things move automatically?

Imported from github issue #70



 Comments   
Comment by Chouser [ 15/Jul/20 12:00 AM ]

release-night





[CLJS-19] Record Wednesdays talk Created: 15/Jul/20  Updated: 22/Jul/11  Resolved: 22/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect
Reporter: Anonymous Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None


 Description   

Bring in Zi8, charger, tripod(s), and extra storage

Imported from github issue #74



 Comments   
Comment by Chouser [ 15/Jul/20 12:00 AM ]

release-night





[CLJS-18] Live Stream Talk Created: 15/Jul/20  Updated: 22/Jul/11  Resolved: 22/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect
Reporter: Anonymous Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None


 Description   
  • Bring an HD webcam to ClojureNYC meeting
  • Live stream Rich's talk

Imported from github issue #73



 Comments   
Comment by Chouser [ 15/Jul/20 12:00 AM ]

Comment by alandipert, Fri Jul 15 06:44:16 2011:

This is where the live stream will be: http://www.ustream.tv/channel/clojurenyc

Comment by Chouser [ 15/Jul/20 12:00 AM ]

release-night





[CLJS-15] compare, comparator, sort, sort-by Created: 14/Jul/20  Updated: 29/Jul/11  Resolved: 29/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Stuart Halloway Assignee: Stuart Halloway
Resolution: Completed Votes: 0
Labels: None

Approval: Ok

 Description   

Imported from github issue #68



 Comments   
Comment by Chouser [ 15/Jul/20 12:00 AM ]

Comment by stuarthalloway, Thu Jul 14 10:20:05 2011:

Review requested. Please see https://github.com/relevance/clojurescript/wiki/Comparators for explanation of the approach I took.





[CLJS-16] amap, areduce, aclone, into-array, make-array, object-array, to-array-2d Created: 14/Jul/20  Updated: 21/Apr/12  Resolved: 21/Apr/12

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Fogus
Resolution: Completed Votes: 0
Labels: None


 Description   

Implement the valid array functions.

Imported from github issue #69



 Comments   
Comment by David Nolen [ 04/Apr/12 9:54 PM ]

Quite a few of these are done. Is there a reason we want to implement object-array or make-array?

Comment by David Nolen [ 21/Apr/12 11:31 AM ]

fixed, https://github.com/clojure/clojurescript/commit/0b7d04bad801f49db9a7c3bf3004184c07fe6843





[CLJS-14] (quot) Created: 13/Jul/20  Updated: 22/Jul/11  Resolved: 22/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None


 Description   

Implement (quot)

Imported from github issue #67



 Comments   
Comment by Devin Walters [ 22/Jul/11 8:27 AM ]

See: http://dev.clojure.org/jira/browse/CLJS-20





[CLJS-12] Implement delays Created: 12/Jul/20  Updated: 28/Jul/11  Resolved: 28/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Frank Failla
Resolution: Completed Votes: 0
Labels: None


 Description   

The implementation of Delay objects, the `delay` macro, and the `delay?` predicate (probably a good excuse to implement `realized?` also, but probably as part of a different ticket) should be fairly straight-forward to implement.

Imported from github issue #65



 Comments   
Comment by Chouser [ 16/Jul/20 12:00 AM ]

Comment by ffailla, Fri Jul 15 06:16:20 2011:

i'll take a stab at this.

Comment by Chouser [ 16/Jul/20 12:00 AM ]

Comment by ffailla, Fri Jul 15 06:31:45 2011:

I have an implementation of this in the 65-delay branch. Can someone please review before I merge into master.

Comment by Chouser [ 16/Jul/20 12:00 AM ]

Comment by ffailla, Fri Jul 15 19:57:34 2011:

Implemented realized? via an IRealized protocol as well. Also in this branch

Comment by Chouser [ 16/Jul/20 12:00 AM ]

Comment by ffailla, Sat Jul 16 07:33:01 2011:

merged into master





[CLJS-13] Implement ratios Created: 12/Jul/20  Updated: 03/Sep/12

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Stuart Halloway Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Clojure.java contains support for Ratio types. It would be nice to have them in Clojurescript as well, but as far as I can tell this would be new development (please comment if I'm wrong). That is, there is no implementation of Ratio types in GClosure so this feature would need to be implemented from the ground up. In additional to the Ratio type, the following corresponding functions would also need implementations:

  • `ratio?`
  • `numerator`
  • `denominator`
  • `rationalize`

Plus the ratio type would need to be rolled into the existing mathematical frameworkings.

Imported from github issue #66



 Comments   
Comment by David Nolen [ 10/Oct/11 10:12 PM ]

What approach do you envision here given that we can't reliably detect integers in JavaScript?

Comment by Brandon Bloom [ 03/Sep/12 3:30 PM ]

See CLJS-370 for more reliable integer detection





[CLJS-10] Supported Closure Compiler options Created: 08/Jul/20  Updated: 16/Sep/11  Resolved: 16/Sep/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Anonymous Assignee: Brenton Ashworth
Resolution: Completed Votes: 0
Labels: None

Attachments: Text File 0001-CLJS10.patch     Text File 0002-CLJS10.patch    

 Description   

Currently the interface to the Closure compiler in cljs.closure supports only two compiler options:

  • optimizations
  • pretty-print

From the repl it looks like this:

(-compile '(defn add-one [x] (inc x)) {:optimizations :advanced :flags #{:pretty-print}})

Do we want to support all options are just a subset?

Whatever we decide to support, said support will need to be added to cljs.closure.

See:

https://github.com/relevance/clojurescript/blob/master/src/clj/cljs/closure.clj#L110
http://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/javascript/jscomp/CommandLineRunner.java
http://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/javascript/jscomp/CompilerOptions.java

    1. Externs

Currently all default externs are loaded. If we decide to go with a subset of options we may want to follow the lead of CommandLineRunner and allow an option to provide custom externs and one to only use the custom externs.

Imported from github issue #62



 Comments   
Comment by Rich Hickey [ 22/Jul/11 7:03 AM ]

May be needed for #cljs-25

Comment by Alen Ribic [ 24/Aug/11 5:17 AM ]

I've attached two patch versions for Externs support, one that includes support for directory paths `0001-CLJS10.patch` and another, simpler, version `0002-CLJS10.patch` that has support for only js source file paths. Version 0001 could maybe do with some cleanup if necessary in the letfn form section.

Noteworthy:

  • Supported options: `externs`, `use-only-custom-externs`, `target`
  • The java.io.FileNotFoundException is thrown implicitly via the call to js-source-file when js source file does not exist
  • Single js source file paths as well as directories are supported
  • Supports only absolute paths and not relative (context class-loader based) paths. (The thought is that classpath is for defaults and special extern files provided by ClojureScript)
Comment by Brenton Ashworth [ 14/Sep/11 3:41 PM ]

I have applied this patch to the externs branch. If I hear no objections, I will merge this change into master later this week or early next week.

Thanks for the patch.

Comment by John Li [ 14/Sep/11 5:17 PM ]

I just tested with the original repo, and it works for me. Whoo!

Comment by Brenton Ashworth [ 16/Sep/11 8:31 AM ]

Support for externs has been added. There are many other options we can support. I will close this issue and we can add new issues when we believe an additional option should be added.





[CLJS-11] Command line build tool Created: 08/Jul/20  Updated: 29/Nov/11  Resolved: 16/Sep/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Stuart Halloway Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None


 Description   

First, do we want one? Now that we can build from the repl with cljs.closure/build, do we want to provide a command line tool? Build time will be much faster from the repl as there is no JVM startup time and only a one time loading of resources (which is significant).

If we do want one then will it be a bash script or a main class that we package in a jar? In either case we will have to make something to convert command line args into a Clojure map of options.

Imported from github issue #63



 Comments   
Comment by Brenton Ashworth [ 16/Sep/11 8:43 AM ]

We have a command-line build tool. Create specific issues for improvements to this tool.

Comment by Benjamin Conlan [ 29/Nov/11 6:30 AM ]

nailgun solves the jvm loading issue. I have successfully used it in an ad hoc way to compile my project on change (while mingling rake and livereload) into the mix.

Here is the gist of it: https://gist.github.com/1399995

It is by no means a perfect solution but might help in identifying some ways to solve problems or do things better (ie a way to have closure's require tree updated incrementally).

Comment by Chouser [ 09/Jul/20 12:00 AM ]

Comment by bobby, Fri Jul 8 11:54:30 2011:

Could this be a good use-case for cljs as a scripting language? I have not thought it through more than asking the question, but it seems worth asking.

Comment by Chouser [ 09/Jul/20 12:00 AM ]

Comment by brentonashworth, Fri Jul 8 13:16:52 2011:

Issue #52 has to do with shebang style scripting which is a little more involved and could make use of a command-line build tool. But yes, this could be used to do "scripting" in the same way you would in C or Haskell. i.e. compile source to a fast running executable.

It may be worth considering adding an output option to cljs.closure/build that produces JavaScript which is runnable from the command-line.

Comment by Chouser [ 09/Jul/20 12:00 AM ]

Comment by bobby, Fri Jul 8 20:18:08 2011:

I was thinking more that the build script itself would be implemented in cljs as the scripting language, rather than bash/make/java -jar/whathaveyou. Thoughts? Possible?

Comment by Chouser [ 09/Jul/20 12:00 AM ]

Comment by Chouser, Sat Jul 9 19:55:53 2011:

Are you talking about writing the compiler in ClojureScript instead of Clojure so that it can be started up more quickly? Rich said that's a non-goal, at least for now.

Comment by Chouser [ 09/Jul/20 12:00 AM ]

Comment by bobby, Sat Jul 9 20:10:56 2011:

No, the compiler would stay in Clojure. I was thinking more in the way of a small build DSL written in ClojureScript that would lash all of the build steps together for cljs projects, a la Leiningen. One of the tasks/targets would be compile, and the cljs script would call out to the compiler to do its thing, but then other tasks would be to combine the various compiled scripts into a single JavaScript, running the optimizer on it, gzipping, etc. I was mostly suggesting that instead of using bash, we use ClojureScript to do the things bash would have done, leaving the rest of the infrastructure in place. Again, I don't know if this is possible yet, as I've just jumped in the past week or so, but doing so might help support our case that ClojureScript can be a viable command-line scripting tool.





[CLJS-8] clojure.string Created: 01/Jul/20  Updated: 06/Aug/11  Resolved: 06/Aug/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Stuart Halloway Assignee: Brenton Ashworth
Resolution: Completed Votes: 0
Labels: None

Attachments: Text File 0001-clojure.string.reverse-Use-a-native-idiomatic-JavaSc.patch    

 Description   

Port clojure.string to cljs

Imported from github issue #47



 Comments   
Comment by Brenton Ashworth [ 01/Aug/11 12:04 PM ]

All functions have implementations. Added string tests from JVM Clojure plus some new tests. All tests pass in advanced mode.

Clojure.string needs a code review. Also, nil handling is not being tested and may not work the same way as JVM Clojure. This still needs to be investigated.

Comment by Jürgen Hötzel [ 03/Aug/11 10:38 AM ]

replace can leverage native JavaScript instead of doing a Reimplementation in Clojure (Patch enclosed).

I just did some profiling using Google Chrome (reversing 50000 long strings):
Performance improved from 3 to 0.5 seconds.

Comment by Brenton Ashworth [ 06/Aug/11 9:40 AM ]

Jürgen,

Thank you for looking into this and for the patch. However, we can't apply this patch because you have not signed a CA. Please see:

http://clojure.org/contributing

I know it's a lot of work for one small patch but if you send in a CA then hopefully you will be able to send in more patches like this in the future.

I am going to close this issue because it was mainly about implementing clojure.string. If you could please open a new issue about the performance of (reverse), that would be awesome.

Comment by Chouser [ 07/Jul/20 12:00 AM ]

Comment by bobby, Thu Jul 7 20:29:32 2011:

To continue development on cljs.string, this issue requires support for both regular expressions (#54) and refer-clojure (#64) in the ns declaration.





[CLJS-7] document diffs from Clojure Created: 01/Jul/20  Updated: 29/Jul/11  Resolved: 29/Jul/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Fogus
Resolution: Completed Votes: 0
Labels: None

Approval: Ok

 Description   

section by section comparison with Clojure, documenting what is different or absent

Imported from github issue #40



 Comments   
Comment by Chouser [ 17/Jul/20 12:00 AM ]

Comment by stuarthalloway, Sun Jul 17 19:55:03 2011:

https://github.com/relevance/clojurescript/wiki/Differences-from-Clojure]]

Comment by Chouser [ 17/Jul/20 12:00 AM ]

docs





[CLJS-9] Create Sample Application Created: 01/Jul/20  Updated: 07/Apr/12  Resolved: 07/Apr/12

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Critical
Reporter: Rich Hickey Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None


 Description   

Remaining items:

  • host the application somewhere
  • links to compiled code
  • someone other than Brenton should review the code (is this a good example of how to write ClojureScript?)
  • could use a little more design work

Since I (Brenton) won't be able to do any of these things, I am relinquishing this task to someone who can.



 Comments   
Comment by Brenton Ashworth [ 22/Jul/11 9:58 PM ]

links to ClojureScript
docs and links to source/compiled code
leaderboard (make sure it doesn't consume API calls)
how to deal with/explain missing icons on inner ring
better evidence of activity (particularly when blocked by twitter api)

clean up the code (people will follow this example so it should be good)

Comment by Brenton Ashworth [ 28/Jul/11 8:27 AM ]

Some progress has been made. We now load missing images in subsequent queries and the status box shows activity.

Remaining items:

  • links to ClojureScript
  • docs and links to source/compiled code
  • clean up the code (people will follow this example so it should be good)
  • add the view history slider (shows off immutable data structures)
  • additional browser support

Complete:

  • leaderboard (make sure it doesn't consume API calls)
  • how to deal with/explain missing icons on inner ring
  • better evidence of activity (particularly when blocked by twitter api)
Comment by Hubert Iwaniuk [ 29/Jul/11 4:38 AM ]

Access to HTML5 LocalStorage via goog is dependent on CLJS-35, as latest release of closure-library doesn't support it yet.

Comment by Brenton Ashworth [ 30/Jul/11 3:43 PM ]

The code has been cleaned up and links have been added to ClojureScript, documentation and Source code.

Remaining items:

  • host the application somewhere
  • links to compiled code
  • someone other than Brenton should review the code (is this a good example of how to write ClojureScript?)
  • could use a little more design work

Since I (Brenton) won't be able to do any of these things, I am relinquishing this task to someone who can.

Comment by John Li [ 14/Sep/11 1:55 AM ]

This could be hosted on Github with Github Pages: http://pages.github.com/

Comment by Brenton Ashworth [ 07/Apr/12 8:31 PM ]

This has been done.

Twitterbuzz was the sample application. If there are issues with Twitterbuzz that someone would like to address then those should be separate issues.

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by richhickey, Fri Jul 1 08:28:01 2011:

Must not have any other deps (other than goog)

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by fogus, Fri Jul 1 08:34:57 2011:

Here is an example of a simple TODO: http://nowdothis.com/

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by bobby, Fri Jul 1 11:45:05 2011:

Here are two other sample Todo apps for popular JavaScript libraries:

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by jessmartin, Fri Jul 15 08:46:12 2011:

Here's a wiki page describing a proposed Sample App: https://github.com/relevance/clojurescript/wiki/Demo-Application

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by richhickey, Mon Jul 18 09:50:55 2011:

I'm working on a simulated annealing based layout

Comment by Chouser [ 18/Jul/20 12:00 AM ]

Comment by Chouser, Mon Jul 18 21:13:43 2011:

Still to be done for the graph:

  • Stop looping when graph settles
  • Add margin so avatars aren't clipped
  • Filter out islands
  • Hook up to live data
  • Figure out if there's any way to make the results less ugly and/or useless.




[CLJS-6] range Created: 29/Jun/20  Updated: 29/Jul/11  Resolved: 29/Jul/11

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Alexander Redington
Resolution: Completed Votes: 1
Labels: None

Attachments: File add-range-function.diff    

 Description   

You know, the function.

Imported from github issue #39



 Comments   
Comment by Arthur Ulfeldt [ 27/Jul/11 3:51 AM ]

implements the range function in core.cljs

Comment by Alexander Redington [ 29/Jul/11 9:42 AM ]

I added some tests to test-stuff, thank you for the patch Arthur!





[CLJS-5] Compiler should emit optional source maps Created: 24/Jun/20  Updated: 22/Dec/12

Status: In Progress
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Major
Reporter: Anonymous Assignee: David Nolen
Resolution: Unresolved Votes: 4
Labels: None


 Description   

== New Notes ==

http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

Source map support will be landing in Chrome in 6 weeks.

== Old Notes ==

Google's debugging tooling consists of at least these two big pieces:

  • The `--create_source_map` compiler flag, which generates a table mapping source JS to compiled JS
  • The [Closure Inspector](http://code.google.com/closure/compiler/docs/inspector.html), a Firefox plugin that uses the source maps to provide error messages pointing to original code instead of compiled code

Open Questions

  • What does integrating with Closure Inspector look like?
  • Can we use code from gclosure to generate our own cljs ��� compiled JS mappings?
  • Would we need to modify Closure Inspector?

Imported from github issue #31



 Comments   
Comment by David Nolen [ 06/Apr/12 3:03 PM ]

There's a patch for Clojure, here CLJ-960

Related, https://github.com/brandonbloom/clojurescript/compare/clojure:master...brandonbloom:track-pos

Comment by David Nolen [ 01/Jun/12 8:49 AM ]

wip here http://github.com/clojure/clojurescript/tree/source-map

Comment by David Nolen [ 03/Jun/12 11:03 AM ]

Related ticket (tracking line & col during emission) that was resolved - http://dev.clojure.org/jira/browse/CLJS-176

Comment by Chouser [ 24/Jun/20 12:00 AM ]

Later





[CLJS-4] Try compiler macros for math ops Created: 17/Jun/20  Updated: 23/Sep/11  Resolved: 23/Sep/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Alan Dipert
Resolution: Completed Votes: 0
Labels: None


 Description   

I've made it so macro expansion stops when expansion does not differ from source form. This combined with the fact that we have separate Clojure namespaces for macros means that ordinary macros can act as compiler macros in cljs. Just define a macro with the same name as the function.

Note that you will need the complete definition of the function as well - it will be used when the function is used as a value, or via some alias. The macro will only come into play when compiler sees call by original name.

Try this on e.g. * and report back.

Imported from github issue #15



 Comments   
Comment by David Nolen [ 23/Sep/11 9:15 AM ]

I've started on this, https://github.com/clojure/clojurescript/tree/4-math-op-macros. Seems to works as advertised, however for some reason function printing gets borked.

Comment by David Nolen [ 23/Sep/11 11:58 AM ]

Fixed, https://github.com/clojure/clojurescript/commit/8e5662d9311c580f76a64b49c0b3422c598ee2c2

Comment by Chouser [ 24/Jun/20 12:00 AM ]

Later





[CLJS-3] testing spike (assert, test.generative) Created: 16/Jun/20  Updated: 23/Aug/11

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Anonymous Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Things we will need to have/work around:

  • clojure.walk
  • rethink deep-take (simple approach: omit)
    • or have a bindable var for compare-depth
  • fully qualified name hack
  • eval (macro time only?)
  • atoms
  • binding
  • development time namespace walking, or some other way to find tests
  • math fns

Imported from github issue #12



 Comments   
Comment by Chouser [ 24/Jun/20 12:00 AM ]

Comment by stuarthalloway, Thu Jun 16 00:37:49 2011:

Can I import the goog libraries when and as necessary to implement core fns? I assume I will need some math support for test.generative.

Comment by Chouser [ 24/Jun/20 12:00 AM ]

Comment by richhickey, Thu Jun 16 04:45:01 2011:

Yes, you should be able to require them, depends on #8

Comment by Chouser [ 24/Jun/20 12:00 AM ]

Later





[CLJS-2] Implement apply Created: 15/Jun/20  Updated: 29/Jul/11  Resolved: 29/Jul/11

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Blocker
Reporter: Anonymous Assignee: Fogus
Resolution: Completed Votes: 0
Labels: None

Approval: Test

 Description   

The time for `apply` is nigh.

Is it as simple as emitting `afn.apply(ctx, args...)`?

Imported from github issue #11



 Comments   
Comment by Fogus [ 29/Jul/11 8:37 AM ]

Merged into master. Work performed by mf and ss

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by richhickey, Wed Jun 15 05:35:44 2011:

Nope. Issues are:

laziness - apply is lazy when called with a lazy seq and a fn which consumes the & argument lazily
js apply expects an array, not a seq
we'd like our apply to work on all js functions, not just our fns

One approach:
Our variadic fns indicate they are such by the presence of applyTo (possibly by implementing IVariadicFn protocol? - probably not, as they are of type Function). Rather than handle all arities in applyTo, this applyTo need only handle the variadic method (if the fn is arity overloaded). The variadic fn further provides maxFixedArity. We'll need a boundedLength/count fn (which counts a seq, but only up to a limit). If we are putting applyTo and maxFixedArity on the function objects, they should be scoped names, e.g. cljs$lang&applyTo

The recipe then is:
check fn for applyTo, if not present dump the argseq into an array and call JS apply
else is variadic, call (bounded-count argseq (maxFixedArity fn))
if <= maxFixedArity, dump into array and call JS apply
else call applyTo

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by richhickey, Fri Jun 24 05:25:53 2011:

maxFixedArity as implemented ends up being a code-removal blocker for gclosure compiler. I'm not sure if there is another impl approach that will work, or if we need another strategy. Also, let's please avoid dynamic defns in our code.

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by stuartsierra, Fri Jul 1 14:24:47 2011:

Laziness defeats me. The trick is making sure that every fn has an `applyTo` property, even if it only has one arity.

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by stuartsierra, Mon Jul 4 12:35:00 2011:

There are 4 cases to deal with:

1. Single-arity function, non-variadic. These can stay as they are.
2. Multiple-arity function, non-variadic. These can stay as they are.
3. Single-arity variadic function.

  • Need to add `applyTo`
  • Only one code path for invocation
    4. Multiple-arity variadic function.
  • Need to add `maxFixedArgs` and `applyTo`
  • Different code paths when invoked with more or less than `maxFixedArgs`
  • There can be only one variadic fn body!

Case 3 is complicated by the fact that single-arity functions are currently emitted in such a way that additional properties cannot be set on the Function object.

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by fogus, Sat Jul 16 07:42:59 2011:

This may not make the 7/20 demo. There is a lot conspiring against a solid (and minifiable) implementation. Apply works as always, it's a little smarter about gen'ing the right code in the correct contexts, but it's still not lazy. I believe the problem lies elsewhere, but have not tracked the issue yet. I have a branch at 11-apply-mf if anyone is interested in exploring.

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by stuartsierra, Sat Jul 16 20:22:06 2011:

For one thing, I think the definition of `apply` should say `(<= (bounded-count args (inc fixed-arity)) fixed-arity)` instead of `(<= (bounded-count args fixed-arity) fixed-arity)`. As written now, the condition is always true.

Changing this on master breaks `apply` in some cases because `cljs$lang$applyTo` is not correctly defined.

Comment by Chouser [ 20/Jul/20 12:00 AM ]

Comment by fogus, Sun Jul 17 07:15:53 2011:

Right. You'll notice I fixed the trivial case of apply to do (effectively) that in my branch, but ran out of time to find the source of full realization that it hitting us later on.





[CLJS-509] Spurious warning about symbol not being a protocol Created: 21/May/13  Updated: 21/May/13

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Praki Prakash Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Environment:

Clojure 1.5.1, ClojureScript, cljsbuild 0.3.2


Attachments: File foo.cljs     File fubar.cljs    

 Description   

"lein cljsbuild" generates "Symbol X is not a protocol" warning. The following code snippet reproduces the issue. Renaming "my.foo" namespace to "foo" compiles with no warning.

;; file:: foo.cljs
(ns my.foo)

(defprotocol IFoo
(bar[this]))

;; file: fubar.cljs
(ns fubar
(:require
[my.foo :as foo]))

(deftype FuBar []
foo/IFoo
(bar [this]))

cljs output:
WARNING: Symbol foo/IFoo is not a protocol at line 5 src/fubar.cljs






[CLJS-508] Missing IReduce implementations and typo in clojure.core.reducers/append! Created: 21/May/13  Updated: 21/May/13  Resolved: 21/May/13

Status: Resolved
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Daniel Skarda Assignee: Unassigned
Resolution: Completed Votes: 0
Labels: None
Environment:

Fresh CLJS checkout from github


Attachments: Text File reducers.patch    
Patch: Code and Test

 Description   

1) IReduce protocol is missing implementation for array and List.
2) append! uses (.add array), while the correct array method name is push

Patch attached.

Note: what is your experience with array.push performance? ClojureScript reducers/foldcat uses arrays for append! / cat implementation. My experience was that (into [] ...) using conj! and TransientVector was at least 5 times faster than reducers/foldcat using array and push. The reason is probably inefficient push implementation in Chrome/V8



 Comments   
Comment by David Nolen [ 21/May/13 9:59 AM ]

Thanks for the patch. I doubt that array push is inefficient, but I imagine the regularity of TransientVector operations is something that V8 likes.

Comment by David Nolen [ 21/May/13 10:03 AM ]

fixed, http://github.com/clojure/clojurescript/commit/30bb0b9e55fb77cdfe952fbf5df763a25c4a25c5





[CLJS-507] Persistent Data Structure Benchmark Created: 20/May/13  Updated: 20/May/13

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Major
Reporter: David Nolen Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Put together an easy to run series of persistent data structure benchmarks that can be easily run. For example we would like to submit to this Mozilla ticket http://bugzilla.mozilla.org/show_bug.cgi?id=874174






[CLJS-506] Flag to disable minification in advanced mode Created: 19/May/13  Updated: 19/May/13

Status: Open
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Major
Reporter: Herwig Hochleitner Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None

Attachments: Text File 0001-CLJS-506-Add-a-debug-flag-to-the-compiler-options.patch    

 Description   

Problem:
Some code has different semantics when compiled in advanced mode.
Clojurescript tries to minimize those cases, but examples are usage of aget or forgotten externs files.
There exits closure compiler options to generate names based on original expressions, even with advanced optimizations.
However, there exists no clojurescript compiler option for that.

Proposal:
Add a :debug compiler option to clojurescript, which can be set to true to turn the following closure compiler options on:

  • generatePseudoNames true
  • anonymousFunctionNaming AnonymousFunctionNamingPolicy/UNMAPPED

Attached patch implements this, as a result the compiled test suite is indeed quite readable.



 Comments   
Comment by Herwig Hochleitner [ 19/May/13 10:11 AM ]

Patch 0001 depends on patches 0001 and 0002 from CLJS-480 because of changes to the test script.





Generated at Tue May 21 21:55:28 CDT 2013 using JIRA 4.4#649-r158309.