I wrote my first line of code in ActionScript 2.0 it was 13 years ago and it was streamlined with the style of web. Big boom of flash animations, letters flying around and flash menus. In addition I’m putting myself as the worst person on the World in terms of color matching. At the moment of doing it I didn’t know that I become a programmer, I liked PC though.
A couple of years later I was doing more and more programming, some in Pascal, some in C. Neither of them attracted me for more time (before college) so that I was experimenting in Flash, and I enjoy a lot the simplicity of putting a movement to MovieClips, Timeline manipulation or doing mouse actions. During college, I’ve switched focus to C++98, Verilog and SystemC. Probably by accident I started to work in game industry at GameFactory, where I co-developed around 7 titles in Flash and 2 in Unity 4, then at King I’ve started to work as an AS3/C++ Engine developer. All of it doesn’t make me guru neither of language nor of the best practices. I achieved level where I felt comfortable with API and tech and I could utilize well that Flash offers,
Bright sides of Flash
I didn’t notice this aspect before, but after working as an engine developer I understood how hard is to provide clean API what is future-proof. As a noob I was able to deduce what some API call will do. For 8 year of working with Flash Player I don’t remember any problem with breaking changes. API was flexible enough to add new functionality, it was smartly designed around passing an extra configuration objects like LoaderContext. For the instance, when they added an asynchronous image decoding, it wasn’t done by an extra argument for function call, it was an extra property of context. KISS in practice.
I love in place XML:
var xml:XML = <foo><bar/></foo>;
I love Dictionary with weak keys, and Object where you can put other objects as a key.
I love typed Vectors, (And hate a little bit for weak performance even with fixed size, and conversion between them).
I love for each..in loop.
undefined, no confusion with
this, and static variables / functions.
Online documentation was always maintained in very professional way, with a split on versions, it was localized. SWC what holds library contained ASDoc embedded, so that IDE’s like FlashDevelop could hint. I wish it could be like that for every software.
Fonts and Audio support
It wasn’t easy to have a nicely embedded fonts with required range of characters, and ideally this font should be downloaded separately from the main swf. It wasn’t easy but it was possible. With some tiny exceptions it worked nice, and it worked in the same way on every platform and browser. The same case for audio. It worked.
More like fairy tale for me, because I’ve never done business application in Flex. But when I was experimenting in pet projects, I was amazed how nicely data bindings works.
Stage3D and AGAL
Adding Stage3D support in Flash 11, was a manifest of very rationale approach of API desing. Adobe could mimic Stage and DisplayObject tree. Instead of that we’ve gotten a low level API, what allowed to create Starling, Flare3d and many other frameworks. AGAL is an Assembly like Shader language what is able to run on most of GPUs, and if GPU acceleration isn’t possible, it’s possible to run AGAL shaders in Software rendering mode.
Pixel Bender, PrinterJob, Camera, Video Decoding, AMF…
And many others what makes Flash super powerful.
Alchemy aka FlasCC aka CrossBridge
This tool chain allowed to compile C++ code to SWF. It provides a base platform abstraction what allowed to run almost out of the shelf a C/C++ project.
For the instance you can see a demo of compiled Quake2 to SWF
At the moment I can’t find one demo what blew my mind, it was a demo of running Flash withing Windows (98 IIRC) within Flash via Alchemy. It was terribly slow, but it worked.
I believe that it was a missed opportunity to get more traction on Game Development what could create a strong foundation and community of developers. My assumption is that Adobe has chosen to promote more Adobe AIR as a cross platform solution for games. Or maybe this wasn’t something needed back in time? Both Open Source projects are dead right now, or maybe abandoned is more correct expression, because I believe that people still use them.
Nowadays Emscripten is a spiritual successor of FlasCC. Fortunately it has a different model: Open Source + Strong Community, hence it’s more likely to be a successful technology.
Missing an HTML5 target
Community is screaming for HTML5 target, and I do understand that people are OK to deal with limited set of functionality just to be able to output valid WebGL/ASM.js/WebAssembly build. In the best of my knowledge it’s impossible right now. Too bad.
Open Source AVM2
In current circumstance, I can see only one way to keep Flash supported. It requires a brave move from Adobe and make sources of Flash Player open (AVM2). This is crucial to trigger a community to create a WebAssembly version of Flash Player (most likely not feature complete). But wait, there is one on Adobe’s GitHub and Mozilla has Tamarin, and don’t forget about Linux’s Lightspark. What went wrong with the open source model?
After looking at fork tree, it looks that someone is working on it:
Flash was the great motivator for browser vendors to improve their technology, it was and it’s a reference how the API of Library should be designed and maintained. Flash encouraged numbers of passionate people to become developers. Finally, the team did an amazing job maintaining and developing the product for such a long time.
Discussion on HackerNews: https://news.ycombinator.com/item?id=14800953