gobstones / gobstones-web

[GobstonesWeb] The Gobstones Web IDE
http://gobstones.github.io/gobstones-web
GNU General Public License v3.0
14 stars 12 forks source link

Mecanismo para preservar mayúsculas en funciones/procedimientos de la biblioteca #190

Closed fidel-ml closed 6 years ago

fidel-ml commented 7 years ago

Si en la biblioteca del docente pongo un procedimiento llamado MoverALuchoAl_, cuando pasa a bloques queda como "Mover a lucho al" y en el caso de este nombre propio, debería quedar "Mover a Lucho al". No tenemos una forma de indicar que una mayúscula debe conservarse... :(

¿Ponemos algún otro chirimbolo? Onda MoverA*L*uchoAl_ o MoverA-L-uchoAl_... ¿Alguna otra idea?

faloi commented 7 years ago

A mí me gusta más el *, pero creo que no está soportado como identificador y no sé si sería correcto agregarlo solo para esto.

¿@rodri042?

fidel-ml commented 7 years ago

Lo agreguemos!!! MoverALuchoAl_(Norte) FF

2017-07-24 16:40 GMT-03:00 Federico Aloi notifications@github.com:

A mí me gusta más el *, pero creo que no está soportado como identificador y no sé si sería correcto agregarlo solo para esto.

¿@rodri042 https://github.com/rodri042?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gobstones/gobstones-web/issues/190#issuecomment-317532121, or mute the thread https://github.com/notifications/unsubscribe-auth/AIaqtg8wt5Sw7A0KXVaiRLUm3--pOZzMks5sRPMfgaJpZM4OgKCG .[image: Web Bug from https://github.com/notifications/beacon/AIaqtmL2JNX6cU9Hn4t3MWEse1wuP8TEks5sRPMfgaJpZM4OgKCG.gif] {"api_version":"1.0","publisher":{"api_key":" 05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity": {"external_key":"github/gobstones/gobstones-web"," title":"gobstones/gobstones-web","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/ 143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png"," avatar_image_url":"https://cloud.githubusercontent.com/ assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"Open in GitHub","url":"https://github. com/gobstones/gobstones-web"}},"updates":{"snippets":[{" icon":"PERSON","message":"@faloi in #190: A mí me gusta más el *, pero creo que no está soportado como identificador y no sé si sería correcto agregarlo solo para esto. \r\n\r\n¿@rodri042?"}],"action":{"name":"View Issue","url":"https://github.com/gobstones/gobstones-web/ issues/190#issuecomment-317532121"}}}

Este mensaje ha sido analizado por el servidor antispam1.unq.edu.ar de la Universidad Nacional de Quilmes en busca de virus y otros contenidos peligrosos, y se considera que está limpio.

faloi commented 7 years ago

Pero... pero... no es Gobstones-compliant. Qué flexible te estás volviendo. :stuck_out_tongue_winking_eye:

afska commented 7 years ago

Wooo. Pero el es el operador multiplicación y el - la resta. No traería infinitos quilombos eso? Cosas como `a := a23f()pasarían a ser ambiguas (¿hagoa2por el resultado de invocar a3fo invoco aa2*3f`?) @foones

Yo usaría doble guión bajo, a costa de no permitir dos parámetros infijos seguidos. A menos que haya una idea mejor

fidel-ml commented 7 years ago

Wow. Tenés razón; no me había fijado en ese detalle. Sin embargo los dos guiones bajos no sirven porque muchas veces tenemos muchos parámetros al final. Se puede utilizar el apóstrofe que sí es un símbolo de los identificadores actualmente: MoverA'L'uchoA_

On Jul 24, 2017 17:49, "Rodrigo Alfonso" notifications@github.com wrote:

Wooo. Pero el es el operador multiplicación y el - la resta. No traería infinitos quilombos eso? Cosas como a := a23f() pasarían a ser ambiguas (¿hago a2 por el resultado de invocar a 3f o invoco a a2*3f?) @foones https://github.com/foones

Yo usaría doble guión bajo, a costa de no permitir dos parámetros infijos seguidos. A menos que haya una idea mejor

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gobstones/gobstones-web/issues/190#issuecomment-317550120, or mute the thread https://github.com/notifications/unsubscribe-auth/AIaqtnoK5_JXcjZXS2O26ZNpt8tK6JKhks5sRQNXgaJpZM4OgKCG .[image: Web Bug from https://github.com/notifications/beacon/AIaqtiPrUz-YLy4FZzVu_J864XDNw6Enks5sRQNXgaJpZM4OgKCG.gif] {"api_version":"1.0","publisher":{"api_key":" 05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity": {"external_key":"github/gobstones/gobstones-web"," title":"gobstones/gobstones-web","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/ 143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png"," avatar_image_url":"https://cloud.githubusercontent.com/ assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"Open in GitHub","url":"https://github. com/gobstones/gobstones-web"}},"updates":{"snippets":[{" icon":"PERSON","message":"@rodri042 in #190: Wooo. Pero el es el operador multiplicación y el - la resta. No traería infinitos quilombos eso? \r\nCosas como `a := a23f()pasarían a ser ambiguas (¿hagoa2por el resultado de invocar a3fo invoco aa2*3f`?)\r\n@foones\r\n\r\nYo usaría doble guión bajo, a costa de no permitir dos parámetros infijos seguidos. A menos que haya una idea mejor"}],"action":{"name":"View Issue","url":"https://github.com/gobstones/gobstones-web/ issues/190#issuecomment-317550120"}}}

Este mensaje ha sido analizado por el servidor antispam1.unq.edu.ar de la Universidad Nacional de Quilmes en busca de virus y otros contenidos peligrosos, y se considera que está limpio.

faloi commented 7 years ago

Me gusta la última propuesta. ¿Vamos con los apóstrofes?

afska commented 7 years ago

Esa es buenísima! (MoverA'L'uchoA_) Cargo el issue en gs-element-blockly

fidel-ml commented 7 years ago

Se me ocurre otra opción: antes de cada función o procedimiento publicable de la biblioteca del docente ponemos un pragma con su nombre en el bloque, con la sintaxis que tenga que llevar ahí. Y si no tiene pragma no se publica. De esta forma también solucionamos el parche del aux.

fidel-ml commented 7 years ago

Ejemplo posible:

//@blockName: "Mover a Lucho al _" procedure MoverALuchoAl(dir) {...

Y zafamos también de usar el guión bajo en el nombre...

faloi commented 7 years ago

No me gusta la del pragma, porque hay que duplicar el nombre. Te lo banco para marcar que es privado y no usar el aux, pero para el nombre me parece redundante y propenso a inconsistencias.

fidel-ml commented 7 years ago

La realidad que se trata de dos hombres distintos.

fidel-ml commented 7 years ago

Pero aporta muchísima flexibilidad... Y permite cosas como usar comas u otros chirimbolos adentro de los nombres en pilas bloques...

faloi commented 7 years ago

Podemos pensarlo como opcional en la próxima versión, pero definitivamente no para ahora.

fidel-ml commented 7 years ago

Ok. Te agregó una ventaja más: con otro pragma podríamos indicar un pequeño icono que se le podría agregar adelante a las primitivas tal cual hace pilas bloques ahora... La realidad es que estamos tratando de interfacear dos mundos diferentes con similitudes pero con otras cosas que no son tan iguales. Y ya vamos a necesitar paraguas para devolver información al mundo de bloques indicando donde se produjo un error, etc. Por eso no me parece tan descabellado.

On Jul 24, 2017 18:07, "Federico Aloi" notifications@github.com wrote:

Podemos pensarlo como opcional en la próxima versión, pero definitivamente no para ahora.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gobstones/gobstones-web/issues/190#issuecomment-317554834, or mute the thread https://github.com/notifications/unsubscribe-auth/AIaqtkiGZR2a_YEgNQ0bpvJ16psTsuhxks5sRQdXgaJpZM4OgKCG .[image: Web Bug from https://github.com/notifications/beacon/AIaqtj5ck6RcLtdHtC2AEXAUInGXUdzFks5sRQdXgaJpZM4OgKCG.gif] {"api_version":"1.0","publisher":{"api_key":" 05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity": {"external_key":"github/gobstones/gobstones-web"," title":"gobstones/gobstones-web","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/ 143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png"," avatar_image_url":"https://cloud.githubusercontent.com/ assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"Open in GitHub","url":"https://github. com/gobstones/gobstones-web"}},"updates":{"snippets":[{" icon":"PERSON","message":"@faloi in #190: Podemos pensarlo como opcional en la próxima versión, pero definitivamente no para ahora."}],"action":{"name":"View Issue","url":"https://github. com/gobstones/gobstones-web/issues/190#issuecomment-317554834"}}}

Este mensaje ha sido analizado por el servidor antispam2.unq.edu.ar de la Universidad Nacional de Quilmes en busca de virus y otros contenidos peligrosos, y se considera que está limpio.

foones commented 7 years ago

Seguramente ya descartaron esto (o hay bastante código ya escrito) pero, en lugar de marcar mayúsculas, ¿no quedaría más prolijo marcar la separación entre palabras? De esta manera la capitalización dejaría de servir el propósito de delimitar palabras.

Por ejemplo, usando underscores: "Mover_a_Lucho_a" -> "Mover a Lucho a" o quizás apóstrofos: "Mover'a'Lucho'a" -> "Mover a Lucho a" o quizás algo como doble underscore (para que un solo underscore se muestre como tal): "MoveraLucho__a" -> "Mover a Lucho a"

afska commented 7 years ago

Me copa por la versatilidad pero habría que migrar el código ya escrito.

Si optamos por esa quedaría underscore para denotar que ahí va un parámetro, y apóstrofe como reemplazo del espacio. Ejemplo: para mostrar Mover a Lucho (3) metros hacia el (Norte) se podría usar:

Mover'a'Lucho_metros'hacia'el_

Si no, optamos por la de MoverA'L'ucho_MetrosHaciaEl_

fidel-ml commented 7 years ago

Yo sigo pensando que la mejor manera es un pragma que permita tener 2 cosas distintas:

\@BlockNameFor: MoverALuchoNMetrosAl is: "Mover a Lucho metros al " procedure MoverALuchoNMetrosAl(n,d)

Si no logro convencerlos, entonces vamos con el apóstrofe para las mayúsculas (pero es feo: estamos limitando nuestra capacidad de agregar nuevas cosas después y ya venimos haciendo cosas feas, como el Aux.) Seriamente: debemos reconsiderar poner tantas trabas a los nombres. Una tabla de conversión provista por pragmas es la mejor solución: versátil y general, una verdadera interfaz entre 2 mundos diferentes, una piedra Rosetta. FF

2017-08-03 0:50 GMT-03:00 Rodrigo Alfonso notifications@github.com:

Me copa por la versatilidad pero habría que migrar el código ya escrito.

Si optamos por esa quedaría underscore para denotar que ahí va un parámetro, y apóstrofe como reemplazo del espacio. Ejemplo: para mostrar Mover a Lucho (3) metros hacia el (Norte) se podría usar:

Mover'a'Luchometros'hacia'el

Si no, optamos por la de MoverA'L'uchoMetrosHaciaEl

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gobstones/gobstones-web/issues/190#issuecomment-319860562, or mute the thread https://github.com/notifications/unsubscribe-auth/AIaqtm07-Kd_9F4HW_cXqHofYX6ISFPEks5sUUOVgaJpZM4OgKCG .[image: Web Bug from https://github.com/notifications/beacon/AIaqtrojuFS2LVB6fQiCi9-2U_hsSIaNks5sUUOVgaJpZM4OgKCG.gif] {"api_version":"1.0","publisher":{"api_key":" 05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity": {"external_key":"github/gobstones/gobstones-web"," title":"gobstones/gobstones-web","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/ 143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png"," avatar_image_url":"https://cloud.githubusercontent.com/ assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"Open in GitHub","url":"https://github. com/gobstones/gobstones-web"}},"updates":{"snippets":[{" icon":"PERSON","message":"@rodri042 in #190: Me copa por la versatilidad pero habría que migrar el código ya escrito.\n\nSi optamos por esa quedaría underscore para denotar que ahí va un parámetro, y apóstrofe como reemplazo del espacio. Ejemplo: para mostrar Mover a Lucho (3) metros hacia el (Norte) se podría usar:\n\nMover'a'Lucho_metros'hacia'el_\n\nSi no, optamos por la de MoverA'L'ucho_MetrosHaciaEl_"}],"action":{"name":"View Issue","url":"https://github.com/gobstones/gobstones-web/ issues/190#issuecomment-319860562"}}}

-- Este mensaje ha sido analizado por el servidor antispam2.unq.edu.ar de la Universidad Nacional de Quilmes en busca de virus y otros contenidos peligrosos, y se considera que está limpio.

faloi commented 7 years ago

El pragma me gusta, pero como excepción que pisa a la convención de los guiones bajos. Tener que ponerlo en TODOS los procedimientos me resulta excesivamente molesto.

Mi propuesta:

  1. Si no hay pragma, el nombre se genera como ahora: las mayúsculas separan palabras, los guiones bajos marcan posición de los parámetros.
  2. Si hay pragma, el nombre es el que diga ahí.
fidel-ml commented 7 years ago

Ok. Vamos con eso. ¿Puedo agregarte un pragma para que no se traslade el procedimiento o función y que reemplace al Aux? FF

On Aug 3, 2017 08:16, "Federico Aloi" notifications@github.com wrote:

El pragma me gusta, pero como excepción que pisa a la convención de los guiones bajos. Tener que ponerlo en TODOS los procedimientos me resulta excesivamente molesto.

Mi propuesta:

  1. Si no hay pragma, el nombre se genera como ahora: las mayúsculas separan palabras, los guiones bajos marcan posición de los parámetros.
  2. Si hay pragma, el nombre es el que diga ahí.
fidel-ml commented 7 years ago

O sea, quiero decir que en lugar de

procedure AuxPonerMuchas(n,c)

diga

//@NoBlockFor: PonerMuchas procedure PonerMuchas (n,c)

También como alternativa si querés... FF

On Aug 3, 2017 08:56, "Fidel" fidel@unq.edu.ar wrote:

Ok. Vamos con eso. ¿Puedo agregarte un pragma para que no se traslade el procedimiento o función y que reemplace al Aux? FF

On Aug 3, 2017 08:16, "Federico Aloi" notifications@github.com wrote:

El pragma me gusta, pero como excepción que pisa a la convención de los guiones bajos. Tener que ponerlo en TODOS los procedimientos me resulta excesivamente molesto.

Mi propuesta:

  1. Si no hay pragma, el nombre se genera como ahora: las mayúsculas separan palabras, los guiones bajos marcan posición de los parámetros.
  2. Si hay pragma, el nombre es el que diga ahí.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gobstones/gobstones-web/issues/190#issuecomment-319940612, or mute the thread https://github.com/notifications/unsubscribe-auth/AIaqtiHIiEtpRTaK39bz4rC9w7iK4BG2ks5sUavwgaJpZM4OgKCG .[image: Web Bug from https://github.com/notifications/beacon/AIaqtjj7AwgUqLtZxknIgy8k199FuQ8kks5sUavwgaJpZM4OgKCG.gif] {"api_version":"1.0","publisher":{"apikey":"05dde50f1d1a384 dd78767c55493e4bb","name":"GitHub"},"entity":{"external key":"github/gobstones/gobstones-web","title":"gobstones/gobstones-web","subtitle":"GitHub repository","main_image_url":"https://cloud.githubuserconten t.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png ","avatar_image_url":"https://cloud.githubusercontent.com/assets/ 143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/gobstones/gobstones-web"}} ,"updates":{"snippets":[{"icon":"PERSON","message":"@faloi in #190: El pragma me gusta, pero como excepción que pisa a la convención de los guiones bajos. Tener que ponerlo en TODOS los procedimientos me resulta excesivamente molesto.\r\n\r\nMi propuesta:\r\n\r\n1. Si no hay pragma, el nombre se genera como ahora: las mayúsculas separan palabras, los guiones bajos marcan posición de los parámetros.\r\n1. Si hay pragma, el nombre es el que diga ahí."}],"action":{"name":"View Issue","url":"https://github.c om/gobstones/gobstones-web/issues/190#issuecomment-319940612"}}}

Este mensaje ha sido analizado por el servidor antispam1.unq.edu.ar de la Universidad Nacional de Quilmes en busca de virus y otros contenidos peligrosos, y se considera que está limpio.

faloi commented 7 years ago

Ahí sí prefiero el pragma, lo otro fue un hack. Pero abrí otra issue y lo discutimos ahí, así no se mezclan los tantos...

fidel-ml commented 7 years ago

Surgió la necesidad de tener comas en los nombres de bloques. Esto es imposible con el formato actual, y agregar los tildes para mayúsculas es otro hack no extensible.

Ej: hace falta un procedimiento primitivo "Poner , veces" que hoy no tiene equivalente en Gobstones.

Además, si en bloques hoy usás una coma en un identificador, el código generado hace cosas raras...

Se impone usar un mecanismo flexible que permita interfasear los dos mundos, y hasta ahora la única propuesta que parece razonable es el pragma. Deberíamos ponernos de acuerdo en la sintaxis de los pragmas...

afska commented 6 years ago

Quedó implementado el atributo block_name (opcional - si no está, usa la convención).

/*@ATTRIBUTE@block_name@Poner _, _ veces@*/
procedure PonerColor_cantidad_veces(color, veces) {
  repeat (veces) {
    Poner(color)
  }
}