diff --git a/devnotes/cljs-1.12.org b/devnotes/cljs-1.12.org new file mode 100644 index 000000000..1579ea4f2 --- /dev/null +++ b/devnotes/cljs-1.12.org @@ -0,0 +1,34 @@ +ClojureScript 1.12 Dev Notes + +* Clojure 1.12 introduced method values in the following forms +** `Classname/staticMethod` - existing static method descriptor +** `Classname/.instancedMethod` - describes an instance method +** `Classname/new` - describes a constructor +* `Classname/staticMethod` +** ClojureScript does not use JS class syntax to define anything +** "static fields" are just properties on the ctor fn +** However this could easily be detected by the compiler +*** `(set! (.. Foo -prototype BAR) ...)` +**** where `Foo` is a known deftype +** Clojure can disambiguate between method/properties +*** ClojureScript cannot in the general case +**** foreign JS libraries +*** It can work for Closure Compatible stuff +**** due to externs parsing +** Option: Could assume `Classname/staticMethod` fn +*** CLJS doesn't support anything but namespaces before the `/` +**** So minimal breakage likely +* `Classname/.instanceMethod` no precendent so also easy to handle +* `Classname/new` a special case so easy to handle +** Again `non-namespace/foo` never worked before +* Other considerations +** `^:param-tags` +*** Don't immediately see a use for this +**** We don't have the method selection problem +** `goog.foo.Bar` +*** Users do sometimes depend on global access to Closure libs +*** externs parsing can let us know if `/` should be allowed or not +** if something is `:referred` etc. +*** Can also support `/` +** `js/foo/bar` +*** Not supported