El pipeline
Uno de los diseños centrales de Nu es la tubería (pipeline), una idea de diseño que rastrea sus raíces décadas atrás hasta parte de la filosofía original detrás de Unix. Así como Nu extiende desde un solo dato tipo de cadena de Unix, Nu también extiende la idea de tuberías (pipelines) para incluir más que solo texto.
Fundamentos
Una tubería (pipeline) es construída con tres partes: la entrada, el filtro, y la salida.
> open "Cargo.toml" | inc package.version | save "Cargo_new.toml"
El primer comando, open "Cargo.toml"
, es una entrada (a veces también llamada "fuente" o "productor"). Esto crea o carga datos y lo canaliza en la tubería. Es de entrada para la tubería tener valores y poder trabajarlas. Comandos como ls
también son entradas ya que toman datos desde el sistema de archivos y lo canalizan a través de las tuberías para que puedan ser usadas.
El segundo comando, inc package.version
, es un filtro. Filtros toman los datos que se les entrega y comúnmente hacen algo con la misma. Puede que la cambien (tal como el comando inc
en nuestro ejemplo), o pueden hacer otra operación, como registrar, mientras pasan los valores.
El último comando, save "Cargo_new.toml"
, es una salida (a veces llamado un "sink"). Una salida toma la entrada de la tubería y realiza alguna operación final. En nuestro ejemplo, grabamos lo que viene a través de la tubería hacia un archivo como paso final. Otros tipos de comandos de salida pueda que tomen valores y lo muestren para el usuario.
Trabajando con comandos externos
Los comandos en Nu se comunican entre ellos usando los tipos de datos de Nu (mirar tipos de datos) pero, ¿qué hay de comandos fuera de Nu? Miremos algunos ejemplos trabajando con comandos externos:
commando_interno | comando_externo
Los datos fluirán desde comando_interno al comando_externo. Estos datos se esperan que sean cadenas para que puedan ser enviadas a entrada estándar stdin
del comando_externo.
comando_externo | comando_interno
Los datos que vienen de un comando externo a Nu se coleccionará a una sola cadena y luego serán pasadas a comando_interno. Comandos como lines
ayudan a facilitar datos provenientes de comandos externos de manera que sea más facil trabajarlas.
comando_externo_1 | comando_externo_2
Nu trabaja con datos canalizados entre dos comandos externos de la misma forma como en otras shells, como Bash lo haría. La salida estándar stdout
de comando_externo_1 es conectada a la entrada estándar stdin
de comando_externo_2. Esto permite que los datos fluyan naturalmente entre dos comandos.
Detrás de escenas
Es posible que te hayas preguntado como miramos una tabla si ls
es una entrada y no una salida. Nu agrega esta salida por nosotros automáticamente usando otro comando llamado autoview
. El comando autoview
es añadido a cualquier tubería que no tenga una salida permitiéndonos ver el resultado.
En efecto, el comando:
> ls
y la tubería:
> ls | autoview
Son uno y lo mismo.