From there, you got the browser war, you had to pick up a camp:
Internet Explorer vs Netscape, and about that time Flash came along.
At the time I was the webmaster for MSN info (France) and here what happened: Microsoft told us to use that new thing ShockWave Flash instead of GIF for some little bit of advertising that needed to be more interactive.
At that point, I was with my fresh copy of Macromedia Flash v3 (maybe 2?), and forced I had to learn Flash. It was OK’ish, the vector things were cool, but the programming part were horrible, in fact there were no programming language, more like some actions you could add this and there (eg. tell target to do this or that, gotoandplay there, etc.).
And greatest feature of all: it would work the same in IE and Netscape.
Then, when Flash v6 came, there I was really hooked up: they added events and try/catch errors. And so I kept using it and learning more of it etc. for each new version: 7, 8 ouh ActionScript 2.0 now, 9, 10, etc.
ActionScript 2.0 was basically what JS developers have now,
underneath the code was still AS1 but you had this syntactic sugar on top to make the language more structured and allow the compiler to catch errors early.
But the real kicker was with v9, in the mean time Macromedia has been bought by Adobe, and here in 2006 we suddenly had this new virtual machine and a new ActionScript language: basically AVM2 and AS3.
At the time, a lot of dev complained, they did not want to use or even learn AS3, they wanted to stick to AS2, me it was kind of the opposite, after being on the C# beta and having learned couple of other languages I really embraced AS3 completely from the get go.
That to explain why (probably) Adobe did not forced a move to ActionScript 4 in 2014, because they remembered 2010 (4 whole years after AS3 was available) you could still find dev who did not want to hear about AS3 and wanted to stick to AS2, and in 2010 we also got struck by “Thoughts on Flash”, not being able to run Flash on iOS , a catastrophic “doom of Flash” bound to happen right ?
And here Adobe had a stroke of genius, they already had AIR (Adobe Integrated Runtime) and they made it work in such a way that you could cross-compile a SWF to generate a binary (IPA) for iOS.
I was on the Gemini beta, the project that preceded AIR, AIR 1.0 was great but same as Flex, Adobe did not really market it well from the beginning eg it was an “adobe integrated runtime”, which basically were speaking to no-one except geeks like me who knew the potential of AVM2+AS3 on the desktop.
But if you look at how Adobe evolved its own presentation of AIR, they stopped to call it just “air” but “Adobe AIR” and started to talk about OOB experience.
Wait … OOB what ?
Out Of Browser experience
simply put: it’s like all the things you love in Flash but it works outside the browser
So, long post, in fact long intro to what I want to say about improvements of AS3.
But AS3 is nothing by itself, you need to add 2 things to make it great
- the Flash API (or at least a good API)
AS3+AVM2 is almost by itself a killer app, it’s not only the language but also the VM that goes with it, it can compare head to head with
- the Java language and the JVM
- the C# language and the CLR
So you take AS3+AVM2 and to that you add the Flash API,
remember the long intro, that’s where I use it
When we moved from AS1 to AS2, we were able to keep using the same API, but improved over time, but still … the same API.
Same, when we moved from AS2 to AS3, Adobe kept around the same API, they adapted it to work with AS3, events, etc. but you could still use the same API and yeah that is very important.
If you can compare the AS3 language to Java and C#,
and then compare AVM2 to JVM and the CLR
then you could compare the Flash API to the .NET framework and the Java Class Libraries.
And it’s here where I say: we don’t really need any AS3 improvements at the language level.
Wether you have an “abstract” keyword to define abstract classes etc. or not, does not really matters.
Oh I know a lot of dev would be all over it “oh no!!! we do need abstract classes, because of this and that otherwise we can’t do blah blah blah”.
No you don’t, it’s not because you have an
abstract keyword that suddenly you gonna be able to do things that were not possible before, it’s just code architecture, it’s not gonna make you code better or faster or solve problems for you magically, stop being a baby.
It’s like a C dev who would say “oh sorry no pointers? well I can not work with Java”, it’s ridiculous.
But yeah for some AS3 dev they want generics, abstract, and tons of other stuff that they found in other languages like Java and C#.
Except, those things they get added over time (eg. they were not available from v1), and now if you talk about C# or Java you HAVE TO mention the version, otherwise you don’t know which language you are talking about
I can guarantee you that working with C# v1.0 vs C# v4.0 is a very different thing, it is called C# but the whole thing feel like a different language, and same goes for Java v1.6 vs Java 1.8, they both are very different beasts.
Now look at our ActionScript history
- basic actions “commands”
- ActionScript v1.0
- ActionScript 2.0
class based sugar syntax
- ActionScript 3.0
tons of things from class/interface
to namespace and other advanced things
what is the constant?
the Flash API
it always been there, been improved and matured over time
and with a nice versioning scheme (not ideal but good enough) linked to the SWF version (eg. the level of API available).
if you had a project made for AIR 1.0
and want to improve it and move to AIR 20.0
what changes really ?
Your API, but not the language, or very few of it
from AIR 1.0 to AIR 20.0 that’s 19 different releases in between
do you have to rewrite your whole AS3 code?
can you improve the existing code with new API ?
This is why I say you don’t want ActionScript 3.0 language improvements because the language in itself does not really need them.
You may need more API functionalities but that’s about it.
In fact, if Adobe were to ask for change in the languages I will probably vote “no”, unless those changes add new things without breaking old things.
Read: I don’t want to learn a whole new ActionScript language.
I can learn new API, new features, but no way I learn a whole new language, if I wanted to do that I can move on to tons of other stuff.
You see, that’s my point of view, you have the “long intro” history to understand where I come from, but anyway this kind of thing will always be very biased.
Now, if you want a little fun
tell me about one AS3 language feature you are really missing and why,
you know, a reasonable argument for it
and I’m pretty sure I can show you why this feature is not really needed
go ahead bring me your best argument about abstract classes, enum or whatever, I dare you