🎬 ActionScript — 1998

⬅️ Atlas · 🗂️ Todas las fichas · 📚 Índice de clases

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

📜 Historia

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.

🏭 Dónde vive hoy

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.

🧠 Lo que enseña: la dependencia de plataforma

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.

🔄 Lo que quedó

⚙️ Cómo se ejecuta hoy

# 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

🧪 El programa de la clase 041 en ActionScript

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.

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: JavaScript · TypeScript · Dart · Delphi