[1] http://research.microsoft.com/apps/pubs/default.aspx?id=1793...
What I meant was there needs to be constructs that guarantees that "this is going to be pure" and that "state can live here, not there".
D-lang has a start I believe, with a "pure" keyword.
I find that, as an enterprise developer working on large code base, most of my time is chasing bugs of silly null pointer exceptions and objects that are in unexpected state causing issues. Separating the grok of the code from the state eventually helps. And sadly there is little research spent in there, which is direct value to developers.
Increasing the quantity of pure code (and enforcing it) per class will reduce costly bugs.
I am amazed with what you can do though. I've had my shot at designing a language and miserably failed multiple times... But this why I'm raving about it... You may be able to solve this global problem that I never could.
> Separating the grok of the code from the state eventually helps. And sadly there is little research spent in there, which is direct value to developers.
I would argue that there is plenty of research in this direction in the functional programming community. This is what monads seem to be about, at any rate. The problem is that developers don't want to adopt these solutions because they are way too inconvenient or even unworkable from an expressiveness standpoint. So maybe we should look for a better way to temper state without throwing it into a ghetto...
> I am amazed with what you can do though. I've had my shot at designing a language and miserably failed multiple times... But this why I'm raving about it... You may be able to solve this global problem that I never could.
We will see; I went through my purity stage relatively early and am being extremely pragmatic these days. The secret sauce in my current approach is to have state, but limit how it can be updated: operations in Glitch must be undoable and commutatively ordered, which are huge restrictions but the result is very compelling (re-execution is possible AND re-execution can occur in arbitrary orders).
So state would be dealt with in a similar approach than the command pattern?
Sounds exciting.
I guess where I come from is the scare when a pure function gets littered with impurity much later on, and all we have to warn us is a unit test. No matter how big the comment is above the method, nothing stops a developer from sticking a global variable in it, and it's out the window.
This forces code reviews to be lengthy, etc. If on the other hand we had a @pure section and @everything_else section, I feel this would make things easier to reason about... We could also measure the % of pure vs non-pure code, as code quality. All of this in an object oriented language of course. I'm no fan of Haskell.
As opposed to telling us that 2 + 2 will indeed produce 4, research money should be spent on separating pure code from state, I/O, etc. in languages like C#. That would be a huge advancement forward and cutting down the cost of bugs around the globe.
This is cool though.