On 5/6/17 12:45 PM, qznc wrote:
I just watched Andrei's Keynote slightly delayed so I could not ask live
via chat. One question and one remark:
1. Is there any reason to restrict this to integrals? Why not use
Checked!(float,H) or Checked!(complex,H) or Checked!(polynomial,H)? If
it is more general, then we should change the name as long as we still
can (it is experimental).
I haven't tried this yet, but I'm fairly sure this can be made to work
with ease by implementing a couple of primitives: isUnsigned and
checkedOp. The latter performs a checked unary or binary operation and
returns the result along with information on whether the operation has
overflown or not. That's not enough for floating-point operations; off
the top of my head, there's underflow and loss of precision.
2. With respect to "Where did you steal all this money?": I recently [0]
read about the Metaobject Protocol (MOP) and I noticed some
similarities. MOP comes from the Lisp world, where things are more
dynamic, but also compile-time and run-time are not that clearly
separated. At least the intention of Gregor Kiczales and Andrei's DbI
match. In Kiczales words from 1992 [1]: "for those cases where the
underlying implementation is not adequate, the client has a more
reasonable recourse. The meta-level interface provides them with the
control they need to step in and customize the implementation to better
suit their needs"
Thanks! I am indeed aware of MOP and Intentional Programming. They are
related but distinct. MOP is mainly concerned with mutating a program
such as adding/deleting methods, creating new types, etc. DbI focuses on
combinations - assembling components into larger components in flexible
ways.
[0] http://beza1e1.tuxen.de/leaky_abstractions.html
Nice job writing a post so quickly!
Andrei