Skip to content

[DEPRECADO] Unificación de implementaciones de Wollok

Fernando Dodino edited this page Sep 21, 2024 · 1 revision

Exceptions

  • EvaluationError => propia de wollok-ts, se agregó a wollok-xtext, habría que evaluar si la necesitamos para errores del intérprete
  • StackTraceElement => en wollok-ts estaba la versión vieja, se actualiza la de wollok-xtext con properties y sin métodos getters
  • MessageNotUnderstood => tenía código ¿xtend? comentado, se eliminó para la versión de Wollok Language

Object

  • el constructor de wollok-ts llama al initialize(). Intenté definir en Object
  constructor() {
    self.initialize()
  }

  method initialize() { }

pero no está cableado eso. La implementación actual pregunta si existe el método initialize() en cada objeto y lo llama. A futuro eliminaremos el constructor y el método initialize, y nos quedaremos únicamente con

initialize {
   const energia = 100
}

Introspección

  • instanceVariableFor()
  • instanceVariables()
  • resolve()

Action Items

toString

  • shortDescription() ==> ver si podemos evitarlo en el diagrama dinámico
  • toString() ==> simplificarlo?
  • toSmartString() ==> volarlo?
  • simplifiedToSmartString() ==> volarlo?
  • internalToSmartString() ==> volarlo?

issue asociado: https://github.com/uqbar-project/wollok/issues/1822 propuesta: sacar los atributos, abrir un issue para mejorar el assertion error en los tests (para que no aparezca "expected pepita but found pepita")

  • generateDoesNotUnderstandMessage: falta en wollok-ts, es para mostrar un mensaje de error piola (no está este método pero hay otros con diferentes parámetros). Action item propuesto: agregar un issue en wollok-ts.
  • checkNotNull: falta en wollok-ts (muestra un mensaje piola cuando un parámetro es nulo, NicoS no se qué tiene en mente).
  • el método === en wollok-ts es nativo, en wollok-xtext se delega en el método identity()

Pair

  • representación vieja en ambas versiones (tiene el constructor al que le pasa x e y, podemos utilizar el shortcut 1 -> 3)
  • podemos renombrar x por key, y por value, como son const property se eliminan los getters
  • equals falta en wollok-ts.

TENER EN CUENTA: no podemos sacar el constructor si el Type System no resuelve este issue

Action Items


object void

  • no está implementado en wollok-ts

Collection

  • initialize está implementado como nativo en wollok-ts, no existe en wollok-xtext
  • maxIfEmpty => cómo funciona? si no hace el apply
  • method toStringPrefix() => está en wollok-ts, desapareció en wollok-xtext
  • method toStringSuffix() => está en wollok-ts, desapareció en wollok-xtext
  • asSet es un método abstracto en wollok-ts, tiene una implementación en wollok-xtext (y devuelve una nueva copia del set)
  • findOrElse es nativo en wollok-xtext y está implementado en Wollok en wollok-ts
  • copyWithout => falta en wollok-ts
  • copyWith => falta en wollok-ts
  • add, fold, remove, size son nativos en wollok-ts y por defecto tiran error en wollok-xtext
  • clear es nativo en wollok-ts y abstracto en wollok xtext
  • join(separator) y join() son abstractos en wollok xtext y no existen en wollok-ts
  • el forEach no usa la variable acc y define una variable de iteración e en lugar de elem, lo cambiamos como está la versión de wollok-ts
  • en general cambié todas las variables e, acc, x, por nombre más representativos, me parece importante ser consistente y emprolijar un poco las implementaciones, sobre todo si están expuestas tanto a alumnos como a otros docentes

Action Items


Set

  • constructor(elements...) existe en wollok-ts, no existe en wollok xtext (eliminado por los constructores). Sería bueno volarlo.
  • toString implementado en wollok-xtext, no existe en wollok-ts
  • toStringPrefix, toStringSuffix existe en wollok-xtext, no existen en wollok-ts
  • asSet en wollok-ts devuelve self, en wollok-xtext hereda de wollok-xtext y genera un nuevo set
  • anyOne es nativo en wollok-xtext y tiene implementación en Wollok en wollok-ts (self.asList().anyOne()), esto se hizo por cuestiones de performance, al convertir a lista tarda mucho con colecciones grandes
  • fold, filter, max, findOrElse, remove, size, clear, contains, equals en wollok-ts se hereda de Collection, en wollok-xtext es nativo por cuestiones de performance
  • add, join, join(separator), == en wollok-ts está implementado en wollok (delega en equals), en wollok-xtext es nativo por cuestiones de performance

Action items:


List

  • constructor(elements...) existe en wollok-ts, no existe en wollok xtext (eliminado por los constructores). Sería bueno volarlo.
  • toStringPrefix y toStringSuffix existen en wollok-ts pero fueron eliminados en wollok-xtext
  • toString() considera elementos muy largos por performance en wollok-xtext
  • asSet() está implementado en Wollok en wollok-ts, en wollok-xtext hereda de Collection (en definitiva son iguales)
  • subList(start, end) tiene en wollok-xtext una versión que soluciona un bug, pisaremos la versión de wollok-ts
  • sortBy tiene una implementación en Wollok para wollok-ts, en wollok-xtext es nativa por cuestiones de performance
  • join y join(separator) están implementados en wollok-ts, en wollok-xtext son nativos por cuestiones de performance
  • add, filter, contains, max, fold, findOrElse, remove, size, clear, withoutDuplicates son métodos nativos en wollok-xtext, por cuestiones de performance. wollok-ts tiene implementado por herencia
  • ==, equals existen en wollok-xtext como métodos nativos (calculo que por un tema de performance), no están en el Set de wollok-ts (se heredan de Collection)

Dictionary

  • La implementación en wollok-ts usa un atributo entries local a Wollok. Quizás deberíamos migrar a esa versión.

Action items:


Number

  • simplifiedToSmartString, internalToSmartString molesta otra vez con definiciones en wollok-xtext, en wollok-ts no existen
  • coerceToInteger, coerceToPositiveInteger son polémicos. Habría que ver si los podemos volar de wollok-xtext, no existen en wollok-ts (fuerzan que un número sea positivo o entero, y si no tiran error, son para el get de list, por ejemplo)
  • @nscarcella, qué son estos métodos de Number en wollok-ts?
  method +_() = self
  method -_() native

(¿son los que definen los números positivos o negativos?) Ahí vi al final que wollok-xtext tiene un método plus() que devuelve self

  • el método div está definido usando Wollok en wollok-ts y nativo en wollok-xtext (creo que acá compro tenerlo implementado en Wollok, no creo que haya problemas de performance)
  • toSmartString debería volar una vez que reorganicemos el toString() de Object
  • >= y <= son nativos en wollok-ts, lo cual es raro, en wollok-xtext están implementados en Wollok y me parece que está bien así
  • la implementación de even de wollok-xtext me parece que no está bien, está forzando el valor a que sea un entero, y si me pedís "6.5.even()" eso tiene que dar false, así que copio la de wollok-ts
  • lo mismo con odd
  • stringValue() debería desaparecer como método, parte del refactor del toString()
  • gcd tiene una implementación nativa en wollok-ts, pero es recursiva, algo que preferiría evitar, la versión que quedaría sería una nativa en wollok-xtext
  • el método isInteger() nativo existe en wollok-xtext y no está en wollok-ts, me parece que puede ser útil

Action items


String

  • charAt tiene una implementación nativa en wollok-xtext, y de Wollok para wollok-ts, creo que sería piola utilizar esa y en todo caso medir la performance para ver si tarda mucho
  • concat es un método piola que tiene wollok-ts y sería bueno agregarlo en wollok-xtext, el + en principio delega a concat. Un primer paso... a futuro podríamos volar el +.
  • takeLeft y takeRight no existen en wollok-ts, se agregaron en la versión nueva de Wollok Hypatia (usan coercePositiveInteger)

Boolean

  • or, and, negate no están definidos en wollok-ts, en wollok-xtext están definidos como native, lo que me llama la atención porque podría delegar en el ||, &&, y !
  • hay una implementación de !_ en wollok-ts, no se cómo se aplica @nscarcella

Range

  • Tratar de utilizar rangos decimales (hoy ambas implementaciones están truncando)
  • El range es mutable, se permite modificar el step, preferiría que no lo fuera
  • El método size de wollok-xtext contemplaría valores decimales
  • internalToSmartString habría que volarlo (está en wollok-xtext, no existe en wollok-ts)

Closure

  • wollok-ts necesita el método initialize() nativo, habría que incorporarlo en wollok-text

Date

  • falta actualizar: daysOfWeek() en wollok-ts para que devuelva la lista de días de la semana (es de Wollok)
  • eliminar shortDescription()
  • ver qué hacemos con el toString() que muestra el locale, eso es difícil de replicar en wollok-ts?

WOLLOK-LIB

console

  • sin cambios

assert

  • falta el equals con un solo parámetro en wollok-ts para que tire error
  • hay que ver qué hacer con los corchetes

OtherValueException

  • se eliminó el constructor

Implementaciones que están en wollok-ts y no en wollok-xtext

class BadParameterException inherits Exception {
  constructor(_value) = super("Invalid argument: " + _value)
}

object io {
  const eventHandlers = new Dictionary()
  var eventQueue = []

  method queueEvent(event) {
    eventQueue.add(event)
  }

  // TODO: removeHandler
  method addHandler(event, callback) {
    if (!eventHandlers.containsKey(event)) eventHandlers.put(event, [])
    eventHandlers.get(event).add(callback)
  }

  method flushEvents() {
    const currentEvents = eventQueue.copy()
    eventQueue = []
    currentEvents.forEach{ event =>
      eventHandlers.getOrElse(event, { [] }).forEach{ callback => callback.apply() }
    }
  }
}

Game

  • hasVisual(visual), allVisuals,schedule(milliseconds, action), hay que implementarlos en wollok-ts como nativos
  • el objeto keyboard tiene una implementación diferente: num(n), method a() = new Key(keyCodes = [29]) en wollok-xtext -> method a() = new Key(keyCodes = ["KeyA"]) en wollok-ts. Me parece que la opción actual (la de wollok-xtext) es la que habría que mantener, "KeyA" no parece algo mucho mejor, a lo sumo podríamos crear constantes que referencien a los valores de los caracteres ASCII, pero es un laburo grande que los alumnos no van a ver.

Otros issues de unificación del lenguaje