ActionScript 1, 2 and 3 Are Three Different Languages That Happen to Share a Name
The name suggests a single thing that matured in three steps. The reality is one clean break, plus an earlier layer of syntax that only looked like one.

Prototype Chains and Timeline Tricks
ActionScript 1 shipped with Flash 5 in 2000. Its design drew directly from ECMAScript 3, which means it was a prototype-based scripting language: objects were created by cloning other objects rather than instantiating formal classes. A developer who knew JavaScript of that era would have found it legible, at least structurally, though the authoring idioms were Flash-specific — code attached to individual frames in the timeline, or to button and movie-clip symbols on the stage, rather than gathered into separate source files. There was no compiler in the modern sense; the Flash authoring tool packaged the scripts into SWF bytecode, but type checking was largely absent and errors showed up at runtime, if they showed up at all.

AS1 suited the work the web needed in 2000. Files traveled over dial-up connections, animations were lightweight, and interactivity meant a button that jumped to a different frame. The language did not need to be a language so much as a stage-direction notation that could occasionally do arithmetic.

The Polite Fiction of AS2
ActionScript 2 arrived with Flash MX 2004, released in 2003. Macromedia added class syntax, interfaces, and optional type annotations — the surface vocabulary of a classical object-oriented language. The catch was that this was a compile-time veneer. AS2 classes compiled down to the same prototype chain machinery that AS1 used; the AVM running inside Flash Player 7 and 8 had not changed. Type errors caught by the compiler were real catches, but the runtime did not enforce them. A variable declared as a Number could still receive a String at runtime and Flash Player would comply.
Also in The Format
FutureSplash Animator Shipped in 1996 and Macromedia Bought It Before the Year Was Out
What Is Actually Inside a SWF File
For many working developers, AS2 was sufficient and welcome. It allowed larger codebases to be organized in ways that a team could navigate. External class files replaced frame scripts, and the language started to look like something a software developer rather than an animator would write. Studios producing adverts, e-learning modules, and branded mini-games adopted it widely. Flash game portals were expanding rapidly at precisely this moment, and AS2 became the language of the independent game economy that grew up around Newgrounds, Miniclip, and Kongregate.
Files traveled over dial-up connections, animations were lightweight, and interactivity meant a button that jumped to a different frame.
The Real Break: AS3 and AVM2
ActionScript 3 was a different thing. Adobe shipped it with Flash Player 9 in 2006, paired with a new virtual machine — AVM2 — that sat alongside the old AVM1 inside the player. AVM2 executed compiled AS3 bytecode and was, by any reasonable measure, a proper runtime: type-safe, significantly faster for computationally intensive work, and built around the ECMAScript 4 draft specification. Packages, namespaces, strict typing, a new event model based on the DOM3 Events specification — these were not additions to the old system. They required rewriting code from scratch.
The split was architectural. An AS3 SWF could not call into an AS2 SWF's code directly; the two virtual machines ran in the same player but communicated only through a narrow local-connection bridge. Libraries written in AS2 were useless in AS3 projects without a full port. For developers with years of AS2 code, the choice was to maintain two separate codebases or commit to a migration that offered no shortcuts.
Where this sits
FutureSplash to Adobe Animate: the software, the file format, and the virtual machine that ran inside a billion browsers.
Many developers never crossed over. The casual and advertising markets had invested heavily in AS2, its toolchain was stable, and the audience did not care which bytecode was running. AS3 attracted developers building richer applications — data-driven RIAs, complex games, the kind of work that genuinely benefited from AVM2's performance. The Experimental Gameplay Project prototypes and the more technically ambitious work coming out of the indie game scene increasingly used AS3 from the mid-2000s onward.
The practical consequence is that the archival record contains three incompatible bodies of code. Ruffle, the Rust-based Flash Player re-implementation, has had to tackle AS1 and AS2 support separately from its AS3 work, because they execute on different virtual machines. The name ActionScript is a label that covers what are, in any meaningful engineering sense, three distinct languages built on the wreckage and scaffolding of their predecessors.