On Feb 22, 2009, at 9:09 PM, Mathieu Bouchard wrote:
On Fri, 20 Feb 2009, Hans-Christoph Steiner wrote:
On Feb 18, 2009, at 2:57 PM, Mathieu Bouchard wrote:
That said, I'm not very fond of declarations, but I don't think that it's an issue of programmers vs non-programmers, it's a matter of people who like to declare vs people who don't, and that's a quite different split. There are quite a lot of serious programming languages that avoid declarations as much as possible.
Can you give some examples of how other langauges handle this kind of thing without delcarations?
Not really...
In Smalltalk you don't have declarations like this, because there are no namespaces, and because there are no files to load.
In Ruby you load files, but they don't have to be tied with any classnames in particular. Loading a file can be considered a declaration if you wish, but it's an action. There are namespaces, but you import them by performing the action of adding a superclass to the class that you are in (even though all ruby docs deny that this constitutes multiple-inheritance... go figure!)
In Tcl, there are namespaces, though many libraries don't use them. You have file-loading just like Ruby's, and you have packages implemented in terms of file-loading. Declarations are really actions in this language too. Namespaces exist, but were added after many years of existence of the language. (Not counting the other kind of namespace called "ensemble" and that has nothing to do with the newer feature called "namespace"). The import feature is probably similar to Python's, I don't know; it works as an action as well, of course.
A big difficulty with namespaces in Pd is that the user doesn't control the loading order of objects, and objects aren't "run" in the way a program is, so [import] has to be very special. If Pd were more like one of the above systems, you'd be able to [loadbang] an [import] before the rest of the patch loads; but this is only one way of thinking about the correspondence between languages... depending on how we decide to map concepts across languages, we would get to different possible equivalences of features.
Tcl and Ruby don't have a two-in-one load-and-import "declaration", whereas Python and Perl do. Some other languages may look like they have a load-and-import declaration, but instead have only an import declaration, and do all the loading automagically: for example, in Java, you can say java.util.Vector and it gets loaded, no need to import.
About declarations in general and languages that avoid them, it's something that doesn't apply so well to namespaces as it does to other language features that don't apply to Pd.
Something you could take from Java is that creating the objectbox [zexy/foo] would cause the loading of zexy.pd_linux if it is found. Maybe.
My main advice would still be to avoid having to use any declarations for things that ought to be internal classes in Pd but aren't. That's very subjective. For example, much of zexy and iemguts could go in that category, imho, and much of many other libraries as well.
Yes, import/declare ends up being a bit weird. Mostly, I think the main issue is when someone adds an import midway thru a patch. Then next time it loads, it could end up having different files loaded for the stated objectclass names.
Perhaps then changing [import] should force the whole patch to reload. That would be annoying since the patch would lose its state, but I suppose the state could even be saved somehow.
Or perhaps there is an even better solution out there for something like namespaces in a visual programming language. Any ideas?
.hc
----------------------------------------------------------------------------
Using ReBirth is like trying to play an 808 with a long stick. - David Zicarelli