This last week or two we've seen a lot of heated debate around the future of ActionScript and the Flash Player. Its nice to see this kind of excitement and passion for the technology -- yet I can't help but feel we're experiencing a form of 'continental drift' here. I've seen ActionScript grow up from its humble beginnings with just a handful of frame actions to supporting prototypes, object-oriented syntactical sugar to where we now have a full fledged object-oriented programming model.
That is a good thing, right?
Yes and no. While I wouldn't have dreamed it some time back when I was advocating object-oriented code as the one-stop solution to all your problems, I'm starting to feel we're losing out on a lot that made ActionScript so appealing.
This is something Aral Balkan has been saying for the last year or two and I initially considered blasphemous. Is a focus on how to do things 'properly' holding us back getting things done? I believe so.
Is there anything now - excluding improvements to Flash Player performance - that could not have been done with ActionScript 1.0? Very little, though admittedly it now takes a lot less effort.
Thinking back to the old Macromedia slogan "Experience matters" -- who's experience are we talking about here? Is the visitor to your site, the person using your application going to be in awe for how well you structured your code or what design patterns are implemented? Hell no.
I see a lot of people talking about features like generics, method overloading, private constructors etc. All great features that I would love to see included some time. Improving the language is one thing but it shouldn't impede on what actually matters, the user.
Innovation in the Flash Platform is primarily driven by creativity rather than the feature set of the tools you are given.
I was reminded of this thinking back to some old workarounds in the Flash 4/5 days. More recently, people could have simply said Flash Player can't do 3D, you can't dynamically generate sound -- guess what, Papervision3D and Hobnox Audiotool happened and pushed the envelope.
Rethinking the model
Is chasing after features in other object-oriented languages a sustainable solution or should we look at a different approach?
In my opinion rethinking the Flash Player to be more decoupled from ActionScript and enable anything to run on top would be the way to go. There is no such thing as a one-size-fits-all solution especially if you consider going beyond just web and desktop to mobile and devices. This would make perfect sense in the context of the Open Screen Project and a unified platform.
Going language agnostic is obviously no small feat but with Alchemy and LLVM the idea of a dynamic language runtime is certainly not unfeasible. This also opens up opportunities for a formal plugin architecture allowing you to 'decorate' the Flash Player with additional functionality.
Thinking further outside of the box having the ability to run code in interpreted mode rather than necessarily having to compile SWF binaries would significantly open up the developer landscape and capitalize on Adobe's investment in ECMAScript 4.
With that scenario in mind I would like to see Adobe focus primarily on the following core areas for the Flash Player: performance, multi-threading, hardware acceleration, compiler optimization.
I think the current focus on object-oriented orthodoxy in the community and evolving the language is not necessarily the right approach.
Moving further away from at least the option of dynamically typed languages and simple constructs, we now celebrate having something like
navigateToURL(new URLRequest("http://www.peterelst.com")); over
The Flex framework was an interesting move in this respect, but what do you see -- people starting to feel the need to use additional frameworks on top of that. Adding abstraction layer on top of abstraction layer. It is as if we strive for complexity to validate our work as developers.
I'm definitely not one to promote doing away with object-oriented code but I question the motives for evolving it to imitate other languages, what it would fundamentally solve and what role it would play in evolving the Flash Platform. Maybe its worth a rethink.
"Make everything as simple as possible, but not simpler" - Albert Einstein