uqbar-project / wollok-ts

TypeScript based Wollok language implementation
GNU General Public License v3.0
20 stars 13 forks source link

WKO sin referenciar permite correr el REPL #231

Closed Juancete closed 5 months ago

Juancete commented 5 months ago

Para la definición del siguiente WKO´s.

object pepita {
  var energia 

  method volar(kms){
    energia = energia + kms
  }
}

Marca como error que la variable energía debe ser reverenciada a un objeto. Igualmente puedo correr el mismo en el REPL y obtengo una referencia a NULL

Captura de pantalla 2024-03-26 a la(s) 10 38 10 p  m

Y al enviar el mensaje pepita.volar(10) el error que ocurre es

✗ Evaluation Error! wollok.lang.MessageNotUnderstoodException: an Object does not understand +(arg 0) at example.pepita.volar(kms) [example.wlk:40]

Además de no dejar correr el programa, entiendo que debería ser null el objeto que no entiende el mensaje en lugar de anObject

fdodino commented 5 months ago

Yo acá tengo una propuesta:

PalumboN commented 5 months ago

Holis!! (Qué lindo ver issues tuyos @Juancete ❤️)

agreguemos una configuración en LSP-IDE que nos diga si queremos levantar un proyecto que tiene errores de validación (errores no warnings). Por defecto que no, pero que se pueda cambiar.

Yo banco a NicoP en que quiero ejecutar un programa con errores (si se puede) y que me explote en la cara (si me las mando, sino no). Ejecutar un programa es una forma de entender el error. Podemos discutir y/o agregar la config, no me opongo, pero propongo que el default sea SÍ en todo caso :P

Quizás haya que agregar un método uninitializedReference que tire un error

👆 🌟 Esto me re cabe, pero no estoy seguro de cuándo checkearlo. Debería ser cuando se accede a la variable, pero teniendo el diagrama dinámico tal vez deba ser al instanciar el objeto.

para que no aparezca el "anObject does not understand +".

Esto para mí es otro error. No se está reportando bien los mensajes a null

image
Juancete commented 5 months ago

Holis!! (Qué lindo ver issues tuyos @Juancete ❤️)

Lo lindo es el terrible trabajo que se mandaron con Wollok-TS ❤️ Realmente es excelente!

Yo banco a NicoP en que quiero ejecutar un programa con errores (si se puede) y que me explote en la cara (si me las mando, sino no). Ejecutar un programa es una forma de entender el error.

Particularmente me hizo mucho ruido tener un error (o sea, detectar un problema que sabemos que es una incongruencia) e igualmente permitirme ejecutar el código. Me dio una sensación de inconsistencia por parte del lenguaje. En todo caso si quiero que el pibe se tope con una variable sin inicializar y que pueda jugar con eso para que le detone en su trabajo práctico, tal vez lo bajaría el nivel de error a warning para que el mensaje sea otro: "Che, deberías inicializar una referencia en un WKO de movida, pero vos fíjate..."

Igualmente yo estoy opinando desde afuera pero quería contar la experiencia que tuve en el momento que encontré el bug. Tal vez dejarlo correr y que explote le sea más beneficioso al alumno.

fdodino commented 5 months ago

@Juancete , ayer nos juntamos con Ivo, Manuel y Nahue.

Conclusión: pusimos una validación cuando se termina de buildear el environment chequeando que todos los WKO estén correctamente instanciados. Si en tu proyecto querés ejecutar el REPL para ese archivo, se va a romper diciendo que a pepita le falta inicializar la energía. Si querés correr los tests, un programa o el REPL en otro archivo, vas a poder hacerlo.