Scratch es, sin duda, uno de los entornos de programación visual más populares para aprender a programar, especialmente entre niños y jóvenes. Su interfaz sencilla basada en bloques facilita la comprensión de conceptos lógicos fundamentales. Sin embargo, la limitación principal de Scratch radica en su incapacidad para ejecutar lenguajes de programación tradicionales que presentan un potencial mucho más avanzado, como el lenguaje C. Recientemente, un proyecto de prueba de concepto llamado “c-on-scratch” ha emergido para abordar esta limitación, brindando la posibilidad de correr código C dentro de Scratch mediante una ingeniosa combinación de herramientas tecnológicas. Este artículo se adentra en los detalles de este desarrollo, explicando su funcionamiento, sus implicaciones educativas y las posibilidades que abre para docentes, programadores y entusiastas del aprendizaje de la programación.
El proyecto “c-on-scratch” fue desarrollado con la intención de demostrar que es posible integrar código C en un entorno diseñado para programación visual sin necesidad de abandonar la plataforma Scratch. Para lograr esto, el proceso fundamental consiste en compilar el código escrito en C a JavaScript utilizando Emscripten, un compilador que convierte código C y C++ a un formato ejecutable en navegadores web, aprovechando las capacidades de JavaScript y WebAssembly. Emscripten es clave porque permite que programas originalmente diseñados para ejecutarse en sistemas tradicionales puedan funcionar en navegadores, haciendo posible la integración con Scratch a través de extensiones. Para entender mejor esta integración, es importante mencionar Turbowarp, una alternativa avanzada para editar proyectos Scratch que permite el uso de extensiones personalizadas y ofrece mayor control sobre el entorno de desarrollo que el editor clásico de Scratch. Debido a ciertas restricciones, como la desactivación de CORS (Cross-Origin Resource Sharing) en Scratch, este proyecto no puede utilizar WebAssembly directamente ni distribuir varios archivos, por lo que todo el código compilado desde C se agrupa en un solo archivo JavaScript.
Este archivo actúa como una extensión que puede ser cargada en Turbowarp, facilitando la ejecución del código C dentro de esa versión mejorada de Scratch. El funcionamiento para el usuario final es relativamente accesible: primero, se necesita tener instalado Emscripten junto con Python y otras herramientas como make para compilar el código C. Aunque el proyecto no ha sido testeado en Windows, usuarios de Windows pueden probarlo con entornos como WSL2 o MSYS2. El proceso de compilación genera un archivo JavaScript que se descarga como extensión. Luego, al iniciar un servidor local, el archivo se puede cargar directamente en Turbowarp, lo que permite crear un proyecto que incluye funciones en C que pueden ser ejecutadas junto con bloques Scratch o JavaScript.
El ejemplo incluido en el proyecto implica el cálculo de la secuencia Fibonacci, donde una función está implementada en C y otra en JavaScript para comparación. Además, incluye un benchmark sencillo donde se mide el tiempo de ejecución de funciones realizadas en Scratch, JavaScript y C. Los resultados son sorprendentes, pues a pesar de que C es un lenguaje reconocido por su velocidad y eficiencia, la función escrita en Scratch fue mucho más rápida que la implementada en C o JavaScript a través de esta integración. Esto se debe principalmente al overhead o la sobrecarga provocada por la llamada entre el entorno de Turbowarp y la extensión de código compilado, algo que revela limitaciones técnicas importantes para aplicaciones prácticas. Más allá de las cifras, esta iniciativa tiene un valor significativo en el campo educativo y experimental.
Integrar lenguajes tradicionales en plataformas visuales como Scratch puede abrir nuevos caminos para el aprendizaje progresivo de programación, permitiendo a los estudiantes partir de bloques visuales para luego entender lo que ocurre bajo el hood cuando se ejecuta código en lenguajes como C. También puede fomentar el interés en la interoperabilidad entre diferentes lenguajes y plataformas, proporcionando una experiencia que une la simplicidad educativa con la potencia computacional que ofrece la programación tradicional. Por otro lado, este proyecto deja en evidencia los desafíos de ejecutar código compilado dentro de entornos web y visuales, particularmente la importancia de optimizar la comunicación entre sistemas para evitar pérdidas de performance considerables. Además, muestra la necesidad de encontrar un balance entre la utilidad práctica y la experimentación técnica. La implementación también es relevante para desarrolladores interesados en ampliar las capacidades de Scratch y Turbowarp, motivando la exploración de nuevas extensiones, mejoras para integrar WebAssembly y gestionar múltiples archivos o módulos que aumenten la complejidad y funcionalidad sin sacrificar la facilidad de uso.
A futuro, esta línea de trabajo podría evolucionar para utilizar técnicas que superen las limitaciones actuales, como empaquetar WebAssembly eficientemente o mantener habilitado CORS, para ofrecer un entorno más robusto y eficiente. De esta forma, sería posible ejecutar código en lenguajes como C de manera más fluida dentro de Scratch sin perder rendimiento ni experiencia de usuario. En conclusión, la prueba de concepto para ejecutar código C dentro de Scratch mediante Emscripten y una extensión de Turbowarp es una aproximación revolucionaria que combina la educación con la experimentación tecnológica. Aunque actualmente no resulta viable para aplicaciones prácticas por limitaciones de rendimiento y entorno, sienta un precedente valioso para nuevas formas de aprendizaje y desarrollo en programación. Este puente entre lenguajes tradicionales y plataformas visuales puede, a mediano y largo plazo, contribuir a crear entornos más versátiles y enriquecedores para programadores en todas las etapas de su formación.
Para quienes trabajan en educación tecnológica, desarrollo de software o simplemente tengan curiosidad por la intersección entre lenguajes compilados y entornos visuales, este proyecto representa una interesante base para investigación e innovación. Así, se abre una puerta hacia un futuro donde las barreras entre diferentes paradigmas de programación sean más difusas, facilitando un aprendizaje integral y experiencias de desarrollo más diversas y potentes.