IRC channel logs


back to list of logs

<daviid>generic functions with multi-method dispatch is a [better] module system. we need both [no news here, see clos and how it interacts with the cl package system] to keep modularity for all but goops programming. all i am saying is that guile should and would benefit from offering what I said above as an optional goops/module system way to 'cooperate'. as a matter of fact, that's what guile-gnome does in its internals
<ijp>it is not a better module system, since it is not a module system at all
<daviid>it is
<ijp>module systems are about control of which identifiers are visible
<ijp>multi-method dispatch is irrelevant to that
<ijp>for instance, goops has no way of modularly organising macros
<daviid>you don't need vibility control generic functions with multi-method dispatch
<ijp>going further, *it can't*
<daviid>it does not need to
<ijp>you don't seem to understand the problem, let alone the solutions
<daviid>you dont seem either :)
<ijp>daviid: consider two different pieces of code; one related to animals, one related to instant messaging
<ijp>we might want a "speak" function in both, but that take vastly different options
<ijp>overloading the two because they use the same name would be a mistake
<daviid>then you don't use goops in this case, probably
<ijp>second, if I use an internal name "foo", and you use an internal name "foo", your method means the two will have to clash
<ijp>three, with first class objects I can use lexical scoping to prevent others from interfering with internal structure. I cannot do this with macros, hence modules need to be higher level than macros
<daviid>you don't give intrnal functions the same name as your methods
<ijp>i.e. you don't have a solution
<ijp>lexical scoping is all about names, and how they *don't* matter
<ijp>locations matter
<ijp>this is a central tenet of scheme from 1975 onwards
<ijp>it's why every good scheme has developed a module system and they all work in basically the same way
<daviid>yes, no news cl package system(s) do that too, we need both
<daviid>but you don't want the module system to interact with generics and its methods
<ijp>daviid: how can I determine statically that a name is bound to a generic?
<daviid>by implementation: they all call define-generic [or define-generic is called] so you can track can't you?
<daviid>otherwize how you er 'merge-them?
<ijp>actually, you can't
<daviid>i mean the actual option 'merge-generics also has to know...
<ijp>(define-generic foo) (define bar foo)
<ijp>so generics can only go into your special namespace if they are toplevel
<ijp>and then you can set! those and get a normal variable, which suddenly wouldn't be treated specially?
<daviid>(define bar foo) would be a serious programming mistake, why would you
<ijp>daviid: it's a placeholder for more complicated, but possibly reasonable code
<daviid>i have problem with my emacs irc buffer, playing games with me
<daviid>i'll exit and come back
<ijp>generics are first class functions, and we may want to pass them in to other fucntions, return them from others, etc. etc.
<ijp>as I said, generics are first class functions, we may want to pass them into other functions, return them from others, etc.
<daviid>generic is a container
<ijp>fine, applicable struct
<ijp>same difference
<daviid>i mean you can't possibly prohibit errors by language design
<daviid>users will still need to learn how to program
<ijp>then you've never heard of a static type system
<ijp>you absolutely can prevent some types of errors by design
<daviid>did but reeally i am against
<ijp>not all, but some
<ijp>the point of all this, is that you want to introduce an extra namespace, which is a significant rethink of how scheme works
<ijp>generics are no longer objects, but tied to particular identifers
<ijp>that is a *huge* semantic change
<ijp>otherwise, you have to accept that some generics variables in that namespace are not going to be generics, and some generics are not going to be in that namespace
<daviid>ijp: we already provide all this through merge-generics and #:re-export
<ijp>re-export is irrelevant
<ijp>merge-generics has these problems, *but* it does not circumenvent the usual scheme way of doing things
<daviid>fine. #:re-export is a problem. how about adding export-<whatevernamesuitall> for setter|getter|...
<ijp>given what I have said, I think this is a significant, and unnecessary change, to guile, especially given the relative usage of the current module system and goops
<ijp>you can disagree, and I don't control guile, so maybe you can even get it in
<daviid>they can't be an error by adding a method to a generic function, write one for me. then, offering merge-generics and no mechanism for export behaving like re-export for methods is wrong
<ijp>the first line is a non-sequitur
<daviid>and yes i will try to get thses at least as options
<ijp>it has nothing to do with anything I have said
<ijp>daviid: why *reexport* and not just import from the original module?
<daviid>we agreed on merge-generics
<daviid>didn't we? so i have my generic, as if it was 'in one space'
<daviid>then i want export to add to that single generic
<daviid>not hide it, as it is the case now
<daviid>within a given module, there is a way to detect that it is a setter, getter, accessor and/or method right?
<ijp>depending on what you mean by setter, I think yes/no/no/yes
<daviid>then it should be added to the single [possibly merged] generic
<ijp>daviid: what you want is a #:merge for export, similar to how we have #:replace ?
<ijp><aside>which I also have issues with</aside>
<daviid>ijp: i want the default behavior for exporting s,g,a,m being create a generic if does not exists then add the method to the generic
<daviid>add the method to the imported generic if there is one
<ijp>if the generic was imported, then methods should have been added to the generic
<daviid>ijp: right now no, exactly a [trimendous] problem
*ijp tries
<daviid>even if you import, it will create a new generic and exporting it, hiding all existing previously defined methods
<ijp>see, now this concern I can understand
<daviid>ah great, thanks for your patience
<daviid>it will only do his job according to what we've said if you use #:re-export
<ijp>I'm heading off, but if you have a nice short example, I'll have a look tomorrow
<daviid>ok i'll write opne, thanks
*taylanub has read all of the above, didn't really understand much, is curious
<daviid>taylanub: try the goops tutorial and/or a clos tutorial
<daviid>it's worth the investment
<daviid>g-wrap, cairo, gnome and clutter are extensively using goops. in my opinion, clos [and therefore goops] is the best language layer ever invented by human beings
***chermobylae is now known as W-Crusher
<civodul>Hello Guilers!
<wingo>moin :)
<janneke>i would like to not (catch #t when running from the repl -- does that make sense?
<janneke>how do i do that?
<janneke>something like: (catch (if (interactive) 'foobar #t) thunk
<ijp>hmm, try batch-mode?
<janneke>ijp: that looks nice... however
<janneke>;;; <stdin>:4:0: warning: possibly unbound variable `batch-mode'
<ijp>add the question mark
<janneke>oh (defined? 'batch mode)
<ijp>and it's a procedure
<janneke>ijp: just what i need, thanks!
<W-Crusher>I actually saw some post on you on a mailing list about forcing a quite option into guile that didn't give compilation messages when you run it as a shell script from 4 years back, did anything ever come from that?
<wingo>nothing ever came of that, no
<W-Crusher>Low on the priority list? Doesn't seem very hard to implement a command line flag that does that.
<wingo>something like that, yes -- if you do it, do it by binding a null warning port
<W-Crusher>Ah oh well
<W-Crusher>one more thing
<W-Crusher>wingo, do you believe that you should have a dramatic title.
<W-Crusher>Like "Wingo, Lord High Protector"
<W-Crusher>It does have quite the ring to it, doesn't it?
<wingo>thanks but no thanks :)
<W-Crusher>Maybe "Lord Wingo, Supreme Commander of the Asgard Fleet."
<W-Crusher>aww man. =(
<W-Crusher>No one wants a dramatic title.
<wingo>best to keep expectations low :)
<W-Crusher>Guido has "Benevolent Dictator for Life", that comes some-what close
<W-Crusher>But still, it's not "Lord Guido I his Exalted one, DEfender of the Faith"
<W-Crusher>Elizabeth II of England and Scotland has quite a few good oens.
<dsmith-work>Hey hey
***sethalves is now known as sethAway
<W-Crusher>do you believe more people should have dramatic titles?
<dsmith-work>W-Crusher: heh
<ijp>for instance, should we refer to W-Crusher as Cadet?
<dsmith-work>No, Ensign
<dsmith-work>(if my memory serves)
<ijp>to wikipedia!
<W-Crusher>He actually quit starfleet to save some native Americans.
***sethAway is now known as seth_
***seth_ is now known as sethalves
<dsmith-work>Wingo, Hacker of the Hack ?
<daviid>wingo: did you change the font for the core text [and top menu] in your blog? it is terrible :) [i don't like serif fonts, matter of taste i guess, but pages seems 'glairy' now, i can't read it more then a couple of minutes anymore :), like the official gnome api doc, unreadable :)]
<taylanub>daviid: you could probably mock with your fontconfig to make serif fonts sans-serif :P
<taylanub>(but the documentation for that thing is horrible IMO)
<daviid>taylanub: i do that with iceweasel, but i mostly use epiphany and it does not offer that i couldn't find it anyway
<fridim_>(I agree with daviid in the matter of taste, I think it's terrible)
<fridim_>regarding this topic, an interesting website :