ActionScript es el único lenguaje de este Atlas que está muerto de verdad, y por eso merece una ficha: su historia es la mejor lección sobre dependencia de plataforma que este curso puede ofrecer. Durante una década movió la mitad de la web interactiva; el 31 de diciembre de 2020 dejó de ejecutarse en cualquier navegador del mundo, en un mismo día.
🎯 Por qué está en este programa
ActionScript es un primo de la familia JavaScript / web (Atlas) —de hecho, es un dialecto de ECMAScript, hermano directo de JavaScript—.
Está aquí por una razón que no es técnica: es el caso de estudio de qué pasa cuando el lenguaje depende de un tiempo de ejecución propietario (clases 162 y 164). PL/I y RPG enseñan lo mismo en su versión lenta; ActionScript lo enseña en su versión brusca. Y ActionScript 3 es, además, la implementación más completa que existió del abandonado ECMAScript 4.
| Año | 1998 (AS1); AS2 en 2003; AS3 en 2006; fin del Flash Player el 31-12-2020 |
| Autoría | Gary Grossman, Macromedia; después Adobe |
| Familia | JavaScript / web — implementación de ECMAScript 4, que nunca se aprobó |
| Paradigma | Orientado a objetos con clases, dirigido por eventos |
| Tipado | AS1/AS2: dinámico. AS3: estático opcional, con comprobación en compilación |
| Memoria | Recolección de basura, con conteo de referencias y marcado |
| Ejecución | Bytecode sobre la AVM2 del Flash Player, con JIT |
| Estado | 🔴 Extinto en la web; sobrevive en Adobe AIR y en emuladores |
Flash empezó en 1996 como una herramienta de animación vectorial. En 1998, Macromedia le añadió un lenguaje de guion —ActionScript— para que los botones hicieran algo.
Y entonces pasó lo que nadie previó: Flash se convirtió en la plataforma de aplicaciones de la web.
Entre 2000 y 2010, cuando el navegador no podía hacer casi nada —sin canvas, sin vídeo nativo,
sin audio, con un JavaScript lento y con diferencias enormes entre navegadores—, Flash sí podía. Y
por eso llevaba dentro:
ActionScript 3 (2006) fue un salto técnico serio: tipado estático opcional, clases de verdad, paquetes, excepciones y una máquina virtual nueva con JIT que multiplicó el rendimiento por diez. Estaba basado en la propuesta ECMAScript 4, la modernización de JavaScript que se estaba negociando entonces.
Y ES4 se abandonó en 2008. JavaScript siguió por otro camino —el que llevó a ES5 y a ES6—, así que ActionScript 3 quedó como la única implementación completa de un estándar que nunca existió: un lenguaje huérfano, primo de JavaScript pero incompatible.
El final tiene fecha y carta: en abril de 2010, Steve Jobs publicó Thoughts on Flash, explicando
por qué el iPhone nunca lo admitiría —batería, rendimiento, seguridad y, sobre todo, no depender de
una capa propietaria de terceros—. La web abierta alcanzó a Flash con HTML5, canvas, vídeo nativo
y WebGL. Adobe anunció el fin en 2017, y el 31 de diciembre de 2020 el reproductor dejó de
funcionar, con un bloqueo programado en el propio software.
Ruffle merece la mención como cierre de la historia: la tecnología que sustituyó a Flash es la que hoy lo resucita. Y esa es una lección de la clase 162 — un objetivo de compilación abierto y estándar sobrevive a las plataformas propietarias.
El día que Flash murió, murió todo lo escrito en ActionScript. No hubo migración, ni capa de compatibilidad, ni versión de mantenimiento: el intérprete se apagó.
Y merece contrastarlo con los demás lenguajes de este Atlas:
| Situación | Qué pasó |
|---|---|
| COBOL, 66 años | sigue ejecutándose; hay compiladores libres y comerciales |
| Pascal, 55 años | Free Pascal es libre y llega a plataformas nuevas (clase 162) |
| Smalltalk, 46 años | SqueakJS ejecuta imágenes de 1978 en el navegador |
| PL/I, 62 años | vivo, y sin implementación libre: no llega a plataformas nuevas |
| ActionScript, 22 años | extinto: dependía de un reproductor de una sola empresa |
Y el patrón es el de la clase 164: la supervivencia depende de que exista una implementación libre y de que el formato sea abierto. ActionScript no tenía ninguna de las dos.
Y la segunda lección, más fina, es sobre estándares: AS3 implementó una propuesta que no llegó a ser estándar. Apostar a una especificación en discusión es un riesgo real, y aquí costó la compatibilidad con el lenguaje del que venía.
# Apache Royale: ActionScript compilado a JavaScript
mxmlc Venta.as -output venta.swf # el compilador clásico (Flex SDK)
asjsc Venta.as # Royale: a JavaScript
# Y para ver contenido antiguo:
# Ruffle (WebAssembly), en el navegador o como aplicación de escritorio
Como en SQL y en Elm, aquí el contrato está adaptado (clase 040): el reproductor Flash no tiene entrada estándar, así que se ilustra el cálculo.
// ActionScript corre en el reproductor Flash, sin stdin: se ilustra el cálculo.
package {
public class Venta {
public static function total(precio:Number, cantidad:Number, descuento:Number):String {
var t:Number = precio * cantidad * (1 - descuento);
return "Total: " + t.toFixed(2);
}
}
}
Lo que hay que ver.
precio:Number es la anotación de tipo, con dos puntos, igual que
TypeScript — que llegó catorce años después. No es coincidencia: los dos
descienden de la misma propuesta ES4.Number es el mismo tipo único de coma flotante de JavaScript, y toFixed(2)
es literalmente la misma función. La familia se reconoce sin esfuerzo, que es la tesis del
Atlas.package y public class vienen de Java, y son lo que ES4 quería añadir a
JavaScript y no se aprobó.⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: JavaScript · TypeScript · Dart · Delphi