I hope you're not suggesting that I was contrasting the quality of a piece of code that's forty years old with one written in a modern programming language...
-- Cédric On Tue, Oct 30, 2012 at 7:34 PM, Ricky Clarkson <[email protected]>wrote: > The difference being that your Pascal example has no notion of one > side being the real side, hence it being useful for subverting the > type system, and an Either has that defined and doesn't allow any > subversion, but lets you abstract over it being one thing or the > other. In C it can be used for 'evil' too but a common approach is to > have a tag saying what the type really is. > > On Tue, Oct 30, 2012 at 11:25 PM, Cédric Beust ♔ <[email protected]> wrote: > > Bouncing off another topic mentioned in the latest podcast: union types. > > Yes, C had them but the first time I was exposed to them was in Pascal, > and > > the discussion on the podcast reminded me of an awesome hack that blew my > > mind a very long time ago. > > > > Pascal was well known to be very strict and safe. Among other things, it > > didn't let you access the memory directly, which was a big deal in the 8 > bit > > era where memory protection was a distant dream and PEEK and POKE were > how > > you wrote games. > > > > And then, one day, somebody found a way to address the memory using > standard > > Pascal. Here is the trick (from memory, so it's probably not quite > correct): > > > > type > > b = record > > x : array[1..65536] of ^integer; > > y : integer; > > end; > > > > This declares a union type that is made of either an array of 65k > pointers > > to integers or a single integer. Then you initialize this record in its > "x" > > side with the memory address you want to peek and you access it by using > the > > "x" side of the record. > > > > It took me months to understand what this code did, but what a > revelation it > > was when it finally clicked... > > > > By the way, these types are formally known as "sum types" (Either is one > of > > them). > > > > -- > > Cédric > > > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Java Posse" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group at > > http://groups.google.com/group/javaposse?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Java Posse" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/javaposse?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Java Posse" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
