News for hackers. Stuff that matters.
Re:Comparing JavaScript, CoffeeScript & ClojureScript by nxn on Friday January 27, 2012 @01:39AM (#3517361)
In this context this looks somewhat similar to Haskell's type classes, and maybe to a lesser, or greater(?), extent C#'s extension methods. The latter I guess lacks the concept of the "protocol" as extensions methods live at the namespace level in a way (they're wrapped in a static class, but this is somewhat meaningless). Then again, the protocol concept here seems to be mainly used for the same purpose of having a namespace for storing implementations and also importing them?
Re:Comparing JavaScript, CoffeeScript & ClojureScript by jpatte on Friday January 27, 2012 @07:22AM (#3518010)
What seems really interesting to me here is the ability to extend an existing class by implementing an interface (instead of a set of extension methods), and therefore becoming able to cast any instance of this type as an instance of this interface. I'd love to have that in C#, as it would simplify (if not eliminate) the creation of wrappers around types you don't own.
Re:Comparing JavaScript, CoffeeScript & ClojureScript by duelin_markers on Friday January 27, 2012 @05:02AM (#3517770)
An important difference between Clojure protocols and C# extension methods is that protocols are one of the tools for polymorphism in Clojure, the (only?) other being multi-methods, whereas extension methods are just syntactic sugar for static methods and therefore aren't polymorphic.
Re:Comparing JavaScript, CoffeeScript & ClojureScript by Mikera on Wednesday February 01, 2012 @08:53PM (#3541075)
Clojure also supports prototype-based polymorphism via Associative objects, inheritance polymorphism via Java interop/proxy, interface-based polymorphism with deftype/defrecord, polymorphism via abstraction (see the Clojure sequence operations for example, which use Java interfaces under the hood but you'd never know....). And probably a few more I can't remember right now..... there's a reason Rich Hickey calls it "polymorphism a la carte".