Rafa escribió:En definitiva estáis hablando de crear un lenguaje nuevo que nunca correrá en un Spectrum normal.
No, estamos hablando de un compilador de BASIC moderno, sin números de lineas, con tipos de datos y estructurado, como es BASIC desde 1984, aproximadamente, que pueda ser compilado a un bianrio que correrá en un Spectrum normal.
Estáis muy influenciados por C y los dichosos objetos...
C no tiene objetos
De todos modos, creo que aquí nadie ha hablado de objetos.
¿Se necesita un while para programar en Basic (del Spectrum o no)?
No se necesita, pero se ve mucho más ordenado esto:
que esto:
Entre otras cosas porque el WHILE lo puedes mover a otra parte del código, sin tener que cambiar el GOTO
¿Para qué necesitamos un AND aritmético? ¡¡ Aaarggghh, qué tremenda limitación !!
Para mil cosas. Por ejemplo, para ver si un número es par o impar, en Sinclair BASIC tienes que hacer:
Con operadores a nivel de bit sólo necesitarías hacer:
La diferencia es que actualmente necesitas hacer dos divisiones enteras y una conversión. Con operadores lógicos todo cambia por una simple operación a nivel de bits.
Con AND/OR aritméticos puedes usar variables enteras como contenedoras de muchas banderas. Para hacerlo actualmente tienes que hartarte de dividir y multiplicar. Para comprobar si el bit 3 de un dato leído de RAM con un PEEK está a 1 en el BASIC actual tienes que dividir, cuando con un "AAND 8" bastaría.
¿Qué importa si un número es float?
Importa y mucho. La aritmética flotante es muy lenta, y la mayoría de las veces no es necesaria. Si estás programando un juego, por ejemplo, no necesitas nunca tanta precisión. Si un lenguaje te deja elegir el tipo de datos de las variables, emplearás el que sea más adecuado. Si yo sé que mi variable va a tomar valores enteros de 0 a 255 ¿por qué exigir que guarde el valor en una variable que ocupa 5 bytes y que para operar con ella hay que hacer encaje de bolillos? Forzar al tipo real que maneja el Spectrum es una pérdida de tiempo y memoria en la mayoría de los casos.
¿El uso de IF/ELSE os resuelve un problema?
Sí, es más legible esto:
Código: Seleccionar todo
IF a = 0 THEN
PRINT "Has ganado"
ELSE
PRINT "Has perdido"
END IF
que esto:
Código: Seleccionar todo
10 IF a = 0 THEN PRINT "Has ganado": GOTO 30
20 PRINT "Has perdido"
30 REM
Y, además, ocurre lo mismo que con el WHILE. La opción con ELSE puede moverse a otro sitio si lo necesitamos sin tener que cambiar el GOTO.
¿Por qué no os gusta la programación lineal? (Y no digáis porque es obsoleta, es la respuesta típica.)
Porque dificulta reutilizar código, resulta poco legible, dificulta adaptar, o ampliar el código, impide la encapsulación, dificulta el parseo... ¿sigo?
¿Por qué a mucha gente no les gusta el GOTO?
Pregúntale a ellos. A mí me encanta
Si queréis crear un lenguaje NUEVO, hay otros foros. Yo me quedo con mi Speccy.
Y seguro que diréis que estoy anclado en el pasado...
Si yo visito este foro es porque me gusta mi Speccy TAL COMO ES.
No tiene nada que ver con el Speccy o el no Speccy. Se trata de hacer un compilador que genere código que se ejecute en un Speccy desde la comodidad de un PC. Y ya que se hace, debería estar bien diseñado. El diseño de Sinclair BASIC tiene cosas realmente buenas, pero otras realmente malas, aparte de lo que comentaba antes: está muy orientado a funcionar como intérprete, y nosotros estamos hablando de hacer un compilador
Yo también me quedo con mi Speccy. No veo qué tiene que ver el tocino con la velocidad