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

Reply via email to