One thing to keep in mind is that while adding such things to the Perl 6 core might not be the highest priority at this point something like that could be implemented as a module (if we have a consistent idea what we want). Currently it's possible to change the language to (a subset of) Perl 5 ( https://github.com/rakudo-p5/v5) so it should be possible to at least prototype the units handling.
2013/8/23 Steve Pitchford <steve.pitchf...@gmail.com> > I'll start with your last point: > > At this point, though, plans to expand on Perl 6's capabilities are taking > a back seat to getting Perl 6's existing capabilities implemented. This > has been true for some time now, in fact — which is all the more reason to > get Perl 6.0 fully implemented as soon as possible. > > I've been lurking here for a while, and have learned a great deal whilst > reading. I've had previous plays with perl 6, would love to again, but find > myself limited by freetime. To those ends, I'm just here to chat about > something that seems interesting - not to try to influence the hard work > being done by all of those pushing the perl6 project forwards. > > I'm a big fan of Eric Evans Domain Driven design - it's a fantastic book. > He pushes the importance of context and relevance with respect to object > orientated programming. > > From that perspective - the answer to the following question is rather > brutal: > > How would you implement, in a robust way, the following things: > > 1 kg + 1 kg = 2 kg > 2 m * 3 m = 6 m^2 > 5 kg * (3 m/s)^2 = 45 J > > The answer is that you wouldn't - the problem domain is so vague as to be > meaningless. 1kg or 1m of what? > > Going back to apples - The value of 1kg of apples in terms of > representation depends on context. > > For example, it would be a chore to try to arrange a group of apples to > make an exact kilogram. On an individual basis you may have 6 apples. In > some cases you may represent that as 6 instances. In another context, you > may represent a collection of apples in their tray form - which may have a > notional weight with a tolerance. Now, if one were writing a checkout > system, it may be sufficient for one to have a "fruit" class, of which > "apples" and "oranges" are instances, and both are charged in weight - and > their may be additional algorithms to predict stocking levels and > re-ordering thresholds, but from personal experience, these algorithms > often require the backup of business process such as stock takes to ensure > that waste, theft, and approximation errors are taken for granted, and we > don't end up with a backlog of rotten apples or empty shelves. > > That's where software engineering comes in. Systems are sharded and > Classes are defined containing aggregations of behaviour. In a grocer, you > may never need to add 1kg of apples - you may sell 1.25kg in a single > transaction, you could sell 6 apples, depending on your pricing structure. > You could even sell 2kg of discounted fruit which includes apples and > oranges close to it's use by date. > > Because you have moved away from primitive arithmetic and into object > behaviour and relationship, the notion of 1kg + 1kg becomes irrelevant. > > Because systems are becoming fragmented, it may make no sense to hook the > checkout up directly to the purchase system. You can happily sell weights > of apples, but have stock control implemented by how many trays of apples > get sent to the shop floor - in this case, you may have an alarm that > indicates another tray is probably needed, but it tackles the inherent > disjoint between purchase and sale quantities without any complex, over > generic modelling of the relationships between trays of apples and weights > or other quantities sold on the shopfloor. > > The fragmentation of the system in this way also allows the canny grocer > to flog bags of mixed fruit without worrying that his software developer > will charge him thousands and delay implementation of what seems the > exploitation of a simple opportunity by a few weeks. > > > ---------- Forwarded message ---------- > From: Jonathan Lang <datawea...@gmail.com> > Date: Fri, Aug 23, 2013 at 9:47 AM > Subject: Re: Commensurability as Key > To: Steve Pitchford <steve.pitchf...@gmail.com> > > > > > > > > On Aug 23, 2013, at 1:17 AM, Steve Pitchford <steve.pitchf...@gmail.com> > wrote: > > > > > I think James Bowery's comments are intended to address a real need for > programming languages to work with units of measurement. It might even > prevent aircraft accidents which have really happened because fuel was > delivered in Canadian gallons, or kilograms, when the pilots request was > for American pounds in his owners manual. Commensurable purchase orders > would be nice. > > > > Putting tools like PHP and VB to one side for a second, > > > > Maybe I'm getting the wrong end of the stick, but this just seems like a > case of what is known in object orientated terms as "Primitive Obsession" - > in this case, the overuse of integer and float arithmetic where objects > make far better use cases. > > > > There does seem to be significant clear water between the use of > procedural/functional languages for Maths and the rising trend of using OO > languages ( though all too often badly ) for implementing industrial > solutions - does this represent a split between computer science and > software engineering? > > > > OO - done right - emphasises relationships and the strengths of type > over traditional, potentially clumsier coding. This is obviously not > without overhead, and does appear to be a paradigm shift too far for many, > but I'm wondering if anyone can explain to me why OO is not the most > appropriate solution to the "Commensurable" problem space in perl 6? > > > > Steve > > I'm not sure if this is an answer; but: > > How would you implement, in a robust way, the following things: > > 1 kg + 1 kg = 2 kg > 2 m * 3 m = 6 m^2 > 5 kg * (3 m/s)^2 = 45 J > > Bear in mind that the above assumes that a common system of measures is in > use; things get messier once you start trying to add miles and kilometers > together, and messier still if you need to differentiate between (tons of) > apples and (tons of) oranges. > > I'm not saying that there isn't an OO-based solution for this; in fact, I > suspect that there probably is. But it's not a trivial one; nor is it > clear that Perl wouldn't benefit from a bit more syntactic sugar here. > Would it be possible, given an "apple" role, to be able to say something > like the following? > > my $x = 1 apple; > $x *= 5; # $x == 5 apples. > $x -= 2; # error: can't subtract a unitless number from 5 apples. > $x += 2 orange; # error: can't mix apples and oranges. > > That is, attach a collection of roles to a numeric value in a manner where > the roles represent some sort of "units" for that value, instead of being > applied directly to the value in question. > > --- > > At this point, though, plans to expand on Perl 6's capabilities are taking > a back seat to getting Perl 6's existing capabilities implemented. This > has been true for some time now, in fact — which is all the more reason to > get Perl 6.0 fully implemented as soon as possible. > >