-
Notifications
You must be signed in to change notification settings - Fork 9
[DEPRECADO] Unificación de implementaciones de Wollok
Fernando Dodino edited this page Sep 21, 2024
·
1 revision
- 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
- 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
}
instanceVariableFor()
instanceVariables()
resolve()
- issue asociado: https://github.com/uqbar-project/wollok/issues/378
-
propuesta: crear una clase ObjectMirror que reciba un objeto y al que le pueda invocar esos tres mensajes. Eliminarlos de la implementación de
lang.wlk
-
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()
- representación vieja en ambas versiones (tiene el constructor al que le pasa
x
ey
, podemos utilizar el shortcut1 -> 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
- issue asociado: https://github.com/uqbar-project/wollok/issues/1825 para reemplazar x/y por key/value
- no está implementado en wollok-ts
-
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)
yjoin()
son abstractos en wollok xtext y no existen en wollok-ts - el
forEach
no usa la variableacc
y define una variable de iteracióne
en lugar deelem
, 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
- issue generado por el toString: https://github.com/uqbar-project/wollok/issues/1800
- no se qué hacer con el initialize() nativo en Wollok Xtext
- renombrar todas las variables
e
,x
tomando en cuenta que sean intention revealing
-
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 devuelveself
, 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
- ver si hay que cargar issue en wollok-ts | hacer pruebas con Sets que contengan muchos elementos (más de 1000)
- issue generado por el toString: https://github.com/uqbar-project/wollok/issues/1800 (quizás haya que dejar los métodos prefix y suffix)
-
constructor(elements...)
existe en wollok-ts, no existe en wollok xtext (eliminado por los constructores). Sería bueno volarlo. -
toStringPrefix
ytoStringSuffix
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
yjoin(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)
- La implementación en wollok-ts usa un atributo
entries
local a Wollok. Quizás deberíamos migrar a esa versión.
- issue generado: https://github.com/uqbar-project/wollok/issues/1826
-
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
- Deberíamos volar coerceToInteger() de todos los métodos posibles en la implementación de
lang.wlk
- issue asociado: https://github.com/uqbar-project/wollok/issues/1828
- Revisar los métodos toString
-
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 aconcat
. Un primer paso... a futuro podríamos volar el+
. -
takeLeft
ytakeRight
no existen en wollok-ts, se agregaron en la versión nueva de Wollok Hypatia (usan coercePositiveInteger)
-
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
- 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)
- wollok-ts necesita el método
initialize()
nativo, habría que incorporarlo en wollok-text
- 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?
- sin cambios
- falta el
equals
con un solo parámetro en wollok-ts para que tire error - hay que ver qué hacer con los corchetes
- se eliminó el constructor
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() }
}
}
}
-
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.