clementine 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +4 -2
  3. data/LICENSE.txt +22 -0
  4. data/README.md +11 -6
  5. data/Rakefile +22 -0
  6. data/clementine.gemspec +2 -1
  7. data/ext/clojure-clojurescript-bef56a7/.gitignore +13 -0
  8. data/ext/clojure-clojurescript-bef56a7/Clojurescript.iml +12 -0
  9. data/ext/clojure-clojurescript-bef56a7/README.md +29 -0
  10. data/ext/clojure-clojurescript-bef56a7/benchmark/cljs/benchmark_runner.cljs +155 -0
  11. data/ext/clojure-clojurescript-bef56a7/bin/cljsc +21 -0
  12. data/ext/clojure-clojurescript-bef56a7/bin/cljsc.bat +18 -0
  13. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/bin/cljsc.clj +0 -0
  14. data/ext/clojure-clojurescript-bef56a7/devnotes/README.org +35 -0
  15. data/ext/clojure-clojurescript-bef56a7/devnotes/bcrepl.org +13 -0
  16. data/ext/clojure-clojurescript-bef56a7/devnotes/cljs.org +500 -0
  17. data/ext/clojure-clojurescript-bef56a7/devnotes/corelib.org +583 -0
  18. data/ext/clojure-clojurescript-bef56a7/devnotes/day1.org +203 -0
  19. data/ext/clojure-clojurescript-bef56a7/devnotes/day2.org +44 -0
  20. data/ext/clojure-clojurescript-bef56a7/devnotes/talk.org +126 -0
  21. data/ext/clojure-clojurescript-bef56a7/devnotes/testing +13 -0
  22. data/ext/clojure-clojurescript-bef56a7/devnotes/todo.org +121 -0
  23. data/ext/clojure-clojurescript-bef56a7/epl-v10.html +261 -0
  24. data/ext/clojure-clojurescript-bef56a7/pom.template.xml +88 -0
  25. data/ext/clojure-clojurescript-bef56a7/samples/dom/.gitignore +2 -0
  26. data/ext/clojure-clojurescript-bef56a7/samples/dom/src/dom/test.cljs +48 -0
  27. data/ext/clojure-clojurescript-bef56a7/samples/dom/test.html +30 -0
  28. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/.gitignore +2 -0
  29. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/README.md +53 -0
  30. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/externed-lib.js +7 -0
  31. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/externs.js +3 -0
  32. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/hello-extern.html +14 -0
  33. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/hello-js-dev.html +18 -0
  34. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/hello-js.html +17 -0
  35. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/my-external-lib.js +3 -0
  36. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/src/hello-js/core.cljs +9 -0
  37. data/ext/clojure-clojurescript-bef56a7/samples/hello-js/src/hello-js/extern-example.cljs +5 -0
  38. data/ext/clojure-clojurescript-bef56a7/samples/hello/.gitignore +2 -0
  39. data/ext/clojure-clojurescript-bef56a7/samples/hello/README.md +34 -0
  40. data/ext/clojure-clojurescript-bef56a7/samples/hello/hello-dev.html +18 -0
  41. data/ext/clojure-clojurescript-bef56a7/samples/hello/hello.html +13 -0
  42. data/ext/clojure-clojurescript-bef56a7/samples/hello/src/hello/core.cljs +8 -0
  43. data/ext/clojure-clojurescript-bef56a7/samples/hello/src/hello/foo/bar.cljs +4 -0
  44. data/ext/clojure-clojurescript-bef56a7/samples/nodehello.cljs +18 -0
  45. data/ext/clojure-clojurescript-bef56a7/samples/nodels.cljs +17 -0
  46. data/ext/clojure-clojurescript-bef56a7/samples/repl/.gitignore +2 -0
  47. data/ext/clojure-clojurescript-bef56a7/samples/repl/README.md +101 -0
  48. data/ext/clojure-clojurescript-bef56a7/samples/repl/index.html +27 -0
  49. data/ext/clojure-clojurescript-bef56a7/samples/repl/src/repl/test.cljs +73 -0
  50. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/.gitignore +2 -0
  51. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/README.md +42 -0
  52. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/index-advanced.html +80 -0
  53. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/index.html +88 -0
  54. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/reset.css +48 -0
  55. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/anneal.cljs +66 -0
  56. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/core.cljs +307 -0
  57. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/dom-helpers.cljs +95 -0
  58. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/layout.cljs +100 -0
  59. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/leaderboard.cljs +40 -0
  60. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/radial.cljs +91 -0
  61. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/showgraph.cljs +121 -0
  62. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/src/twitterbuzz/timeline.cljs +39 -0
  63. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/style.css +301 -0
  64. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/test_data.txt +1 -0
  65. data/ext/clojure-clojurescript-bef56a7/samples/twitterbuzz/tweet_maps.txt +1 -0
  66. data/ext/clojure-clojurescript-bef56a7/script/benchmark +30 -0
  67. data/ext/clojure-clojurescript-bef56a7/script/bootstrap +70 -0
  68. data/ext/clojure-clojurescript-bef56a7/script/browser-repl +16 -0
  69. data/ext/clojure-clojurescript-bef56a7/script/build +59 -0
  70. data/ext/clojure-clojurescript-bef56a7/script/clean +5 -0
  71. data/ext/clojure-clojurescript-bef56a7/script/closure-library-release/google-closure-library-third-party.pom.template +59 -0
  72. data/ext/clojure-clojurescript-bef56a7/script/closure-library-release/google-closure-library.pom.template +54 -0
  73. data/ext/clojure-clojurescript-bef56a7/script/closure-library-release/make-closure-library-jars.sh +87 -0
  74. data/ext/clojure-clojurescript-bef56a7/script/compile +41 -0
  75. data/ext/clojure-clojurescript-bef56a7/script/repl +13 -0
  76. data/ext/clojure-clojurescript-bef56a7/script/repl.bat +13 -0
  77. data/ext/clojure-clojurescript-bef56a7/script/repljs +15 -0
  78. data/ext/clojure-clojurescript-bef56a7/script/repljs.bat +14 -0
  79. data/ext/clojure-clojurescript-bef56a7/script/test +38 -0
  80. data/ext/clojure-clojurescript-bef56a7/script/test-compile +30 -0
  81. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/analyzer.clj +975 -0
  82. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/clj/cljs/closure.clj +173 -73
  83. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/compiler.clj +1081 -0
  84. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/core.clj +1158 -0
  85. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/clj/cljs/repl.clj +51 -25
  86. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/repl/browser.clj +258 -0
  87. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/repl/reflect.clj +75 -0
  88. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/clj/cljs/repl/rhino.clj +6 -5
  89. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/repl/server.clj +173 -0
  90. data/ext/clojure-clojurescript-bef56a7/src/clj/cljs/tagged_literals.clj +30 -0
  91. data/ext/clojure-clojurescript-bef56a7/src/cljs/cljs/core.cljs +7197 -0
  92. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/cljs/nodejs.cljs +1 -1
  93. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/cljs/nodejs_externs.js +0 -0
  94. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/cljs/nodejscli.cljs +1 -1
  95. data/ext/clojure-clojurescript-bef56a7/src/cljs/cljs/reader.cljs +551 -0
  96. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/browser/dom.cljs +59 -13
  97. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/browser/event.cljs +0 -0
  98. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/browser/net.cljs +8 -7
  99. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/browser/repl.cljs +2 -2
  100. data/ext/clojure-clojurescript-bef56a7/src/cljs/clojure/core/reducers.cljs +298 -0
  101. data/ext/clojure-clojurescript-bef56a7/src/cljs/clojure/data.cljs +162 -0
  102. data/ext/clojure-clojurescript-bef56a7/src/cljs/clojure/reflect.cljs +48 -0
  103. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/set.cljs +0 -0
  104. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/string.cljs +4 -10
  105. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/walk.cljs +0 -0
  106. data/{vendor/assets → ext/clojure-clojurescript-bef56a7}/src/cljs/clojure/zip.cljs +0 -0
  107. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/binding_test.cljs +7 -0
  108. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/binding_test_other_ns.cljs +3 -0
  109. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/core_test.cljs +1678 -0
  110. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/import_test.cljs +11 -0
  111. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/import_test/foo.cljs +5 -0
  112. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/letfn_test.cljs +19 -0
  113. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/macro_test.cljs +6 -0
  114. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/macro_test/macros.clj +5 -0
  115. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/ns_test.cljs +14 -0
  116. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/ns_test/bar.cljs +3 -0
  117. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/ns_test/foo.cljs +7 -0
  118. data/ext/clojure-clojurescript-bef56a7/test/cljs/cljs/reader_test.cljs +124 -0
  119. data/ext/clojure-clojurescript-bef56a7/test/cljs/clojure/data_test.cljs +22 -0
  120. data/ext/clojure-clojurescript-bef56a7/test/cljs/clojure/string_test.cljs +97 -0
  121. data/ext/clojure-clojurescript-bef56a7/test/cljs/foo/ns_shadow_test.cljs +9 -0
  122. data/ext/clojure-clojurescript-bef56a7/test/cljs/test_runner.cljs +26 -0
  123. data/lib/clementine.rb +3 -24
  124. data/lib/clementine/clojurescript_engine.rb +9 -48
  125. data/lib/clementine/clojurescript_engine/base.rb +15 -0
  126. data/lib/clementine/clojurescript_engine/jruby.rb +46 -0
  127. data/lib/clementine/{clojurescript_engine_mri.rb → clojurescript_engine/mri.rb} +17 -10
  128. data/lib/clementine/version.rb +1 -1
  129. data/test/clojurescript_engine_test.rb +36 -14
  130. metadata +177 -83
  131. data/vendor/assets/lib/clojure.jar +0 -0
  132. data/vendor/assets/lib/compiler.jar +0 -0
  133. data/vendor/assets/lib/goog.jar +0 -0
  134. data/vendor/assets/lib/js.jar +0 -0
  135. data/vendor/assets/src/clj/cljs/compiler.clj +0 -1341
  136. data/vendor/assets/src/clj/cljs/core.clj +0 -702
  137. data/vendor/assets/src/clj/cljs/repl/browser.clj +0 -341
  138. data/vendor/assets/src/cljs/cljs/core.cljs +0 -3330
  139. data/vendor/assets/src/cljs/cljs/reader.cljs +0 -360
@@ -0,0 +1,203 @@
1
+ * ClojureScript Day #1
2
+ * Important things to note
3
+ ** This should be a dialog, not a lecture
4
+ *** stop me, ask questions, understand deeply
5
+ ** There are still many things I don't know or haven't decided
6
+ *** some tasks will be research
7
+ *** some pushback welcome
8
+ **** I reserve BDFL rights :)
9
+ ** This is an opportunity to get involved early
10
+ *** stay flexible to avoid pain
11
+ ** Welcome Chouser!
12
+ *** One of my first and best users and contributors
13
+ *** Someone whose opinions I value, and a Clojure expert
14
+ *** Author of a Clojure book not (yet) working at Relevance!
15
+ *** The first to walk down the ClojureScript road
16
+ ** This is a key Clojure/core (with help) deliverable
17
+ *** We do more than maintain, we lead
18
+ **** community should be stunned (shhh!)
19
+ *** I'm very excited about this aspect
20
+ **** let's knock this out of the park!
21
+ * Intro and rationale
22
+ ** Problem statement
23
+ *** Javascript is the only programmable technology in key target environments
24
+ **** i.e. the browser
25
+ **** nothing will change that for years to come
26
+ *** Javascript has the greatest reach in other key environments
27
+ **** i.e. mobile
28
+ *** Javascript (the language) is not very robust
29
+ **** Fewer good parts than bad parts
30
+ **** Much convention and discipline required to avoid headaches
31
+ **** Conventions differ between shops, libs
32
+ *** Ever increasing pressure to create richer applications in these environments
33
+ **** requiring more and larger libraries
34
+ ***** ordinary minification doesn't scale up
35
+ **** increasing requirements complexity
36
+ ***** can't add language or environment complexity on top
37
+ ** Rationale
38
+ *** solving this problem will give developers important leverage
39
+ *** empower them to tackle more difficult problems
40
+ **** with greater confidence in the robustness of their solutions
41
+ *** inspire next-generation approaches to web and mobile development
42
+ * Strategy
43
+ ** Compile (a subset of) Clojure to Javascript
44
+ *** reach everywhere JS does
45
+ ** Clojure is simpler, more robust, more concise, more powerful overall than JS
46
+ *** yet maps well to JS as implementation artifact
47
+ ** Leverage best-of-breed JS appraoches
48
+ *** Currently, IMO that is Google's, with Closure compiler and libraries
49
+ **** called gclosure hereafter
50
+ *** Fortunately both open sourced
51
+ *** Gclosure's strategy is whole-program optimization
52
+ **** resulting application includes only code actually used
53
+ **** this is essential to writing large (and small) applications against large and manifold libraries
54
+ ***** while allowing those libs to be written in a straightforward, non-clever manner
55
+ ** This is not just about the browser
56
+ *** Node.js, plugins anywhere JS is accepted, any future JS-based environments
57
+ ** Non-objectives
58
+ *** complete Closure
59
+ **** subset, but try to make identical features identical
60
+ **** document differences
61
+ *** porting large applications in their entirety
62
+ **** portability layers unifying JS and Java
63
+ **** cross platform reach is about moving core competencies and libraries, not everything
64
+ ** Profit!
65
+ *** ClojureScript becomes the most powerful language for generating the smallest and fastest JS applications
66
+ **** ClojureScript runs everywhere JS runs
67
+ *** This is Clojure's client story
68
+ *** This is Clojure's mobile story
69
+ *** A powerful tool for anyone willing to learn Clojure
70
+ * Tactics
71
+ ** Don't change Clojure itself
72
+ *** even though it might make things easier
73
+ **** track those things we'd like to be different, and work into Clojure dev schedule
74
+ ** The ClojureScript compiler is written in Clojure
75
+ *** The reader is Clojure's
76
+ *** Macros are written in Clojure
77
+ *** therefor, no compiler at runtime, *no eval*
78
+ **** browser-hosted REPL a non-target!
79
+ *** also, some things that are runtime-reified in Clojure (namespaces, Vars) may not be in ClojureScript
80
+ ** GClosure's strategy requires JS to be written in a particular idiom
81
+ *** especially for the most advanced optimization
82
+ *** ClojureScript will always generate code compliant with advanced optimizations
83
+ *** ClojureScript will use the same packaging and dependency strategy as gclosure
84
+ ** The gclosure library is an accepted dependency
85
+ *** but *nothing else* (other than base JS)
86
+ **** ok, and maybe some stealing from GWT output, if we're desperate
87
+ ***** but that's really it
88
+ *** in particular, use gclosure for all environmental conditionality
89
+ **** we make no per-browser decisions ourselves
90
+ ** The gclosure compiler is optional, but recommended for final delivery
91
+ *** but don't be too stupid without it
92
+ ** The compiler has an enriched primitive set (vs Clojure's)
93
+ *** deftype
94
+ *** defprotocol
95
+ *** extend-type
96
+ *** need no runtime lib
97
+ **** allows bootstrap abstraction and data structures to be written in terms of these
98
+ ** The runtime library is completely written in ClojureScript
99
+ *** No Javascript!
100
+ *** js* primitive escape hatch to reach gnarly stuff that ClojureScript won't expose
101
+ ** Presumptions
102
+ *** JS is single-threaded, forever
103
+ **** nevertheless, we will use Clojure reference primitives (at least atom)
104
+ * Roadmap
105
+ ** Compiler
106
+ *** It's alive!
107
+ *** a few more primitives to go
108
+ *** output needs to be sussed out
109
+ **** esp tested with gclosure compiler
110
+ *** some niceties missing (load-file etc)
111
+ ** Libraries
112
+ *** Many core macros imported and work
113
+ **** testing required
114
+ **** some missing, like binding, dotimes
115
+ *** This space intentionally left blank (core.cljs)
116
+ **** that's why you're here!
117
+ **** Much work, but following trodden ground
118
+ ***** Move the core abstractions to protocols
119
+ ***** Implement the core data structures with deftype
120
+ ***** copy fn impls, tweaking as needed
121
+ ** Tooling
122
+ *** ClojureScript written to the spec of gclosure
123
+ *** Actual integration with tool chain TODO
124
+ **** Deps builder
125
+ **** Compilation with gclosure compiler
126
+ ***** drive through API for greatest control vs CLI
127
+ **** finding/loading gclosure lib
128
+ **** testing
129
+ **** delivery
130
+ *** REPL and other expected dev conveniences
131
+ **** load (file), load-js
132
+ * Inside the compiler
133
+ ** I will not be the only one who knows this!
134
+ *** only 500 lines
135
+ ** [[http://en.wikipedia.org/wiki/Recursive_descent_parser][Recursive descent parser]]
136
+ ** 2 phases
137
+ *** analyze
138
+ **** code data in -> AST data out
139
+ ***** all ordinary Clojure data
140
+ **** each expr recursively analyzes nested exprs
141
+ **** checks for correct structure
142
+ *** emit
143
+ **** AST data in -> print JS (via side effect to *out*)
144
+ ***** this allows with-out-str, or direct to file
145
+ ***** alternative - thread output stream, meh
146
+ **** each expr recursively emits nested exprs
147
+ ** Both analyze and emit are polymorphic
148
+ *** using multimethods
149
+ *** other than a little hand-routing at top of analyze, no global switch statement
150
+ **** extend the compiler by defining parse and emit methods
151
+ **** add special ops to specials set
152
+ ** The threaded environment (env)
153
+ *** most important, :context and :locals
154
+ *** all name-introducing exprs (e.g. fn, let) augment the environment before passing to children
155
+ ** Tricky bit - :context
156
+ *** In ClojureScript everything is an expression
157
+ **** but not in JS
158
+ **** optimal output requires knowledge of the context
159
+ ***** :statement, :return, :expr
160
+ **** non-exprs in expr contexts require transformation (usually a function wrapper)
161
+ ** Primitives walkthrough
162
+ *** if
163
+ *** def
164
+ *** fn*
165
+ *** do
166
+ *** let*
167
+ *** loop*
168
+ *** recur
169
+ *** new
170
+ *** set!
171
+ *** ns
172
+ *** deftype*
173
+ *** .
174
+ *** js*
175
+ ** Macros walkthrough
176
+ *** macroexpansion
177
+ *** defprototype
178
+ *** extend-type
179
+ *** import-macros
180
+ *** the core/core trick
181
+ ** Evaluation model
182
+ *** top down, form at a time
183
+ **** just like Clojure
184
+ **** just like JS
185
+ ** What's missing?
186
+ *** validation that compilation ns resolved names exist in ns
187
+ *** more correctness checking
188
+ *** better error messages
189
+ **** ...
190
+ *** strategy for apply
191
+ * What's where
192
+ ** src/clj/cljs/compiler.clj
193
+ *** the compiler
194
+ ** src/clj/cljs/core.clj
195
+ *** core macros
196
+ ** src/cljs/core.cljs
197
+ *** core library
198
+ * Todo
199
+ ** separate org file
200
+ * Breakout and tackle tasks
201
+ ** we'll substantially be in the same file
202
+ *** ideas for making that work?
203
+ * Regroup and feedback
@@ -0,0 +1,44 @@
1
+ * ClojureScript Day #2
2
+ * Welcome Thortech!
3
+ ** Eric, Frank and Tom
4
+ *** Long time cohorts
5
+ * Tips
6
+ ** Don't define things in terms of undefined things
7
+ *** someone else will just trip over later
8
+ ** Test
9
+ *** nil
10
+ ** Encapsulate use of -methods in a single place
11
+ ** Where's the global namespace?
12
+ * Where are we at
13
+ * Where are we going
14
+ ** [[file:corelib.org][Core lib punchlist]]
15
+ ** [[file:~/dev/clojurescript/todo.org][To do]]
16
+ ** [[https://github.com/relevance/clojurescript/issues][Tickets]]
17
+ * Release 1
18
+ ** Make goog-compatible libs work
19
+ ** Data structures
20
+ *** work but are not optimal for large instances
21
+ *** persistent guarantees
22
+ ** seq library
23
+ ** associative library
24
+ ** indexed library
25
+ ** atoms
26
+ ** binding
27
+ ** great tooling
28
+ *** push button
29
+ ** reader?
30
+ *** print-read
31
+ ** regex
32
+ * Release 2
33
+ ** DOM manipulation
34
+ ** Can I use jQuery?
35
+ ** bitops
36
+ ** multimethods
37
+ ** hierarchy
38
+ ** reader + record support
39
+ ** unchecked
40
+ ** bitops
41
+ ** print
42
+ ** eventing value add
43
+ ** DOM value add
44
+ ** UI value add
@@ -0,0 +1,126 @@
1
+ * Title
2
+ ** Clojure
3
+ *** Rocks
4
+ ** Javascript
5
+ *** Reaches
6
+ ** Announcing Clojure on Javascript
7
+ *** ClojureScript
8
+ * Problem statement
9
+ ** Javascript is the only programmable technology in key target environments
10
+ *** i.e. the browser
11
+ *** nothing will change that for years to come
12
+ ** and has the greatest reach in other key environments
13
+ *** i.e. mobile
14
+ ** Javascript (the language) is not very robust
15
+ *** Fewer good parts than bad parts
16
+ *** Much convention and discipline required to avoid headaches
17
+ *** Conventions differ between shops, libs
18
+ ** Ever increasing pressure to create richer applications in these environments
19
+ *** requiring more, and larger, libraries
20
+ **** ordinary minification doesn't scale up
21
+ *** increasing requirements complexity
22
+ **** can't add language or environment complexity on top
23
+ * Rationale
24
+ ** Clojure is arguably simpler, more powerful and more robust than JS
25
+ ** JS VMs getting faster and more sophisticated
26
+ ** Putting Clojure on JS empowers developers
27
+ * Strategy
28
+ ** Compile (a substantial subset of) Clojure to Javascript source
29
+ ** Leverage best-of-breed JS approaches
30
+ ** Look beyond the browser
31
+ ** Non-objectives
32
+ *** Complete Clojure
33
+ *** Portable large applications
34
+ *** Browser REPL demos etc
35
+ ** Target is production applications
36
+ * Tactics
37
+ ** Clojure[Script] in Clojure
38
+ *** Written in Clojure and itself
39
+ ** Clojure on Closure
40
+ *** Google's JS toolkit
41
+ ** Clojure[Script] in Clojure
42
+ ** Google Closure
43
+ ** some subset of my gclosure lightning talk
44
+ * Where we are at
45
+ ** What's there?
46
+ *** Compiler
47
+ *** REPL
48
+ *** All the primitives (that make sense)
49
+ *** Arity overloading
50
+ *** Macros
51
+ *** Seqs, maps, vectors, sets
52
+ **** and supporting library
53
+ **** callable maps, vectors, sets
54
+ *** Symbols and keywords
55
+ *** deftypes and protocols
56
+ *** all the core abstractions as protocols
57
+ *** destructuring
58
+ *** 2500 lines of core libs!
59
+ *** clojure.string and .set .walk .zip
60
+ *** regex
61
+ *** reader?
62
+ *** Full participation with Google Closure library
63
+ **** ns mechanism maps to provide/require
64
+ *** compile-file and compile-project
65
+ ** What's not (yet)?
66
+ *** Full collection persistence
67
+ *** defrecord
68
+ *** Multimethods
69
+ *** Hierarchy
70
+ *** Rich numerics
71
+ *** Testing framework
72
+ *** Misc core lib
73
+ ** What won't be?
74
+ *** things related to threads
75
+ *** eval and runtime compilation
76
+ *** structs, proxy, Java type stuff
77
+ *** Runtime reification of:
78
+ **** Vars
79
+ **** Namespaces
80
+ **** Protocols
81
+ **** etc
82
+ ** TBD
83
+ *** optimizations
84
+ **** chunks, transients
85
+ *** agents (on webworkers?)
86
+ *** unchecked
87
+ ** What's different
88
+ *** no runtime Vars
89
+ *** some in-function subsetting
90
+ **** e.g. satisfies? is a macro, can't be mapped/applied
91
+ ** It's alpha
92
+ * Where we are going
93
+ ** This is Clojure's client story
94
+ ** This is Clojure's mobile story
95
+ ** This is Clojure's CLI scripting story
96
+ * The Team thus far - Clojure/core and friends
97
+ ** Aaron Bedra
98
+ ** Alan Dipert
99
+ ** Alex Redington
100
+ ** Bobby Calderwood
101
+ ** Brenton Ashworth
102
+ ** Chris Houser
103
+ ** Devin Walters
104
+ ** Eric Thorsen
105
+ ** Frank Failla
106
+ ** Michael Fogus
107
+ ** Jonathan Clagett
108
+ ** Jess Martin
109
+ ** Luke VanderHart
110
+ ** Chris Redinger
111
+ ** Stuart Halloway
112
+ ** Stuart Sierra
113
+ ** Tom Hickey
114
+ * Participating
115
+ ** This is a Clojure dev project
116
+ *** all with Clojure CAs welcome to participate
117
+ ** The Friday invite
118
+ ** The Conj
119
+ * Demo
120
+ ** REPL
121
+ ** Compilation
122
+ ** Web app
123
+ ** CLI app?
124
+ * Q & A
125
+
126
+
@@ -0,0 +1,13 @@
1
+ Definitely a work-in-progress.
2
+
3
+ To run tests before you commit:
4
+
5
+ script/test
6
+
7
+ To add tests:
8
+
9
+ * Create test fiels in the test/cljs directory.
10
+ * Write fns that throw an exception on failure.
11
+ * Call those fns from test/cljs/cljs/test_runner.cljs
12
+
13
+
@@ -0,0 +1,121 @@
1
+ #+TODO: TODO IN-PROGRESS REVIEW DONE
2
+ * The near term tasks
3
+ * Compiler
4
+ ** IN-PROGRESS throw/try/catch/finally :@stuarthalloway:
5
+ * Data structures
6
+ ** IN-PROGRESS keyword :@levand:
7
+ *** requires interning strategy
8
+ **** possibly compiler support for same
9
+ *** string starting with noncharacter code
10
+ **** \uFFFE and \uFFFF are guaranteed noncharacters
11
+ **** use as prefix for keywords and symbols
12
+ **** must test in predicates string? symbol? keyword?
13
+ ** IN-PROGRESS symbol :@levand:
14
+ *** string starting with noncharacter code
15
+ ** DONE cons cell/list
16
+ ** DONE map
17
+ *** first cut COW, string uniqueness required
18
+ ** DONE vector
19
+ *** first cut, COW, internal array
20
+ ** TODO numbers
21
+ *** js native number is our double
22
+ *** goog.math.Long?
23
+ **** building Long objects defeats fixnum support in JS VMs
24
+ **** but they are 32-bit - some type bits
25
+ * Abstractions
26
+ ** TODO Clojure's interfaces
27
+ *** we don't need all of them
28
+ Associative
29
+ Counted
30
+ Fn
31
+ IBlockingDeref
32
+ IChunk
33
+ IChunkedSeq
34
+ IDeref
35
+ IEditableCollection
36
+ IFn
37
+ IKeywordLookup
38
+ ILookup
39
+ ILookupSite
40
+ ILookupThunk
41
+ IMapEntry
42
+ IMeta
43
+ Indexed
44
+ IndexedSeq
45
+ IObj
46
+ IPending
47
+ IPersistentCollection
48
+ IPersistentList
49
+ IPersistentMap
50
+ IPersistentSet
51
+ IPersistentStack
52
+ IPersistentVector
53
+ IProxy
54
+ IRecord
55
+ IReduce
56
+ IRef
57
+ IReference
58
+ ISeq
59
+ ITransientAssociative
60
+ ITransientCollection
61
+ ITransientMap
62
+ ITransientSet
63
+ ITransientVector
64
+ IType
65
+ MapEquivalence
66
+ Named
67
+ Reversible
68
+ Seqable
69
+ Sequential
70
+ Settable
71
+ Sorted
72
+ ** Naming convention for protocols?
73
+ *** IBlah
74
+ ** TODO equality and hashing
75
+ *** investigate gclosure and GWT
76
+ ** TODO seqable
77
+ ** TODO collection
78
+ ** TODO counted
79
+ ** DONE seq
80
+ ** TODO lookup
81
+ ** TODO associative
82
+ ** TODO indexed
83
+ ** TODO map
84
+ ** TODO set
85
+ ** TODO vector
86
+ ** TODO deref
87
+ ** TODO metadata
88
+ * Runtime Lib
89
+ ** key missing macros
90
+ *** binding
91
+ **** single threaded
92
+ **** save, set!, finally restore
93
+ **** deps: try/finally primitives in compiler
94
+ *** dotimes
95
+ ** math ops
96
+ *** intrinsify built-ins
97
+ *** handle variadic
98
+ ** core.cljs!
99
+ *** crank through core.clj
100
+ *** see [[file:docs/corelib.org][docs/corelib.org]]
101
+ * Tools
102
+ ** getting set up story
103
+ *** gclosure library
104
+ *** gclosure compiler
105
+ *** V8
106
+ **** optional for now?
107
+ ** DONE REPL
108
+ *** there's a ticket for this
109
+ ** Integration of gclosure library
110
+ *** how do we reference/load?
111
+ **** REPL runtime behavior of provide/require
112
+ *** versioning issues
113
+ **** just SVN revs
114
+ **** how to bind to version
115
+ ** Testing
116
+ *** anything good in gclosure?
117
+ ** Build
118
+ *** deps
119
+ *** glcosure compiler
120
+ **** invocation via API gives most control
121
+ **** but deps a Python thingy