Michael Orlitzky writes:
> I have a matrix m... how come,
>
>   * m.rank gives me bullshit
>   * m.rank() works
>   * m.T() crashes
>   * m.T works?

This is in my mind the most compelling reason to phase out properties in
Sage. I think Erik makes many good points, but ultimately I think
consistency is more important. The problems with ? and tab-completion
seem manageable, so I leave that aside.

In many ways, programming math is a software designers worst nightmare,
where designing the good API that is logical and works in all cases
quickly becomes daunting. Michael's example above is nice: the rank of a
matrix is an invariant, so it should just be a read-only property, just
like all the my-first-@property-tutorials tells us, right? But by that
logic, tons and tons of zero-argument methods should be read-only
properties in Sage. And if someone later on implements a clever
algorithm2 for computing the rank of certain types of matrices, and
would like to toggle that by an optional argument, @property is suddenly
a problem. And so where would you draw the line?

Properties are preciously little used in Sage. And I see no clear way of
using them in a consistent manner, in the type of objects that is Sage.
So I feel the rule of consistency tells us we should therefore not use
properties at all (perhaps except for the types of exceptions discussed
by Nicolas Thiery and Simon King).

Best,
Johan

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to