On Mon, 03 Aug 2009 11:57:40 -0400, Michel Fortin <[email protected]> wrote:

On 2009-08-03 10:39:17 -0400, "Robert Jacques" <[email protected]> said:

Thank you for the very elegant expression of the problem and for posting the programming guidelines wiki. My criticism is that you're defining your context to narrowly. A function/property/field isn't just defined by it's name, but also by it's type and the context it's in. A 'transform' of type void or typeof(this) is obviously an action, while a 'transform' of type Matrix might be a coordinate frame. The object's type also conveys context information; a 'transform' on an autobot might be an action, while a 'transform' on it's 3D model might be a coordinate frame. Even if you don't know the return type off the top of you're head (i.e. you're doing a code review), 'transform;' or 'object.transform;' are obviously actions while 'auto a = object.transform;' or 'object.transform = a' is a noun. English solves it language ambiguity issues with context, so why can't the same solution apply to programming languages? Sure, pathological examples are possible, just as they're possible in English, but that's no reason to switch to a different language.

Interesting remark. You're right of course about the transform example is much clearer in context. I'll conceed that point. But take note you let the user of the API do the disambiguation instead of the designer who wrote the function in the first place. I believe the later is better placed to decide. That said, it's rather a minor point in my opinion.

I'm more concerned by the ambiguity when returning callable objects or delegates when functions have omittable parentheses.


I believe in a systems language, the default should be to user choice. That said, having a way for an api designer to enforce a particular usage, isn't necessarily bad thing either. The lack of an either-or/flexible option is, in my opinion, a flaw in all of the proposals so far.

Reply via email to