improving the join function

Jonathan M Davis jmdavisProg at gmx.com
Mon Oct 11 20:46:45 PDT 2010


On Monday 11 October 2010 20:34:41 Daniel Gibson wrote:
> Andrei Alexandrescu schrieb:
> > On 10/11/2010 08:57 PM, Daniel Gibson wrote:
> >> But right now the point is: join() does something completely different
> >> and should be renamed (or deprecated in std.string and replaced by
> >> union() - a real join isn't needed in std.string anyway, but when join()
> >> is deprecated in std.string you can implement a real join in
> >> std.algorithm without causing too much confusion).
> > 
> > I think union() is a worse name than join(). The discussion was to
> > generalize within reason std.string.join, which is present under that
> > name and with that functionality in many other languages and libraries.
> > 
> > Andrei
> 
> Okay, union does kind of suck, because it implies set semantics (and thus
> no ordering).
> 
> What about concat()?
> It seems like join() is expected to work this way for strings.. but as a
> generic algorithm working on kind-of-cursors?
> std.algorithm already has some operations that are also in the relational
> algebra (setDifference, setIntersection, setUnion, Filter, even Group
> (like in group by) etc), adding a join (as in relational algebra join)
> implementation would only make sense - but how are you gonna name that
> thing if join() is already taken for some kind of "concatenation with
> additional seperator"? Sure, "setJoin" would be available, but having both
> join and setJoin doing completely different things would be confusing.
> 
> What about something like
> char[] concat(char[][] words, char[] sep="") // or sep=null
> in the string case and something equivalent in the ranges case?
> 
> Cheers,
> - Daniel

Really. It's not that hard to have a function with a name that means different 
stuff in different contexts. join is an excellent name for what join() does. Yes, 
there are joins in database which are different, but so what? Nothing in 
std.algorithm has anything to do with databases. We may end up with a module 
that does, and maybe it'll have a join() function too, but that doesn't mean 
that std.algorithm can't have one. As others have pointed out, there are other 
languages which have a join() function which does essentially the same thing as 
the one in std.string. I say leave it as join(). It's a fine name, doesn't 
conflict with anything, and doesn't preclude the name being used in database code 
later.

- Jonathan M Davis


More information about the Digitalmars-d mailing list