User loginNavigation |
Interesting? closure/object ideaI've been designing a language for my kids to use (goal: low barrier to entry, gentle learning curve up to serious power); one of the design choices has been to make closures easy to write. After reading Paul Graham's ILC 2003 talk, I started wondering how much I would need in the language to permit objects to be done as a library. Objects are equivalent to closures, but I wanted to leave room for a convenient syntax. (If nothing else, a lot of the system facilities I'll want to bind to, such as GUI toolkits, are OO, so being able to speak OO lowers the impedance mismatch.) So, the first thing I thought of was to break encapsulation (again, this was triggered by Graham's talk), to expose the bindings contained in a closure. So, if we do OK, so that can be used to make objects convenient. Then I started wondering about inheritance. After some false starts, I hit upon the idea of letting the right-hand argument of "." be a general expression. So, for example, C2=C.{var double={x*=2}} creates class Point(x,y) { to moveBy(dx,dy) { x+=dx; y+=dy; } to abs() { sqrt(x*x+y*y); } }maps to: Point= {x,y: { var moveBy={dx,dy: x+=dx; y+=dy;}; var abs={sqrt(x*x+y*y);}; } } and: class PointWithFlip(x,y): Point(x,y) { to flip() { var tmp=x; x=y; y=tmp; } } maps to: PointWithFlip= {x,y: Point(x,y).{ var flip={var tmp=x; x=y; y=tmp;} } } That is, to create a I'm pretty happy with this idea; it should let me teach my kids closures, rather than objects as such, but without blocking them from doing OO should it be useful. And, of course, I suspect that being able to get an arbitrary expression evaluated within a closure will turn out to be pretty powerful--with that, you could do things on the fly for which OO requires a subclass. And it doesn't distort the core language much, because you have to be able to construct closures inside closures anyway. Is this something that's been studied before? If it has, of course, I'd like to read about it before trying to implement it. By John Stracke at 2004-10-11 13:15 | LtU Forum | previous forum topic | next forum topic | other blogs | 9512 reads
|
Browse archives
Active forum topics |
Recent comments
22 weeks 6 days ago
22 weeks 6 days ago
22 weeks 6 days ago
45 weeks 17 hours ago
49 weeks 2 days ago
50 weeks 6 days ago
50 weeks 6 days ago
1 year 1 week ago
1 year 6 weeks ago
1 year 6 weeks ago