El lenguaje Rush
Un recorrido breve y honesto por RushScript, escrito a partir de la propia documentación de Rush.
Qué es Rush
Rush es dos cosas fusionadas en un solo binario: un entorno de ejecución de procesos y un lenguaje, RushScript, que corre sobre él. RushScript es interpretado: quien escribe no ejecuta un paso de compilación aparte.
Valores, no variables
Rush no tiene variables. Un enlace une una etiqueta, un nombre sin comillas, con un valor: port = 8080 enlaza la etiqueta port con el número 8080.
port = 8080Corchetes en todas partes
[ y ] son los únicos corchetes de agrupación. Contienen los argumentos de una llamada, los literales de lista y de mapa y las expresiones agrupadas. Los argumentos se separan con comas: add[10, 20]. Los paréntesis se rechazan fuera del texto.
add[10, 20]Cada línea hace algo
Una línea enlaza, llama o enruta. Una línea que solo nombra un valor, como 5 o x, no hace nada, así que se rechaza con el error RX0065.
x = 5
write[x]Ver la página del error RX0065
Escribir una salida
write['hello world'] escribe en la salida estándar. write.log y write.debug son las otras dos clases de habla: la primera, del sistema hacia el usuario; la segunda, para quien desarrolla, visible solo con DEBUG=1.
write['hello world']Enlazar y emparejar
= enlaza un nombre con un valor; : empareja una clave con su valor. Son dos actos con dos escrituras: cfg = [port: 8080].
cfg = [port: 8080]Formas que se hacen cumplir solas
Declara una forma como un mapa de reglas y adjúntala con :. Un valor que rompe una regla se rechaza en la puerta, no se descubre después.
Banana = [grams: number.real.ge[120].le[180], length_cm: number.real.ge[12].le[25], id: text.uuid]
good = [grams: 150, length_cm: 18, id: '…']: Banana
bad = [grams: 999, length_cm: 18, id: '…']: BananaValidadores, sin importar nada
Son funciones integradas del lenguaje, no una biblioteca: email, ipv4, ipv6, uuid, url, iso8601, rfc3339, cpf, cnpj, cep, phone, hex y base64.
Estado, con honestidad
La propia documentación de Rush lo dice sin rodeos: joven, rápido, no listo, a propósito. Lee esta página como un recorrido y los documentos del motor como la autoridad.
Fuentes
Esta página se escribió a partir de los siguientes archivos del árbol de documentación de Rush. Solo se usan los ejemplos y reglas que allí figuran. Los archivos están escritos en inglés.
/f/dev/rush/README.md (What Rush is: Runtime + Language; Why use rush instead of Python)/f/dev/rush/doc/FLOPS/09_language.md (Values, not variables; Brackets everywhere; A line holds an expression; A key-value pair is key: value; The output verb; The Banana)
