Some recent discussions around the 'net have been tossing around the ideas about static typing in python, briding static and dynamic typing in C++-like languages, and similar concepts of making static-typing more dynamic or dynamic languages more optimized in static-typing ways. Particularly, I was sparked by Michael Feather's "Set of Tests" article. There are different ways we might look into bringing those concepts to Python, and I rolled a few of them around in my head. My final mental landing was "Can we utilize the assert statement to inform the compiler about these tests that are absolute?". Of course, you probably can see how this is a lot like what assert does now, with the only difference being between run-time and compile-time being the target of the rules. This leads us to looking for where an assert could be compile-time verified and then used to optimize code. The most basic compile-time assert I can think of us "assert builtin is builtin", which would be a contract that the name 'builtin' will continue to be bound to the default builtin object, and won't be changed. This means we can do "assert isinstance is isinstance" and the compiler can make assumptions it could not before: that when it sees the name isinstance, it knows exactly what it is before runtime. This opens up other expressions that use these known names and promise other things to the compiler. We could do things like "assert isinstance(l, sequence)" or "assert len(l)==3", which would create a pair of contracts that l was some kind of 3 element sequence, and the compiler could make it a tuple for optimization.
I’ve been spending a good deal of the last two days preparing mentally for starting a whole new challenge as a developer. New things aren’t new to me, but this is different and big enough really call for some Deep Thoughts ™. For one thing, I’ve made a big move from the world of Python web development to totally other Python work and while web development has never been the only thing I do, it has been the only work that paid the bills. That transition isn’t one that bothers me or daunts me, though. Instead, I’m thinking about transitioning to the scope of the work I’m getting into. For a long time, I juggled multiple clients and client projects every day, so no single project usually took up most of my time. Every developer juggles time through the day, but exactly how that works in each company and on each project varies a lot. I was looking for a place that I could really focus in a way that I haven’t for a long time. I think I found that, but now I have to deal with the consequen...
Comments