En la ROM del Spectrum, entre otras cosas, hay un intérprete de BASIC. Cuando escribimos RUN, este programa se encarga de leer linea a linea de la memoria, mira que todo sea correcto, y ejecuta en caso afirmativo. Instrucción por instrucción, va comprobando todo, convirtiendo los números, haciendo los cálculos, ejecutando rutinas, y saltando a otros puntos. Como verás, esta es la forma mas "segura" ya que el ordenador no va a colgarse pero también es la forma más lenta.
Al compilar el código, eso que se hace "sobre la marcha" se hace de una vez, generando un código máquina que se puede ejecutar directamente.
Como BASIC es un lenguaje de muy alto nivel, jamás en la vida va a ser tan rápido como programar en ensamblador directamente, ya que así eres tú el que decide qué se hace en cada momento y tienes mucho más control sobre todo y puedes optimizar al máximo. El código máquina generado por un compilador nunca será tan bueno como el que genera un humano (bueno, un humano que sepa programar bien

), y en lenguajes de este tipo en los que todo está hecho al final te quedas con un montón de llamadas a rutinas. Sin embargo, en cosas como comprobaciones, bucles y saltos la velocidad puede llegar a ser hasta 20 veces más rápida que en BASIC interpretado. Por término medio (muy medio, esto varía mucho dependiendo de la naturaleza de tu programa) podemos decir que un juego en BASIC si se compila irá más o menos unas cinco veces más rápido, con picos de hasta 10 o 20 veces más rápido (en los cálculos).
Te pongo un ejemplo: imaginate una instrucción POKE 23692,255 en el medio de un programa BASIC. Al hacer RUN y ejecutar el intérprete, lo primero que se hace es identificar el token "POKE", luego se ve que haya dos números. Esos dos números estarán almacenados en el formato ese de 5 bytes (punto flotante), por lo que deberán ser convertidos. El primero a un número de 16 bits sin signo, comprobando que no nos pasamos de rango. El segundo a un número de 8 bits sin signo, también con sus debidas comparaciones. ¿Y si hubieramos puesto 236920, por ejemplo? Ese número está fuera de rango, y es algo que el intérprete comprueba, perdiendo tiempo. Luego, con todo validado y convertido, pondrá un 255 en la dirección 23692.
Al compilar, es el compilador quien transforma los números, quien comprueba el rango, y al final escribirá en memoria el código máquina del movimiento de datos sin más, algo parecido a:
Ahora compara el tiempo entre ejecutar esas tres líneas de código máquina (unos cuantos ciclos), con el de tener que interpretar y comprobar todo. ¿ves la diferencia?
Sin embargo un PRINT es distinto: el código generado será seguramente una llamada a un runtime que tendrá una rutina de PRINT que no podemos alterar y que será lo más general posible: valdrá para imprimir variables, para poner colores, entenderá el AT y otros códigos... Si lo que queremos es poner un texto en la tinta actual en el cursor actual todo eso no lo necesitamos, pero sigue estando ahí. Sin embargo, al programar en código máquina directamente, bien podríamos haber optimizado al máximo eliminando casos generales, y hacer una rutina que no contemplase nada más que lo que queremos. Esa es la diferencia entre el código generado por el compilador y el que podamos escribir nosotros directamente.
En HiSoft BASIC, además, puedes definir tipos de variables numéricas. Si por ejemplo solo vas a usar valores enteros, defines las variables como enteras. Además de solo ocupar 2 bytes en lugar de 5 (que es lo que ocupan las variables que representan números "reales"), un cálculo entero es "de cajón" y por tanto mucho más rápido que uno con números reales (que están representados en algún tipo de "coma flotante"), ya que en este último caso hay que hacer muchísimas más cosas.
En definitiva, compilar tu programa en BASIC puede hacer que se vuelva muy jugable

Métete en desarrollo, en uno de mis hilos

(lo vas a ver, pone CENSORED I y ][ y está en la primera página

) y pruebalos. Están hechos en BASIC compilado. Ese mismo programa en BASIC interpretado es tan lento que no se puede jugar.
ARF! Espero que haya quedado claro
