Atamert, I didn't get far on yo-yo--stopped reading when it started talking about monadic functions. :-)
But there is one main difference. I expect a component to "do its own thing", i.e. register its close function on opening. So there is nothing like defining a component. Well, except that when registering for a close, a component name is now being provided for use in the log. --b On Tuesday, November 24, 2015 at 1:35:06 AM UTC-5, Atamert Ölçgen wrote: > > Hi William, > > How is this different than Yo-yo? ( > https://groups.google.com/forum/#!topic/clojure/PvCc5sSeSRY) > > > Justifying things is generally impossible. > > Actually, no. It is possible, at least when you are dealing with > reasonable people. And when you make claims like "lightweight" or > "ultralight", people will naturally ask "oh, interesting, how so?" > > ----- > > Some functional programming folks are allergic to exceptions. They go out > of their ways to prevent any and all exceptions and they end up > unnecessarily complicating their types for little or no gain. > > It seems to me, you are trying to avoid using protocols like it's a plague. > > > I am tired of doing ongoing refactorings interrupted periodically by > complete rewrites. Class hierarchies are the worst... > > When your ultralight function based components get out of hand, you will > have a worse time refactoring. With component you only have two functions, > your lightweight design will end up having (* n 2) functions. > > Also, looking at a component's code (it's defrecord form I mean) I can see > what other components it depends on. Your design would bury them inside > functions making it harder to read. > > > On Tue, Nov 24, 2015 at 6:57 AM, James Reeves <ja...@booleanknot.com > <javascript:>> wrote: > >> Have you watched Simple Made Easy >> <http://www.infoq.com/presentations/Simple-Made-Easy>? >> >> I mention it because you remark about being tired of refactoring. It's my >> opinion that's a symptom of complexity, in the Hickey definition of the >> term. >> >> - James >> >> On 24 November 2015 at 03:31, William la Forge <lafo...@gmail.com >> <javascript:>> wrote: >> >>> James, >>> >>> Being fun is important but not a justification. We should strive to keep >>> things fun, but there are plenty of thing worth doing and our resources are >>> always limited. And if it is not fun, you are not going to do your best >>> work. >>> >>> Justifying things is generally impossible. If vanilla clojure meets your >>> needs, then vanilla clojure it is. If macros solve the problems you have >>> been dealt in the past, then three cheers for macros. If unifying client >>> and server addresses your needs, then Om Next may well be a major blessing >>> for you. >>> >>> For me, the winner is avoiding static structures. I am tired of doing >>> ongoing refactorings interrupted periodically by complete rewrites. Class >>> hierarchies are the worst--being the largest, they are the least stable. I >>> like small files that I can put to bed as finished. And self-defining >>> aggregation. Because these meet my very real needs. I constantly >>> reconceptualize what I am working on while bringing projects to completion. >>> So having a programming style which keeps code relevant in the face of such >>> an onslaught is very helpful and also a genuine delight. >>> >>> --b >>> >>> On Mon, Nov 23, 2015 at 10:08 PM, James Reeves <ja...@booleanknot.com >>> <javascript:>> wrote: >>> >>>> I feel you might be barking up the wrong tree with this approach, as it >>>> seems to complicate things without providing any compelling advantages. >>>> >>>> That said, if it's fun then by all means continue to experiment. Maybe >>>> I'm wrong :) >>>> >>>> - James >>>> >>>> On 24 November 2015 at 02:45, William la Forge <lafo...@gmail.com >>>> <javascript:>> wrote: >>>> >>>>> I think you have read too deeply into my thoughts on reserving the >>>>> first argument of a function. I haven't actually written any polymorphic >>>>> functions relating to this. >>>>> >>>>> Really, the take off point for me is being able to operate on an >>>>> object by implementing it as a map of functions and data. That is to say, >>>>> making objects data. Implementing multiple inheritance becomes trivial >>>>> and >>>>> without having to define any classes or any interfaces. And with full >>>>> support for circular references without needing to do declares. >>>>> >>>>> What I like about it is that I get separation of concerns and maximal >>>>> reuse without, I suspect, the usual usage coupling. The small maps which >>>>> define traits can even participate in the lifecycle of the aggregate, so >>>>> they start taking on the characteristics of components. >>>>> >>>>> My biggest problem with writing code over the decades has been the >>>>> constant desire to do rewrites--which are costly and devastating in their >>>>> impact. That is *why *I am fascinated with this approach. >>>>> >>>>> A second *why *is that when I have clear separation of concerns and >>>>> the pieces of code can be easily tested independently, documentation >>>>> becomes clearer and more fun to write. And keeping code fun is a critical >>>>> driver for open source. >>>>> >>>>> On Mon, Nov 23, 2015 at 9:24 PM, Timothy Baldridge <tbald...@gmail.com >>>>> <javascript:>> wrote: >>>>> >>>>>> So I feel compelled at this point to ask..."why?". The whole point of >>>>>> functional programming in Clojure is to de-couple state from data. When >>>>>> you >>>>>> need polymorphic dispatch on the contents of a map, you have access to >>>>>> multi methods. Sure this is a fun thought experiment, but I don't >>>>>> understand the design goals. It's a fairly verbose way to write more >>>>>> complex code to accomplish what we already have good tools for >>>>>> (protocols/multimethods, etc). Maybe I'm missing something. >>>>>> >>>>>> Timothy >>>>>> >>>>>> On Mon, Nov 23, 2015 at 7:15 PM, William la Forge <lafo...@gmail.com >>>>>> <javascript:>> wrote: >>>>>> >>>>>>> James, when I used the term mixin I was referring to a map that acts >>>>>>> like a trait that gets merged into a larger map. You would define >>>>>>> several >>>>>>> such smaller maps that can then be used in various combinations to >>>>>>> compose >>>>>>> "objects". The identity of the composite object (this) is the map which >>>>>>> holds the merged contents of the smaller maps. I.E. The entries in the >>>>>>> smaller maps get copied into the larger map. >>>>>>> >>>>>>> When executing functions held by a map, the last parameter is always >>>>>>> the map itself, i.e. the "this". On the other hand, when placing >>>>>>> closures >>>>>>> into the map, the self reference is no longer needed as it is implicit >>>>>>> in >>>>>>> the closure. But this means that a closure can only reference the >>>>>>> contents >>>>>>> of the map when the closure was created, while a function can reference >>>>>>> any >>>>>>> of the contents of the map passed as its last argument. >>>>>>> >>>>>>> Why did I make the map reference the last argument for functions >>>>>>> held by the map? So that we can do type polymorphism on the first >>>>>>> argument >>>>>>> passed to the function. But we should make an exception to this. To >>>>>>> facilitate threading, functions which return an updated map should take >>>>>>> that map as the first argument. But that is an API change and needs to >>>>>>> wait >>>>>>> for release 0.6.0. >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Clojure" group. >>>>>>> To post to this group, send email to clo...@googlegroups.com >>>>>>> <javascript:> >>>>>>> Note that posts from new members are moderated - please be patient >>>>>>> with your first post. >>>>>>> To unsubscribe from this group, send email to >>>>>>> clojure+u...@googlegroups.com <javascript:> >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/group/clojure?hl=en >>>>>>> --- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Clojure" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to clojure+u...@googlegroups.com <javascript:>. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> “One of the main causes of the fall of the Roman Empire was >>>>>> that–lacking zero–they had no way to indicate successful termination of >>>>>> their C programs.” >>>>>> (Robert Firth) >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Clojure" group. >>>>>> To post to this group, send email to clo...@googlegroups.com >>>>>> <javascript:> >>>>>> Note that posts from new members are moderated - please be patient >>>>>> with your first post. >>>>>> To unsubscribe from this group, send email to >>>>>> clojure+u...@googlegroups.com <javascript:> >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/clojure?hl=en >>>>>> --- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "Clojure" group. >>>>>> To unsubscribe from this topic, visit >>>>>> https://groups.google.com/d/topic/clojure/7Q7QvlSUGL4/unsubscribe. >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> clojure+u...@googlegroups.com <javascript:>. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To post to this group, send email to clo...@googlegroups.com >>>>> <javascript:> >>>>> Note that posts from new members are moderated - please be patient >>>>> with your first post. >>>>> To unsubscribe from this group, send email to >>>>> clojure+u...@googlegroups.com <javascript:> >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/clojure?hl=en >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to clojure+u...@googlegroups.com <javascript:>. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@googlegroups.com >>>> <javascript:> >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+u...@googlegroups.com <javascript:> >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "Clojure" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/clojure/7Q7QvlSUGL4/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> clojure+u...@googlegroups.com <javascript:>. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@googlegroups.com >>> <javascript:> >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> clojure+u...@googlegroups.com <javascript:> >>> For more options, visit this group at >>> http://groups.google.com/group/clojure?hl=en >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+u...@googlegroups.com <javascript:>. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Kind Regards, > Atamert Ölçgen > > ◻◼◻ > ◻◻◼ > ◼◼◼ > > www.muhuk.com > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.